From 0fb6eeba2969e04b8ab0257fe57e51bdff6c3c0a Mon Sep 17 00:00:00 2001 From: Pieter Date: Fri, 22 Dec 2023 15:02:01 +0000 Subject: [PATCH 001/190] Disabled grafana --- .vscode/settings.json | 2 +- package-lock.json | 4 ++-- server.js | 10 +++++----- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 424a66992..5e6265b65 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,7 +9,7 @@ "editor.formatOnSave": true }, "editor.codeActionsOnSave": { - "source.fixAll.eslint": true + "source.fixAll.eslint": "explicit" }, "editor.formatOnSave": true, "editor.renderWhitespace": "none", diff --git a/package-lock.json b/package-lock.json index 3fb7dd9be..98ef40f75 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "the-international-screeps-bot", - "version": "2.116.0", + "version": "2.117.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "the-international-screeps-bot", - "version": "2.116.0", + "version": "2.117.0", "license": "GNU GPLv3", "dependencies": { "base32768": "^3.0.1", diff --git a/server.js b/server.js index a82d56c11..a06bb1a31 100644 --- a/server.js +++ b/server.js @@ -27,10 +27,10 @@ const ports = getPorts() const options = { stdio: 'inherit' } const botPath = join(__dirname, 'dist') console.log('START') -execSync( - `npx screeps-grafana-go_carbon setup && npx screeps-grafana-go_carbon --grafanaPort=${ports.grafanaPort} --relayPort=${ports.relayPort} --force ${argv.debug ? '--debug' : ''} --deleteLogs --deleteWhisper`, - options, -) +// execSync( +// `npx screeps-grafana-go_carbon setup && npx screeps-grafana-go_carbon --grafanaPort=${ports.grafanaPort} --relayPort=${ports.relayPort} --force ${argv.debug ? '--debug' : ''} --deleteLogs --deleteWhisper`, +// options, +// ) execSync('npm run build', options) execSync( `npx screeps-performance-server --maxTickCount=${argv.maxTicks || 20000} --maxBots=10 --botFilePath=${botPath} --steamKey=${ @@ -40,5 +40,5 @@ execSync( } --deleteLogs --tickDuration=${argv.tickDuration || 250} --logFilter='Error:'`, options, ) -if (argv.stopGrafana) execSync('npx screeps-grafana stop') +// if (argv.stopGrafana) execSync('npx screeps-grafana stop') console.log('END') From 068b14a7c6c395d6d8503f508191a0b5e219929b Mon Sep 17 00:00:00 2001 From: Pieter Date: Fri, 22 Dec 2023 15:33:59 +0000 Subject: [PATCH 002/190] Fixed build files for server --- package-lock.json | 72404 +++++++++---------- package.json | 211 +- rollup.config.js | 2 +- server.js | 25 +- src/other/userScript/userScript.example.ts | 14 +- src/settings.example.ts | 12 +- tsconfig.json | 50 +- 7 files changed, 36364 insertions(+), 36354 deletions(-) diff --git a/package-lock.json b/package-lock.json index 98ef40f75..5143f5953 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,36714 +1,36714 @@ { - "name": "the-international-screeps-bot", - "version": "2.117.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "the-international-screeps-bot", - "version": "2.117.0", - "license": "GNU GPLv3", - "dependencies": { - "base32768": "^3.0.1", - "mermaid": "^10.3.0", - "semantic-release": "^21.0.7", - "source-map": "~0.6.1" - }, - "devDependencies": { - "@compodoc/compodoc": "^1.1.19", - "@rollup/plugin-commonjs": "^20.0.0", - "@rollup/plugin-node-resolve": "^13.0.4", - "@semantic-release/changelog": "^6.0.3", - "@semantic-release/commit-analyzer": "^9.0.2", - "@semantic-release/git": "^10.0.1", - "@semantic-release/release-notes-generator": "^11.0.1", - "@types/chai": "^4.3.0", - "@types/jest": "^27.0.1", - "@types/lodash": "3.10.2", - "@types/node": "^13.13.1", - "@types/screeps": "^3.3.3", - "@types/sinon": "^5.0.5", - "@types/sinon-chai": "^3.2.0", - "@typescript-eslint/eslint-plugin": "^4.20.0", - "@typescript-eslint/parser": "^4.20.0", - "chai": "^4.2.0", - "dotenv": "^16.0.2", - "eslint": "^7.23.0", - "eslint-config-prettier": "^7.2.0", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-jest": "^24.1.3", - "eslint-plugin-jsdoc": "^31.6.1", - "eslint-plugin-prettier": "^3.3.1", - "eslint-plugin-screeps": "^2.1.0", - "fastestsmallesttextencoderdecoder-encodeinto": "^1.0.22", - "javascript-obfuscator": "^4.0.2", - "jest": "^27.1.0", - "lodash": "^3.10.1", - "prettier": "^2.3.2", - "rollup": "^2.79.1", - "rollup-plugin-clear": "^2.0.7", - "rollup-plugin-copy": "^3.4.0", - "rollup-plugin-screeps-world": "^1.0.4", - "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-typescript2": "^0.36.0", - "screeps-grafana-go_carbon": "^1.0.5", - "screeps-jest": "^2.0.2", - "screeps-performance-server": "^1.12.1", - "screeps-viz": "^2.1.3", - "sinon": "^6.3.5", - "sinon-chai": "^3.2.0", - "ts-jest": "^27.0.5", - "ts-node": "^10.2.0", - "tsconfig-paths": "^3.10.1", - "typescript": "4.4", - "yaml": "^1.10.2" - } - }, - "node_modules/@aduh95/viz.js": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@aduh95/viz.js/-/viz.js-3.4.0.tgz", - "integrity": "sha512-KI2nVf9JdwWCXqK6RVf+9/096G7VWN4Z84mnynlyZKao2xQENW8WNEjLmvdlxS5X8PNWXFC1zqwm7tveOXw/4A==", - "dev": true - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@angular-devkit/core": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.6.tgz", - "integrity": "sha512-3OjtrPWvsqVkMBwqPeE65ccCIw56FooNpVVAJ0XwhVQv5mA81pmbCzU7JsR6U449ZT7O4cQblzZMQvWvx74HCg==", - "dev": true, - "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/core/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@angular-devkit/core/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/@angular-devkit/core/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@angular-devkit/schematics": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.6.tgz", - "integrity": "sha512-KA8P78gaS76HMHGBOM8JHJXWLOxCIShYVB2Un/Cu6z3jVODvXq+ILZUc1Y0RsAce/vsl2wf8qpoh5Lku9KJHUQ==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "16.1.6", - "jsonc-parser": "3.2.0", - "magic-string": "0.30.0", - "ora": "5.4.1", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/schematics/node_modules/magic-string": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", - "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.13" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", - "dependencies": { - "@babel/highlight": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", - "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.8", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/core/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", - "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", - "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", - "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz", - "integrity": "sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", - "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", - "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } + "name": "the-international-screeps-bot", + "version": "2.117.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "the-international-screeps-bot", + "version": "2.117.0", + "license": "GNU GPLv3", + "dependencies": { + "base32768": "^3.0.1", + "mermaid": "^10.3.0", + "semantic-release": "^21.0.7", + "source-map": "~0.6.1" + }, + "devDependencies": { + "@compodoc/compodoc": "^1.1.19", + "@rollup/plugin-commonjs": "^20.0.0", + "@rollup/plugin-node-resolve": "^13.0.4", + "@semantic-release/changelog": "^6.0.3", + "@semantic-release/commit-analyzer": "^9.0.2", + "@semantic-release/git": "^10.0.1", + "@semantic-release/release-notes-generator": "^11.0.1", + "@types/chai": "^4.3.0", + "@types/jest": "^27.0.1", + "@types/lodash": "3.10.2", + "@types/node": "^13.13.1", + "@types/screeps": "^3.3.3", + "@types/sinon": "^5.0.5", + "@types/sinon-chai": "^3.2.0", + "@typescript-eslint/eslint-plugin": "^4.20.0", + "@typescript-eslint/parser": "^4.20.0", + "chai": "^4.2.0", + "dotenv": "^16.0.2", + "eslint": "^7.23.0", + "eslint-config-prettier": "^7.2.0", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-jest": "^24.1.3", + "eslint-plugin-jsdoc": "^31.6.1", + "eslint-plugin-prettier": "^3.3.1", + "eslint-plugin-screeps": "^2.1.0", + "fastestsmallesttextencoderdecoder-encodeinto": "^1.0.22", + "javascript-obfuscator": "^4.0.2", + "jest": "^27.1.0", + "lodash": "^3.10.1", + "prettier": "^2.3.2", + "rollup": "^2.79.1", + "rollup-plugin-clear": "^2.0.7", + "rollup-plugin-copy": "^3.4.0", + "rollup-plugin-screeps-world": "^1.0.4", + "rollup-plugin-terser": "^7.0.2", + "rollup-plugin-typescript2": "^0.36.0", + "screeps-grafana-go_carbon": "^1.0.5", + "screeps-jest": "^2.0.2", + "screeps-performance-server": "^1.12.1", + "screeps-viz": "^2.1.3", + "sinon": "^6.3.5", + "sinon-chai": "^3.2.0", + "ts-jest": "^27.0.5", + "ts-node": "^10.2.0", + "tsconfig-paths": "^3.10.1", + "typescript": "4.4", + "yaml": "^1.10.2" + } + }, + "node_modules/@aduh95/viz.js": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@aduh95/viz.js/-/viz.js-3.4.0.tgz", + "integrity": "sha512-KI2nVf9JdwWCXqK6RVf+9/096G7VWN4Z84mnynlyZKao2xQENW8WNEjLmvdlxS5X8PNWXFC1zqwm7tveOXw/4A==", + "dev": true + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.6.tgz", + "integrity": "sha512-3OjtrPWvsqVkMBwqPeE65ccCIw56FooNpVVAJ0XwhVQv5mA81pmbCzU7JsR6U449ZT7O4cQblzZMQvWvx74HCg==", + "dev": true, + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/core/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@angular-devkit/core/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/@angular-devkit/core/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.6.tgz", + "integrity": "sha512-KA8P78gaS76HMHGBOM8JHJXWLOxCIShYVB2Un/Cu6z3jVODvXq+ILZUc1Y0RsAce/vsl2wf8qpoh5Lku9KJHUQ==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.1.6", + "jsonc-parser": "3.2.0", + "magic-string": "0.30.0", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/magic-string": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "dependencies": { + "@babel/highlight": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", + "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.9", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helpers": "^7.22.6", + "@babel/parser": "^7.22.7", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.8", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/core/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/generator": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", + "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", + "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", + "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz", + "integrity": "sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", + "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", + "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", + "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", + "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", + "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.9.tgz", + "integrity": "sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", + "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.6", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", + "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.22.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz", + "integrity": "sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", + "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", + "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", + "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz", + "integrity": "sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", + "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", + "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.9.tgz", + "integrity": "sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.9", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.7", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.6", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.6", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.4", + "babel-plugin-polyfill-corejs3": "^0.8.2", + "babel-plugin-polyfill-regenerator": "^0.5.1", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", + "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", + "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.22.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", + "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.7", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.7", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/traverse/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/types": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@braintree/sanitize-url": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz", + "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==" + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@compodoc/compodoc": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/@compodoc/compodoc/-/compodoc-1.1.21.tgz", + "integrity": "sha512-/FDlwRgKzmkGuorDnURuCzoGY6rZ0KY7Mj5/PwnEjMs0y1CRRPHBJC9I0yVIjn8j8gxVy8PPc6dna0lY1MWwhg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@angular-devkit/schematics": "^16.0.1", + "@babel/core": "^7.21.8", + "@babel/preset-env": "^7.21.5", + "@compodoc/live-server": "^1.2.3", + "@compodoc/ngd-transformer": "^2.1.3", + "chalk": "4.1.2", + "cheerio": "^1.0.0-rc.12", + "chokidar": "^3.5.3", + "colors": "1.4.0", + "commander": "^10.0.1", + "cosmiconfig": "^8.1.3", + "decache": "^4.6.1", + "fancy-log": "^2.0.0", + "fast-glob": "^3.2.12", + "fs-extra": "^11.1.1", + "glob": "^10.2.4", + "handlebars": "^4.7.7", + "html-entities": "^2.3.3", + "i18next": "^22.4.15", + "inside": "^1.0.0", + "json5": "^2.2.3", + "lodash": "^4.17.21", + "loglevel": "^1.8.1", + "loglevel-plugin-prefix": "^0.8.4", + "lunr": "^2.3.9", + "marked": "4.3.0", + "minimist": "^1.2.8", + "opencollective-postinstall": "^2.0.3", + "os-name": "4.0.1", + "pdfjs-dist": "2.12.313", + "pdfmake": "^0.2.7", + "semver": "^7.5.1", + "traverse": "^0.6.7", + "ts-morph": "^18.0.0", + "uuid": "^9.0.0" + }, + "bin": { + "compodoc": "bin/index-cli.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@compodoc/compodoc/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@compodoc/compodoc/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@compodoc/compodoc/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@compodoc/compodoc/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@compodoc/compodoc/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@compodoc/compodoc/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@compodoc/compodoc/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@compodoc/compodoc/node_modules/glob": { + "version": "10.3.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", + "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@compodoc/compodoc/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@compodoc/compodoc/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@compodoc/compodoc/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/@compodoc/compodoc/node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true, + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@compodoc/compodoc/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, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@compodoc/compodoc/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, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@compodoc/compodoc/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@compodoc/compodoc/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@compodoc/live-server": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@compodoc/live-server/-/live-server-1.2.3.tgz", + "integrity": "sha512-hDmntVCyjjaxuJzPzBx68orNZ7TW4BtHWMnXlIVn5dqhK7vuFF/11hspO1cMmc+2QTYgqde1TBcb3127S7Zrow==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "colors": "1.4.0", + "connect": "^3.7.0", + "cors": "latest", + "event-stream": "4.0.1", + "faye-websocket": "0.11.x", + "http-auth": "4.1.9", + "http-auth-connect": "^1.0.5", + "morgan": "^1.10.0", + "object-assign": "latest", + "open": "8.4.0", + "proxy-middleware": "latest", + "send": "latest", + "serve-index": "^1.9.1" + }, + "bin": { + "live-server": "live-server.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@compodoc/ngd-core": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@compodoc/ngd-core/-/ngd-core-2.1.1.tgz", + "integrity": "sha512-Z+wE6wWZYVnudRYg6qunDlyh3Orw39Ib66Gvrz5kX5u7So+iu3tr6sQJdqH6yGS3hAjig5avlfhWLlgsb6/x1Q==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.3", + "fancy-log": "^2.0.0", + "typescript": "^5.0.4" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@compodoc/ngd-core/node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@compodoc/ngd-transformer": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@compodoc/ngd-transformer/-/ngd-transformer-2.1.3.tgz", + "integrity": "sha512-oWxJza7CpWR8/FeWYfE6j+jgncnGBsTWnZLt5rD2GUpsGSQTuGrsFPnmbbaVLgRS5QIVWBJYke7QFBr/7qVMWg==", + "dev": true, + "dependencies": { + "@aduh95/viz.js": "3.4.0", + "@compodoc/ngd-core": "~2.1.1", + "dot": "^2.0.0-beta.1", + "fs-extra": "^11.1.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@compodoc/ngd-transformer/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@compodoc/ngd-transformer/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@compodoc/ngd-transformer/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "node_modules/@discordjs/builders": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.5.tgz", + "integrity": "sha512-SdweyCs/+mHj+PNhGLLle7RrRFX9ZAhzynHahMCLqp5Zeq7np7XC6/mgzHc79QoVlQ1zZtOkTTiJpOZu5V8Ufg==", + "dev": true, + "dependencies": { + "@discordjs/formatters": "^0.3.2", + "@discordjs/util": "^1.0.1", + "@sapphire/shapeshift": "^3.9.2", + "discord-api-types": "0.37.50", + "fast-deep-equal": "^3.1.3", + "ts-mixer": "^6.0.3", + "tslib": "^2.6.1" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/builders/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/@discordjs/collection": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", + "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", + "dev": true, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/formatters": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.2.tgz", + "integrity": "sha512-lE++JZK8LSSDRM5nLjhuvWhGuKiXqu+JZ/DsOR89DVVia3z9fdCJVcHF2W/1Zxgq0re7kCzmAJlCMMX3tetKpA==", + "dev": true, + "dependencies": { + "discord-api-types": "0.37.50" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/rest": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.0.1.tgz", + "integrity": "sha512-/eWAdDRvwX/rIE2tuQUmKaxmWeHmGealttIzGzlYfI4+a7y9b6ZoMp8BG/jaohs8D8iEnCNYaZiOFLVFLQb8Zg==", + "dev": true, + "dependencies": { + "@discordjs/collection": "^1.5.3", + "@discordjs/util": "^1.0.1", + "@sapphire/async-queue": "^1.5.0", + "@sapphire/snowflake": "^3.5.1", + "@vladfrangu/async_event_emitter": "^2.2.2", + "discord-api-types": "0.37.50", + "magic-bytes.js": "^1.0.15", + "tslib": "^2.6.1", + "undici": "5.22.1" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/rest/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/@discordjs/util": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.0.1.tgz", + "integrity": "sha512-d0N2yCxB8r4bn00/hvFZwM7goDcUhtViC5un4hPj73Ba4yrChLSJD8fy7Ps5jpTLg1fE9n4K0xBLc1y9WGwSsA==", + "dev": true, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/ws": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.0.1.tgz", + "integrity": "sha512-avvAolBqN3yrSvdBPcJ/0j2g42ABzrv3PEL76e3YTp2WYMGH7cuspkjfSyNWaqYl1J+669dlLp+YFMxSVQyS5g==", + "dev": true, + "dependencies": { + "@discordjs/collection": "^1.5.3", + "@discordjs/rest": "^2.0.1", + "@discordjs/util": "^1.0.1", + "@sapphire/async-queue": "^1.5.0", + "@types/ws": "^8.5.5", + "@vladfrangu/async_event_emitter": "^2.2.2", + "discord-api-types": "0.37.50", + "tslib": "^2.6.1", + "ws": "^8.13.0" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/ws/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/@discordjs/ws/node_modules/ws": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", + "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", - "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", - "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.9.tgz", - "integrity": "sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", - "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", - "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.17.12", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz", - "integrity": "sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", - "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", - "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", - "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", - "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", - "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", - "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", - "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", - "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", - "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", - "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", - "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", - "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", - "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", - "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz", - "integrity": "sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", - "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", - "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", - "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.9.tgz", - "integrity": "sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.7", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.5", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.6", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.5", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.6", - "@babel/plugin-transform-parameters": "^7.22.5", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.5", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.5", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.4", - "babel-plugin-polyfill-corejs3": "^0.8.2", - "babel-plugin-polyfill-regenerator": "^0.5.1", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", - "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "node_modules/@babel/runtime": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", - "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.22.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", - "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.7", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/traverse/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@braintree/sanitize-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz", - "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==" - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@compodoc/compodoc": { - "version": "1.1.21", - "resolved": "https://registry.npmjs.org/@compodoc/compodoc/-/compodoc-1.1.21.tgz", - "integrity": "sha512-/FDlwRgKzmkGuorDnURuCzoGY6rZ0KY7Mj5/PwnEjMs0y1CRRPHBJC9I0yVIjn8j8gxVy8PPc6dna0lY1MWwhg==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@angular-devkit/schematics": "^16.0.1", - "@babel/core": "^7.21.8", - "@babel/preset-env": "^7.21.5", - "@compodoc/live-server": "^1.2.3", - "@compodoc/ngd-transformer": "^2.1.3", - "chalk": "4.1.2", - "cheerio": "^1.0.0-rc.12", - "chokidar": "^3.5.3", - "colors": "1.4.0", - "commander": "^10.0.1", - "cosmiconfig": "^8.1.3", - "decache": "^4.6.1", - "fancy-log": "^2.0.0", - "fast-glob": "^3.2.12", - "fs-extra": "^11.1.1", - "glob": "^10.2.4", - "handlebars": "^4.7.7", - "html-entities": "^2.3.3", - "i18next": "^22.4.15", - "inside": "^1.0.0", - "json5": "^2.2.3", - "lodash": "^4.17.21", - "loglevel": "^1.8.1", - "loglevel-plugin-prefix": "^0.8.4", - "lunr": "^2.3.9", - "marked": "4.3.0", - "minimist": "^1.2.8", - "opencollective-postinstall": "^2.0.3", - "os-name": "4.0.1", - "pdfjs-dist": "2.12.313", - "pdfmake": "^0.2.7", - "semver": "^7.5.1", - "traverse": "^0.6.7", - "ts-morph": "^18.0.0", - "uuid": "^9.0.0" - }, - "bin": { - "compodoc": "bin/index-cli.js" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@compodoc/compodoc/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@compodoc/compodoc/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@compodoc/compodoc/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@compodoc/compodoc/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@compodoc/compodoc/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@compodoc/compodoc/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@compodoc/compodoc/node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@compodoc/compodoc/node_modules/glob": { - "version": "10.3.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", - "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@compodoc/compodoc/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@compodoc/compodoc/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@compodoc/compodoc/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/@compodoc/compodoc/node_modules/marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", - "dev": true, - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@compodoc/compodoc/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, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@compodoc/compodoc/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, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@compodoc/compodoc/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@compodoc/compodoc/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@compodoc/live-server": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@compodoc/live-server/-/live-server-1.2.3.tgz", - "integrity": "sha512-hDmntVCyjjaxuJzPzBx68orNZ7TW4BtHWMnXlIVn5dqhK7vuFF/11hspO1cMmc+2QTYgqde1TBcb3127S7Zrow==", - "dev": true, - "dependencies": { - "chokidar": "^3.5.2", - "colors": "1.4.0", - "connect": "^3.7.0", - "cors": "latest", - "event-stream": "4.0.1", - "faye-websocket": "0.11.x", - "http-auth": "4.1.9", - "http-auth-connect": "^1.0.5", - "morgan": "^1.10.0", - "object-assign": "latest", - "open": "8.4.0", - "proxy-middleware": "latest", - "send": "latest", - "serve-index": "^1.9.1" - }, - "bin": { - "live-server": "live-server.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@compodoc/ngd-core": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@compodoc/ngd-core/-/ngd-core-2.1.1.tgz", - "integrity": "sha512-Z+wE6wWZYVnudRYg6qunDlyh3Orw39Ib66Gvrz5kX5u7So+iu3tr6sQJdqH6yGS3hAjig5avlfhWLlgsb6/x1Q==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.3", - "fancy-log": "^2.0.0", - "typescript": "^5.0.4" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@compodoc/ngd-core/node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/@compodoc/ngd-transformer": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@compodoc/ngd-transformer/-/ngd-transformer-2.1.3.tgz", - "integrity": "sha512-oWxJza7CpWR8/FeWYfE6j+jgncnGBsTWnZLt5rD2GUpsGSQTuGrsFPnmbbaVLgRS5QIVWBJYke7QFBr/7qVMWg==", - "dev": true, - "dependencies": { - "@aduh95/viz.js": "3.4.0", - "@compodoc/ngd-core": "~2.1.1", - "dot": "^2.0.0-beta.1", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@compodoc/ngd-transformer/node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@compodoc/ngd-transformer/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@compodoc/ngd-transformer/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@dabh/diagnostics": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, - "node_modules/@discordjs/builders": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.5.tgz", - "integrity": "sha512-SdweyCs/+mHj+PNhGLLle7RrRFX9ZAhzynHahMCLqp5Zeq7np7XC6/mgzHc79QoVlQ1zZtOkTTiJpOZu5V8Ufg==", - "dev": true, - "dependencies": { - "@discordjs/formatters": "^0.3.2", - "@discordjs/util": "^1.0.1", - "@sapphire/shapeshift": "^3.9.2", - "discord-api-types": "0.37.50", - "fast-deep-equal": "^3.1.3", - "ts-mixer": "^6.0.3", - "tslib": "^2.6.1" - }, - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/@discordjs/builders/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/@discordjs/collection": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", - "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", - "dev": true, - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/@discordjs/formatters": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.2.tgz", - "integrity": "sha512-lE++JZK8LSSDRM5nLjhuvWhGuKiXqu+JZ/DsOR89DVVia3z9fdCJVcHF2W/1Zxgq0re7kCzmAJlCMMX3tetKpA==", - "dev": true, - "dependencies": { - "discord-api-types": "0.37.50" - }, - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/@discordjs/rest": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.0.1.tgz", - "integrity": "sha512-/eWAdDRvwX/rIE2tuQUmKaxmWeHmGealttIzGzlYfI4+a7y9b6ZoMp8BG/jaohs8D8iEnCNYaZiOFLVFLQb8Zg==", - "dev": true, - "dependencies": { - "@discordjs/collection": "^1.5.3", - "@discordjs/util": "^1.0.1", - "@sapphire/async-queue": "^1.5.0", - "@sapphire/snowflake": "^3.5.1", - "@vladfrangu/async_event_emitter": "^2.2.2", - "discord-api-types": "0.37.50", - "magic-bytes.js": "^1.0.15", - "tslib": "^2.6.1", - "undici": "5.22.1" - }, - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/@discordjs/rest/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/@discordjs/util": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.0.1.tgz", - "integrity": "sha512-d0N2yCxB8r4bn00/hvFZwM7goDcUhtViC5un4hPj73Ba4yrChLSJD8fy7Ps5jpTLg1fE9n4K0xBLc1y9WGwSsA==", - "dev": true, - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/@discordjs/ws": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.0.1.tgz", - "integrity": "sha512-avvAolBqN3yrSvdBPcJ/0j2g42ABzrv3PEL76e3YTp2WYMGH7cuspkjfSyNWaqYl1J+669dlLp+YFMxSVQyS5g==", - "dev": true, - "dependencies": { - "@discordjs/collection": "^1.5.3", - "@discordjs/rest": "^2.0.1", - "@discordjs/util": "^1.0.1", - "@sapphire/async-queue": "^1.5.0", - "@types/ws": "^8.5.5", - "@vladfrangu/async_event_emitter": "^2.2.2", - "discord-api-types": "0.37.50", - "tslib": "^2.6.1", - "ws": "^8.13.0" - }, - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/@discordjs/ws/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/@discordjs/ws/node_modules/ws": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", - "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/acorn": { - "version": "7.4.1", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@eslint/eslintrc/node_modules/espree": { - "version": "7.3.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.15.0", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@foliojs-fork/fontkit": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@foliojs-fork/fontkit/-/fontkit-1.9.1.tgz", - "integrity": "sha512-U589voc2/ROnvx1CyH9aNzOQWJp127JGU1QAylXGQ7LoEAF6hMmahZLQ4eqAcgHUw+uyW4PjtCItq9qudPkK3A==", - "dev": true, - "dependencies": { - "@foliojs-fork/restructure": "^2.0.2", - "brfs": "^2.0.0", - "brotli": "^1.2.0", - "browserify-optional": "^1.0.1", - "clone": "^1.0.4", - "deep-equal": "^1.0.0", - "dfa": "^1.2.0", - "tiny-inflate": "^1.0.2", - "unicode-properties": "^1.2.2", - "unicode-trie": "^2.0.0" - } - }, - "node_modules/@foliojs-fork/linebreak": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@foliojs-fork/linebreak/-/linebreak-1.1.1.tgz", - "integrity": "sha512-pgY/+53GqGQI+mvDiyprvPWgkTlVBS8cxqee03ejm6gKAQNsR1tCYCIvN9FHy7otZajzMqCgPOgC4cHdt4JPig==", - "dev": true, - "dependencies": { - "base64-js": "1.3.1", - "brfs": "^2.0.2", - "unicode-trie": "^2.0.0" - } - }, - "node_modules/@foliojs-fork/linebreak/node_modules/base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", - "dev": true - }, - "node_modules/@foliojs-fork/pdfkit": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@foliojs-fork/pdfkit/-/pdfkit-0.13.0.tgz", - "integrity": "sha512-YXeG1fml9k97YNC9K8e292Pj2JzGt9uOIiBFuQFxHsdQ45BlxW+JU3RQK6JAvXU7kjhjP8rCcYvpk36JLD33sQ==", - "dev": true, - "dependencies": { - "@foliojs-fork/fontkit": "^1.9.1", - "@foliojs-fork/linebreak": "^1.1.1", - "crypto-js": "^4.0.0", - "png-js": "^1.0.0" - } - }, - "node_modules/@foliojs-fork/restructure": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@foliojs-fork/restructure/-/restructure-2.0.2.tgz", - "integrity": "sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA==", - "dev": true - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "dev": true, - "license": "BSD-3-Clause" - }, - "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, - "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, - "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, - "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 - }, - "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, - "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, - "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, - "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/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-try": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@javascript-obfuscator/escodegen": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@javascript-obfuscator/escodegen/-/escodegen-2.3.0.tgz", - "integrity": "sha512-QVXwMIKqYMl3KwtTirYIA6gOCiJ0ZDtptXqAv/8KWLG9uQU2fZqTVy7a/A5RvcoZhbDoFfveTxuGxJ5ibzQtkw==", - "dev": true, - "dependencies": { - "@javascript-obfuscator/estraverse": "^5.3.0", - "esprima": "^4.0.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/@javascript-obfuscator/estraverse": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@javascript-obfuscator/estraverse/-/estraverse-5.4.0.tgz", - "integrity": "sha512-CZFX7UZVN9VopGbjTx4UXaXsi9ewoM1buL0kY7j1ftYdSs7p2spv9opxFjHlQ/QGTgh4UqufYqJJ0WKLml7b6w==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@jest/console": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", - "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/@jest/console/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/console/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/console/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/core/node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "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/@jest/core/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/core/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/core/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@jest/core/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@jest/environment": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", - "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/@jest/reporters/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/reporters/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/source-map": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.2", - "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/@jest/transform/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/transform/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/transform/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/transform/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "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/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/types/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "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", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@octokit/auth-token": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", - "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/core": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.0.tgz", - "integrity": "sha512-YbAtMWIrbZ9FCXbLwT9wWB8TyLjq9mxpKdgB3dUNxQcIVTf9hJ70gRPwAcqGZdY6WdJPZ0I7jLaaNDCiloGN2A==", - "dependencies": { - "@octokit/auth-token": "^4.0.0", - "@octokit/graphql": "^7.0.0", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/endpoint": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.0.tgz", - "integrity": "sha512-szrQhiqJ88gghWY2Htt8MqUDO6++E/EIXqJ2ZEp5ma3uGS46o7LZAzSLt49myB7rT+Hfw5Y6gO3LmOxGzHijAQ==", - "dependencies": { - "@octokit/types": "^11.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/endpoint/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@octokit/graphql": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.1.tgz", - "integrity": "sha512-T5S3oZ1JOE58gom6MIcrgwZXzTaxRnxBso58xhozxHpOqSTgDS6YNeEUvZ/kRvXgPrRz/KHnZhtb7jUMRi9E6w==", - "dependencies": { - "@octokit/request": "^8.0.1", - "@octokit/types": "^11.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/openapi-types": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", - "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-8.0.0.tgz", - "integrity": "sha512-2xZ+baZWUg+qudVXnnvXz7qfrTmDeYPCzangBVq/1gXxii/OiS//4shJp9dnCCvj1x+JAm9ji1Egwm1BA47lPQ==", - "dependencies": { - "@octokit/types": "^11.0.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": ">=5" - } - }, - "node_modules/@octokit/plugin-retry": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-6.0.0.tgz", - "integrity": "sha512-a1/A4A+PB1QoAHQfLJxGHhLfSAT03bR1jJz3GgQJZvty2ozawFWs93MiBQXO7SL2YbO7CIq0Goj4qLOBj8JeMQ==", - "dependencies": { - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0", - "bottleneck": "^2.15.3" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": ">=5" - } - }, - "node_modules/@octokit/plugin-throttling": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-7.0.0.tgz", - "integrity": "sha512-KL2k/d0uANc8XqP5S64YcNFCudR3F5AaKO39XWdUtlJIjT9Ni79ekWJ6Kj5xvAw87udkOMEPcVf9xEge2+ahew==", - "dependencies": { - "@octokit/types": "^11.0.0", - "bottleneck": "^2.15.3" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": "^5.0.0" - } - }, - "node_modules/@octokit/request": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.1.1.tgz", - "integrity": "sha512-8N+tdUz4aCqQmXl8FpHYfKG9GelDFd7XGVzyN8rc6WxVlYcfpHECnuRkgquzz+WzvHTK62co5di8gSXnzASZPQ==", - "dependencies": { - "@octokit/endpoint": "^9.0.0", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.1.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/request-error": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.0.tgz", - "integrity": "sha512-1ue0DH0Lif5iEqT52+Rf/hf0RmGO9NWFjrzmrkArpG9trFfDM/efx00BJHdLGuro4BR/gECxCU2Twf5OKrRFsQ==", - "dependencies": { - "@octokit/types": "^11.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/request/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@octokit/types": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-11.1.0.tgz", - "integrity": "sha512-Fz0+7GyLm/bHt8fwEqgvRBWwIV1S6wRRyq+V6exRKLVWaKGsuy6H9QFYeBVDV7rK6fO3XwHgQOPxv+cLj2zpXQ==", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "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, - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "dependencies": { - "graceful-fs": "4.2.10" - }, - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/npm-conf": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", - "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", - "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@rollup/plugin-commonjs": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-20.0.0.tgz", - "integrity": "sha512-5K0g5W2Ol8hAcTHqcTBHiA7M58tfmYi1o9KxeJuuRNpGaTa5iLjcyemBitCBcKXaHamOBBEH2dGom6v6Unmqjg==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^2.38.3" - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "13.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.1.0", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "rollup": "^2.42.0" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/pluginutils/node_modules/estree-walker": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@sapphire/async-queue": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", - "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==", - "dev": true, - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@sapphire/shapeshift": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.2.tgz", - "integrity": "sha512-YRbCXWy969oGIdqR/wha62eX8GNHsvyYi0Rfd4rNW6tSVVa8p0ELiMEuOH/k8rgtvRoM+EMV7Csqz77YdwiDpA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@sapphire/shapeshift/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/@sapphire/snowflake": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz", - "integrity": "sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==", - "dev": true, - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@semantic-release/changelog": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@semantic-release/changelog/-/changelog-6.0.3.tgz", - "integrity": "sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==", - "dev": true, - "dependencies": { - "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", - "fs-extra": "^11.0.0", - "lodash": "^4.17.4" - }, - "engines": { - "node": ">=14.17" - }, - "peerDependencies": { - "semantic-release": ">=18.0.0" - } - }, - "node_modules/@semantic-release/changelog/node_modules/@semantic-release/error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", - "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", - "dev": true, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/@semantic-release/changelog/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, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/changelog/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, - "engines": { - "node": ">=6" - } - }, - "node_modules/@semantic-release/changelog/node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@semantic-release/changelog/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/changelog/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@semantic-release/changelog/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/@semantic-release/changelog/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@semantic-release/commit-analyzer": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz", - "integrity": "sha512-E+dr6L+xIHZkX4zNMe6Rnwg4YQrWNXK+rNsvwOPpdFppvZO1olE2fIgWhv89TkQErygevbjsZFSIxp+u6w2e5g==", - "dev": true, - "dependencies": { - "conventional-changelog-angular": "^5.0.0", - "conventional-commits-filter": "^2.0.0", - "conventional-commits-parser": "^3.2.3", - "debug": "^4.0.0", - "import-from": "^4.0.0", - "lodash": "^4.17.4", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=14.17" - }, - "peerDependencies": { - "semantic-release": ">=18.0.0-beta.1" - } - }, - "node_modules/@semantic-release/commit-analyzer/node_modules/conventional-changelog-angular": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", - "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", - "dev": true, - "dependencies": { - "compare-func": "^2.0.0", - "q": "^1.5.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@semantic-release/commit-analyzer/node_modules/conventional-commits-filter": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", - "dev": true, - "dependencies": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@semantic-release/commit-analyzer/node_modules/conventional-commits-parser": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", - "dev": true, - "dependencies": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "conventional-commits-parser": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@semantic-release/commit-analyzer/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@semantic-release/commit-analyzer/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/@semantic-release/commit-analyzer/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@semantic-release/commit-analyzer/node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "dependencies": { - "readable-stream": "3" - } - }, - "node_modules/@semantic-release/error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", - "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==", - "engines": { - "node": ">=18" - } - }, - "node_modules/@semantic-release/git": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@semantic-release/git/-/git-10.0.1.tgz", - "integrity": "sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==", - "dev": true, - "dependencies": { - "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", - "debug": "^4.0.0", - "dir-glob": "^3.0.0", - "execa": "^5.0.0", - "lodash": "^4.17.4", - "micromatch": "^4.0.0", - "p-reduce": "^2.0.0" - }, - "engines": { - "node": ">=14.17" - }, - "peerDependencies": { - "semantic-release": ">=18.0.0" - } - }, - "node_modules/@semantic-release/git/node_modules/@semantic-release/error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", - "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", - "dev": true, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/@semantic-release/git/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, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/git/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, - "engines": { - "node": ">=6" - } - }, - "node_modules/@semantic-release/git/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@semantic-release/git/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "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/@semantic-release/git/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/git/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/@semantic-release/git/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@semantic-release/git/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@semantic-release/git/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/git/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/git/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/github": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-9.0.4.tgz", - "integrity": "sha512-kQCGFAsBErvCR6hzNuzu63cj4erQN2krm9zQlg8vl4j5X0mL0d/Ras0wmL5Gkr1TuSS2lweME7M4J5zvtDDDSA==", - "dependencies": { - "@octokit/core": "^5.0.0", - "@octokit/plugin-paginate-rest": "^8.0.0", - "@octokit/plugin-retry": "^6.0.0", - "@octokit/plugin-throttling": "^7.0.0", - "@semantic-release/error": "^4.0.0", - "aggregate-error": "^4.0.1", - "debug": "^4.3.4", - "dir-glob": "^3.0.1", - "globby": "^13.1.4", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "issue-parser": "^6.0.0", - "lodash-es": "^4.17.21", - "mime": "^3.0.0", - "p-filter": "^3.0.0", - "url-join": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "semantic-release": ">=20.1.0" - } - }, - "node_modules/@semantic-release/github/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@semantic-release/github/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@semantic-release/github/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "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/@semantic-release/github/node_modules/http-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@semantic-release/github/node_modules/https-proxy-agent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz", - "integrity": "sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@semantic-release/github/node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@semantic-release/github/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/@semantic-release/github/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/npm": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-10.0.4.tgz", - "integrity": "sha512-6R3timIQ7VoL2QWRkc9DG8v74RQtRp7UOe/2KbNaqwJ815qOibAv65bH3RtTEhs4axEaHoZf7HDgFs5opaZ9Jw==", - "dependencies": { - "@semantic-release/error": "^4.0.0", - "aggregate-error": "^4.0.1", - "execa": "^7.0.0", - "fs-extra": "^11.0.0", - "lodash-es": "^4.17.21", - "nerf-dart": "^1.0.0", - "normalize-url": "^8.0.0", - "npm": "^9.5.0", - "rc": "^1.2.8", - "read-pkg": "^8.0.0", - "registry-auth-token": "^5.0.0", - "semver": "^7.1.2", - "tempy": "^3.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "semantic-release": ">=20.1.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@semantic-release/npm/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@semantic-release/npm/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@semantic-release/npm/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@semantic-release/release-notes-generator": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-11.0.4.tgz", - "integrity": "sha512-j0Znnwq9IdWTCGzqSlkLv4MpALTsVDZxcVESzJCNN8pK2BYQlYaKsdZ1Ea/+7RlppI3vjhEi33ZKmjSGY1FLKw==", - "dependencies": { - "conventional-changelog-angular": "^6.0.0", - "conventional-changelog-writer": "^6.0.0", - "conventional-commits-filter": "^3.0.0", - "conventional-commits-parser": "^4.0.0", - "debug": "^4.0.0", - "get-stream": "^7.0.0", - "import-from": "^4.0.0", - "into-stream": "^7.0.0", - "lodash-es": "^4.17.21", - "read-pkg-up": "^10.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "semantic-release": ">=20.1.0" - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/get-stream": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-7.0.1.tgz", - "integrity": "sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.3", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "8.1.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@sinonjs/formatio": { - "version": "3.2.2", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^1", - "@sinonjs/samsam": "^3.1.0" - } - }, - "node_modules/@sinonjs/formatio/node_modules/@sinonjs/samsam": { - "version": "3.3.3", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^1.3.0", - "array-from": "^2.1.1", - "lodash": "^4.17.15" - } - }, - "node_modules/@sinonjs/formatio/node_modules/lodash": { - "version": "4.17.21", - "dev": true, - "license": "MIT" - }, - "node_modules/@sinonjs/samsam": { - "version": "2.1.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@sinonjs/text-encoding": { - "version": "0.7.1", - "dev": true, - "license": "(Unlicense OR Apache-2.0)" - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/@ts-morph/common": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.19.0.tgz", - "integrity": "sha512-Unz/WHmd4pGax91rdIKWi51wnVUW11QttMEPpBiBgIewnc9UQIX7UDLxr5vRlqeByXCwhkF6VabSsI0raWcyAQ==", - "dev": true, - "dependencies": { - "fast-glob": "^3.2.12", - "minimatch": "^7.4.3", - "mkdirp": "^2.1.6", - "path-browserify": "^1.0.1" - } - }, - "node_modules/@ts-morph/common/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@ts-morph/common/node_modules/minimatch": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", - "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@ts-morph/common/node_modules/mkdirp": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz", - "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==", - "dev": true, - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/babel__core": { - "version": "7.1.19", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.17.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.3.0" - } - }, - "node_modules/@types/chai": { - "version": "4.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-scale": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.3.tgz", - "integrity": "sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==", - "dependencies": { - "@types/d3-time": "*" - } - }, - "node_modules/@types/d3-scale-chromatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", - "integrity": "sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw==" - }, - "node_modules/@types/d3-time": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz", - "integrity": "sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==" - }, - "node_modules/@types/debug": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", - "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/estree": { - "version": "0.0.39", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/fs-extra": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.2.tgz", - "integrity": "sha512-SvSrYXfWSc7R4eqnOzbQF4TZmfpNSM9FrSWLU3EUnWBuyZqNBOrv1B1JA3byUDPUl9z4Ab3jeZG2eDdySlgNMg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.1.tgz", - "integrity": "sha512-HTLpVXHrY69556ozYkcq47TtQJXpcWAWfkoqz+ZGz2JnmZhzlRjprCIyFnetSy8gpDWwTTGBcRVv1J1I1vBrHw==", - "dev": true, - "dependencies": { - "jest-diff": "^27.0.0", - "pretty-format": "^27.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/lodash": { - "version": "3.10.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mdast": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.12.tgz", - "integrity": "sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==", - "dependencies": { - "@types/unist": "^2" - } - }, - "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 - }, - "node_modules/@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" - }, - "node_modules/@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" - }, - "node_modules/@types/node": { - "version": "13.13.52", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" - }, - "node_modules/@types/prettier": { - "version": "2.6.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/resolve": { - "version": "1.17.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/screeps": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@types/screeps/-/screeps-3.3.3.tgz", - "integrity": "sha512-r+ru4iNv8wNaNBWvk2gMXYpG8Ok1GJ8NVV9WBIHa5I+hz2QGttnAus+1whDMIzES8x3yK83Usz+gHqm8ehIW7w==", - "dev": true - }, - "node_modules/@types/sinon": { - "version": "5.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/sinon-chai": { - "version": "3.2.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/chai": "*", - "@types/sinon": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/unist": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.7.tgz", - "integrity": "sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==" - }, - "node_modules/@types/validator": { - "version": "13.7.17", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.17.tgz", - "integrity": "sha512-aqayTNmeWrZcvnG2MG9eGYI6b7S5fl+yKgPs6bAjOTwPS316R5SxBGKvtSExfyoJU7pIeHJfsHI0Ji41RVMkvQ==", - "dev": true - }, - "node_modules/@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.33.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/experimental-utils": "4.33.0", - "@typescript-eslint/scope-manager": "4.33.0", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/regexpp": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.3.7", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "4.33.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-scope": { - "version": "5.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-utils": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "4.33.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "4.33.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "4.33.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.7", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } - }, - "node_modules/@vladfrangu/async_event_emitter": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz", - "integrity": "sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==", - "dev": true, - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/abab": { - "version": "2.0.6", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accumulate-stream": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "^3.1.0", - "ms": "^2.1.3" - } - }, - "node_modules/accumulate-stream/node_modules/ms": { - "version": "2.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dev": true, - "dependencies": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "node_modules/acorn-node/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agent-base/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/agent-base/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "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==", - "dependencies": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "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/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "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 - }, - "node_modules/amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.4.2" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", - "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", - "dependencies": { - "type-fest": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ansicolors": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", - "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==" - }, - "node_modules/anymatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/apache-crypt": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.6.tgz", - "integrity": "sha512-072WetlM4blL8PREJVeY+WHiUh1R5VNt2HfceGS8aKqttPHcmqE5pkKuXPz/ULmJOFkc8Hw3kfKl6vy7Qka6DA==", - "dev": true, - "dependencies": { - "unix-crypt-td-js": "^1.1.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/apache-md5": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.8.tgz", - "integrity": "sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/argparse": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/argv-formatter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", - "integrity": "sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==" - }, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/array-from": { - "version": "2.1.1", - "dev": true, - "license": "MIT" - }, - "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==" - }, - "node_modules/array-includes": { - "version": "3.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/assert": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", - "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", - "dev": true, - "dependencies": { - "es6-object-assign": "^1.1.0", - "is-nan": "^1.2.1", - "object-is": "^1.0.1", - "util": "^0.12.0" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/ast-transform": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/ast-transform/-/ast-transform-0.0.0.tgz", - "integrity": "sha512-e/JfLiSoakfmL4wmTGPjv0HpTICVmxwXgYOB8x+mzozHL8v+dSfCbrJ8J8hJ0YBP0XcYu1aLZ6b/3TnxNK3P2A==", - "dev": true, - "dependencies": { - "escodegen": "~1.2.0", - "esprima": "~1.0.4", - "through": "~2.3.4" - } - }, - "node_modules/ast-transform/node_modules/escodegen": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.2.0.tgz", - "integrity": "sha512-yLy3Cc+zAC0WSmoT2fig3J87TpQ8UaZGx8ahCAs9FL8qNbyV7CVyPKS74DG4bsHiL5ew9sxdYx131OkBQMFnvA==", - "dev": true, - "dependencies": { - "esprima": "~1.0.4", - "estraverse": "~1.5.0", - "esutils": "~1.0.0" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=0.4.0" - }, - "optionalDependencies": { - "source-map": "~0.1.30" - } - }, - "node_modules/ast-transform/node_modules/esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", - "integrity": "sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ast-transform/node_modules/estraverse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz", - "integrity": "sha512-FpCjJDfmo3vsc/1zKSeqR5k42tcIhxFIlvq+h9j0fO2q/h2uLKyweq7rYJ+0CoVvrGQOxIS5wyBrW/+vF58BUQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ast-transform/node_modules/esutils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz", - "integrity": "sha512-x/iYH53X3quDwfHRz4y8rn4XcEwwCJeWsul9pF1zldMbGtgOtMNBEOuYWwB1EQlK2LRa1fev3YAgym/RElp5Cg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ast-transform/node_modules/source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", - "dev": true, - "optional": true, - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ast-types": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.7.8.tgz", - "integrity": "sha512-RIOpVnVlltB6PcBJ5BMLx+H+6JJ/zjDGU0t7f0L6c2M1dqcK92VQopLBlPQ9R80AVXelfqYgjcPLtHtDbNFg0Q==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/async": { - "version": "3.2.4", - "dev": true, - "license": "MIT" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axios": { - "version": "0.21.4", - "dev": true, - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.14.0" - } - }, - "node_modules/babel-jest": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "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/babel-jest/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-jest/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-jest/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", - "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.2", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", - "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.2", - "core-js-compat": "^3.31.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", - "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-plugin-jest-hoist": "^27.5.1", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/base32768": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base32768/-/base32768-3.0.1.tgz", - "integrity": "sha512-dNGY49X0IKN1kDl9y/6sii1Vced+f+4uAqOeRz/PshjNdPwSD+ntnHOg/YgDbLSZetp94d/XxGdpfbXDKv8BVQ==" - }, - "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" - } - ] - }, - "node_modules/basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "dev": true, - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/basic-auth/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "node_modules/bcryptjs": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", - "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", - "dev": true - }, - "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==" - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "node_modules/bottleneck": { - "version": "2.19.5", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brfs": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brfs/-/brfs-2.0.2.tgz", - "integrity": "sha512-IrFjVtwu4eTJZyu8w/V2gxU7iLTtcHih67sgEdzrhjLBMHp2uYefUBfdM4k2UvcuWMgV7PQDZHSLeNWnLFKWVQ==", - "dev": true, - "dependencies": { - "quote-stream": "^1.0.1", - "resolve": "^1.1.5", - "static-module": "^3.0.2", - "through2": "^2.0.0" - }, - "bin": { - "brfs": "bin/cmd.js" - } - }, - "node_modules/brotli": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", - "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", - "dev": true, - "dependencies": { - "base64-js": "^1.1.2" - } - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dev": true, - "dependencies": { - "resolve": "1.1.7" - } - }, - "node_modules/browser-resolve/node_modules/resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", - "dev": true - }, - "node_modules/browserify-optional": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-optional/-/browserify-optional-1.0.1.tgz", - "integrity": "sha512-VrhjbZ+Ba5mDiSYEuPelekQMfTbhcA2DhLk2VQWqdcCROWeFqlTcXZ7yfRkXCIl8E+g4gINJYJiRB7WEtfomAQ==", - "dev": true, - "dependencies": { - "ast-transform": "0.0.0", - "ast-types": "^0.7.0", - "browser-resolve": "^1.8.1" - } - }, - "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "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" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "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" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-equal": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/bufferutil": { - "version": "4.0.6", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "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==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/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==", - "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/caniuse-lite": { - "version": "1.0.30001517", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz", - "integrity": "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==", - "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" - } - ] - }, - "node_modules/cardinal": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", - "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==", - "dependencies": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" - }, - "bin": { - "cdl": "bin/cdl.js" - } - }, - "node_modules/chai": { - "version": "4.3.6", - "dev": true, - "license": "MIT", - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chance": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/chance/-/chance-1.1.9.tgz", - "integrity": "sha512-TfxnA/DcZXRTA4OekA2zL9GH8qscbbl6X0ZqU4tXhGveVY/mXWvEQLt5GwZcYXTEyEFflVtj+pG8nc8EwSm1RQ==", - "dev": true - }, - "node_modules/char-regex": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/check-error": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "dev": true, - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cheerio/node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/child-shell": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "accumulate-stream": "^5.0.0", - "debug": "^4.3.2", - "kind-of": "^6.0.3", - "nanoid": "^3.1.30", - "p-queue": "6.6.2", - "p-timeout": "4.1.0", - "trim-buffer": "^5.0.0" - } - }, - "node_modules/child-shell/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/child-shell/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/ci-info": { - "version": "3.3.2", - "dev": true, - "license": "MIT" - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "dev": true, - "license": "MIT" - }, - "node_modules/class-validator": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.0.tgz", - "integrity": "sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==", - "dev": true, - "dependencies": { - "@types/validator": "^13.7.10", - "libphonenumber-js": "^1.10.14", - "validator": "^13.7.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==", - "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==", - "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, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/co": { - "version": "4.6.0", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/code-block-writer": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-12.0.0.tgz", - "integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==", - "dev": true - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/color": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "license": "MIT" - }, - "node_modules/color-string": { - "version": "1.9.1", - "dev": true, - "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, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", - "dev": true - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/colorspace": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "color": "^3.1.3", - "text-hex": "1.0.x" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "2.20.3", - "dev": true, - "license": "MIT" - }, - "node_modules/comment-parser": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "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==", - "dependencies": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/concat-stream/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, - "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/concat-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/conventional-changelog-angular": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz", - "integrity": "sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==", - "dependencies": { - "compare-func": "^2.0.0" - }, - "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==", - "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/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/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==", - "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==", - "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/convert-source-map": { - "version": "1.8.0", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/convert-source-map/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/core-js-compat": { - "version": "3.31.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.1.tgz", - "integrity": "sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.9" - }, - "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==" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cose-base": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", - "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", - "dependencies": { - "layout-base": "^1.0.0" - } - }, - "node_modules/cosmiconfig": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", - "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", - "dependencies": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - } - }, - "node_modules/cosmiconfig/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/crypto-js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", - "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==", - "dev": true - }, - "node_modules/crypto-random-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", - "dependencies": { - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/crypto-random-string/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==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssom": { - "version": "0.4.4", - "dev": true, - "license": "MIT" - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "dev": true, - "license": "MIT" - }, - "node_modules/cytoscape": { - "version": "3.25.0", - "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.25.0.tgz", - "integrity": "sha512-7MW3Iz57mCUo6JQCho6CmPBCbTlJr7LzyEtIkutG255HLVd4XuBg2I9BkTZLI/e4HoaOB/BiAzXuQybQ95+r9Q==", - "dependencies": { - "heap": "^0.2.6", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/cytoscape-cose-bilkent": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", - "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", - "dependencies": { - "cose-base": "^1.0.0" - }, - "peerDependencies": { - "cytoscape": "^3.2.0" - } - }, - "node_modules/cytoscape-fcose": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", - "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", - "dependencies": { - "cose-base": "^2.2.0" - }, - "peerDependencies": { - "cytoscape": "^3.2.0" - } - }, - "node_modules/cytoscape-fcose/node_modules/cose-base": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", - "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", - "dependencies": { - "layout-base": "^2.0.0" - } - }, - "node_modules/cytoscape-fcose/node_modules/layout-base": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", - "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==" - }, - "node_modules/cytoscape/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/d3": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", - "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==", - "dependencies": { - "d3-array": "3", - "d3-axis": "3", - "d3-brush": "3", - "d3-chord": "3", - "d3-color": "3", - "d3-contour": "4", - "d3-delaunay": "6", - "d3-dispatch": "3", - "d3-drag": "3", - "d3-dsv": "3", - "d3-ease": "3", - "d3-fetch": "3", - "d3-force": "3", - "d3-format": "3", - "d3-geo": "3", - "d3-hierarchy": "3", - "d3-interpolate": "3", - "d3-path": "3", - "d3-polygon": "3", - "d3-quadtree": "3", - "d3-random": "3", - "d3-scale": "4", - "d3-scale-chromatic": "3", - "d3-selection": "3", - "d3-shape": "3", - "d3-time": "3", - "d3-time-format": "4", - "d3-timer": "3", - "d3-transition": "3", - "d3-zoom": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-array": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", - "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", - "dependencies": { - "internmap": "1 - 2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-axis": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", - "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-brush": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", - "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "3", - "d3-transition": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-chord": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", - "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", - "dependencies": { - "d3-path": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-contour": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", - "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", - "dependencies": { - "d3-array": "^3.2.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-delaunay": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", - "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", - "dependencies": { - "delaunator": "5" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dsv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", - "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", - "dependencies": { - "commander": "7", - "iconv-lite": "0.6", - "rw": "1" - }, - "bin": { - "csv2json": "bin/dsv2json.js", - "csv2tsv": "bin/dsv2dsv.js", - "dsv2dsv": "bin/dsv2dsv.js", - "dsv2json": "bin/dsv2json.js", - "json2csv": "bin/json2dsv.js", - "json2dsv": "bin/json2dsv.js", - "json2tsv": "bin/json2dsv.js", - "tsv2csv": "bin/dsv2dsv.js", - "tsv2json": "bin/dsv2json.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dsv/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/d3-dsv/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-fetch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", - "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", - "dependencies": { - "d3-dsv": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-force": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", - "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-quadtree": "1 - 3", - "d3-timer": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-geo": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", - "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", - "dependencies": { - "d3-array": "2.5.0 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-hierarchy": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", - "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "dependencies": { - "d3-color": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", - "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-polygon": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", - "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-quadtree": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", - "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-random": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", - "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-sankey": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", - "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", - "dependencies": { - "d3-array": "1 - 2", - "d3-shape": "^1.2.0" - } - }, - "node_modules/d3-sankey/node_modules/d3-array": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", - "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", - "dependencies": { - "internmap": "^1.0.0" - } - }, - "node_modules/d3-sankey/node_modules/d3-path": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", - "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" - }, - "node_modules/d3-sankey/node_modules/d3-shape": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", - "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", - "dependencies": { - "d3-path": "1" - } - }, - "node_modules/d3-sankey/node_modules/internmap": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", - "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" - }, - "node_modules/d3-scale": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", - "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", - "dependencies": { - "d3-array": "2.10.0 - 3", - "d3-format": "1 - 3", - "d3-interpolate": "1.2.0 - 3", - "d3-time": "2.1.1 - 3", - "d3-time-format": "2 - 4" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-scale-chromatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", - "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", - "dependencies": { - "d3-color": "1 - 3", - "d3-interpolate": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-shape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", - "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", - "dependencies": { - "d3-path": "^3.1.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-time": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", - "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", - "dependencies": { - "d3-array": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-time-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", - "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "dependencies": { - "d3-time": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-transition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "dependencies": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "d3-selection": "2 - 3" - } - }, - "node_modules/d3-zoom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", - "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "2 - 3", - "d3-transition": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/dagre-d3-es": { - "version": "7.0.10", - "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.10.tgz", - "integrity": "sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==", - "dependencies": { - "d3": "^7.8.2", - "lodash-es": "^4.17.21" - } - }, - "node_modules/dash-ast": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", - "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==", - "dev": true - }, - "node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/data-urls": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "engines": { - "node": "*" - } - }, - "node_modules/dayjs": { - "version": "1.11.9", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", - "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==" - }, - "node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/decache": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.2.tgz", - "integrity": "sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==", - "dev": true, - "dependencies": { - "callsite": "^1.0.0" - } - }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "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/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decimal.js": { - "version": "10.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/dedent": { - "version": "0.7.0", - "dev": true, - "license": "MIT" - }, - "node_modules/deep-eql": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "dependencies": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delaunator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", - "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", - "dependencies": { - "robust-predicates": "^3.0.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/dfa": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", - "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", - "dev": true - }, - "node_modules/diff": { - "version": "3.5.0", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/discord-api-types": { - "version": "0.37.50", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.50.tgz", - "integrity": "sha512-X4CDiMnDbA3s3RaUXWXmgAIbY1uxab3fqe3qwzg5XutR3wjqi7M3IkgQbsIBzpqBN2YWr/Qdv7JrFRqSgb4TFg==", - "dev": true - }, - "node_modules/discord.js": { - "version": "14.13.0", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.13.0.tgz", - "integrity": "sha512-Kufdvg7fpyTEwANGy9x7i4od4yu5c6gVddGi5CKm4Y5a6sF0VBODObI3o0Bh7TGCj0LfNT8Qp8z04wnLFzgnbA==", - "dev": true, - "dependencies": { - "@discordjs/builders": "^1.6.5", - "@discordjs/collection": "^1.5.3", - "@discordjs/formatters": "^0.3.2", - "@discordjs/rest": "^2.0.1", - "@discordjs/util": "^1.0.1", - "@discordjs/ws": "^1.0.1", - "@sapphire/snowflake": "^3.5.1", - "@types/ws": "^8.5.5", - "discord-api-types": "0.37.50", - "fast-deep-equal": "^3.1.3", - "lodash.snakecase": "^4.1.1", - "tslib": "^2.6.1", - "undici": "5.22.1", - "ws": "^8.13.0" - }, - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/discord.js/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/discord.js/node_modules/ws": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", - "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domexception": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/dompurify": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.5.tgz", - "integrity": "sha512-F9e6wPGtY+8KNMRAVfxeCOHU0/NPWMSENNq4pQctuXRqqdEPW7q3CrLbR5Nse044WwacyjHGOMlvNsBe1y6z9A==" - }, - "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dev": true, - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/dot/-/dot-2.0.0-beta.1.tgz", - "integrity": "sha512-kxM7fSnNQTXOmaeGuBSXM8O3fEsBb7XSDBllkGbRwa0lJSJTxxDE/4eSNGLKZUmlFw0f1vJ5qSV2BljrgQtgIA==", - "dev": true - }, - "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==", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", - "dev": true, - "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==", - "dev": true - }, - "node_modules/duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", - "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "node_modules/duplexer2/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==", - "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/duplexer2/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==" - }, - "node_modules/duplexer2/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==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "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 - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.4.473", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.473.tgz", - "integrity": "sha512-aVfC8+440vGfl06l8HKKn8/PD5jRfSnLkTTD65EFvU46igbpQRri1gxSzW9/+TeUlwYzrXk1sw867T96zlyECA==", - "dev": true - }, - "node_modules/elkjs": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.8.2.tgz", - "integrity": "sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==" - }, - "node_modules/emittery": { - "version": "0.8.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/enabled": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enquirer": { - "version": "2.3.6", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/env-ci": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-9.1.1.tgz", - "integrity": "sha512-Im2yEWeF4b2RAMAaWvGioXk6m0UNaIjD8hj28j2ij5ldnIFrDQT0+pzDvpbRkcjurhXhf/AsBKv8P2rtmGi9Aw==", - "dependencies": { - "execa": "^7.0.0", - "java-properties": "^1.0.2" - }, - "engines": { - "node": "^16.14 || >=18" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.20.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "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/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-set": "~0.1.5", - "es6-symbol": "~3.1.1", - "event-emitter": "~0.3.5" - } - }, - "node_modules/es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", - "dev": true - }, - "node_modules/es6-set": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", - "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", - "dev": true, - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.62", - "es6-iterator": "~2.0.3", - "es6-symbol": "^3.1.3", - "event-emitter": "^0.3.5", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/es6-set/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "2.0.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint": { - "version": "7.32.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/ms": { - "version": "2.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-module-utils": { - "version": "2.7.3", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils/node_modules/ms": { - "version": "2.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-plugin-import": { - "version": "2.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-jest": { - "version": "24.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/experimental-utils": "^4.0.1" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": ">= 4", - "eslint": ">=5" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-jsdoc": { - "version": "31.6.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "comment-parser": "1.1.2", - "debug": "^4.3.1", - "jsdoctypeparser": "^9.0.0", - "lodash": "^4.17.20", - "regextras": "^0.7.1", - "semver": "^7.3.4", - "spdx-expression-parse": "^3.0.1" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0" - } - }, - "node_modules/eslint-plugin-jsdoc/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-jsdoc/node_modules/lodash": { - "version": "4.17.21", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-plugin-jsdoc/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-plugin-jsdoc/node_modules/semver": { - "version": "7.3.7", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "3.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "eslint": ">=5.0.0", - "prettier": ">=1.13.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-screeps": { - "version": "2.1.0", - "dev": true, - "license": "GPL-3.0", - "peerDependencies": { - "eslint": ">=0.8.0" - } - }, - "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/eslint/node_modules/acorn": { - "version": "7.4.1", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/astral-regex": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "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/eslint/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "5.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint/node_modules/eslint-utils": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/espree": { - "version": "7.3.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/eslint/node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/file-entry-cache": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/eslint/node_modules/flat-cache": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/eslint/node_modules/flatted": { - "version": "3.2.5", - "dev": true, - "license": "ISC" - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.15.0", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/levn": { - "version": "0.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/optionator": { - "version": "0.9.1", - "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.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/prelude-ls": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/regexpp": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/eslint/node_modules/semver": { - "version": "7.3.7", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/slice-ansi": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/eslint/node_modules/strip-json-comments": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/table": { - "version": "6.8.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/eslint/node_modules/table/node_modules/ajv": { - "version": "8.11.0", - "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/eslint/node_modules/type-check": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-is-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz", - "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==", - "dev": true - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/esutils": { - "version": "2.0.3", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "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==", - "dev": true, - "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", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", - "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/execa/node_modules/human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/execa/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/execa/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dev": true, - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - }, - "node_modules/fancy-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-2.0.0.tgz", - "integrity": "sha512-9CzxZbACXMUXW13tS0tI8XsGGmxWzO2DmYrGuBJOJ8k8q2K7hwfJA5qHjuPPe8wtsco33YR9wc+Rlr5wYFvhSA==", - "dev": true, - "dependencies": { - "color-support": "^1.1.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-diff": { - "version": "1.2.0", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "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-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-xml-parser": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.7.tgz", - "integrity": "sha512-J8r6BriSLO1uj2miOk1NW0YVm8AGOOu3Si2HQp/cSmo6EA4m3fcwu2WKjJ4RK9wMLBtg69y1kS8baDiQBR41Ig==", - "dev": true, - "funding": [ - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - }, - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/fastestsmallesttextencoderdecoder-encodeinto": { - "version": "1.0.22", - "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder-encodeinto/-/fastestsmallesttextencoderdecoder-encodeinto-1.0.22.tgz", - "integrity": "sha512-csOz3cwJjZY75QcPHnY+v6cKWeofYCmhtLVYaurjcRn5vaNXoYe1Leo1ZkiZIxZp796+J5Z+TtmeMbbfYBfiiQ==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.13.0", - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fecha": { - "version": "4.2.3", - "dev": true, - "license": "MIT" - }, - "node_modules/fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], - "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, - "engines": { - "node": "^12.20 || >= 14.13" - } - }, - "node_modules/figures": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", - "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", - "dependencies": { - "escape-string-regexp": "^5.0.0", - "is-unicode-supported": "^1.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/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==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/find-versions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz", - "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==", - "dependencies": { - "semver-regex": "^4.0.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/fn.name": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/follow-redirects": { - "version": "1.15.1", - "dev": true, - "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, - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "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.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "dev": true, - "dependencies": { - "fetch-blob": "^3.1.2" - }, - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "engines": { - "node": ">= 0.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==", - "dev": true - }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "node_modules/from2/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==", - "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/from2/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==" - }, - "node_modules/from2/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==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "dev": 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.1", - "license": "MIT" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-assigned-identifiers": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", - "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", - "dev": true - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-port": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-6.1.2.tgz", - "integrity": "sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-port-please": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.1.1.tgz", - "integrity": "sha512-3UBAyM3u4ZBVYDsxOQfJDxEa6XTbpBDrOjp4mf7ExFRt5BKs/QywQQiJsh2B+hxcZLSapWqCRvElUe8DnKcFHA==", - "dev": true - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/git-log-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.0.tgz", - "integrity": "sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA==", - "dependencies": { - "argv-formatter": "~1.0.0", - "spawn-error-forwarder": "~1.0.0", - "split2": "~1.0.0", - "stream-combiner2": "~1.1.1", - "through2": "~2.0.0", - "traverse": "~0.6.6" - } - }, - "node_modules/git-log-parser/node_modules/split2": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", - "integrity": "sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==", - "dependencies": { - "through2": "~2.0.0" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "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/glob-parent": { - "version": "5.1.2", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "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/globby/node_modules/ignore": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "license": "ISC" - }, - "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "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==", - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/heap": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", - "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" - }, - "node_modules/hook-std": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-3.0.0.tgz", - "integrity": "sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/hosted-git-info/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==", - "engines": { - "node": ">=12" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ] - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/http-auth": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-4.1.9.tgz", - "integrity": "sha512-kvPYxNGc9EKGTXvOMnTBQw2RZfuiSihK/mLw/a4pbtRueTE45S55Lw/3k5CktIf7Ak0veMKEIteDj4YkNmCzmQ==", - "dev": true, - "dependencies": { - "apache-crypt": "^1.1.2", - "apache-md5": "^1.0.6", - "bcryptjs": "^2.4.3", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/http-auth-connect": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/http-auth-connect/-/http-auth-connect-1.0.6.tgz", - "integrity": "sha512-yaO0QSCPqGCjPrl3qEEHjJP+lwZ6gMpXLuCBE06eWwcXomkI5TARtu0kxf9teFuBj6iaV3Ybr15jaWUvbzNzHw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/http-auth/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/http-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/human-signals": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/i18next": { - "version": "22.5.1", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.5.1.tgz", - "integrity": "sha512-8TGPgM3pAD+VRsMtUMNknRz3kzqwp/gPALrWMsDnmC1mKqJwpWyooQRLMcbTwq8z8YwSmuj+ZYvc+xCuEpkssA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://locize.com" - }, - { - "type": "individual", - "url": "https://locize.com/i18next.html" - }, - { - "type": "individual", - "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" - } - ], - "dependencies": { - "@babel/runtime": "^7.20.6" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "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" - } - ] - }, - "node_modules/ignore": { - "version": "4.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "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-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz", - "integrity": "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==", - "engines": { - "node": ">=12.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "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", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "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==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "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==" - }, - "node_modules/inside": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/inside/-/inside-1.0.0.tgz", - "integrity": "sha512-tvFwvS4g7q6iDot/4FjtWFHwwpv6TVvEumbTdLQilk1F07ojakbXPQcvf3kMAlyNDpzKRzn+d33O3RuXODuxZQ==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/internmap": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", - "engines": { - "node": ">=12" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/into-stream": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-7.0.0.tgz", - "integrity": "sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==", - "dependencies": { - "from2": "^2.3.0", - "p-is-promise": "^3.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inversify": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/inversify/-/inversify-6.0.1.tgz", - "integrity": "sha512-B3ex30927698TJENHR++8FfEaJGqoWOgI6ZY5Ht/nLUsFCwHn6akbwtnUAPCgUepAnTpe2qHxhDNjoKLyz6rgQ==", - "dev": true - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": 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-arrayish": { - "version": "0.2.1", - "license": "MIT" - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "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==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "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-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-builtin-module": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "builtin-modules": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-callable": { - "version": "1.2.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.9.0", - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "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", - "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", - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "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, - "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", - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-module": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "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==", - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-object": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", - "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "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-shared-array-buffer": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "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==", - "dependencies": { - "text-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dev": true, - "dependencies": { - "which-typed-array": "^1.1.11" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "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==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/issue-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-6.0.0.tgz", - "integrity": "sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==", - "dependencies": { - "lodash.capitalize": "^4.2.1", - "lodash.escaperegexp": "^4.1.2", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.uniqby": "^4.7.0" - }, - "engines": { - "node": ">=10.13" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/istanbul-reports": { - "version": "3.1.4", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jackspeak": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.2.tgz", - "integrity": "sha512-mgNtVv4vUuaKA97yxUHoA3+FkuhtxkjdXEWOyB/N76fjy0FjezEt34oy3epBtvCvS+7DyKwqCFWx/oJLV5+kCg==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/java-properties": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", - "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/javascript-obfuscator": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/javascript-obfuscator/-/javascript-obfuscator-4.0.2.tgz", - "integrity": "sha512-MRBQREvjEwqEGdwNGG7yp0te5uZBFzrPZdxEs4rDYkPpHhhOQu+E0IhSXP7bO9dIUWXZU0Kkdohsuws525aVGQ==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@javascript-obfuscator/escodegen": "2.3.0", - "@javascript-obfuscator/estraverse": "5.4.0", - "acorn": "8.8.2", - "assert": "2.0.0", - "chalk": "4.1.2", - "chance": "1.1.9", - "class-validator": "0.14.0", - "commander": "10.0.0", - "eslint-scope": "7.1.1", - "eslint-visitor-keys": "3.3.0", - "fast-deep-equal": "3.1.3", - "inversify": "6.0.1", - "js-string-escape": "1.0.1", - "md5": "2.3.0", - "mkdirp": "2.1.3", - "multimatch": "5.0.0", - "opencollective-postinstall": "2.0.3", - "process": "0.11.10", - "reflect-metadata": "0.1.13", - "source-map-support": "0.5.21", - "string-template": "1.0.0", - "stringz": "2.1.0", - "tslib": "2.5.0" - }, - "bin": { - "javascript-obfuscator": "bin/javascript-obfuscator" - }, - "engines": { - "node": "^12.22.0 || ^14.0.0 || ^16.0.0 || ^17.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/javascript-obfuscator" - } - }, - "node_modules/javascript-obfuscator/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/javascript-obfuscator/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/javascript-obfuscator/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/javascript-obfuscator/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/javascript-obfuscator/node_modules/commander": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", - "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/javascript-obfuscator/node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/javascript-obfuscator/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/javascript-obfuscator/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/javascript-obfuscator/node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - }, - "node_modules/jest": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.1.0.tgz", - "integrity": "sha512-pSQDVwRSwb109Ss13lcMtdfS9r8/w2Zz8+mTUA9VORD66GflCdl8nUFCqM96geOD2EBwWCNURrNAfQsLIDNBdg==", - "dev": true, - "dependencies": { - "@jest/core": "^27.1.0", - "import-local": "^3.0.2", - "jest-cli": "^27.1.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "execa": "^5.0.0", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-changed-files/node_modules/execa": { - "version": "5.1.1", - "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/jest-changed-files/node_modules/mimic-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-changed-files/node_modules/npm-run-path": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-changed-files/node_modules/onetime": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-circus": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-circus/node_modules/chalk": { - "version": "4.1.2", - "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/jest-circus/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-circus/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-circus/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-circus/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-config": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", - "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/jest-config/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-config/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-config/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-config/node_modules/strip-json-comments": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-config/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "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/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-diff/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-docblock": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", - "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/jest-each/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-each/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-each/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-each/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-jasmine2": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-jasmine2/node_modules/chalk": { - "version": "4.1.2", - "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/jest-jasmine2/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-jasmine2/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-jasmine2/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-leak-detector": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "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/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-matcher-utils/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "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/jest-message-util/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-message-util/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-message-util/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-mock": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.2", - "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/jest-resolve/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-resolve/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-resolve/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-resolve/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.2", - "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/jest-runner/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runner/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-runner/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", - "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/jest-runtime/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runtime/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-runtime/node_modules/execa": { - "version": "5.1.1", - "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/jest-runtime/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/mimic-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-runtime/node_modules/npm-run-path": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/onetime": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-runtime/node_modules/strip-bom": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-serializer": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", - "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/jest-snapshot/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-snapshot/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.3.7", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "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/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-util/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "leven": "^3.1.0", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", - "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/jest-validate/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-validate/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-validate/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.5.1", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-watcher/node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.2", - "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/jest-watcher/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-watcher/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-watcher/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher/node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "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/jest/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest/node_modules/chalk": { - "version": "4.1.2", - "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/jest/node_modules/cliui": { - "version": "7.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/jest/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/jest-cli": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/yargs": { - "version": "16.2.0", - "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/js-string-escape": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", - "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsdoctypeparser": { - "version": "9.0.0", - "dev": true, - "license": "MIT", - "bin": { - "jsdoctypeparser": "bin/jsdoctypeparser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jsdom": { - "version": "16.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/form-data": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jsdom/node_modules/tough-cookie": { - "version": "4.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-beautify": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/json-beautify/-/json-beautify-1.1.1.tgz", - "integrity": "sha512-17j+Hk2lado0xqKtUcyAjK0AtoHnPSIgktWRsEXgdFQFG9UnaGw6CHa0J7xsvulxRpFl6CrkDFHght1p5ZJc4A==", - "dev": true, - "bin": { - "json-beautify": "bin/json-beautify" - } - }, - "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==" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "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==" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "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==", - "engines": [ - "node >= 0.2.0" - ] - }, - "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==", - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/just-extend": { - "version": "4.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/khroma": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz", - "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==" - }, - "node_modules/kind-of": { - "version": "6.0.3", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/kuler": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/layout-base": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", - "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==" - }, - "node_modules/leven": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/libphonenumber-js": { - "version": "1.10.37", - "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.37.tgz", - "integrity": "sha512-Z10PCaOCiAxbUxLyR31DNeeNugSVP6iv/m7UrSKS5JHziEMApJtgku4e9Q69pzzSC9LnQiM09sqsGf2ticZnMw==", - "dev": true - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "license": "MIT" - }, - "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==", - "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/load-json-file/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==", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/locate-path": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/lodash": { - "version": "3.10.1", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" - }, - "node_modules/lodash.capitalize": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", - "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "node_modules/lodash.escaperegexp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", - "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==" - }, - "node_modules/lodash.get": { - "version": "4.4.2", - "dev": true, - "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==" - }, - "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==" - }, - "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==" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", - "dev": true - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.uniqby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", - "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==" - }, - "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, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/logform": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@colors/colors": "1.5.0", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" - } - }, - "node_modules/logform/node_modules/ms": { - "version": "2.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/loglevel": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", - "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/loglevel" - } - }, - "node_modules/loglevel-plugin-prefix": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", - "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", - "dev": true - }, - "node_modules/lolex": { - "version": "2.7.5", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/loupe": { - "version": "2.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "get-func-name": "^2.0.0" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true - }, - "node_modules/macos-release": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.1.tgz", - "integrity": "sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/magic-bytes.js": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.0.17.tgz", - "integrity": "sha512-PEDpPzHpKe5AxkVmQrNPHFRvPN2ELkkj3eIg4IZO9JdhBiAY3aU53lgYXs9j8B7lpza+QiW0UA4QHCH7EskSeg==", - "dev": true - }, - "node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "dev": true, - "license": "ISC" - }, - "node_modules/makeerror": { - "version": "1.0.12", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.5" - } - }, - "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==", - "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==", - "dev": true - }, - "node_modules/marked": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-5.1.2.tgz", - "integrity": "sha512-ahRPGXJpjMjwSOlBoTMZAK7ATXkli5qCPxZ21TG44rx1KEo44bii4ekgTDQPNRQ4Kh7JMb9Ub1PVk1NxRSsorg==", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 16" - } - }, - "node_modules/marked-terminal": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-5.2.0.tgz", - "integrity": "sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA==", - "dependencies": { - "ansi-escapes": "^6.2.0", - "cardinal": "^2.1.1", - "chalk": "^5.2.0", - "cli-table3": "^0.6.3", - "node-emoji": "^1.11.0", - "supports-hyperlinks": "^2.3.0" - }, - "engines": { - "node": ">=14.13.1 || >=16.0.0" - }, - "peerDependencies": { - "marked": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" - } - }, - "node_modules/marked-terminal/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "dev": true, - "dependencies": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "node_modules/mdast-util-from-markdown": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", - "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", - "dependencies": { - "@types/mdast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "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/meow/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/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==" - }, - "node_modules/meow/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/meow/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/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==", - "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/meow/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==", - "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/meow/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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/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==", - "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/meow/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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/meow/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==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-source-map": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", - "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", - "dev": true, - "dependencies": { - "source-map": "^0.5.6" - } - }, - "node_modules/merge-source-map/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/mermaid": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.3.0.tgz", - "integrity": "sha512-H5quxuQjwXC8M1WuuzhAp2TdqGg74t5skfDBrNKJ7dt3z8Wprl5S6h9VJsRhoBUTSs1TMtHEdplLhCqXleZZLw==", - "dependencies": { - "@braintree/sanitize-url": "^6.0.2", - "@types/d3-scale": "^4.0.3", - "@types/d3-scale-chromatic": "^3.0.0", - "cytoscape": "^3.23.0", - "cytoscape-cose-bilkent": "^4.1.0", - "cytoscape-fcose": "^2.1.0", - "d3": "^7.4.0", - "d3-sankey": "^0.12.3", - "dagre-d3-es": "7.0.10", - "dayjs": "^1.11.7", - "dompurify": "3.0.5", - "elkjs": "^0.8.2", - "khroma": "^2.0.0", - "lodash-es": "^4.17.21", - "mdast-util-from-markdown": "^1.3.0", - "non-layered-tidy-tree-layout": "^2.0.2", - "stylis": "^4.1.3", - "ts-dedent": "^2.2.0", - "uuid": "^9.0.0", - "web-worker": "^1.2.0" - } - }, - "node_modules/micromark": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", - "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", - "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-factory-destination": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", - "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-label": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", - "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-factory-space": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", - "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-title": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", - "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-whitespace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", - "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-character": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", - "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-chunked": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", - "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-classify-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", - "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-combine-extensions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", - "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", - "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-decode-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", - "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", - "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-html-tag-name": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", - "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", - "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-resolve-all": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", - "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", - "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-subtokenize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", - "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", - "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/micromark/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "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==", - "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==", - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/minipass": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz", - "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/mkdirp": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.3.tgz", - "integrity": "sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw==", - "dev": true, - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/morgan": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", - "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", - "dev": true, - "dependencies": { - "basic-auth": "~2.0.1", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-finished": "~2.3.0", - "on-headers": "~1.0.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "dev": true, - "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, - "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/nanoid": { - "version": "3.3.4", - "dev": true, - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ncp": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "bin": { - "ncp": "bin/ncp" - } - }, - "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, - "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==" - }, - "node_modules/nerf-dart": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", - "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==" - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true - }, - "node_modules/nise": { - "version": "1.5.3", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/formatio": "^3.2.1", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "lolex": "^5.0.1", - "path-to-regexp": "^1.7.0" - } - }, - "node_modules/nise/node_modules/isarray": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/nise/node_modules/lolex": { - "version": "5.1.2", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/nise/node_modules/path-to-regexp": { - "version": "1.8.0", - "dev": true, - "license": "MIT", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "dependencies": { - "lodash": "^4.17.21" - } - }, - "node_modules/node-emoji/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "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-fetch/node_modules/tr46": { - "version": "0.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/node-gyp-build": { - "version": "4.4.0", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/node-powershell": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "child-shell": "^5.0.0", - "is-wsl": "^2.2.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true - }, - "node_modules/non-layered-tidy-tree-layout": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", - "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" - }, - "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==", - "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-package-data/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==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", - "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm": { - "version": "9.8.1", - "resolved": "https://registry.npmjs.org/npm/-/npm-9.8.1.tgz", - "integrity": "sha512-AfDvThQzsIXhYgk9zhbk5R+lh811lKkLAeQMMhSypf1BM7zUafeIIBzMzespeuVEJ0+LvY36oRQYf7IKLzU3rw==", - "bundleDependencies": [ - "@isaacs/string-locale-compare", - "@npmcli/arborist", - "@npmcli/config", - "@npmcli/fs", - "@npmcli/map-workspaces", - "@npmcli/package-json", - "@npmcli/promise-spawn", - "@npmcli/run-script", - "abbrev", - "archy", - "cacache", - "chalk", - "ci-info", - "cli-columns", - "cli-table3", - "columnify", - "fastest-levenshtein", - "fs-minipass", - "glob", - "graceful-fs", - "hosted-git-info", - "ini", - "init-package-json", - "is-cidr", - "json-parse-even-better-errors", - "libnpmaccess", - "libnpmdiff", - "libnpmexec", - "libnpmfund", - "libnpmhook", - "libnpmorg", - "libnpmpack", - "libnpmpublish", - "libnpmsearch", - "libnpmteam", - "libnpmversion", - "make-fetch-happen", - "minimatch", - "minipass", - "minipass-pipeline", - "ms", - "node-gyp", - "nopt", - "npm-audit-report", - "npm-install-checks", - "npm-package-arg", - "npm-pick-manifest", - "npm-profile", - "npm-registry-fetch", - "npm-user-validate", - "npmlog", - "p-map", - "pacote", - "parse-conflict-json", - "proc-log", - "qrcode-terminal", - "read", - "semver", - "sigstore", - "ssri", - "supports-color", - "tar", - "text-table", - "tiny-relative-date", - "treeverse", - "validate-npm-package-name", - "which", - "write-file-atomic" - ], - "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^6.3.0", - "@npmcli/config": "^6.2.1", - "@npmcli/fs": "^3.1.0", - "@npmcli/map-workspaces": "^3.0.4", - "@npmcli/package-json": "^4.0.1", - "@npmcli/promise-spawn": "^6.0.2", - "@npmcli/run-script": "^6.0.2", - "abbrev": "^2.0.0", - "archy": "~1.0.0", - "cacache": "^17.1.3", - "chalk": "^5.3.0", - "ci-info": "^3.8.0", - "cli-columns": "^4.0.0", - "cli-table3": "^0.6.3", - "columnify": "^1.6.0", - "fastest-levenshtein": "^1.0.16", - "fs-minipass": "^3.0.2", - "glob": "^10.2.7", - "graceful-fs": "^4.2.11", - "hosted-git-info": "^6.1.1", - "ini": "^4.1.1", - "init-package-json": "^5.0.0", - "is-cidr": "^4.0.2", - "json-parse-even-better-errors": "^3.0.0", - "libnpmaccess": "^7.0.2", - "libnpmdiff": "^5.0.19", - "libnpmexec": "^6.0.3", - "libnpmfund": "^4.0.19", - "libnpmhook": "^9.0.3", - "libnpmorg": "^5.0.4", - "libnpmpack": "^5.0.19", - "libnpmpublish": "^7.5.0", - "libnpmsearch": "^6.0.2", - "libnpmteam": "^5.0.3", - "libnpmversion": "^4.0.2", - "make-fetch-happen": "^11.1.1", - "minimatch": "^9.0.3", - "minipass": "^5.0.0", - "minipass-pipeline": "^1.2.4", - "ms": "^2.1.2", - "node-gyp": "^9.4.0", - "nopt": "^7.2.0", - "npm-audit-report": "^5.0.0", - "npm-install-checks": "^6.1.1", - "npm-package-arg": "^10.1.0", - "npm-pick-manifest": "^8.0.1", - "npm-profile": "^7.0.1", - "npm-registry-fetch": "^14.0.5", - "npm-user-validate": "^2.0.0", - "npmlog": "^7.0.1", - "p-map": "^4.0.0", - "pacote": "^15.2.0", - "parse-conflict-json": "^3.0.1", - "proc-log": "^3.0.0", - "qrcode-terminal": "^0.12.0", - "read": "^2.1.0", - "semver": "^7.5.4", - "sigstore": "^1.7.0", - "ssri": "^10.0.4", - "supports-color": "^9.4.0", - "tar": "^6.1.15", - "text-table": "~0.2.0", - "tiny-relative-date": "^1.3.0", - "treeverse": "^3.0.0", - "validate-npm-package-name": "^5.0.0", - "which": "^3.0.1", - "write-file-atomic": "^5.0.1" - }, - "bin": { - "npm": "bin/npm-cli.js", - "npx": "bin/npx-cli.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm/node_modules/@colors/colors": { - "version": "1.5.0", - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/npm/node_modules/@isaacs/cliui": { - "version": "8.0.2", - "inBundle": 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/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "inBundle": 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/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/npm/node_modules/@isaacs/string-locale-compare": { - "version": "1.1.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "6.3.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^3.1.0", - "@npmcli/installed-package-contents": "^2.0.2", - "@npmcli/map-workspaces": "^3.0.2", - "@npmcli/metavuln-calculator": "^5.0.0", - "@npmcli/name-from-folder": "^2.0.0", - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^4.0.0", - "@npmcli/query": "^3.0.0", - "@npmcli/run-script": "^6.0.0", - "bin-links": "^4.0.1", - "cacache": "^17.0.4", - "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^6.1.1", - "json-parse-even-better-errors": "^3.0.0", - "json-stringify-nice": "^1.1.4", - "minimatch": "^9.0.0", - "nopt": "^7.0.0", - "npm-install-checks": "^6.0.0", - "npm-package-arg": "^10.1.0", - "npm-pick-manifest": "^8.0.1", - "npm-registry-fetch": "^14.0.3", - "npmlog": "^7.0.1", - "pacote": "^15.0.8", - "parse-conflict-json": "^3.0.0", - "proc-log": "^3.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.2", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^10.0.1", - "treeverse": "^3.0.0", - "walk-up-path": "^3.0.1" - }, - "bin": { - "arborist": "bin/index.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/config": { - "version": "6.2.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/map-workspaces": "^3.0.2", - "ci-info": "^3.8.0", - "ini": "^4.1.0", - "nopt": "^7.0.0", - "proc-log": "^3.0.0", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.5", - "walk-up-path": "^3.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/disparity-colors": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "ansi-styles": "^4.3.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/fs": { - "version": "3.1.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/git": { - "version": "4.1.0", - "inBundle": 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/npm/node_modules/@npmcli/installed-package-contents": { - "version": "2.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "bin": { - "installed-package-contents": "lib/index.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/map-workspaces": { - "version": "3.0.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/name-from-folder": "^2.0.0", - "glob": "^10.2.2", - "minimatch": "^9.0.0", - "read-package-json-fast": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { - "version": "5.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "cacache": "^17.0.0", - "json-parse-even-better-errors": "^3.0.0", - "pacote": "^15.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/name-from-folder": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/node-gyp": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/package-json": { - "version": "4.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^4.1.0", - "glob": "^10.2.2", - "hosted-git-info": "^6.1.1", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", - "proc-log": "^3.0.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/promise-spawn": { - "version": "6.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/query": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "6.0.2", - "inBundle": 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/npm/node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/npm/node_modules/@sigstore/protobuf-specs": { - "version": "0.1.0", - "inBundle": true, - "license": "Apache-2.0", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@sigstore/tuf": { - "version": "1.0.2", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.1.0", - "tuf-js": "^1.1.7" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@tootallnate/once": { - "version": "2.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/@tufjs/canonical-json": { - "version": "1.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@tufjs/models": { - "version": "1.0.4", - "inBundle": 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/npm/node_modules/abbrev": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/abort-controller": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/npm/node_modules/agent-base": { - "version": "6.0.2", - "inBundle": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/npm/node_modules/agentkeepalive": { - "version": "4.3.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "depd": "^2.0.0", - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/npm/node_modules/aggregate-error": { - "version": "3.1.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/ansi-regex": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/ansi-styles": { - "version": "4.3.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/npm/node_modules/aproba": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/archy": { - "version": "1.0.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/are-we-there-yet": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^4.1.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/balanced-match": { - "version": "1.0.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/base64-js": { - "version": "1.5.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/bin-links": { - "version": "4.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "cmd-shim": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "read-cmd-shim": "^4.0.0", - "write-file-atomic": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/binary-extensions": { - "version": "2.2.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/brace-expansion": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/npm/node_modules/buffer": { - "version": "6.0.3", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/npm/node_modules/builtins": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/npm/node_modules/cacache": { - "version": "17.1.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "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/node_modules/chalk": { - "version": "5.3.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/npm/node_modules/chownr": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/ci-info": { - "version": "3.8.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/cidr-regex": { - "version": "3.1.1", - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "ip-regex": "^4.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/clean-stack": { - "version": "2.2.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/npm/node_modules/cli-columns": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/cli-table3": { - "version": "0.6.3", - "inBundle": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/npm/node_modules/clone": { - "version": "1.0.4", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/npm/node_modules/cmd-shim": { - "version": "6.0.1", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/color-convert": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/npm/node_modules/color-name": { - "version": "1.1.4", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/color-support": { - "version": "1.1.3", - "inBundle": true, - "license": "ISC", - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/npm/node_modules/columnify": { - "version": "1.6.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/npm/node_modules/common-ancestor-path": { - "version": "1.0.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/concat-map": { - "version": "0.0.1", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/console-control-strings": { - "version": "1.1.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/cross-spawn": { - "version": "7.0.3", - "inBundle": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/cssesc": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm/node_modules/debug": { - "version": "4.3.4", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/npm/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/defaults": { - "version": "1.0.4", - "inBundle": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm/node_modules/delegates": { - "version": "1.0.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/depd": { - "version": "2.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/npm/node_modules/diff": { - "version": "5.1.0", - "inBundle": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/npm/node_modules/eastasianwidth": { - "version": "0.2.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/emoji-regex": { - "version": "8.0.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/encoding": { - "version": "0.1.13", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/npm/node_modules/env-paths": { - "version": "2.2.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/npm/node_modules/err-code": { - "version": "2.0.3", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/event-target-shim": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/npm/node_modules/events": { - "version": "3.3.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/npm/node_modules/exponential-backoff": { - "version": "3.1.1", - "inBundle": true, - "license": "Apache-2.0" - }, - "node_modules/npm/node_modules/fastest-levenshtein": { - "version": "1.0.16", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/npm/node_modules/foreground-child": { - "version": "3.1.1", - "inBundle": 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/npm/node_modules/fs-minipass": { - "version": "3.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/fs.realpath": { - "version": "1.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/function-bind": { - "version": "1.1.1", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/gauge": { - "version": "5.0.1", - "inBundle": 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": "^4.0.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/glob": { - "version": "10.2.7", - "inBundle": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/graceful-fs": { - "version": "4.2.11", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/has": { - "version": "1.0.3", - "inBundle": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/npm/node_modules/has-unicode": { - "version": "2.0.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/hosted-git-info": { - "version": "6.1.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/http-cache-semantics": { - "version": "4.1.1", - "inBundle": true, - "license": "BSD-2-Clause" - }, - "node_modules/npm/node_modules/http-proxy-agent": { - "version": "5.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/npm/node_modules/https-proxy-agent": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/npm/node_modules/humanize-ms": { - "version": "1.2.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/npm/node_modules/iconv-lite": { - "version": "0.6.3", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm/node_modules/ieee754": { - "version": "1.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "BSD-3-Clause" - }, - "node_modules/npm/node_modules/ignore-walk": { - "version": "6.0.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/imurmurhash": { - "version": "0.1.4", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/npm/node_modules/indent-string": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/inflight": { - "version": "1.0.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/npm/node_modules/inherits": { - "version": "2.0.4", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/ini": { - "version": "4.1.1", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/init-package-json": { - "version": "5.0.0", - "inBundle": 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/npm/node_modules/ip": { - "version": "2.0.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/ip-regex": { - "version": "4.3.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/is-cidr": { - "version": "4.0.2", - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "cidr-regex": "^3.1.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/is-core-module": { - "version": "2.12.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/npm/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/is-lambda": { - "version": "1.0.1", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/isexe": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/jackspeak": { - "version": "2.2.1", - "inBundle": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/npm/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/json-stringify-nice": { - "version": "1.1.4", - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/jsonparse": { - "version": "1.3.1", - "engines": [ - "node >= 0.2.0" - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/just-diff": { - "version": "6.0.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/just-diff-apply": { - "version": "5.5.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/libnpmaccess": { - "version": "7.0.2", - "inBundle": 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/npm/node_modules/libnpmdiff": { - "version": "5.0.19", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^6.3.0", - "@npmcli/disparity-colors": "^3.0.0", - "@npmcli/installed-package-contents": "^2.0.2", - "binary-extensions": "^2.2.0", - "diff": "^5.1.0", - "minimatch": "^9.0.0", - "npm-package-arg": "^10.1.0", - "pacote": "^15.0.8", - "tar": "^6.1.13" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmexec": { - "version": "6.0.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^6.3.0", - "@npmcli/run-script": "^6.0.0", - "ci-info": "^3.7.1", - "npm-package-arg": "^10.1.0", - "npmlog": "^7.0.1", - "pacote": "^15.0.8", - "proc-log": "^3.0.0", - "read": "^2.0.0", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.7", - "walk-up-path": "^3.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmfund": { - "version": "4.0.19", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^6.3.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmhook": { - "version": "9.0.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^14.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmorg": { - "version": "5.0.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^14.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmpack": { - "version": "5.0.19", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^6.3.0", - "@npmcli/run-script": "^6.0.0", - "npm-package-arg": "^10.1.0", - "pacote": "^15.0.8" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmpublish": { - "version": "7.5.0", - "inBundle": 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/npm/node_modules/libnpmsearch": { - "version": "6.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-registry-fetch": "^14.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmteam": { - "version": "5.0.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^14.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmversion": { - "version": "4.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^4.0.1", - "@npmcli/run-script": "^6.0.0", - "json-parse-even-better-errors": "^3.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.7" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/lru-cache": { - "version": "7.18.3", - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/npm/node_modules/make-fetch-happen": { - "version": "11.1.1", - "inBundle": 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/node_modules/minimatch": { - "version": "9.0.3", - "inBundle": 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/node_modules/minipass": { - "version": "5.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-collect": { - "version": "1.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/minipass-collect/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-fetch": { - "version": "3.0.3", - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^5.0.0", - "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/node_modules/minipass-flush": { - "version": "1.0.5", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-json-stream": { - "version": "1.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/npm/node_modules/minipass-json-stream/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-pipeline": { - "version": "1.2.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-sized": { - "version": "1.0.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minizlib": { - "version": "2.1.2", - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/mkdirp": { - "version": "1.0.4", - "inBundle": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/ms": { - "version": "2.1.3", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/mute-stream": { - "version": "1.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/negotiator": { - "version": "0.6.3", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/npm/node_modules/node-gyp": { - "version": "9.4.0", - "inBundle": 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": "^11.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/npm/node_modules/node-gyp/node_modules/abbrev": { - "version": "1.1.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/node-gyp/node_modules/are-we-there-yet": { - "version": "3.0.1", - "inBundle": 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/npm/node_modules/node-gyp/node_modules/brace-expansion": { - "version": "1.1.11", - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/gauge": { - "version": "4.0.4", - "inBundle": 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/npm/node_modules/node-gyp/node_modules/glob": { - "version": "7.2.3", - "inBundle": 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/npm/node_modules/node-gyp/node_modules/minimatch": { - "version": "3.1.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/nopt": { - "version": "6.0.0", - "inBundle": 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/npm/node_modules/node-gyp/node_modules/npmlog": { - "version": "6.0.2", - "inBundle": 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/npm/node_modules/node-gyp/node_modules/readable-stream": { - "version": "3.6.2", - "inBundle": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/signal-exit": { - "version": "3.0.7", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/node-gyp/node_modules/which": { - "version": "2.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/nopt": { - "version": "7.2.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "abbrev": "^2.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/normalize-package-data": { - "version": "5.0.0", - "inBundle": 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/npm/node_modules/npm-audit-report": { - "version": "5.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-bundled": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-install-checks": { - "version": "6.1.1", - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-package-arg": { - "version": "10.1.0", - "inBundle": 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/node_modules/npm-packlist": { - "version": "7.0.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "ignore-walk": "^6.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-pick-manifest": { - "version": "8.0.1", - "inBundle": 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/node_modules/npm-profile": { - "version": "7.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-registry-fetch": "^14.0.0", - "proc-log": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-registry-fetch": { - "version": "14.0.5", - "inBundle": 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/node_modules/npm-user-validate": { - "version": "2.0.0", - "inBundle": true, - "license": "BSD-2-Clause", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npmlog": { - "version": "7.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "are-we-there-yet": "^4.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^5.0.0", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/once": { - "version": "1.4.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/npm/node_modules/p-map": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm/node_modules/pacote": { - "version": "15.2.0", - "inBundle": 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/npm/node_modules/parse-conflict-json": { - "version": "3.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "just-diff": "^6.0.0", - "just-diff-apply": "^5.2.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/path-is-absolute": { - "version": "1.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm/node_modules/path-key": { - "version": "3.1.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/path-scurry": { - "version": "1.9.2", - "inBundle": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^9.1.1", - "minipass": "^5.0.0 || ^6.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/path-scurry/node_modules/lru-cache": { - "version": "9.1.1", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/npm/node_modules/postcss-selector-parser": { - "version": "6.0.13", - "inBundle": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm/node_modules/proc-log": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/process": { - "version": "0.11.10", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/npm/node_modules/promise-all-reject-late": { - "version": "1.0.1", - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/promise-call-limit": { - "version": "1.0.2", - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/promise-inflight": { - "version": "1.0.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/promise-retry": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/promzard": { - "version": "1.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "read": "^2.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/qrcode-terminal": { - "version": "0.12.0", - "inBundle": true, - "bin": { - "qrcode-terminal": "bin/qrcode-terminal.js" - } - }, - "node_modules/npm/node_modules/read": { - "version": "2.1.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "mute-stream": "~1.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/read-cmd-shim": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/read-package-json": { - "version": "6.0.4", - "inBundle": 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/npm/node_modules/read-package-json-fast": { - "version": "3.0.2", - "inBundle": 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/npm/node_modules/readable-stream": { - "version": "4.4.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/retry": { - "version": "0.12.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/npm/node_modules/rimraf": { - "version": "3.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/npm/node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "inBundle": 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/npm/node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/npm/node_modules/safe-buffer": { - "version": "5.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/safer-buffer": { - "version": "2.1.2", - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/npm/node_modules/semver": { - "version": "7.5.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/set-blocking": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/shebang-command": { - "version": "2.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/shebang-regex": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/signal-exit": { - "version": "4.0.2", - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/sigstore": { - "version": "1.7.0", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.1.0", - "@sigstore/tuf": "^1.0.1", - "make-fetch-happen": "^11.0.1" - }, - "bin": { - "sigstore": "bin/sigstore.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/smart-buffer": { - "version": "4.2.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/npm/node_modules/socks": { - "version": "2.7.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/npm/node_modules/socks-proxy-agent": { - "version": "7.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/spdx-correct": { - "version": "3.2.0", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/npm/node_modules/spdx-exceptions": { - "version": "2.3.0", - "inBundle": true, - "license": "CC-BY-3.0" - }, - "node_modules/npm/node_modules/spdx-expression-parse": { - "version": "3.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.13", - "inBundle": true, - "license": "CC0-1.0" - }, - "node_modules/npm/node_modules/ssri": { - "version": "10.0.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/string_decoder": { - "version": "1.3.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/npm/node_modules/string-width": { - "version": "4.2.3", - "inBundle": 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/npm/node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "inBundle": 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/npm/node_modules/strip-ansi": { - "version": "6.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/supports-color": { - "version": "9.4.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/npm/node_modules/tar": { - "version": "6.1.15", - "inBundle": true, - "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" - } - }, - "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/text-table": { - "version": "0.2.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/tiny-relative-date": { - "version": "1.3.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/treeverse": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/tuf-js": { - "version": "1.1.7", - "inBundle": 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/npm/node_modules/unique-filename": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/unique-slug": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/util-deprecate": { - "version": "1.0.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/validate-npm-package-license": { - "version": "3.0.4", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/npm/node_modules/validate-npm-package-name": { - "version": "5.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/walk-up-path": { - "version": "3.0.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/wcwidth": { - "version": "1.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/npm/node_modules/which": { - "version": "3.0.1", - "inBundle": 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/npm/node_modules/wide-align": { - "version": "1.1.5", - "inBundle": true, - "license": "ISC", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/npm/node_modules/wrap-ansi": { - "version": "8.1.0", - "inBundle": 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/npm/node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "inBundle": 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/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "9.2.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { - "version": "5.1.2", - "inBundle": 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/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/npm/node_modules/wrappy": { - "version": "1.0.2", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/write-file-atomic": { - "version": "5.0.1", - "inBundle": 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/npm/node_modules/yallist": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nwsapi": { - "version": "2.2.0", - "dev": true, - "license": "MIT" - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/one-time": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fn.name": "1.x.x" - } - }, - "node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "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/opencollective-postinstall": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", - "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", - "dev": true, - "bin": { - "opencollective-postinstall": "index.js" - } - }, - "node_modules/optionator": { - "version": "0.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "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, - "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/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ora/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/ora/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/os-name": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz", - "integrity": "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==", - "dev": true, - "dependencies": { - "macos-release": "^2.5.0", - "windows-release": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-each-series": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz", - "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==", - "engines": { - "node": ">=12" - }, - "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==", - "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", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-is-promise": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", - "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/p-limit": { - "version": "1.3.0", - "license": "MIT", - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-locate": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "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==", - "dependencies": { - "aggregate-error": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-queue": { - "version": "6.6.2", - "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-queue/node_modules/p-timeout": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-reduce": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", - "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-timeout": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/p-try": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", - "dev": true - }, - "node_modules/parent-module": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "dev": true, - "dependencies": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pastebin-api": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/pastebin-api/-/pastebin-api-5.1.6.tgz", - "integrity": "sha512-FI2ZeXLxroI2tuRVd5LI7eNmiANFxDOdlhXxSMqtOXTJn1KSt2UC8kglhndUOOPt6p9XPVnuS7XGW/KbiBbbzw==", - "dev": true, - "dependencies": { - "fast-xml-parser": "^4.1.3", - "undici": "^5.21.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true - }, - "node_modules/path-exists": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "dev": true, - "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", - "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "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==", - "dev": true, - "dependencies": { - "through": "~2.3" - } - }, - "node_modules/pdfjs-dist": { - "version": "2.12.313", - "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.12.313.tgz", - "integrity": "sha512-1x6iXO4Qnv6Eb+YFdN5JdUzt4pAkxSp3aLAYPX93eQCyg/m7QFzXVWJHJVtoW48CI8HCXju4dSkhQZwoheL5mA==", - "dev": true, - "peerDependencies": { - "worker-loader": "^3.0.8" - }, - "peerDependenciesMeta": { - "worker-loader": { - "optional": true - } - } - }, - "node_modules/pdfmake": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/pdfmake/-/pdfmake-0.2.7.tgz", - "integrity": "sha512-ClLpgx30H5G3EDvRW1MrA1Xih6YxEaSgIVFrOyBMgAAt62V+hxsyWAi6JNP7u1Fc5JKYAbpb4RRVw8Rhvmz5cQ==", - "dev": true, - "dependencies": { - "@foliojs-fork/linebreak": "^1.1.1", - "@foliojs-fork/pdfkit": "^0.13.0", - "iconv-lite": "^0.6.3", - "xmldoc": "^1.1.2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/pdfmake/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, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/pirates": { - "version": "4.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-conf": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", - "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", - "dependencies": { - "find-up": "^2.0.0", - "load-json-file": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "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", - "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", - "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", - "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", - "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", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/png-js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz", - "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==", - "dev": true - }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.7.1", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pretty-format": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "engines": { - "node": ">= 0.6.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==" - }, - "node_modules/progress": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" - }, - "node_modules/proxy-middleware": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", - "integrity": "sha512-EGCG8SeoIRVMhsqHQUdDigB2i7qU7fCsWASwn54+nPutYO8n4q6EiwMzyfWlC+dzRFExP+kvcnDFdBDHoZBU7Q==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/psl": { - "version": "1.8.0", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/q": { - "version": "1.5.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "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": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "engines": { - "node": ">=8" - } - }, - "node_modules/quote-stream": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", - "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==", - "dev": true, - "dependencies": { - "buffer-equal": "0.0.1", - "minimist": "^1.1.3", - "through2": "^2.0.0" - }, - "bin": { - "quote-stream": "bin/cmd.js" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/react-is": { - "version": "17.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/read-pkg": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-8.0.0.tgz", - "integrity": "sha512-Ajb9oSjxXBw0YyOiwtQ2dKbAA/vMnUPnY63XcCk+mXo0BwIdQEMgZLZiMWGttQHcUhUgbK0mH85ethMPKXxziw==", - "dependencies": { - "@types/normalize-package-data": "^2.4.1", - "normalize-package-data": "^5.0.0", - "parse-json": "^7.0.0", - "type-fest": "^3.8.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-10.0.0.tgz", - "integrity": "sha512-jgmKiS//w2Zs+YbX039CorlkOp8FIVbSAN8r8GJHDsGlmNPXo+VeHkqAwCiQVTTx5/LwLZTcEw59z3DvcLbr0g==", - "dependencies": { - "find-up": "^6.3.0", - "read-pkg": "^8.0.0", - "type-fest": "^3.12.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-pkg/node_modules/lines-and-columns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/read-pkg/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==", - "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-pkg/node_modules/parse-json": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.0.0.tgz", - "integrity": "sha512-kP+TQYAzAiVnzOlWOe0diD6L35s9bJh0SCn95PIbZFKrOYuIRQsQkeWEYxzVDuHTt9V9YqvYCJ2Qo4z9wdfZPw==", - "dependencies": { - "@babel/code-frame": "^7.21.4", - "error-ex": "^1.3.2", - "json-parse-even-better-errors": "^3.0.0", - "lines-and-columns": "^2.0.3", - "type-fest": "^3.8.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "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==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/redent/node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/redeyed": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", - "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==", - "dependencies": { - "esprima": "~4.0.0" - } - }, - "node_modules/reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", - "dev": true - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regextras": { - "version": "0.7.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.14" - } - }, - "node_modules/registry-auth-token": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", - "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", - "dependencies": { - "@pnpm/npm-conf": "^2.1.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": 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, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.1", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.9.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", - "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", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve.exports": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "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, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/restore-cursor/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "2.6.3", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/robust-predicates": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", - "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" - }, - "node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup-plugin-clear": { - "version": "2.0.7", - "dev": true, - "license": "ISC", - "dependencies": { - "rimraf": "^2.6.2" - } - }, - "node_modules/rollup-plugin-copy": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-copy/-/rollup-plugin-copy-3.4.0.tgz", - "integrity": "sha512-rGUmYYsYsceRJRqLVlE9FivJMxJ7X6jDlP79fmFkL8sJs7VVMSVyA2yfyL+PGyO/vJs4A87hwhgVfz61njI+uQ==", - "dev": true, - "dependencies": { - "@types/fs-extra": "^8.0.1", - "colorette": "^1.1.0", - "fs-extra": "^8.1.0", - "globby": "10.0.1", - "is-plain-object": "^3.0.0" - }, - "engines": { - "node": ">=8.3" - } - }, - "node_modules/rollup-plugin-copy/node_modules/globby": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", - "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", - "dev": true, - "dependencies": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/rollup-plugin-copy/node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/rollup-plugin-screeps-world": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/rollup-plugin-screeps-world/-/rollup-plugin-screeps-world-1.0.4.tgz", - "integrity": "sha512-+NB/KH8kuOjaenOySZVrPnRU5O/ny48otYYyI/Flg5tww59XIA95JZbmgnoN8J8GbjmDk+D5s+RV4YSK9r2ucw==", - "dev": true, - "dependencies": { - "git-rev-sync": "^3.0.2", - "screeps-api": "^1.11.0" - } - }, - "node_modules/rollup-plugin-screeps-world/node_modules/git-rev-sync": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/git-rev-sync/-/git-rev-sync-3.0.2.tgz", - "integrity": "sha512-Nd5RiYpyncjLv0j6IONy0lGzAqdRXUaBctuGBbrEA2m6Bn4iDrN/9MeQTXuiquw8AEKL9D2BW0nw5m/lQvxqnQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "1.0.5", - "graceful-fs": "4.1.15", - "shelljs": "0.8.5" - } - }, - "node_modules/rollup-plugin-screeps-world/node_modules/graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "node_modules/rollup-plugin-screeps-world/node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/rollup-plugin-terser": { - "version": "7.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "peerDependencies": { - "rollup": "^2.0.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/rollup-plugin-terser/node_modules/jest-worker": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { - "version": "4.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/rollup-plugin-typescript2": { - "version": "0.36.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.36.0.tgz", - "integrity": "sha512-NB2CSQDxSe9+Oe2ahZbf+B4bh7pHwjV5L+RSYpCu7Q5ROuN94F9b6ioWwKfz3ueL3KTtmX4o2MUH2cgHDIEUsw==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^4.1.2", - "find-cache-dir": "^3.3.2", - "fs-extra": "^10.0.0", - "semver": "^7.5.4", - "tslib": "^2.6.2" - }, - "peerDependencies": { - "rollup": ">=1.26.3", - "typescript": ">=2.4.0" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/@rollup/pluginutils": { - "version": "4.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/rollup-plugin-typescript2/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, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/rollup-plugin-typescript2/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, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/rollup-plugin-typescript2/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "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/rw": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" - }, - "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, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/rxjs/node_modules/tslib": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", - "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", - "dev": true - }, - "node_modules/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dependencies": { - "mri": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "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.4.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "node_modules/saxes": { - "version": "5.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/scope-analyzer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.2.tgz", - "integrity": "sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ==", - "dev": true, - "dependencies": { - "array-from": "^2.1.1", - "dash-ast": "^2.0.1", - "es6-map": "^0.1.5", - "es6-set": "^0.1.5", - "es6-symbol": "^3.1.1", - "estree-is-function": "^1.0.0", - "get-assigned-identifiers": "^1.1.0" - } - }, - "node_modules/screeps-api": { - "version": "1.16.0", - "dev": true, - "license": "ISC", - "dependencies": { - "axios": "^0.21.1", - "commander": "^7.2.0", - "debug": "^4.1.1", - "ws": "^7.4.4", - "yamljs": "^0.3.0" - }, - "bin": { - "screeps-api": "bin/screeps-api.js" - }, - "optionalDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - } - }, - "node_modules/screeps-api/node_modules/commander": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/screeps-api/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/screeps-api/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/screeps-db-importer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/screeps-db-importer/-/screeps-db-importer-1.1.0.tgz", - "integrity": "sha512-bbkO0n7DJpu9DzG2PGwEi4FZA64+iCbkYcBiqNYIx/l5vurldEF16UZLBir7tIpC1aJ2OCl6y7Mb1xaN2qDTMQ==", - "dev": true, - "dependencies": { - "node-fetch": "^3.3.1", - "winston": "^3.8.2" - } - }, - "node_modules/screeps-db-importer/node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "dev": true, - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, - "node_modules/screeps-grafana-go_carbon": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/screeps-grafana-go_carbon/-/screeps-grafana-go_carbon-1.0.5.tgz", - "integrity": "sha512-YLN87Jd9d1wrcWB38kTJLHMR7aoEgfXlNAexP6axBLDmBxpBPwcW6M7bb9/P0q1Q/m20GRtcPBrdFn1Sk4R39A==", - "dev": true, - "dependencies": { - "axios": "^0.27.2", - "dotenv": "^16.0.2", - "fs-extra": "^11.1.0", - "get-port-please": "^3.0.1", - "minimist": "^1.2.7", - "winston": "^3.8.1" - }, - "bin": { - "screeps-grafana-go_carbon": "bin/setup.js" - } - }, - "node_modules/screeps-grafana-go_carbon/node_modules/axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "dev": true, - "dependencies": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" - } - }, - "node_modules/screeps-grafana-go_carbon/node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/screeps-grafana-go_carbon/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/screeps-grafana-go_carbon/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/screeps-jest": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/screeps-jest/-/screeps-jest-2.0.2.tgz", - "integrity": "sha512-2jVH1fKX2U4SQBbbGe5rF5lUGtsE7AcsteV7+L4//WngXl5z16nv7DyHq0yNFrxuaRYZUUBLOaSE4gjr7h6H0A==", - "dev": true, - "peerDependencies": { - "jest": ">=27" - } - }, - "node_modules/screeps-performance-server": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.12.1.tgz", - "integrity": "sha512-alq0Ek6OQJnTLIwgO0b6TwjrinQB1nEviOTP+aNz8iuIq4rYAKLyi4+H9JzyoXjt1V2faLTSCp/VKzKk400VAQ==", - "dev": true, - "dependencies": { - "@octokit/core": "^4.2.0", - "discord.js": "^14.9.0", - "dotenv": "^16.0.3", - "get-port": "^6.1.2", - "json-beautify": "^1.1.1", - "lodash": "^4.17.21", - "minimist": "^1.2.7", - "ncp": "^2.0.0", - "node-fetch": "^2.6.7", - "node-powershell": "^5.0.1", - "pastebin-api": "^5.1.6", - "q": "^1.5.1", - "screeps-api": "1.16.0", - "screeps-db-importer": "latest", - "winston": "^3.8.2" - }, - "bin": { - "screeps-performance-server": "bin/setup.js" - } - }, - "node_modules/screeps-performance-server/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, - "engines": { - "node": ">= 14" - } - }, - "node_modules/screeps-performance-server/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, - "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/screeps-performance-server/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, - "dependencies": { - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/screeps-performance-server/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, - "dependencies": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^9.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/screeps-performance-server/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, - "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/screeps-performance-server/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, - "dependencies": { - "@octokit/types": "^9.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/screeps-performance-server/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, - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/screeps-performance-server/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/screeps-performance-server/node_modules/lodash": { - "version": "4.17.21", - "dev": true, - "license": "MIT" - }, - "node_modules/screeps-viz": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/screeps-viz/-/screeps-viz-2.1.3.tgz", - "integrity": "sha512-c96u2MTtrXzjv4O1K89J1EWgapbP0C9xqx2gCOZ5uLTBDr1RaAuIQZkOquqHA8ELhSNd9xr9X7Qt5vCOMMknSw==", - "dev": true - }, - "node_modules/semantic-release": { - "version": "21.0.7", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-21.0.7.tgz", - "integrity": "sha512-peRDSXN+hF8EFSKzze90ff/EnAmgITHQ/a3SZpRV3479ny0BIZWEJ33uX6/GlOSKdaSxo9hVRDyv2/u2MuF+Bw==", - "dependencies": { - "@semantic-release/commit-analyzer": "^10.0.0", - "@semantic-release/error": "^4.0.0", - "@semantic-release/github": "^9.0.0", - "@semantic-release/npm": "^10.0.2", - "@semantic-release/release-notes-generator": "^11.0.0", - "aggregate-error": "^4.0.1", - "cosmiconfig": "^8.0.0", - "debug": "^4.0.0", - "env-ci": "^9.0.0", - "execa": "^7.0.0", - "figures": "^5.0.0", - "find-versions": "^5.1.0", - "get-stream": "^6.0.0", - "git-log-parser": "^1.2.0", - "hook-std": "^3.0.0", - "hosted-git-info": "^6.0.0", - "lodash-es": "^4.17.21", - "marked": "^5.0.0", - "marked-terminal": "^5.1.1", - "micromatch": "^4.0.2", - "p-each-series": "^3.0.0", - "p-reduce": "^3.0.0", - "read-pkg-up": "^10.0.0", - "resolve-from": "^5.0.0", - "semver": "^7.3.2", - "semver-diff": "^4.0.0", - "signale": "^1.2.1", - "yargs": "^17.5.1" - }, - "bin": { - "semantic-release": "bin/semantic-release.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/semantic-release/node_modules/@semantic-release/commit-analyzer": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-10.0.1.tgz", - "integrity": "sha512-9ejHzTAijYs9z246sY/dKBatmOPcd0GQ7lH4MgLCkv1q4GCiDZRkjHJkaQZXZVaK7mJybS+sH3Ng6G8i3pYMGQ==", - "dependencies": { - "conventional-changelog-angular": "^6.0.0", - "conventional-commits-filter": "^3.0.0", - "conventional-commits-parser": "^4.0.0", - "debug": "^4.0.0", - "import-from": "^4.0.0", - "lodash-es": "^4.17.21", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "semantic-release": ">=20.1.0" - } - }, - "node_modules/semantic-release/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/semantic-release/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/semantic-release/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/semantic-release/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/semver-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", - "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semver-diff/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-regex": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", - "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/send/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 - }, - "node_modules/send/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/shallow-copy": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", - "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==", - "dev": true - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "license": "ISC" - }, - "node_modules/signale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", - "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", - "dependencies": { - "chalk": "^2.3.2", - "figures": "^2.0.0", - "pkg-conf": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/signale/node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "dev": true, - "license": "MIT" - }, - "node_modules/sinon": { - "version": "6.3.5", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^1.0.2", - "@sinonjs/formatio": "^3.0.0", - "@sinonjs/samsam": "^2.1.2", - "diff": "^3.5.0", - "lodash.get": "^4.4.2", - "lolex": "^2.7.5", - "nise": "^1.4.5", - "supports-color": "^5.5.0", - "type-detect": "^4.0.8" - } - }, - "node_modules/sinon-chai": { - "version": "3.7.0", - "dev": true, - "license": "(BSD-2-Clause OR WTFPL)", - "peerDependencies": { - "chai": "^4.0.0", - "sinon": ">=4.0.0" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/slash": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead", - "dev": true - }, - "node_modules/spawn-error-forwarder": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", - "integrity": "sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==" - }, - "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==", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.11", - "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==", - "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==", - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/stack-trace": { - "version": "0.0.10", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/stack-utils": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/static-eval": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz", - "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==", - "dev": true, - "dependencies": { - "escodegen": "^1.11.1" - } - }, - "node_modules/static-eval/node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/static-module": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/static-module/-/static-module-3.0.4.tgz", - "integrity": "sha512-gb0v0rrgpBkifXCa3yZXxqVmXDVE+ETXj6YlC/jt5VzOnGXR2C15+++eXuMDUYsePnbhf+lwW0pE1UXyOLtGCw==", - "dev": true, - "dependencies": { - "acorn-node": "^1.3.0", - "concat-stream": "~1.6.0", - "convert-source-map": "^1.5.1", - "duplexer2": "~0.1.4", - "escodegen": "^1.11.1", - "has": "^1.0.1", - "magic-string": "0.25.1", - "merge-source-map": "1.0.4", - "object-inspect": "^1.6.0", - "readable-stream": "~2.3.3", - "scope-analyzer": "^2.0.1", - "shallow-copy": "~0.0.1", - "static-eval": "^2.0.5", - "through2": "~2.0.3" - } - }, - "node_modules/static-module/node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/static-module/node_modules/magic-string": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz", - "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.1" - } - }, - "node_modules/static-module/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, - "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/static-module/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/static-module/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "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==", - "dev": true, - "dependencies": { - "duplexer": "~0.1.1", - "through": "~2.3.4" - } - }, - "node_modules/stream-combiner2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", - "dependencies": { - "duplexer2": "~0.1.0", - "readable-stream": "^2.0.2" - } - }, - "node_modules/stream-combiner2/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==", - "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/stream-combiner2/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==" - }, - "node_modules/stream-combiner2/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==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-template": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string-template/-/string-template-1.0.0.tgz", - "integrity": "sha512-SLqR3GBUXuoPP5MmYtD7ompvXiG87QjT6lzOszyXjTM86Uu7At7vNnt2xgyTLq5o9T4IxTYFyGxcULqpsmsfdg==", - "dev": true - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-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, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/stringz": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/stringz/-/stringz-2.1.0.tgz", - "integrity": "sha512-KlywLT+MZ+v0IRepfMxRtnSvDCMc3nR1qqCs3m/qIbSOWkNZYT8XHQA31rS3TnKp0c5xjZu3M4GY/2aRKSi/6A==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-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, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "dev": true, - "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==", - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "dev": true - }, - "node_modules/stylis": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", - "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" - }, - "node_modules/supports-color": { - "version": "5.5.0", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "dev": true, - "license": "MIT" - }, - "node_modules/temp-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", - "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", - "engines": { - "node": ">=14.16" - } - }, - "node_modules/tempy": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz", - "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==", - "dependencies": { - "is-stream": "^3.0.0", - "temp-dir": "^3.0.0", - "type-fest": "^2.12.2", - "unique-string": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tempy/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tempy/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link/node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link/node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "5.14.2", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/text-hex": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/throat": { - "version": "6.0.1", - "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==" - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "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==", - "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==" - }, - "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==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/tiny-inflate": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", - "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", - "dev": true - }, - "node_modules/tmpl": { - "version": "1.0.5", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/traverse": { - "version": "0.6.7", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", - "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/trim-buffer": { - "version": "5.0.0", - "dev": true, - "license": "MIT" - }, - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/triple-beam": { - "version": "1.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ts-dedent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", - "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", - "engines": { - "node": ">=6.10" - } - }, - "node_modules/ts-jest": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.5.tgz", - "integrity": "sha512-lIJApzfTaSSbtlksfFNHkWOzLJuuSm4faFAfo5kvzOiRAuoN4/eKxVJ2zEAho8aecE04qX6K1pAzfH5QHL1/8w==", - "dev": true, - "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", - "json5": "2.x", - "lodash": "4.x", - "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@types/jest": "^27.0.0", - "babel-jest": ">=27.0.0 <28", - "jest": "^27.0.0", - "typescript": ">=3.8 <5.0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@types/jest": { - "optional": true - }, - "babel-jest": { - "optional": true - } - } - }, - "node_modules/ts-jest/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/ts-jest/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-mixer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz", - "integrity": "sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==", - "dev": true - }, - "node_modules/ts-morph": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-18.0.0.tgz", - "integrity": "sha512-Kg5u0mk19PIIe4islUI/HWRvm9bC1lHejK4S0oh1zaZ77TMZAEmQC0sHQYiu2RgCQFZKXz1fMVi/7nOOeirznA==", - "dev": true, - "dependencies": { - "@ts-morph/common": "~0.19.0", - "code-block-writer": "^12.0.0" - } - }, - "node_modules/ts-node": { - "version": "10.8.1", - "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/acorn-walk": { - "version": "8.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "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 - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", - "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "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": { - "version": "5.22.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz", - "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==", - "dev": true, - "dependencies": { - "busboy": "^1.6.0" - }, - "engines": { - "node": ">=14.0" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-properties": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", - "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", - "dev": true, - "dependencies": { - "base64-js": "^1.3.0", - "unicode-trie": "^2.0.0" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-trie": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", - "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", - "dev": true, - "dependencies": { - "pako": "^0.2.5", - "tiny-inflate": "^1.0.0" - } - }, - "node_modules/unique-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", - "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", - "dependencies": { - "crypto-random-string": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" - }, - "node_modules/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unix-crypt-td-js": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz", - "integrity": "sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw==", - "dev": true - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "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" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-join": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", - "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/utf-8-validate": { - "version": "5.0.9", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/uvu": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", - "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", - "dependencies": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3" - }, - "bin": { - "uvu": "bin.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/uvu/node_modules/diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/uvu/node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/v8-to-istanbul": { - "version": "8.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.4", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "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==", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "makeerror": "1.0.12" - } - }, - "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, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/web-worker": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", - "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=10.4" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/whatwg-url/node_modules/lodash": { - "version": "4.17.21", - "dev": true, - "license": "MIT" - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/windows-release": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", - "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==", - "dev": true, - "dependencies": { - "execa": "^4.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/windows-release/node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/windows-release/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/windows-release/node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/windows-release/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/windows-release/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/windows-release/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/winston": { - "version": "3.8.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@colors/colors": "1.5.0", - "@dabh/diagnostics": "^2.0.2", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.4.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.5.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/winston-transport": { - "version": "4.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "logform": "^2.3.2", - "readable-stream": "^3.6.0", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 6.4.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "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==" - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-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, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.8", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/xmldoc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.3.0.tgz", - "integrity": "sha512-y7IRWW6PvEnYQZNZFMRLNJw+p3pezM4nKYPfr15g4OOW9i8VpeydycFuipE2297OvZnh3jSb2pxOt9QpkZUVng==", - "dev": true, - "dependencies": { - "sax": "^1.2.4" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/yamljs": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "glob": "^7.0.5" - }, - "bin": { - "json2yaml": "bin/json2yaml", - "yaml2json": "bin/yaml2json" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "engines": { - "node": ">=10" - } - }, - "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==", - "engines": { - "node": ">=12" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@aduh95/viz.js": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@aduh95/viz.js/-/viz.js-3.4.0.tgz", - "integrity": "sha512-KI2nVf9JdwWCXqK6RVf+9/096G7VWN4Z84mnynlyZKao2xQENW8WNEjLmvdlxS5X8PNWXFC1zqwm7tveOXw/4A==", - "dev": true - }, - "@ampproject/remapping": { - "version": "2.2.0", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@angular-devkit/core": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.6.tgz", - "integrity": "sha512-3OjtrPWvsqVkMBwqPeE65ccCIw56FooNpVVAJ0XwhVQv5mA81pmbCzU7JsR6U449ZT7O4cQblzZMQvWvx74HCg==", - "dev": true, - "requires": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "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 - }, - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - } - } - }, - "@angular-devkit/schematics": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.6.tgz", - "integrity": "sha512-KA8P78gaS76HMHGBOM8JHJXWLOxCIShYVB2Un/Cu6z3jVODvXq+ILZUc1Y0RsAce/vsl2wf8qpoh5Lku9KJHUQ==", - "dev": true, - "requires": { - "@angular-devkit/core": "16.1.6", - "jsonc-parser": "3.2.0", - "magic-string": "0.30.0", - "ora": "5.4.1", - "rxjs": "7.8.1" - }, - "dependencies": { - "magic-string": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", - "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", - "dev": true, - "requires": { - "@jridgewell/sourcemap-codec": "^1.4.13" - } - } - } - }, - "@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", - "requires": { - "@babel/highlight": "^7.22.5" - } - }, - "@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", - "dev": true - }, - "@babel/core": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", - "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.8", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", - "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", - "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", - "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz", - "integrity": "sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", - "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", - "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", - "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.9" - } - }, - "@babel/helper-replace-supers": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", - "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5" - } - }, - "@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==" - }, - "@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.9.tgz", - "integrity": "sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helpers": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", - "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", - "dev": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5" - } - }, - "@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", - "requires": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", - "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", - "dev": true - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "requires": {} - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.17.12", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-async-generator-functions": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz", - "integrity": "sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", - "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-class-static-block": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", - "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", - "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", - "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-dynamic-import": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", - "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-export-namespace-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", - "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-json-strings": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", - "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", - "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", - "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", - "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", - "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-transform-numeric-separator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", - "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-transform-object-rest-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", - "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - } - }, - "@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", - "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-transform-optional-chaining": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz", - "integrity": "sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-private-property-in-object": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", - "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", - "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.1" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", - "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/preset-env": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.9.tgz", - "integrity": "sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.7", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.5", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.6", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.5", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.6", - "@babel/plugin-transform-parameters": "^7.22.5", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.5", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.5", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.4", - "babel-plugin-polyfill-corejs3": "^0.8.2", - "babel-plugin-polyfill-regenerator": "^0.5.1", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - } - }, - "@babel/preset-modules": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", - "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "@babel/runtime": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", - "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.11" - } - }, - "@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/traverse": { - "version": "7.22.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", - "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.7", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "dev": true - }, - "@braintree/sanitize-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz", - "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==" - }, - "@colors/colors": { - "version": "1.5.0", - "devOptional": true - }, - "@compodoc/compodoc": { - "version": "1.1.21", - "resolved": "https://registry.npmjs.org/@compodoc/compodoc/-/compodoc-1.1.21.tgz", - "integrity": "sha512-/FDlwRgKzmkGuorDnURuCzoGY6rZ0KY7Mj5/PwnEjMs0y1CRRPHBJC9I0yVIjn8j8gxVy8PPc6dna0lY1MWwhg==", - "dev": true, - "requires": { - "@angular-devkit/schematics": "^16.0.1", - "@babel/core": "^7.21.8", - "@babel/preset-env": "^7.21.5", - "@compodoc/live-server": "^1.2.3", - "@compodoc/ngd-transformer": "^2.1.3", - "chalk": "4.1.2", - "cheerio": "^1.0.0-rc.12", - "chokidar": "^3.5.3", - "colors": "1.4.0", - "commander": "^10.0.1", - "cosmiconfig": "^8.1.3", - "decache": "^4.6.1", - "fancy-log": "^2.0.0", - "fast-glob": "^3.2.12", - "fs-extra": "^11.1.1", - "glob": "^10.2.4", - "handlebars": "^4.7.7", - "html-entities": "^2.3.3", - "i18next": "^22.4.15", - "inside": "^1.0.0", - "json5": "^2.2.3", - "lodash": "^4.17.21", - "loglevel": "^1.8.1", - "loglevel-plugin-prefix": "^0.8.4", - "lunr": "^2.3.9", - "marked": "4.3.0", - "minimist": "^1.2.8", - "opencollective-postinstall": "^2.0.3", - "os-name": "4.0.1", - "pdfjs-dist": "2.12.313", - "pdfmake": "^0.2.7", - "semver": "^7.5.1", - "traverse": "^0.6.7", - "ts-morph": "^18.0.0", - "uuid": "^9.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true - }, - "fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "glob": { - "version": "10.3.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", - "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", - "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - } - }, - "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 - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", - "dev": true - }, - "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@compodoc/live-server": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@compodoc/live-server/-/live-server-1.2.3.tgz", - "integrity": "sha512-hDmntVCyjjaxuJzPzBx68orNZ7TW4BtHWMnXlIVn5dqhK7vuFF/11hspO1cMmc+2QTYgqde1TBcb3127S7Zrow==", - "dev": true, - "requires": { - "chokidar": "^3.5.2", - "colors": "1.4.0", - "connect": "^3.7.0", - "cors": "latest", - "event-stream": "4.0.1", - "faye-websocket": "0.11.x", - "http-auth": "4.1.9", - "http-auth-connect": "^1.0.5", - "morgan": "^1.10.0", - "object-assign": "latest", - "open": "8.4.0", - "proxy-middleware": "latest", - "send": "latest", - "serve-index": "^1.9.1" - } - }, - "@compodoc/ngd-core": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@compodoc/ngd-core/-/ngd-core-2.1.1.tgz", - "integrity": "sha512-Z+wE6wWZYVnudRYg6qunDlyh3Orw39Ib66Gvrz5kX5u7So+iu3tr6sQJdqH6yGS3hAjig5avlfhWLlgsb6/x1Q==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.3", - "fancy-log": "^2.0.0", - "typescript": "^5.0.4" - }, - "dependencies": { - "typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "dev": true - } - } - }, - "@compodoc/ngd-transformer": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@compodoc/ngd-transformer/-/ngd-transformer-2.1.3.tgz", - "integrity": "sha512-oWxJza7CpWR8/FeWYfE6j+jgncnGBsTWnZLt5rD2GUpsGSQTuGrsFPnmbbaVLgRS5QIVWBJYke7QFBr/7qVMWg==", - "dev": true, - "requires": { - "@aduh95/viz.js": "3.4.0", - "@compodoc/ngd-core": "~2.1.1", - "dot": "^2.0.0-beta.1", - "fs-extra": "^11.1.1" - }, - "dependencies": { - "fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } - } - }, - "@dabh/diagnostics": { - "version": "2.0.3", - "dev": true, - "requires": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, - "@discordjs/builders": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.5.tgz", - "integrity": "sha512-SdweyCs/+mHj+PNhGLLle7RrRFX9ZAhzynHahMCLqp5Zeq7np7XC6/mgzHc79QoVlQ1zZtOkTTiJpOZu5V8Ufg==", - "dev": true, - "requires": { - "@discordjs/formatters": "^0.3.2", - "@discordjs/util": "^1.0.1", - "@sapphire/shapeshift": "^3.9.2", - "discord-api-types": "0.37.50", - "fast-deep-equal": "^3.1.3", - "ts-mixer": "^6.0.3", - "tslib": "^2.6.1" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - } - } - }, - "@discordjs/collection": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", - "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", - "dev": true - }, - "@discordjs/formatters": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.2.tgz", - "integrity": "sha512-lE++JZK8LSSDRM5nLjhuvWhGuKiXqu+JZ/DsOR89DVVia3z9fdCJVcHF2W/1Zxgq0re7kCzmAJlCMMX3tetKpA==", - "dev": true, - "requires": { - "discord-api-types": "0.37.50" - } - }, - "@discordjs/rest": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.0.1.tgz", - "integrity": "sha512-/eWAdDRvwX/rIE2tuQUmKaxmWeHmGealttIzGzlYfI4+a7y9b6ZoMp8BG/jaohs8D8iEnCNYaZiOFLVFLQb8Zg==", - "dev": true, - "requires": { - "@discordjs/collection": "^1.5.3", - "@discordjs/util": "^1.0.1", - "@sapphire/async-queue": "^1.5.0", - "@sapphire/snowflake": "^3.5.1", - "@vladfrangu/async_event_emitter": "^2.2.2", - "discord-api-types": "0.37.50", - "magic-bytes.js": "^1.0.15", - "tslib": "^2.6.1", - "undici": "5.22.1" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - } - } - }, - "@discordjs/util": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.0.1.tgz", - "integrity": "sha512-d0N2yCxB8r4bn00/hvFZwM7goDcUhtViC5un4hPj73Ba4yrChLSJD8fy7Ps5jpTLg1fE9n4K0xBLc1y9WGwSsA==", - "dev": true - }, - "@discordjs/ws": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.0.1.tgz", - "integrity": "sha512-avvAolBqN3yrSvdBPcJ/0j2g42ABzrv3PEL76e3YTp2WYMGH7cuspkjfSyNWaqYl1J+669dlLp+YFMxSVQyS5g==", - "dev": true, - "requires": { - "@discordjs/collection": "^1.5.3", - "@discordjs/rest": "^2.0.1", - "@discordjs/util": "^1.0.1", - "@sapphire/async-queue": "^1.5.0", - "@types/ws": "^8.5.5", - "@vladfrangu/async_event_emitter": "^2.2.2", - "discord-api-types": "0.37.50", - "tslib": "^2.6.1", - "ws": "^8.13.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "ws": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", - "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", - "dev": true, - "requires": {} - } - } - }, - "@eslint/eslintrc": { - "version": "0.4.3", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "dev": true - }, - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "espree": { - "version": "7.3.1", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - } - }, - "globals": { - "version": "13.15.0", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "ms": { - "version": "2.1.2", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "dev": true - } - } - }, - "@foliojs-fork/fontkit": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@foliojs-fork/fontkit/-/fontkit-1.9.1.tgz", - "integrity": "sha512-U589voc2/ROnvx1CyH9aNzOQWJp127JGU1QAylXGQ7LoEAF6hMmahZLQ4eqAcgHUw+uyW4PjtCItq9qudPkK3A==", - "dev": true, - "requires": { - "@foliojs-fork/restructure": "^2.0.2", - "brfs": "^2.0.0", - "brotli": "^1.2.0", - "browserify-optional": "^1.0.1", - "clone": "^1.0.4", - "deep-equal": "^1.0.0", - "dfa": "^1.2.0", - "tiny-inflate": "^1.0.2", - "unicode-properties": "^1.2.2", - "unicode-trie": "^2.0.0" - } - }, - "@foliojs-fork/linebreak": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@foliojs-fork/linebreak/-/linebreak-1.1.1.tgz", - "integrity": "sha512-pgY/+53GqGQI+mvDiyprvPWgkTlVBS8cxqee03ejm6gKAQNsR1tCYCIvN9FHy7otZajzMqCgPOgC4cHdt4JPig==", - "dev": true, - "requires": { - "base64-js": "1.3.1", - "brfs": "^2.0.2", - "unicode-trie": "^2.0.0" - }, - "dependencies": { - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", - "dev": true - } - } - }, - "@foliojs-fork/pdfkit": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@foliojs-fork/pdfkit/-/pdfkit-0.13.0.tgz", - "integrity": "sha512-YXeG1fml9k97YNC9K8e292Pj2JzGt9uOIiBFuQFxHsdQ45BlxW+JU3RQK6JAvXU7kjhjP8rCcYvpk36JLD33sQ==", - "dev": true, - "requires": { - "@foliojs-fork/fontkit": "^1.9.1", - "@foliojs-fork/linebreak": "^1.1.1", - "crypto-js": "^4.0.0", - "png-js": "^1.0.0" - } - }, - "@foliojs-fork/restructure": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@foliojs-fork/restructure/-/restructure-2.0.2.tgz", - "integrity": "sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA==", - "dev": true - }, - "@humanwhocodes/config-array": { - "version": "0.5.0", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "dev": true - } - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "dev": true - }, - "@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, - "requires": { - "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" - }, - "dependencies": { - "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 - }, - "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 - }, - "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 - }, - "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, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "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, - "requires": { - "ansi-regex": "^6.0.1" - } - }, - "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, - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - } - } - } - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "dev": true - }, - "resolve-from": { - "version": "5.0.0", - "dev": true - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "dev": true - }, - "@javascript-obfuscator/escodegen": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@javascript-obfuscator/escodegen/-/escodegen-2.3.0.tgz", - "integrity": "sha512-QVXwMIKqYMl3KwtTirYIA6gOCiJ0ZDtptXqAv/8KWLG9uQU2fZqTVy7a/A5RvcoZhbDoFfveTxuGxJ5ibzQtkw==", - "dev": true, - "requires": { - "@javascript-obfuscator/estraverse": "^5.3.0", - "esprima": "^4.0.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "@javascript-obfuscator/estraverse": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@javascript-obfuscator/estraverse/-/estraverse-5.4.0.tgz", - "integrity": "sha512-CZFX7UZVN9VopGbjTx4UXaXsi9ewoM1buL0kY7j1ftYdSs7p2spv9opxFjHlQ/QGTgh4UqufYqJJ0WKLml7b6w==", - "dev": true - }, - "@jest/console": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/core": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-escapes": { - "version": "4.3.2", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-fest": { - "version": "0.21.3", - "dev": true - } - } - }, - "@jest/environment": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1" - } - }, - "@jest/fake-timers": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - } - }, - "@jest/globals": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" - } - }, - "@jest/reporters": { - "version": "27.5.1", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/source-map": { - "version": "27.5.1", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/test-result": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" - } - }, - "@jest/transform": { - "version": "27.5.1", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/types": { - "version": "27.5.1", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.1", - "dev": true - }, - "@jridgewell/source-map": { - "version": "0.3.2", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@octokit/auth-token": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", - "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==" - }, - "@octokit/core": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.0.tgz", - "integrity": "sha512-YbAtMWIrbZ9FCXbLwT9wWB8TyLjq9mxpKdgB3dUNxQcIVTf9hJ70gRPwAcqGZdY6WdJPZ0I7jLaaNDCiloGN2A==", - "requires": { - "@octokit/auth-token": "^4.0.0", - "@octokit/graphql": "^7.0.0", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/endpoint": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.0.tgz", - "integrity": "sha512-szrQhiqJ88gghWY2Htt8MqUDO6++E/EIXqJ2ZEp5ma3uGS46o7LZAzSLt49myB7rT+Hfw5Y6gO3LmOxGzHijAQ==", - "requires": { - "@octokit/types": "^11.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "dependencies": { - "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==" - } - } - }, - "@octokit/graphql": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.1.tgz", - "integrity": "sha512-T5S3oZ1JOE58gom6MIcrgwZXzTaxRnxBso58xhozxHpOqSTgDS6YNeEUvZ/kRvXgPrRz/KHnZhtb7jUMRi9E6w==", - "requires": { - "@octokit/request": "^8.0.1", - "@octokit/types": "^11.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/openapi-types": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", - "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" - }, - "@octokit/plugin-paginate-rest": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-8.0.0.tgz", - "integrity": "sha512-2xZ+baZWUg+qudVXnnvXz7qfrTmDeYPCzangBVq/1gXxii/OiS//4shJp9dnCCvj1x+JAm9ji1Egwm1BA47lPQ==", - "requires": { - "@octokit/types": "^11.0.0" - } - }, - "@octokit/plugin-retry": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-6.0.0.tgz", - "integrity": "sha512-a1/A4A+PB1QoAHQfLJxGHhLfSAT03bR1jJz3GgQJZvty2ozawFWs93MiBQXO7SL2YbO7CIq0Goj4qLOBj8JeMQ==", - "requires": { - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0", - "bottleneck": "^2.15.3" - } - }, - "@octokit/plugin-throttling": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-7.0.0.tgz", - "integrity": "sha512-KL2k/d0uANc8XqP5S64YcNFCudR3F5AaKO39XWdUtlJIjT9Ni79ekWJ6Kj5xvAw87udkOMEPcVf9xEge2+ahew==", - "requires": { - "@octokit/types": "^11.0.0", - "bottleneck": "^2.15.3" - } - }, - "@octokit/request": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.1.1.tgz", - "integrity": "sha512-8N+tdUz4aCqQmXl8FpHYfKG9GelDFd7XGVzyN8rc6WxVlYcfpHECnuRkgquzz+WzvHTK62co5di8gSXnzASZPQ==", - "requires": { - "@octokit/endpoint": "^9.0.0", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.1.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "dependencies": { - "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==" - } - } - }, - "@octokit/request-error": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.0.tgz", - "integrity": "sha512-1ue0DH0Lif5iEqT52+Rf/hf0RmGO9NWFjrzmrkArpG9trFfDM/efx00BJHdLGuro4BR/gECxCU2Twf5OKrRFsQ==", - "requires": { - "@octokit/types": "^11.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "@octokit/types": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-11.1.0.tgz", - "integrity": "sha512-Fz0+7GyLm/bHt8fwEqgvRBWwIV1S6wRRyq+V6exRKLVWaKGsuy6H9QFYeBVDV7rK6fO3XwHgQOPxv+cLj2zpXQ==", - "requires": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "@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, - "optional": true - }, - "@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==" - }, - "@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "requires": { - "graceful-fs": "4.2.10" - } - }, - "@pnpm/npm-conf": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", - "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", - "requires": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - } - }, - "@rollup/plugin-commonjs": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-20.0.0.tgz", - "integrity": "sha512-5K0g5W2Ol8hAcTHqcTBHiA7M58tfmYi1o9KxeJuuRNpGaTa5iLjcyemBitCBcKXaHamOBBEH2dGom6v6Unmqjg==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" - } - }, - "@rollup/plugin-node-resolve": { - "version": "13.3.0", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.1.0", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - } - }, - "@rollup/pluginutils": { - "version": "3.1.0", - "dev": true, - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "dependencies": { - "estree-walker": { - "version": "1.0.1", - "dev": true - } - } - }, - "@sapphire/async-queue": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", - "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==", - "dev": true - }, - "@sapphire/shapeshift": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.2.tgz", - "integrity": "sha512-YRbCXWy969oGIdqR/wha62eX8GNHsvyYi0Rfd4rNW6tSVVa8p0ELiMEuOH/k8rgtvRoM+EMV7Csqz77YdwiDpA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3", - "lodash": "^4.17.21" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - } - } - }, - "@sapphire/snowflake": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz", - "integrity": "sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==", - "dev": true - }, - "@semantic-release/changelog": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@semantic-release/changelog/-/changelog-6.0.3.tgz", - "integrity": "sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==", - "dev": true, - "requires": { - "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", - "fs-extra": "^11.0.0", - "lodash": "^4.17.4" - }, - "dependencies": { - "@semantic-release/error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", - "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", - "dev": true - }, - "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, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "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 - }, - "fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "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 - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@semantic-release/commit-analyzer": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz", - "integrity": "sha512-E+dr6L+xIHZkX4zNMe6Rnwg4YQrWNXK+rNsvwOPpdFppvZO1olE2fIgWhv89TkQErygevbjsZFSIxp+u6w2e5g==", - "dev": true, - "requires": { - "conventional-changelog-angular": "^5.0.0", - "conventional-commits-filter": "^2.0.0", - "conventional-commits-parser": "^3.2.3", - "debug": "^4.0.0", - "import-from": "^4.0.0", - "lodash": "^4.17.4", - "micromatch": "^4.0.2" - }, - "dependencies": { - "conventional-changelog-angular": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", - "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", - "dev": true, - "requires": { - "compare-func": "^2.0.0", - "q": "^1.5.1" - } - }, - "conventional-commits-filter": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", - "dev": true, - "requires": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" - } - }, - "conventional-commits-parser": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", - "dev": true, - "requires": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "requires": { - "readable-stream": "3" - } - } - } - }, - "@semantic-release/error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", - "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==" - }, - "@semantic-release/git": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@semantic-release/git/-/git-10.0.1.tgz", - "integrity": "sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==", - "dev": true, - "requires": { - "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", - "debug": "^4.0.0", - "dir-glob": "^3.0.0", - "execa": "^5.0.0", - "lodash": "^4.17.4", - "micromatch": "^4.0.0", - "p-reduce": "^2.0.0" - }, - "dependencies": { - "@semantic-release/error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", - "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", - "dev": true - }, - "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, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "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 - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "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 - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "p-reduce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", - "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", - "dev": true - } - } - }, - "@semantic-release/github": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-9.0.4.tgz", - "integrity": "sha512-kQCGFAsBErvCR6hzNuzu63cj4erQN2krm9zQlg8vl4j5X0mL0d/Ras0wmL5Gkr1TuSS2lweME7M4J5zvtDDDSA==", - "requires": { - "@octokit/core": "^5.0.0", - "@octokit/plugin-paginate-rest": "^8.0.0", - "@octokit/plugin-retry": "^6.0.0", - "@octokit/plugin-throttling": "^7.0.0", - "@semantic-release/error": "^4.0.0", - "aggregate-error": "^4.0.1", - "debug": "^4.3.4", - "dir-glob": "^3.0.1", - "globby": "^13.1.4", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "issue-parser": "^6.0.0", - "lodash-es": "^4.17.21", - "mime": "^3.0.0", - "p-filter": "^3.0.0", - "url-join": "^5.0.0" - }, - "dependencies": { - "agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "requires": { - "debug": "^4.3.4" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "requires": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - } - }, - "http-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", - "requires": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - } - }, - "https-proxy-agent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz", - "integrity": "sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==", - "requires": { - "agent-base": "^7.0.2", - "debug": "4" - } - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" - } - } - }, - "@semantic-release/npm": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-10.0.4.tgz", - "integrity": "sha512-6R3timIQ7VoL2QWRkc9DG8v74RQtRp7UOe/2KbNaqwJ815qOibAv65bH3RtTEhs4axEaHoZf7HDgFs5opaZ9Jw==", - "requires": { - "@semantic-release/error": "^4.0.0", - "aggregate-error": "^4.0.1", - "execa": "^7.0.0", - "fs-extra": "^11.0.0", - "lodash-es": "^4.17.21", - "nerf-dart": "^1.0.0", - "normalize-url": "^8.0.0", - "npm": "^9.5.0", - "rc": "^1.2.8", - "read-pkg": "^8.0.0", - "registry-auth-token": "^5.0.0", - "semver": "^7.1.2", - "tempy": "^3.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "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==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - } - } - }, - "@semantic-release/release-notes-generator": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-11.0.4.tgz", - "integrity": "sha512-j0Znnwq9IdWTCGzqSlkLv4MpALTsVDZxcVESzJCNN8pK2BYQlYaKsdZ1Ea/+7RlppI3vjhEi33ZKmjSGY1FLKw==", - "requires": { - "conventional-changelog-angular": "^6.0.0", - "conventional-changelog-writer": "^6.0.0", - "conventional-commits-filter": "^3.0.0", - "conventional-commits-parser": "^4.0.0", - "debug": "^4.0.0", - "get-stream": "^7.0.0", - "import-from": "^4.0.0", - "into-stream": "^7.0.0", - "lodash-es": "^4.17.21", - "read-pkg-up": "^10.0.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "get-stream": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-7.0.1.tgz", - "integrity": "sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "@sinonjs/commons": { - "version": "1.8.3", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "8.1.0", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@sinonjs/formatio": { - "version": "3.2.2", - "dev": true, - "requires": { - "@sinonjs/commons": "^1", - "@sinonjs/samsam": "^3.1.0" - }, - "dependencies": { - "@sinonjs/samsam": { - "version": "3.3.3", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.3.0", - "array-from": "^2.1.1", - "lodash": "^4.17.15" - } - }, - "lodash": { - "version": "4.17.21", - "dev": true - } - } - }, - "@sinonjs/samsam": { - "version": "2.1.3", - "dev": true - }, - "@sinonjs/text-encoding": { - "version": "0.7.1", - "dev": true - }, - "@tootallnate/once": { - "version": "1.1.2", - "dev": true - }, - "@ts-morph/common": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.19.0.tgz", - "integrity": "sha512-Unz/WHmd4pGax91rdIKWi51wnVUW11QttMEPpBiBgIewnc9UQIX7UDLxr5vRlqeByXCwhkF6VabSsI0raWcyAQ==", - "dev": true, - "requires": { - "fast-glob": "^3.2.12", - "minimatch": "^7.4.3", - "mkdirp": "^2.1.6", - "path-browserify": "^1.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", - "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "mkdirp": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz", - "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==", - "dev": true - } - } - }, - "@tsconfig/node10": { - "version": "1.0.9", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.3", - "dev": true - }, - "@types/babel__core": { - "version": "7.1.19", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.17.1", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/chai": { - "version": "4.3.1", - "dev": true - }, - "@types/d3-scale": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.3.tgz", - "integrity": "sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==", - "requires": { - "@types/d3-time": "*" - } - }, - "@types/d3-scale-chromatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", - "integrity": "sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw==" - }, - "@types/d3-time": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz", - "integrity": "sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==" - }, - "@types/debug": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", - "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", - "requires": { - "@types/ms": "*" - } - }, - "@types/estree": { - "version": "0.0.39", - "dev": true - }, - "@types/fs-extra": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.2.tgz", - "integrity": "sha512-SvSrYXfWSc7R4eqnOzbQF4TZmfpNSM9FrSWLU3EUnWBuyZqNBOrv1B1JA3byUDPUl9z4Ab3jeZG2eDdySlgNMg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/graceful-fs": { - "version": "4.1.5", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.1.tgz", - "integrity": "sha512-HTLpVXHrY69556ozYkcq47TtQJXpcWAWfkoqz+ZGz2JnmZhzlRjprCIyFnetSy8gpDWwTTGBcRVv1J1I1vBrHw==", - "dev": true, - "requires": { - "jest-diff": "^27.0.0", - "pretty-format": "^27.0.0" - } - }, - "@types/json-schema": { - "version": "7.0.11", - "dev": true - }, - "@types/json5": { - "version": "0.0.29", - "dev": true - }, - "@types/lodash": { - "version": "3.10.2", - "dev": true - }, - "@types/mdast": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.12.tgz", - "integrity": "sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==", - "requires": { - "@types/unist": "^2" - } - }, - "@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 - }, - "@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" - }, - "@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" - }, - "@types/node": { - "version": "13.13.52", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" - }, - "@types/prettier": { - "version": "2.6.3", - "dev": true - }, - "@types/resolve": { - "version": "1.17.1", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/screeps": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@types/screeps/-/screeps-3.3.3.tgz", - "integrity": "sha512-r+ru4iNv8wNaNBWvk2gMXYpG8Ok1GJ8NVV9WBIHa5I+hz2QGttnAus+1whDMIzES8x3yK83Usz+gHqm8ehIW7w==", - "dev": true - }, - "@types/sinon": { - "version": "5.0.7", - "dev": true - }, - "@types/sinon-chai": { - "version": "3.2.8", - "dev": true, - "requires": { - "@types/chai": "*", - "@types/sinon": "*" - } - }, - "@types/stack-utils": { - "version": "2.0.1", - "dev": true - }, - "@types/unist": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.7.tgz", - "integrity": "sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==" - }, - "@types/validator": { - "version": "13.7.17", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.17.tgz", - "integrity": "sha512-aqayTNmeWrZcvnG2MG9eGYI6b7S5fl+yKgPs6bAjOTwPS316R5SxBGKvtSExfyoJU7pIeHJfsHI0Ji41RVMkvQ==", - "dev": true - }, - "@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "4.33.0", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "4.33.0", - "@typescript-eslint/scope-manager": "4.33.0", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ignore": { - "version": "5.2.0", - "dev": true - }, - "ms": { - "version": "2.1.2", - "dev": true - }, - "regexpp": { - "version": "3.2.0", - "dev": true - }, - "semver": { - "version": "7.3.7", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.33.0", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "dependencies": { - "eslint-scope": { - "version": "5.1.1", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "dev": true - } - } - }, - "@typescript-eslint/parser": { - "version": "4.33.0", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "dev": true - } - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.33.0", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" - } - }, - "@typescript-eslint/types": { - "version": "4.33.0", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "dev": true - }, - "semver": { - "version": "7.3.7", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "dev": true - } - } - }, - "@vladfrangu/async_event_emitter": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz", - "integrity": "sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==", - "dev": true - }, - "abab": { - "version": "2.0.6", - "dev": true - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "accumulate-stream": { - "version": "5.0.0", - "dev": true, - "requires": { - "bytes": "^3.1.0", - "ms": "^2.1.3" - }, - "dependencies": { - "ms": { - "version": "2.1.3", - "dev": true - } - } - }, - "acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true - }, - "acorn-globals": { - "version": "6.0.0", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "dev": true - } - } - }, - "acorn-jsx": { - "version": "5.3.2", - "dev": true, - "requires": {} - }, - "acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dev": true, - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - } - } - }, - "acorn-walk": { - "version": "7.2.0", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "dev": true, - "requires": { - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "dev": true - } - } - }, - "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==", - "requires": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "requires": { - "ajv": "^8.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "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 - } - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "dev": true, - "optional": true - }, - "ansi-colors": { - "version": "4.1.3", - "dev": true - }, - "ansi-escapes": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", - "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", - "requires": { - "type-fest": "^3.0.0" - }, - "dependencies": { - "type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==" - } - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "3.2.1", - "requires": { - "color-convert": "^1.9.0" - } - }, - "ansicolors": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", - "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==" - }, - "anymatch": { - "version": "3.1.2", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "apache-crypt": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.6.tgz", - "integrity": "sha512-072WetlM4blL8PREJVeY+WHiUh1R5VNt2HfceGS8aKqttPHcmqE5pkKuXPz/ULmJOFkc8Hw3kfKl6vy7Qka6DA==", - "dev": true, - "requires": { - "unix-crypt-td-js": "^1.1.4" - } - }, - "apache-md5": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.8.tgz", - "integrity": "sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA==", - "dev": true - }, - "arg": { - "version": "4.1.3", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "argv-formatter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", - "integrity": "sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==" - }, - "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 - }, - "array-from": { - "version": "2.1.1", - "dev": true - }, - "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==" - }, - "array-includes": { - "version": "3.1.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - } - }, - "array-union": { - "version": "2.1.0", - "dev": true - }, - "array.prototype.flat": { - "version": "1.3.0", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" - } - }, - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true - }, - "assert": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", - "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", - "dev": true, - "requires": { - "es6-object-assign": "^1.1.0", - "is-nan": "^1.2.1", - "object-is": "^1.0.1", - "util": "^0.12.0" - } - }, - "assertion-error": { - "version": "1.1.0", - "dev": true - }, - "ast-transform": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/ast-transform/-/ast-transform-0.0.0.tgz", - "integrity": "sha512-e/JfLiSoakfmL4wmTGPjv0HpTICVmxwXgYOB8x+mzozHL8v+dSfCbrJ8J8hJ0YBP0XcYu1aLZ6b/3TnxNK3P2A==", - "dev": true, - "requires": { - "escodegen": "~1.2.0", - "esprima": "~1.0.4", - "through": "~2.3.4" - }, - "dependencies": { - "escodegen": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.2.0.tgz", - "integrity": "sha512-yLy3Cc+zAC0WSmoT2fig3J87TpQ8UaZGx8ahCAs9FL8qNbyV7CVyPKS74DG4bsHiL5ew9sxdYx131OkBQMFnvA==", - "dev": true, - "requires": { - "esprima": "~1.0.4", - "estraverse": "~1.5.0", - "esutils": "~1.0.0", - "source-map": "~0.1.30" - } - }, - "esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", - "integrity": "sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA==", - "dev": true - }, - "estraverse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz", - "integrity": "sha512-FpCjJDfmo3vsc/1zKSeqR5k42tcIhxFIlvq+h9j0fO2q/h2uLKyweq7rYJ+0CoVvrGQOxIS5wyBrW/+vF58BUQ==", - "dev": true - }, - "esutils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz", - "integrity": "sha512-x/iYH53X3quDwfHRz4y8rn4XcEwwCJeWsul9pF1zldMbGtgOtMNBEOuYWwB1EQlK2LRa1fev3YAgym/RElp5Cg==", - "dev": true - }, - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", - "dev": true, - "optional": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "ast-types": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.7.8.tgz", - "integrity": "sha512-RIOpVnVlltB6PcBJ5BMLx+H+6JJ/zjDGU0t7f0L6c2M1dqcK92VQopLBlPQ9R80AVXelfqYgjcPLtHtDbNFg0Q==", - "dev": true - }, - "async": { - "version": "3.2.4", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "dev": true - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true - }, - "axios": { - "version": "0.21.4", - "dev": true, - "requires": { - "follow-redirects": "^1.14.0" - } - }, - "babel-jest": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "27.5.1", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", - "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.2", - "semver": "^6.3.1" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", - "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.2", - "core-js-compat": "^3.31.0" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", - "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.2" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "27.5.1", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^27.5.1", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "dev": true - }, - "base32768": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base32768/-/base32768-3.0.1.tgz", - "integrity": "sha512-dNGY49X0IKN1kDl9y/6sii1Vced+f+4uAqOeRz/PshjNdPwSD+ntnHOg/YgDbLSZetp94d/XxGdpfbXDKv8BVQ==" - }, - "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 - }, - "basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "bcryptjs": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", - "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", - "dev": true - }, - "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==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "bottleneck": { - "version": "2.19.5", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" - }, - "brace-expansion": { - "version": "1.1.11", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "requires": { - "fill-range": "^7.0.1" - } - }, - "brfs": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brfs/-/brfs-2.0.2.tgz", - "integrity": "sha512-IrFjVtwu4eTJZyu8w/V2gxU7iLTtcHih67sgEdzrhjLBMHp2uYefUBfdM4k2UvcuWMgV7PQDZHSLeNWnLFKWVQ==", - "dev": true, - "requires": { - "quote-stream": "^1.0.1", - "resolve": "^1.1.5", - "static-module": "^3.0.2", - "through2": "^2.0.0" - } - }, - "brotli": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", - "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", - "dev": true, - "requires": { - "base64-js": "^1.1.2" - } - }, - "browser-process-hrtime": { - "version": "1.0.0", - "dev": true - }, - "browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dev": true, - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", - "dev": true - } - } - }, - "browserify-optional": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-optional/-/browserify-optional-1.0.1.tgz", - "integrity": "sha512-VrhjbZ+Ba5mDiSYEuPelekQMfTbhcA2DhLk2VQWqdcCROWeFqlTcXZ7yfRkXCIl8E+g4gINJYJiRB7WEtfomAQ==", - "dev": true, - "requires": { - "ast-transform": "0.0.0", - "ast-types": "^0.7.0", - "browser-resolve": "^1.8.1" - } - }, - "browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - } - }, - "bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "requires": { - "fast-json-stable-stringify": "2.x" - } - }, - "bser": { - "version": "2.1.1", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-equal": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", - "dev": true - }, - "buffer-from": { - "version": "1.1.2", - "dev": true - }, - "bufferutil": { - "version": "4.0.6", - "dev": true, - "optional": true, - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "builtin-modules": { - "version": "3.3.0", - "dev": true - }, - "busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "requires": { - "streamsearch": "^1.1.0" - } - }, - "bytes": { - "version": "3.1.2", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==", - "dev": true - }, - "callsites": { - "version": "3.1.0" - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "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==", - "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - } - }, - "caniuse-lite": { - "version": "1.0.30001517", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz", - "integrity": "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==", - "dev": true - }, - "cardinal": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", - "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==", - "requires": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" - } - }, - "chai": { - "version": "4.3.6", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - } - }, - "chalk": { - "version": "2.4.2", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chance": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/chance/-/chance-1.1.9.tgz", - "integrity": "sha512-TfxnA/DcZXRTA4OekA2zL9GH8qscbbl6X0ZqU4tXhGveVY/mXWvEQLt5GwZcYXTEyEFflVtj+pG8nc8EwSm1RQ==", - "dev": true - }, - "char-regex": { - "version": "1.0.2", - "dev": true - }, - "character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==" - }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "dev": true - }, - "check-error": { - "version": "1.0.2", - "dev": true - }, - "cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "dev": true, - "requires": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "dependencies": { - "parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, - "requires": { - "entities": "^4.4.0" - } - } - } - }, - "cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - } - }, - "child-shell": { - "version": "5.0.0", - "dev": true, - "requires": { - "accumulate-stream": "^5.0.0", - "debug": "^4.3.2", - "kind-of": "^6.0.3", - "nanoid": "^3.1.30", - "p-queue": "6.6.2", - "p-timeout": "4.1.0", - "trim-buffer": "^5.0.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "dev": true - } - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "ci-info": { - "version": "3.3.2", - "dev": true - }, - "cjs-module-lexer": { - "version": "1.2.2", - "dev": true - }, - "class-validator": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.0.tgz", - "integrity": "sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==", - "dev": true, - "requires": { - "@types/validator": "^13.7.10", - "libphonenumber-js": "^1.10.14", - "validator": "^13.7.0" - } - }, - "clean-stack": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", - "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", - "requires": { - "escape-string-regexp": "5.0.0" - }, - "dependencies": { - "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==" - } - } - }, - "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, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", - "dev": true - }, - "cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - } - }, - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true - }, - "co": { - "version": "4.6.0", - "dev": true - }, - "code-block-writer": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-12.0.0.tgz", - "integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==", - "dev": true - }, - "collect-v8-coverage": { - "version": "1.0.1", - "dev": true - }, - "color": { - "version": "3.2.1", - "dev": true, - "requires": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - } - }, - "color-convert": { - "version": "1.9.3", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3" - }, - "color-string": { - "version": "1.9.1", - "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "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 - }, - "colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", - "dev": true - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, - "colorspace": { - "version": "1.1.4", - "dev": true, - "requires": { - "color": "^3.1.3", - "text-hex": "1.0.x" - } - }, - "combined-stream": { - "version": "1.0.8", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "dev": true - }, - "comment-parser": { - "version": "1.1.2", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "dev": true - }, - "compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", - "requires": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - } - }, - "concat-map": { - "version": "0.0.1", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - } - }, - "conventional-changelog-angular": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz", - "integrity": "sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==", - "requires": { - "compare-func": "^2.0.0" - } - }, - "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==", - "requires": { - "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" - }, - "dependencies": { - "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==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "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==", - "requires": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.1" - } - }, - "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==", - "requires": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.3.5", - "meow": "^8.1.2", - "split2": "^3.2.2" - } - }, - "convert-source-map": { - "version": "1.8.0", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "dev": true - } - } - }, - "core-js-compat": { - "version": "3.31.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.1.tgz", - "integrity": "sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA==", - "dev": true, - "requires": { - "browserslist": "^4.21.9" - } - }, - "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==" - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "cose-base": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", - "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", - "requires": { - "layout-base": "^1.0.0" - } - }, - "cosmiconfig": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", - "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", - "requires": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" - } - } - } - }, - "create-require": { - "version": "1.1.1", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "dev": true - }, - "crypto-js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", - "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==", - "dev": true - }, - "crypto-random-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", - "requires": { - "type-fest": "^1.0.1" - }, - "dependencies": { - "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==" - } - } - }, - "css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true - }, - "cssom": { - "version": "0.4.4", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "dev": true - } - } - }, - "cytoscape": { - "version": "3.25.0", - "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.25.0.tgz", - "integrity": "sha512-7MW3Iz57mCUo6JQCho6CmPBCbTlJr7LzyEtIkutG255HLVd4XuBg2I9BkTZLI/e4HoaOB/BiAzXuQybQ95+r9Q==", - "requires": { - "heap": "^0.2.6", - "lodash": "^4.17.21" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - } - } - }, - "cytoscape-cose-bilkent": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", - "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", - "requires": { - "cose-base": "^1.0.0" - } - }, - "cytoscape-fcose": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", - "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", - "requires": { - "cose-base": "^2.2.0" - }, - "dependencies": { - "cose-base": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", - "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", - "requires": { - "layout-base": "^2.0.0" - } - }, - "layout-base": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", - "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==" - } - } - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "d3": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", - "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==", - "requires": { - "d3-array": "3", - "d3-axis": "3", - "d3-brush": "3", - "d3-chord": "3", - "d3-color": "3", - "d3-contour": "4", - "d3-delaunay": "6", - "d3-dispatch": "3", - "d3-drag": "3", - "d3-dsv": "3", - "d3-ease": "3", - "d3-fetch": "3", - "d3-force": "3", - "d3-format": "3", - "d3-geo": "3", - "d3-hierarchy": "3", - "d3-interpolate": "3", - "d3-path": "3", - "d3-polygon": "3", - "d3-quadtree": "3", - "d3-random": "3", - "d3-scale": "4", - "d3-scale-chromatic": "3", - "d3-selection": "3", - "d3-shape": "3", - "d3-time": "3", - "d3-time-format": "4", - "d3-timer": "3", - "d3-transition": "3", - "d3-zoom": "3" - } - }, - "d3-array": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", - "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", - "requires": { - "internmap": "1 - 2" - } - }, - "d3-axis": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", - "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==" - }, - "d3-brush": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", - "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "3", - "d3-transition": "3" - } - }, - "d3-chord": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", - "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", - "requires": { - "d3-path": "1 - 3" - } - }, - "d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==" - }, - "d3-contour": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", - "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", - "requires": { - "d3-array": "^3.2.0" - } - }, - "d3-delaunay": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", - "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", - "requires": { - "delaunator": "5" - } - }, - "d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==" - }, - "d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - } - }, - "d3-dsv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", - "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", - "requires": { - "commander": "7", - "iconv-lite": "0.6", - "rw": "1" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - }, - "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==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/acorn": { + "version": "7.4.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@eslint/eslintrc/node_modules/espree": { + "version": "7.3.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@foliojs-fork/fontkit": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@foliojs-fork/fontkit/-/fontkit-1.9.1.tgz", + "integrity": "sha512-U589voc2/ROnvx1CyH9aNzOQWJp127JGU1QAylXGQ7LoEAF6hMmahZLQ4eqAcgHUw+uyW4PjtCItq9qudPkK3A==", + "dev": true, + "dependencies": { + "@foliojs-fork/restructure": "^2.0.2", + "brfs": "^2.0.0", + "brotli": "^1.2.0", + "browserify-optional": "^1.0.1", + "clone": "^1.0.4", + "deep-equal": "^1.0.0", + "dfa": "^1.2.0", + "tiny-inflate": "^1.0.2", + "unicode-properties": "^1.2.2", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/@foliojs-fork/linebreak": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@foliojs-fork/linebreak/-/linebreak-1.1.1.tgz", + "integrity": "sha512-pgY/+53GqGQI+mvDiyprvPWgkTlVBS8cxqee03ejm6gKAQNsR1tCYCIvN9FHy7otZajzMqCgPOgC4cHdt4JPig==", + "dev": true, + "dependencies": { + "base64-js": "1.3.1", + "brfs": "^2.0.2", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/@foliojs-fork/linebreak/node_modules/base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true + }, + "node_modules/@foliojs-fork/pdfkit": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@foliojs-fork/pdfkit/-/pdfkit-0.13.0.tgz", + "integrity": "sha512-YXeG1fml9k97YNC9K8e292Pj2JzGt9uOIiBFuQFxHsdQ45BlxW+JU3RQK6JAvXU7kjhjP8rCcYvpk36JLD33sQ==", + "dev": true, + "dependencies": { + "@foliojs-fork/fontkit": "^1.9.1", + "@foliojs-fork/linebreak": "^1.1.1", + "crypto-js": "^4.0.0", + "png-js": "^1.0.0" + } + }, + "node_modules/@foliojs-fork/restructure": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@foliojs-fork/restructure/-/restructure-2.0.2.tgz", + "integrity": "sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA==", + "dev": true + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "dev": true, + "license": "BSD-3-Clause" + }, + "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, + "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, + "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, + "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 + }, + "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, + "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, + "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, + "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/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-try": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@javascript-obfuscator/escodegen": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@javascript-obfuscator/escodegen/-/escodegen-2.3.0.tgz", + "integrity": "sha512-QVXwMIKqYMl3KwtTirYIA6gOCiJ0ZDtptXqAv/8KWLG9uQU2fZqTVy7a/A5RvcoZhbDoFfveTxuGxJ5ibzQtkw==", + "dev": true, + "dependencies": { + "@javascript-obfuscator/estraverse": "^5.3.0", + "esprima": "^4.0.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/@javascript-obfuscator/estraverse": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@javascript-obfuscator/estraverse/-/estraverse-5.4.0.tgz", + "integrity": "sha512-CZFX7UZVN9VopGbjTx4UXaXsi9ewoM1buL0kY7j1ftYdSs7p2spv9opxFjHlQ/QGTgh4UqufYqJJ0WKLml7b6w==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@jest/console": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "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/@jest/console/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/console/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/console/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/ansi-escapes": { + "version": "4.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "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/@jest/core/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/core/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/core/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@jest/core/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/type-fest": { + "version": "0.21.3", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@jest/environment": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "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/@jest/reporters/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/reporters/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/source-map": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "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/@jest/transform/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/transform/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/transform/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "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/@jest/types/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/types/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "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", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@octokit/auth-token": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", + "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/core": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.0.tgz", + "integrity": "sha512-YbAtMWIrbZ9FCXbLwT9wWB8TyLjq9mxpKdgB3dUNxQcIVTf9hJ70gRPwAcqGZdY6WdJPZ0I7jLaaNDCiloGN2A==", + "dependencies": { + "@octokit/auth-token": "^4.0.0", + "@octokit/graphql": "^7.0.0", + "@octokit/request": "^8.0.2", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^11.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/endpoint": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.0.tgz", + "integrity": "sha512-szrQhiqJ88gghWY2Htt8MqUDO6++E/EIXqJ2ZEp5ma3uGS46o7LZAzSLt49myB7rT+Hfw5Y6gO3LmOxGzHijAQ==", + "dependencies": { + "@octokit/types": "^11.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/endpoint/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@octokit/graphql": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.1.tgz", + "integrity": "sha512-T5S3oZ1JOE58gom6MIcrgwZXzTaxRnxBso58xhozxHpOqSTgDS6YNeEUvZ/kRvXgPrRz/KHnZhtb7jUMRi9E6w==", + "dependencies": { + "@octokit/request": "^8.0.1", + "@octokit/types": "^11.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", + "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-8.0.0.tgz", + "integrity": "sha512-2xZ+baZWUg+qudVXnnvXz7qfrTmDeYPCzangBVq/1gXxii/OiS//4shJp9dnCCvj1x+JAm9ji1Egwm1BA47lPQ==", + "dependencies": { + "@octokit/types": "^11.0.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": ">=5" + } + }, + "node_modules/@octokit/plugin-retry": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-6.0.0.tgz", + "integrity": "sha512-a1/A4A+PB1QoAHQfLJxGHhLfSAT03bR1jJz3GgQJZvty2ozawFWs93MiBQXO7SL2YbO7CIq0Goj4qLOBj8JeMQ==", + "dependencies": { + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^11.0.0", + "bottleneck": "^2.15.3" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": ">=5" + } + }, + "node_modules/@octokit/plugin-throttling": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-7.0.0.tgz", + "integrity": "sha512-KL2k/d0uANc8XqP5S64YcNFCudR3F5AaKO39XWdUtlJIjT9Ni79ekWJ6Kj5xvAw87udkOMEPcVf9xEge2+ahew==", + "dependencies": { + "@octokit/types": "^11.0.0", + "bottleneck": "^2.15.3" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "^5.0.0" + } + }, + "node_modules/@octokit/request": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.1.1.tgz", + "integrity": "sha512-8N+tdUz4aCqQmXl8FpHYfKG9GelDFd7XGVzyN8rc6WxVlYcfpHECnuRkgquzz+WzvHTK62co5di8gSXnzASZPQ==", + "dependencies": { + "@octokit/endpoint": "^9.0.0", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^11.1.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/request-error": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.0.tgz", + "integrity": "sha512-1ue0DH0Lif5iEqT52+Rf/hf0RmGO9NWFjrzmrkArpG9trFfDM/efx00BJHdLGuro4BR/gECxCU2Twf5OKrRFsQ==", + "dependencies": { + "@octokit/types": "^11.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/request/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@octokit/types": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-11.1.0.tgz", + "integrity": "sha512-Fz0+7GyLm/bHt8fwEqgvRBWwIV1S6wRRyq+V6exRKLVWaKGsuy6H9QFYeBVDV7rK6fO3XwHgQOPxv+cLj2zpXQ==", + "dependencies": { + "@octokit/openapi-types": "^18.0.0" + } + }, + "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, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/npm-conf": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", + "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-20.0.0.tgz", + "integrity": "sha512-5K0g5W2Ol8hAcTHqcTBHiA7M58tfmYi1o9KxeJuuRNpGaTa5iLjcyemBitCBcKXaHamOBBEH2dGom6v6Unmqjg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "commondir": "^1.0.1", + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^2.38.3" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "13.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^2.42.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@sapphire/async-queue": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", + "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==", + "dev": true, + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@sapphire/shapeshift": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.2.tgz", + "integrity": "sha512-YRbCXWy969oGIdqR/wha62eX8GNHsvyYi0Rfd4rNW6tSVVa8p0ELiMEuOH/k8rgtvRoM+EMV7Csqz77YdwiDpA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@sapphire/shapeshift/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/@sapphire/snowflake": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz", + "integrity": "sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==", + "dev": true, + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@semantic-release/changelog": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@semantic-release/changelog/-/changelog-6.0.3.tgz", + "integrity": "sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==", + "dev": true, + "dependencies": { + "@semantic-release/error": "^3.0.0", + "aggregate-error": "^3.0.0", + "fs-extra": "^11.0.0", + "lodash": "^4.17.4" + }, + "engines": { + "node": ">=14.17" + }, + "peerDependencies": { + "semantic-release": ">=18.0.0" + } + }, + "node_modules/@semantic-release/changelog/node_modules/@semantic-release/error": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", + "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", + "dev": true, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@semantic-release/changelog/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, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@semantic-release/changelog/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/@semantic-release/changelog/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@semantic-release/changelog/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/@semantic-release/changelog/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@semantic-release/changelog/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/@semantic-release/changelog/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@semantic-release/commit-analyzer": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz", + "integrity": "sha512-E+dr6L+xIHZkX4zNMe6Rnwg4YQrWNXK+rNsvwOPpdFppvZO1olE2fIgWhv89TkQErygevbjsZFSIxp+u6w2e5g==", + "dev": true, + "dependencies": { + "conventional-changelog-angular": "^5.0.0", + "conventional-commits-filter": "^2.0.0", + "conventional-commits-parser": "^3.2.3", + "debug": "^4.0.0", + "import-from": "^4.0.0", + "lodash": "^4.17.4", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=14.17" + }, + "peerDependencies": { + "semantic-release": ">=18.0.0-beta.1" + } + }, + "node_modules/@semantic-release/commit-analyzer/node_modules/conventional-changelog-angular": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@semantic-release/commit-analyzer/node_modules/conventional-commits-filter": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", + "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "dev": true, + "dependencies": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@semantic-release/commit-analyzer/node_modules/conventional-commits-parser": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", + "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", + "dev": true, + "dependencies": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@semantic-release/commit-analyzer/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@semantic-release/commit-analyzer/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/@semantic-release/commit-analyzer/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@semantic-release/commit-analyzer/node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/@semantic-release/error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", + "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==", + "engines": { + "node": ">=18" + } + }, + "node_modules/@semantic-release/git": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@semantic-release/git/-/git-10.0.1.tgz", + "integrity": "sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==", + "dev": true, + "dependencies": { + "@semantic-release/error": "^3.0.0", + "aggregate-error": "^3.0.0", + "debug": "^4.0.0", + "dir-glob": "^3.0.0", + "execa": "^5.0.0", + "lodash": "^4.17.4", + "micromatch": "^4.0.0", + "p-reduce": "^2.0.0" + }, + "engines": { + "node": ">=14.17" + }, + "peerDependencies": { + "semantic-release": ">=18.0.0" + } + }, + "node_modules/@semantic-release/git/node_modules/@semantic-release/error": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", + "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", + "dev": true, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@semantic-release/git/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, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@semantic-release/git/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/@semantic-release/git/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@semantic-release/git/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "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/@semantic-release/git/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/@semantic-release/git/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/@semantic-release/git/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@semantic-release/git/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@semantic-release/git/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@semantic-release/git/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/git/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/@semantic-release/github": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-9.0.4.tgz", + "integrity": "sha512-kQCGFAsBErvCR6hzNuzu63cj4erQN2krm9zQlg8vl4j5X0mL0d/Ras0wmL5Gkr1TuSS2lweME7M4J5zvtDDDSA==", + "dependencies": { + "@octokit/core": "^5.0.0", + "@octokit/plugin-paginate-rest": "^8.0.0", + "@octokit/plugin-retry": "^6.0.0", + "@octokit/plugin-throttling": "^7.0.0", + "@semantic-release/error": "^4.0.0", + "aggregate-error": "^4.0.1", + "debug": "^4.3.4", + "dir-glob": "^3.0.1", + "globby": "^13.1.4", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "issue-parser": "^6.0.0", + "lodash-es": "^4.17.21", + "mime": "^3.0.0", + "p-filter": "^3.0.0", + "url-join": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "semantic-release": ">=20.1.0" + } + }, + "node_modules/@semantic-release/github/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@semantic-release/github/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@semantic-release/github/node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "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/@semantic-release/github/node_modules/http-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@semantic-release/github/node_modules/https-proxy-agent": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz", + "integrity": "sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@semantic-release/github/node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@semantic-release/github/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/@semantic-release/github/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/npm": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-10.0.4.tgz", + "integrity": "sha512-6R3timIQ7VoL2QWRkc9DG8v74RQtRp7UOe/2KbNaqwJ815qOibAv65bH3RtTEhs4axEaHoZf7HDgFs5opaZ9Jw==", + "dependencies": { + "@semantic-release/error": "^4.0.0", + "aggregate-error": "^4.0.1", + "execa": "^7.0.0", + "fs-extra": "^11.0.0", + "lodash-es": "^4.17.21", + "nerf-dart": "^1.0.0", + "normalize-url": "^8.0.0", + "npm": "^9.5.0", + "rc": "^1.2.8", + "read-pkg": "^8.0.0", + "registry-auth-token": "^5.0.0", + "semver": "^7.1.2", + "tempy": "^3.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "semantic-release": ">=20.1.0" + } + }, + "node_modules/@semantic-release/npm/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@semantic-release/npm/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@semantic-release/npm/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@semantic-release/npm/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@semantic-release/release-notes-generator": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-11.0.4.tgz", + "integrity": "sha512-j0Znnwq9IdWTCGzqSlkLv4MpALTsVDZxcVESzJCNN8pK2BYQlYaKsdZ1Ea/+7RlppI3vjhEi33ZKmjSGY1FLKw==", + "dependencies": { + "conventional-changelog-angular": "^6.0.0", + "conventional-changelog-writer": "^6.0.0", + "conventional-commits-filter": "^3.0.0", + "conventional-commits-parser": "^4.0.0", + "debug": "^4.0.0", + "get-stream": "^7.0.0", + "import-from": "^4.0.0", + "into-stream": "^7.0.0", + "lodash-es": "^4.17.21", + "read-pkg-up": "^10.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "semantic-release": ">=20.1.0" + } + }, + "node_modules/@semantic-release/release-notes-generator/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@semantic-release/release-notes-generator/node_modules/get-stream": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-7.0.1.tgz", + "integrity": "sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/release-notes-generator/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@sinonjs/formatio": { + "version": "3.2.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1", + "@sinonjs/samsam": "^3.1.0" + } + }, + "node_modules/@sinonjs/formatio/node_modules/@sinonjs/samsam": { + "version": "3.3.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.3.0", + "array-from": "^2.1.1", + "lodash": "^4.17.15" + } + }, + "node_modules/@sinonjs/formatio/node_modules/lodash": { + "version": "4.17.21", + "dev": true, + "license": "MIT" + }, + "node_modules/@sinonjs/samsam": { + "version": "2.1.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@sinonjs/text-encoding": { + "version": "0.7.1", + "dev": true, + "license": "(Unlicense OR Apache-2.0)" + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@ts-morph/common": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.19.0.tgz", + "integrity": "sha512-Unz/WHmd4pGax91rdIKWi51wnVUW11QttMEPpBiBgIewnc9UQIX7UDLxr5vRlqeByXCwhkF6VabSsI0raWcyAQ==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.12", + "minimatch": "^7.4.3", + "mkdirp": "^2.1.6", + "path-browserify": "^1.0.1" + } + }, + "node_modules/@ts-morph/common/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@ts-morph/common/node_modules/minimatch": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", + "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@ts-morph/common/node_modules/mkdirp": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz", + "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==", + "dev": true, + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/babel__core": { + "version": "7.1.19", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.17.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.3.0" + } + }, + "node_modules/@types/chai": { + "version": "4.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.3.tgz", + "integrity": "sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-scale-chromatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", + "integrity": "sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw==" + }, + "node_modules/@types/d3-time": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz", + "integrity": "sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==" + }, + "node_modules/@types/debug": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", + "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.39", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/fs-extra": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.2.tgz", + "integrity": "sha512-SvSrYXfWSc7R4eqnOzbQF4TZmfpNSM9FrSWLU3EUnWBuyZqNBOrv1B1JA3byUDPUl9z4Ab3jeZG2eDdySlgNMg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.1.tgz", + "integrity": "sha512-HTLpVXHrY69556ozYkcq47TtQJXpcWAWfkoqz+ZGz2JnmZhzlRjprCIyFnetSy8gpDWwTTGBcRVv1J1I1vBrHw==", + "dev": true, + "dependencies": { + "jest-diff": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "3.10.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.12.tgz", + "integrity": "sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==", + "dependencies": { + "@types/unist": "^2" + } + }, + "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 + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" + }, + "node_modules/@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" + }, + "node_modules/@types/node": { + "version": "13.13.52", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" + }, + "node_modules/@types/prettier": { + "version": "2.6.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/screeps": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@types/screeps/-/screeps-3.3.3.tgz", + "integrity": "sha512-r+ru4iNv8wNaNBWvk2gMXYpG8Ok1GJ8NVV9WBIHa5I+hz2QGttnAus+1whDMIzES8x3yK83Usz+gHqm8ehIW7w==", + "dev": true + }, + "node_modules/@types/sinon": { + "version": "5.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/sinon-chai": { + "version": "3.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "*", + "@types/sinon": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.7.tgz", + "integrity": "sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==" + }, + "node_modules/@types/validator": { + "version": "13.7.17", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.17.tgz", + "integrity": "sha512-aqayTNmeWrZcvnG2MG9eGYI6b7S5fl+yKgPs6bAjOTwPS316R5SxBGKvtSExfyoJU7pIeHJfsHI0Ji41RVMkvQ==", + "dev": true + }, + "node_modules/@types/ws": { + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "16.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "4.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^4.0.0", + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/regexpp": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "4.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-scope": { + "version": "5.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-utils": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "4.33.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "debug": "^4.3.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "4.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "4.33.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "4.33.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "4.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/@vladfrangu/async_event_emitter": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz", + "integrity": "sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==", + "dev": true, + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/abab": { + "version": "2.0.6", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accumulate-stream": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "^3.1.0", + "ms": "^2.1.3" + } + }, + "node_modules/accumulate-stream/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-node/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "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==", + "dependencies": { + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "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/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "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 + }, + "node_modules/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.4.2" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", + "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", + "dependencies": { + "type-fest": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansicolors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==" + }, + "node_modules/anymatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/apache-crypt": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.6.tgz", + "integrity": "sha512-072WetlM4blL8PREJVeY+WHiUh1R5VNt2HfceGS8aKqttPHcmqE5pkKuXPz/ULmJOFkc8Hw3kfKl6vy7Qka6DA==", + "dev": true, + "dependencies": { + "unix-crypt-td-js": "^1.1.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/apache-md5": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.8.tgz", + "integrity": "sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/argv-formatter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", + "integrity": "sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==" + }, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-from": { + "version": "2.1.1", + "dev": true, + "license": "MIT" + }, + "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==" + }, + "node_modules/array-includes": { + "version": "3.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/assert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", + "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", + "dev": true, + "dependencies": { + "es6-object-assign": "^1.1.0", + "is-nan": "^1.2.1", + "object-is": "^1.0.1", + "util": "^0.12.0" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/ast-transform": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/ast-transform/-/ast-transform-0.0.0.tgz", + "integrity": "sha512-e/JfLiSoakfmL4wmTGPjv0HpTICVmxwXgYOB8x+mzozHL8v+dSfCbrJ8J8hJ0YBP0XcYu1aLZ6b/3TnxNK3P2A==", + "dev": true, + "dependencies": { + "escodegen": "~1.2.0", + "esprima": "~1.0.4", + "through": "~2.3.4" + } + }, + "node_modules/ast-transform/node_modules/escodegen": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.2.0.tgz", + "integrity": "sha512-yLy3Cc+zAC0WSmoT2fig3J87TpQ8UaZGx8ahCAs9FL8qNbyV7CVyPKS74DG4bsHiL5ew9sxdYx131OkBQMFnvA==", + "dev": true, + "dependencies": { + "esprima": "~1.0.4", + "estraverse": "~1.5.0", + "esutils": "~1.0.0" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=0.4.0" + }, + "optionalDependencies": { + "source-map": "~0.1.30" + } + }, + "node_modules/ast-transform/node_modules/esprima": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ast-transform/node_modules/estraverse": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz", + "integrity": "sha512-FpCjJDfmo3vsc/1zKSeqR5k42tcIhxFIlvq+h9j0fO2q/h2uLKyweq7rYJ+0CoVvrGQOxIS5wyBrW/+vF58BUQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ast-transform/node_modules/esutils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz", + "integrity": "sha512-x/iYH53X3quDwfHRz4y8rn4XcEwwCJeWsul9pF1zldMbGtgOtMNBEOuYWwB1EQlK2LRa1fev3YAgym/RElp5Cg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ast-transform/node_modules/source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", + "dev": true, + "optional": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ast-types": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.7.8.tgz", + "integrity": "sha512-RIOpVnVlltB6PcBJ5BMLx+H+6JJ/zjDGU0t7f0L6c2M1dqcK92VQopLBlPQ9R80AVXelfqYgjcPLtHtDbNFg0Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/async": { + "version": "3.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "0.21.4", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/babel-jest": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "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/babel-jest/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/babel-jest/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-jest/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-jest/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", + "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", + "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.2", + "core-js-compat": "^3.31.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", + "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/base32768": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base32768/-/base32768-3.0.1.tgz", + "integrity": "sha512-dNGY49X0IKN1kDl9y/6sii1Vced+f+4uAqOeRz/PshjNdPwSD+ntnHOg/YgDbLSZetp94d/XxGdpfbXDKv8BVQ==" + }, + "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" + } + ] + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dev": true, + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", + "dev": true + }, + "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==" + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/bottleneck": { + "version": "2.19.5", + "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", + "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brfs": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brfs/-/brfs-2.0.2.tgz", + "integrity": "sha512-IrFjVtwu4eTJZyu8w/V2gxU7iLTtcHih67sgEdzrhjLBMHp2uYefUBfdM4k2UvcuWMgV7PQDZHSLeNWnLFKWVQ==", + "dev": true, + "dependencies": { + "quote-stream": "^1.0.1", + "resolve": "^1.1.5", + "static-module": "^3.0.2", + "through2": "^2.0.0" + }, + "bin": { + "brfs": "bin/cmd.js" + } + }, + "node_modules/brotli": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", + "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", + "dev": true, + "dependencies": { + "base64-js": "^1.1.2" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "dependencies": { + "resolve": "1.1.7" + } + }, + "node_modules/browser-resolve/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", + "dev": true + }, + "node_modules/browserify-optional": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-optional/-/browserify-optional-1.0.1.tgz", + "integrity": "sha512-VrhjbZ+Ba5mDiSYEuPelekQMfTbhcA2DhLk2VQWqdcCROWeFqlTcXZ7yfRkXCIl8E+g4gINJYJiRB7WEtfomAQ==", + "dev": true, + "dependencies": { + "ast-transform": "0.0.0", + "ast-types": "^0.7.0", + "browser-resolve": "^1.8.1" + } + }, + "node_modules/browserslist": { + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "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" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "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" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/bufferutil": { + "version": "4.0.6", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dev": true, + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "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==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/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==", + "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/caniuse-lite": { + "version": "1.0.30001517", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz", + "integrity": "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==", + "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" + } + ] + }, + "node_modules/cardinal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", + "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==", + "dependencies": { + "ansicolors": "~0.3.2", + "redeyed": "~2.1.0" + }, + "bin": { + "cdl": "bin/cdl.js" + } + }, + "node_modules/chai": { + "version": "4.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chance": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/chance/-/chance-1.1.9.tgz", + "integrity": "sha512-TfxnA/DcZXRTA4OekA2zL9GH8qscbbl6X0ZqU4tXhGveVY/mXWvEQLt5GwZcYXTEyEFflVtj+pG8nc8EwSm1RQ==", + "dev": true + }, + "node_modules/char-regex": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/check-error": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "dev": true, + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cheerio/node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/child-shell": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "accumulate-stream": "^5.0.0", + "debug": "^4.3.2", + "kind-of": "^6.0.3", + "nanoid": "^3.1.30", + "p-queue": "6.6.2", + "p-timeout": "4.1.0", + "trim-buffer": "^5.0.0" + } + }, + "node_modules/child-shell/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/child-shell/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/ci-info": { + "version": "3.3.2", + "dev": true, + "license": "MIT" + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.2", + "dev": true, + "license": "MIT" + }, + "node_modules/class-validator": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.0.tgz", + "integrity": "sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==", + "dev": true, + "dependencies": { + "@types/validator": "^13.7.10", + "libphonenumber-js": "^1.10.14", + "validator": "^13.7.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==", + "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==", + "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, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", + "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/co": { + "version": "4.6.0", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/code-block-writer": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-12.0.0.tgz", + "integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==", + "dev": true + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/color": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "dev": true, + "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, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/colorspace": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "dev": true, + "license": "MIT" + }, + "node_modules/comment-parser": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "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==", + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/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, + "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/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/conventional-changelog-angular": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz", + "integrity": "sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==", + "dependencies": { + "compare-func": "^2.0.0" + }, + "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==", + "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/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/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==", + "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==", + "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/convert-source-map": { + "version": "1.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/convert-source-map/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/core-js-compat": { + "version": "3.31.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.1.tgz", + "integrity": "sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.9" + }, + "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==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cose-base": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", + "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", + "dependencies": { + "layout-base": "^1.0.0" + } + }, + "node_modules/cosmiconfig": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==", + "dev": true + }, + "node_modules/crypto-random-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + "dependencies": { + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/crypto-random-string/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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "dev": true, + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "dev": true, + "license": "MIT" + }, + "node_modules/cytoscape": { + "version": "3.25.0", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.25.0.tgz", + "integrity": "sha512-7MW3Iz57mCUo6JQCho6CmPBCbTlJr7LzyEtIkutG255HLVd4XuBg2I9BkTZLI/e4HoaOB/BiAzXuQybQ95+r9Q==", + "dependencies": { + "heap": "^0.2.6", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/cytoscape-cose-bilkent": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", + "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", + "dependencies": { + "cose-base": "^1.0.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", + "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", + "dependencies": { + "cose-base": "^2.2.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/cose-base": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", + "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", + "dependencies": { + "layout-base": "^2.0.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/layout-base": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", + "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==" + }, + "node_modules/cytoscape/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/d3": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", + "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==", + "dependencies": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "dependencies": { + "d3-path": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "dependencies": { + "d3-array": "^3.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "dependencies": { + "delaunator": "5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "dependencies": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/d3-dsv/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "dependencies": { + "d3-dsv": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", + "dependencies": { + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-sankey": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", + "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", + "dependencies": { + "d3-array": "1 - 2", + "d3-shape": "^1.2.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "dependencies": { + "internmap": "^1.0.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" + }, + "node_modules/d3-sankey/node_modules/d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/d3-sankey/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale-chromatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", + "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dagre-d3-es": { + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.10.tgz", + "integrity": "sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==", + "dependencies": { + "d3": "^7.8.2", + "lodash-es": "^4.17.21" + } + }, + "node_modules/dash-ast": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", + "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==", + "dev": true + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/data-urls": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "engines": { + "node": "*" + } + }, + "node_modules/dayjs": { + "version": "1.11.9", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", + "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==" + }, + "node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decache": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.2.tgz", + "integrity": "sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==", + "dev": true, + "dependencies": { + "callsite": "^1.0.0" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "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/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-eql": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delaunator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", + "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", + "dependencies": { + "robust-predicates": "^3.0.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/dfa": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", + "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", + "dev": true + }, + "node_modules/diff": { + "version": "3.5.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/discord-api-types": { + "version": "0.37.50", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.50.tgz", + "integrity": "sha512-X4CDiMnDbA3s3RaUXWXmgAIbY1uxab3fqe3qwzg5XutR3wjqi7M3IkgQbsIBzpqBN2YWr/Qdv7JrFRqSgb4TFg==", + "dev": true + }, + "node_modules/discord.js": { + "version": "14.13.0", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.13.0.tgz", + "integrity": "sha512-Kufdvg7fpyTEwANGy9x7i4od4yu5c6gVddGi5CKm4Y5a6sF0VBODObI3o0Bh7TGCj0LfNT8Qp8z04wnLFzgnbA==", + "dev": true, + "dependencies": { + "@discordjs/builders": "^1.6.5", + "@discordjs/collection": "^1.5.3", + "@discordjs/formatters": "^0.3.2", + "@discordjs/rest": "^2.0.1", + "@discordjs/util": "^1.0.1", + "@discordjs/ws": "^1.0.1", + "@sapphire/snowflake": "^3.5.1", + "@types/ws": "^8.5.5", + "discord-api-types": "0.37.50", + "fast-deep-equal": "^3.1.3", + "lodash.snakecase": "^4.1.1", + "tslib": "^2.6.1", + "undici": "5.22.1", + "ws": "^8.13.0" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/discord.js/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/discord.js/node_modules/ws": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", + "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true }, - "d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==" - }, - "d3-fetch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", - "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", - "requires": { - "d3-dsv": "1 - 3" - } + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domexception": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/dompurify": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.5.tgz", + "integrity": "sha512-F9e6wPGtY+8KNMRAVfxeCOHU0/NPWMSENNq4pQctuXRqqdEPW7q3CrLbR5Nse044WwacyjHGOMlvNsBe1y6z9A==" + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot": { + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/dot/-/dot-2.0.0-beta.1.tgz", + "integrity": "sha512-kxM7fSnNQTXOmaeGuBSXM8O3fEsBb7XSDBllkGbRwa0lJSJTxxDE/4eSNGLKZUmlFw0f1vJ5qSV2BljrgQtgIA==", + "dev": true + }, + "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==", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/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==", + "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/duplexer2/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==" + }, + "node_modules/duplexer2/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==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "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 + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.473", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.473.tgz", + "integrity": "sha512-aVfC8+440vGfl06l8HKKn8/PD5jRfSnLkTTD65EFvU46igbpQRri1gxSzW9/+TeUlwYzrXk1sw867T96zlyECA==", + "dev": true + }, + "node_modules/elkjs": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.8.2.tgz", + "integrity": "sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==" + }, + "node_modules/emittery": { + "version": "0.8.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/enabled": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-ci": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-9.1.1.tgz", + "integrity": "sha512-Im2yEWeF4b2RAMAaWvGioXk6m0UNaIjD8hj28j2ij5ldnIFrDQT0+pzDvpbRkcjurhXhf/AsBKv8P2rtmGi9Aw==", + "dependencies": { + "execa": "^7.0.0", + "java-properties": "^1.0.2" + }, + "engines": { + "node": "^16.14 || >=18" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.20.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "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/es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "node_modules/es6-object-assign": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", + "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", + "dev": true + }, + "node_modules/es6-set": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", + "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "es6-iterator": "~2.0.3", + "es6-symbol": "^3.1.3", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/es6-set/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "2.0.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint": { + "version": "7.32.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-module-utils": { + "version": "2.7.3", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-import": { + "version": "2.26.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-jest": { + "version": "24.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/experimental-utils": "^4.0.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": ">= 4", + "eslint": ">=5" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-jsdoc": { + "version": "31.6.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "comment-parser": "1.1.2", + "debug": "^4.3.1", + "jsdoctypeparser": "^9.0.0", + "lodash": "^4.17.20", + "regextras": "^0.7.1", + "semver": "^7.3.4", + "spdx-expression-parse": "^3.0.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0" + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/lodash": { + "version": "4.17.21", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-jsdoc/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-jsdoc/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "3.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "eslint": ">=5.0.0", + "prettier": ">=1.13.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-screeps": { + "version": "2.1.0", + "dev": true, + "license": "GPL-3.0", + "peerDependencies": { + "eslint": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/@babel/code-frame": { + "version": "7.12.11", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/eslint/node_modules/acorn": { + "version": "7.4.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/astral-regex": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "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/eslint/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "5.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint/node_modules/eslint-utils": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/espree": { + "version": "7.3.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/eslint/node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/file-entry-cache": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/eslint/node_modules/flat-cache": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/eslint/node_modules/flatted": { + "version": "3.2.5", + "dev": true, + "license": "ISC" + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/levn": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/optionator": { + "version": "0.9.1", + "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.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/prelude-ls": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/regexpp": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/eslint/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/slice-ansi": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/eslint/node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/table": { + "version": "6.8.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/eslint/node_modules/table/node_modules/ajv": { + "version": "8.11.0", + "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/eslint/node_modules/type-check": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-is-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz", + "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==", + "dev": true + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "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==", + "dev": true, + "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", + "dev": true, + "license": "MIT" + }, + "node_modules/execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/execa/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/fancy-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-2.0.0.tgz", + "integrity": "sha512-9CzxZbACXMUXW13tS0tI8XsGGmxWzO2DmYrGuBJOJ8k8q2K7hwfJA5qHjuPPe8wtsco33YR9wc+Rlr5wYFvhSA==", + "dev": true, + "dependencies": { + "color-support": "^1.1.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.2.0", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "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-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-xml-parser": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.7.tgz", + "integrity": "sha512-J8r6BriSLO1uj2miOk1NW0YVm8AGOOu3Si2HQp/cSmo6EA4m3fcwu2WKjJ4RK9wMLBtg69y1kS8baDiQBR41Ig==", + "dev": true, + "funding": [ + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fastestsmallesttextencoderdecoder-encodeinto": { + "version": "1.0.22", + "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder-encodeinto/-/fastestsmallesttextencoderdecoder-encodeinto-1.0.22.tgz", + "integrity": "sha512-csOz3cwJjZY75QcPHnY+v6cKWeofYCmhtLVYaurjcRn5vaNXoYe1Leo1ZkiZIxZp796+J5Z+TtmeMbbfYBfiiQ==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fecha": { + "version": "4.2.3", + "dev": true, + "license": "MIT" + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/figures": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", + "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", + "dependencies": { + "escape-string-regexp": "^5.0.0", + "is-unicode-supported": "^1.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/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==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/find-versions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz", + "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==", + "dependencies": { + "semver-regex": "^4.0.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fn.name": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/follow-redirects": { + "version": "1.15.1", + "dev": true, + "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, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "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.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.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==", + "dev": true + }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/from2/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==", + "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/from2/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==" + }, + "node_modules/from2/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==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "dev": 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.1", + "license": "MIT" + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-assigned-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", + "dev": true + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-port": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-6.1.2.tgz", + "integrity": "sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-port-please": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.1.1.tgz", + "integrity": "sha512-3UBAyM3u4ZBVYDsxOQfJDxEa6XTbpBDrOjp4mf7ExFRt5BKs/QywQQiJsh2B+hxcZLSapWqCRvElUe8DnKcFHA==", + "dev": true + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/git-log-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.0.tgz", + "integrity": "sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA==", + "dependencies": { + "argv-formatter": "~1.0.0", + "spawn-error-forwarder": "~1.0.0", + "split2": "~1.0.0", + "stream-combiner2": "~1.1.1", + "through2": "~2.0.0", + "traverse": "~0.6.6" + } + }, + "node_modules/git-log-parser/node_modules/split2": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", + "integrity": "sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==", + "dependencies": { + "through2": "~2.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "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/glob-parent": { + "version": "5.1.2", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "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/globby/node_modules/ignore": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "license": "ISC" + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "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==", + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" + }, + "node_modules/hook-std": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-3.0.0.tgz", + "integrity": "sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/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==", + "engines": { + "node": ">=12" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-auth": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-4.1.9.tgz", + "integrity": "sha512-kvPYxNGc9EKGTXvOMnTBQw2RZfuiSihK/mLw/a4pbtRueTE45S55Lw/3k5CktIf7Ak0veMKEIteDj4YkNmCzmQ==", + "dev": true, + "dependencies": { + "apache-crypt": "^1.1.2", + "apache-md5": "^1.0.6", + "bcryptjs": "^2.4.3", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/http-auth-connect": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/http-auth-connect/-/http-auth-connect-1.0.6.tgz", + "integrity": "sha512-yaO0QSCPqGCjPrl3qEEHjJP+lwZ6gMpXLuCBE06eWwcXomkI5TARtu0kxf9teFuBj6iaV3Ybr15jaWUvbzNzHw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/http-auth/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/http-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/human-signals": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/i18next": { + "version": "22.5.1", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.5.1.tgz", + "integrity": "sha512-8TGPgM3pAD+VRsMtUMNknRz3kzqwp/gPALrWMsDnmC1mKqJwpWyooQRLMcbTwq8z8YwSmuj+ZYvc+xCuEpkssA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://locize.com" + }, + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + } + ], + "dependencies": { + "@babel/runtime": "^7.20.6" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "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" + } + ] + }, + "node_modules/ignore": { + "version": "4.0.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "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-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz", + "integrity": "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==", + "engines": { + "node": ">=12.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "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", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "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==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "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==" + }, + "node_modules/inside": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/inside/-/inside-1.0.0.tgz", + "integrity": "sha512-tvFwvS4g7q6iDot/4FjtWFHwwpv6TVvEumbTdLQilk1F07ojakbXPQcvf3kMAlyNDpzKRzn+d33O3RuXODuxZQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/interpret": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/into-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-7.0.0.tgz", + "integrity": "sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==", + "dependencies": { + "from2": "^2.3.0", + "p-is-promise": "^3.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inversify": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/inversify/-/inversify-6.0.1.tgz", + "integrity": "sha512-B3ex30927698TJENHR++8FfEaJGqoWOgI6ZY5Ht/nLUsFCwHn6akbwtnUAPCgUepAnTpe2qHxhDNjoKLyz6rgQ==", + "dev": true + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": 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-arrayish": { + "version": "0.2.1", + "license": "MIT" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "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-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-builtin-module": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "builtin-modules": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-callable": { + "version": "1.2.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.9.0", + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "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", + "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", + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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, + "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", + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "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==", + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", + "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "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-shared-array-buffer": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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==", + "dependencies": { + "text-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "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==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/issue-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-6.0.0.tgz", + "integrity": "sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==", + "dependencies": { + "lodash.capitalize": "^4.2.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.uniqby": "^4.7.0" + }, + "engines": { + "node": ">=10.13" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/istanbul-reports": { + "version": "3.1.4", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.2.tgz", + "integrity": "sha512-mgNtVv4vUuaKA97yxUHoA3+FkuhtxkjdXEWOyB/N76fjy0FjezEt34oy3epBtvCvS+7DyKwqCFWx/oJLV5+kCg==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/java-properties": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", + "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/javascript-obfuscator": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/javascript-obfuscator/-/javascript-obfuscator-4.0.2.tgz", + "integrity": "sha512-MRBQREvjEwqEGdwNGG7yp0te5uZBFzrPZdxEs4rDYkPpHhhOQu+E0IhSXP7bO9dIUWXZU0Kkdohsuws525aVGQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@javascript-obfuscator/escodegen": "2.3.0", + "@javascript-obfuscator/estraverse": "5.4.0", + "acorn": "8.8.2", + "assert": "2.0.0", + "chalk": "4.1.2", + "chance": "1.1.9", + "class-validator": "0.14.0", + "commander": "10.0.0", + "eslint-scope": "7.1.1", + "eslint-visitor-keys": "3.3.0", + "fast-deep-equal": "3.1.3", + "inversify": "6.0.1", + "js-string-escape": "1.0.1", + "md5": "2.3.0", + "mkdirp": "2.1.3", + "multimatch": "5.0.0", + "opencollective-postinstall": "2.0.3", + "process": "0.11.10", + "reflect-metadata": "0.1.13", + "source-map-support": "0.5.21", + "string-template": "1.0.0", + "stringz": "2.1.0", + "tslib": "2.5.0" + }, + "bin": { + "javascript-obfuscator": "bin/javascript-obfuscator" + }, + "engines": { + "node": "^12.22.0 || ^14.0.0 || ^16.0.0 || ^17.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/javascript-obfuscator" + } + }, + "node_modules/javascript-obfuscator/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/javascript-obfuscator/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/javascript-obfuscator/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/javascript-obfuscator/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/javascript-obfuscator/node_modules/commander": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", + "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/javascript-obfuscator/node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/javascript-obfuscator/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/javascript-obfuscator/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/javascript-obfuscator/node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "dev": true + }, + "node_modules/jest": { + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.1.0.tgz", + "integrity": "sha512-pSQDVwRSwb109Ss13lcMtdfS9r8/w2Zz8+mTUA9VORD66GflCdl8nUFCqM96geOD2EBwWCNURrNAfQsLIDNBdg==", + "dev": true, + "dependencies": { + "@jest/core": "^27.1.0", + "import-local": "^3.0.2", + "jest-cli": "^27.1.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/execa": { + "version": "5.1.1", + "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/jest-changed-files/node_modules/mimic-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-changed-files/node_modules/npm-run-path": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/onetime": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-circus": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "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/jest-circus/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-circus/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-circus/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "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/jest-config/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-config/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-config/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-config/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "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/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-docblock": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "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/jest-each/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-each/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-each/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-jasmine2/node_modules/chalk": { + "version": "4.1.2", + "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/jest-jasmine2/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-jasmine2/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-leak-detector": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "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/jest-matcher-utils/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-matcher-utils/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "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/jest-message-util/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-message-util/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "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/jest-resolve/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-resolve/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-resolve/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "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/jest-runner/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runner/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-runner/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "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/jest-runtime/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runtime/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-runtime/node_modules/execa": { + "version": "5.1.1", + "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/jest-runtime/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/mimic-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-runtime/node_modules/npm-run-path": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/onetime": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-runtime/node_modules/strip-bom": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-serializer": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "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/jest-snapshot/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-snapshot/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "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/jest-util/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-util/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "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/jest-validate/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-validate/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/node_modules/ansi-escapes": { + "version": "4.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "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/jest-watcher/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watcher/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-watcher/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/type-fest": { + "version": "0.21.3", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "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/jest/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest/node_modules/chalk": { + "version": "4.1.2", + "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/jest/node_modules/cliui": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/jest/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/jest-cli": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/yargs": { + "version": "16.2.0", + "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/js-string-escape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", + "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdoctypeparser": { + "version": "9.0.0", + "dev": true, + "license": "MIT", + "bin": { + "jsdoctypeparser": "bin/jsdoctypeparser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsdom": { + "version": "16.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/form-data": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsdom/node_modules/tough-cookie": { + "version": "4.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-beautify": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/json-beautify/-/json-beautify-1.1.1.tgz", + "integrity": "sha512-17j+Hk2lado0xqKtUcyAjK0AtoHnPSIgktWRsEXgdFQFG9UnaGw6CHa0J7xsvulxRpFl6CrkDFHght1p5ZJc4A==", + "dev": true, + "bin": { + "json-beautify": "bin/json-beautify" + } + }, + "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==" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "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==" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "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==", + "engines": [ + "node >= 0.2.0" + ] + }, + "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==", + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/just-extend": { + "version": "4.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/khroma": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz", + "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==" + }, + "node_modules/kind-of": { + "version": "6.0.3", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/kuler": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/layout-base": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==" + }, + "node_modules/leven": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/libphonenumber-js": { + "version": "1.10.37", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.37.tgz", + "integrity": "sha512-Z10PCaOCiAxbUxLyR31DNeeNugSVP6iv/m7UrSKS5JHziEMApJtgku4e9Q69pzzSC9LnQiM09sqsGf2ticZnMw==", + "dev": true + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "license": "MIT" + }, + "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==", + "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/load-json-file/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==", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/locate-path": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lodash": { + "version": "3.10.1", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash.capitalize": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", + "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==" + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "dev": true, + "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==" + }, + "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==" + }, + "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==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.uniqby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", + "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==" + }, + "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, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logform": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@colors/colors": "1.5.0", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + } + }, + "node_modules/logform/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/loglevel": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", + "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" + } + }, + "node_modules/loglevel-plugin-prefix": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", + "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", + "dev": true + }, + "node_modules/lolex": { + "version": "2.7.5", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/loupe": { + "version": "2.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "node_modules/macos-release": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.1.tgz", + "integrity": "sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/magic-bytes.js": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.0.17.tgz", + "integrity": "sha512-PEDpPzHpKe5AxkVmQrNPHFRvPN2ELkkj3eIg4IZO9JdhBiAY3aU53lgYXs9j8B7lpza+QiW0UA4QHCH7EskSeg==", + "dev": true + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "dev": true, + "license": "ISC" + }, + "node_modules/makeerror": { + "version": "1.0.12", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "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==", + "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==", + "dev": true + }, + "node_modules/marked": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-5.1.2.tgz", + "integrity": "sha512-ahRPGXJpjMjwSOlBoTMZAK7ATXkli5qCPxZ21TG44rx1KEo44bii4ekgTDQPNRQ4Kh7JMb9Ub1PVk1NxRSsorg==", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 16" + } + }, + "node_modules/marked-terminal": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-5.2.0.tgz", + "integrity": "sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA==", + "dependencies": { + "ansi-escapes": "^6.2.0", + "cardinal": "^2.1.1", + "chalk": "^5.2.0", + "cli-table3": "^0.6.3", + "node-emoji": "^1.11.0", + "supports-hyperlinks": "^2.3.0" + }, + "engines": { + "node": ">=14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "marked": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/marked-terminal/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dev": true, + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", + "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", + "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "dependencies": { + "@types/mdast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "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/meow/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/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==" + }, + "node_modules/meow/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/meow/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/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==", + "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/meow/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==", + "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/meow/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/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==", + "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/meow/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/meow/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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-source-map": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", + "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", + "dev": true, + "dependencies": { + "source-map": "^0.5.6" + } + }, + "node_modules/merge-source-map/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/mermaid": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.3.0.tgz", + "integrity": "sha512-H5quxuQjwXC8M1WuuzhAp2TdqGg74t5skfDBrNKJ7dt3z8Wprl5S6h9VJsRhoBUTSs1TMtHEdplLhCqXleZZLw==", + "dependencies": { + "@braintree/sanitize-url": "^6.0.2", + "@types/d3-scale": "^4.0.3", + "@types/d3-scale-chromatic": "^3.0.0", + "cytoscape": "^3.23.0", + "cytoscape-cose-bilkent": "^4.1.0", + "cytoscape-fcose": "^2.1.0", + "d3": "^7.4.0", + "d3-sankey": "^0.12.3", + "dagre-d3-es": "7.0.10", + "dayjs": "^1.11.7", + "dompurify": "3.0.5", + "elkjs": "^0.8.2", + "khroma": "^2.0.0", + "lodash-es": "^4.17.21", + "mdast-util-from-markdown": "^1.3.0", + "non-layered-tidy-tree-layout": "^2.0.2", + "stylis": "^4.1.3", + "ts-dedent": "^2.2.0", + "uuid": "^9.0.0", + "web-worker": "^1.2.0" + } + }, + "node_modules/micromark": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", + "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", + "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-factory-destination": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", + "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", + "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", + "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", + "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", + "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", + "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", + "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", + "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", + "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", + "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", + "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", + "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-html-tag-name": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", + "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", + "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", + "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", + "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", + "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", + "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/micromark/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "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==", + "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==", + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/minipass": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz", + "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.3.tgz", + "integrity": "sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw==", + "dev": true, + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dev": true, + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "dev": true, + "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, + "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/nanoid": { + "version": "3.3.4", + "dev": true, + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/ncp": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "bin": { + "ncp": "bin/ncp" + } + }, + "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, + "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==" + }, + "node_modules/nerf-dart": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", + "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==" + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, + "node_modules/nise": { + "version": "1.5.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/formatio": "^3.2.1", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "lolex": "^5.0.1", + "path-to-regexp": "^1.7.0" + } + }, + "node_modules/nise/node_modules/isarray": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/nise/node_modules/lolex": { + "version": "5.1.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/nise/node_modules/path-to-regexp": { + "version": "1.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "isarray": "0.0.1" + } + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/node-emoji/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "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-fetch/node_modules/tr46": { + "version": "0.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.4.0", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/node-powershell": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "child-shell": "^5.0.0", + "is-wsl": "^2.2.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, + "node_modules/non-layered-tidy-tree-layout": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", + "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" + }, + "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==", + "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-package-data/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==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", + "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm": { + "version": "9.8.1", + "resolved": "https://registry.npmjs.org/npm/-/npm-9.8.1.tgz", + "integrity": "sha512-AfDvThQzsIXhYgk9zhbk5R+lh811lKkLAeQMMhSypf1BM7zUafeIIBzMzespeuVEJ0+LvY36oRQYf7IKLzU3rw==", + "bundleDependencies": [ + "@isaacs/string-locale-compare", + "@npmcli/arborist", + "@npmcli/config", + "@npmcli/fs", + "@npmcli/map-workspaces", + "@npmcli/package-json", + "@npmcli/promise-spawn", + "@npmcli/run-script", + "abbrev", + "archy", + "cacache", + "chalk", + "ci-info", + "cli-columns", + "cli-table3", + "columnify", + "fastest-levenshtein", + "fs-minipass", + "glob", + "graceful-fs", + "hosted-git-info", + "ini", + "init-package-json", + "is-cidr", + "json-parse-even-better-errors", + "libnpmaccess", + "libnpmdiff", + "libnpmexec", + "libnpmfund", + "libnpmhook", + "libnpmorg", + "libnpmpack", + "libnpmpublish", + "libnpmsearch", + "libnpmteam", + "libnpmversion", + "make-fetch-happen", + "minimatch", + "minipass", + "minipass-pipeline", + "ms", + "node-gyp", + "nopt", + "npm-audit-report", + "npm-install-checks", + "npm-package-arg", + "npm-pick-manifest", + "npm-profile", + "npm-registry-fetch", + "npm-user-validate", + "npmlog", + "p-map", + "pacote", + "parse-conflict-json", + "proc-log", + "qrcode-terminal", + "read", + "semver", + "sigstore", + "ssri", + "supports-color", + "tar", + "text-table", + "tiny-relative-date", + "treeverse", + "validate-npm-package-name", + "which", + "write-file-atomic" + ], + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^6.3.0", + "@npmcli/config": "^6.2.1", + "@npmcli/fs": "^3.1.0", + "@npmcli/map-workspaces": "^3.0.4", + "@npmcli/package-json": "^4.0.1", + "@npmcli/promise-spawn": "^6.0.2", + "@npmcli/run-script": "^6.0.2", + "abbrev": "^2.0.0", + "archy": "~1.0.0", + "cacache": "^17.1.3", + "chalk": "^5.3.0", + "ci-info": "^3.8.0", + "cli-columns": "^4.0.0", + "cli-table3": "^0.6.3", + "columnify": "^1.6.0", + "fastest-levenshtein": "^1.0.16", + "fs-minipass": "^3.0.2", + "glob": "^10.2.7", + "graceful-fs": "^4.2.11", + "hosted-git-info": "^6.1.1", + "ini": "^4.1.1", + "init-package-json": "^5.0.0", + "is-cidr": "^4.0.2", + "json-parse-even-better-errors": "^3.0.0", + "libnpmaccess": "^7.0.2", + "libnpmdiff": "^5.0.19", + "libnpmexec": "^6.0.3", + "libnpmfund": "^4.0.19", + "libnpmhook": "^9.0.3", + "libnpmorg": "^5.0.4", + "libnpmpack": "^5.0.19", + "libnpmpublish": "^7.5.0", + "libnpmsearch": "^6.0.2", + "libnpmteam": "^5.0.3", + "libnpmversion": "^4.0.2", + "make-fetch-happen": "^11.1.1", + "minimatch": "^9.0.3", + "minipass": "^5.0.0", + "minipass-pipeline": "^1.2.4", + "ms": "^2.1.2", + "node-gyp": "^9.4.0", + "nopt": "^7.2.0", + "npm-audit-report": "^5.0.0", + "npm-install-checks": "^6.1.1", + "npm-package-arg": "^10.1.0", + "npm-pick-manifest": "^8.0.1", + "npm-profile": "^7.0.1", + "npm-registry-fetch": "^14.0.5", + "npm-user-validate": "^2.0.0", + "npmlog": "^7.0.1", + "p-map": "^4.0.0", + "pacote": "^15.2.0", + "parse-conflict-json": "^3.0.1", + "proc-log": "^3.0.0", + "qrcode-terminal": "^0.12.0", + "read": "^2.1.0", + "semver": "^7.5.4", + "sigstore": "^1.7.0", + "ssri": "^10.0.4", + "supports-color": "^9.4.0", + "tar": "^6.1.15", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "treeverse": "^3.0.0", + "validate-npm-package-name": "^5.0.0", + "which": "^3.0.1", + "write-file-atomic": "^5.0.1" + }, + "bin": { + "npm": "bin/npm-cli.js", + "npx": "bin/npx-cli.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/@colors/colors": { + "version": "1.5.0", + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui": { + "version": "8.0.2", + "inBundle": 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/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "inBundle": 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/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/@npmcli/arborist": { + "version": "6.3.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^3.1.0", + "@npmcli/installed-package-contents": "^2.0.2", + "@npmcli/map-workspaces": "^3.0.2", + "@npmcli/metavuln-calculator": "^5.0.0", + "@npmcli/name-from-folder": "^2.0.0", + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^4.0.0", + "@npmcli/query": "^3.0.0", + "@npmcli/run-script": "^6.0.0", + "bin-links": "^4.0.1", + "cacache": "^17.0.4", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^6.1.1", + "json-parse-even-better-errors": "^3.0.0", + "json-stringify-nice": "^1.1.4", + "minimatch": "^9.0.0", + "nopt": "^7.0.0", + "npm-install-checks": "^6.0.0", + "npm-package-arg": "^10.1.0", + "npm-pick-manifest": "^8.0.1", + "npm-registry-fetch": "^14.0.3", + "npmlog": "^7.0.1", + "pacote": "^15.0.8", + "parse-conflict-json": "^3.0.0", + "proc-log": "^3.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.2", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^10.0.1", + "treeverse": "^3.0.0", + "walk-up-path": "^3.0.1" + }, + "bin": { + "arborist": "bin/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/config": { + "version": "6.2.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/map-workspaces": "^3.0.2", + "ci-info": "^3.8.0", + "ini": "^4.1.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.5", + "walk-up-path": "^3.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/disparity-colors": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "ansi-styles": "^4.3.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/fs": { + "version": "3.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/git": { + "version": "4.1.0", + "inBundle": 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/npm/node_modules/@npmcli/installed-package-contents": { + "version": "2.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "lib/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/map-workspaces": { + "version": "3.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/name-from-folder": "^2.0.0", + "glob": "^10.2.2", + "minimatch": "^9.0.0", + "read-package-json-fast": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { + "version": "5.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cacache": "^17.0.0", + "json-parse-even-better-errors": "^3.0.0", + "pacote": "^15.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/name-from-folder": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/package-json": { + "version": "4.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^4.1.0", + "glob": "^10.2.2", + "hosted-git-info": "^6.1.1", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "proc-log": "^3.0.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/promise-spawn": { + "version": "6.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/query": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/run-script": { + "version": "6.0.2", + "inBundle": 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/npm/node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/npm/node_modules/@sigstore/protobuf-specs": { + "version": "0.1.0", + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@sigstore/tuf": { + "version": "1.0.2", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.1.0", + "tuf-js": "^1.1.7" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@tootallnate/once": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm/node_modules/@tufjs/canonical-json": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@tufjs/models": { + "version": "1.0.4", + "inBundle": 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/npm/node_modules/abbrev": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/abort-controller": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/npm/node_modules/agent-base": { + "version": "6.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/npm/node_modules/agentkeepalive": { + "version": "4.3.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/npm/node_modules/aggregate-error": { + "version": "3.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/ansi-regex": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/ansi-styles": { + "version": "4.3.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm/node_modules/aproba": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/archy": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/are-we-there-yet": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^4.1.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/balanced-match": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/bin-links": { + "version": "4.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cmd-shim": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "read-cmd-shim": "^4.0.0", + "write-file-atomic": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/binary-extensions": { + "version": "2.2.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/brace-expansion": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/npm/node_modules/buffer": { + "version": "6.0.3", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/npm/node_modules/builtins": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/npm/node_modules/cacache": { + "version": "17.1.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "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/node_modules/chalk": { + "version": "5.3.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/npm/node_modules/chownr": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/ci-info": { + "version": "3.8.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/cidr-regex": { + "version": "3.1.1", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "ip-regex": "^4.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/clean-stack": { + "version": "2.2.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/npm/node_modules/cli-columns": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm/node_modules/cli-table3": { + "version": "0.6.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/npm/node_modules/clone": { + "version": "1.0.4", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/npm/node_modules/cmd-shim": { + "version": "6.0.1", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/color-convert": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/npm/node_modules/color-name": { + "version": "1.1.4", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/color-support": { + "version": "1.1.3", + "inBundle": true, + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/npm/node_modules/columnify": { + "version": "1.6.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/npm/node_modules/common-ancestor-path": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/concat-map": { + "version": "0.0.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/console-control-strings": { + "version": "1.1.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/cross-spawn": { + "version": "7.0.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/cssesc": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm/node_modules/debug": { + "version": "4.3.4", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/npm/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/defaults": { + "version": "1.0.4", + "inBundle": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/delegates": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/depd": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/npm/node_modules/diff": { + "version": "5.1.0", + "inBundle": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/npm/node_modules/eastasianwidth": { + "version": "0.2.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/emoji-regex": { + "version": "8.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/encoding": { + "version": "0.1.13", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/npm/node_modules/env-paths": { + "version": "2.2.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/npm/node_modules/err-code": { + "version": "2.0.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/event-target-shim": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/npm/node_modules/events": { + "version": "3.3.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/npm/node_modules/exponential-backoff": { + "version": "3.1.1", + "inBundle": true, + "license": "Apache-2.0" + }, + "node_modules/npm/node_modules/fastest-levenshtein": { + "version": "1.0.16", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/npm/node_modules/foreground-child": { + "version": "3.1.1", + "inBundle": 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/npm/node_modules/fs-minipass": { + "version": "3.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/fs.realpath": { + "version": "1.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/function-bind": { + "version": "1.1.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/gauge": { + "version": "5.0.1", + "inBundle": 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": "^4.0.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/glob": { + "version": "10.2.7", + "inBundle": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/graceful-fs": { + "version": "4.2.11", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/has": { + "version": "1.0.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/npm/node_modules/has-unicode": { + "version": "2.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/hosted-git-info": { + "version": "6.1.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/http-cache-semantics": { + "version": "4.1.1", + "inBundle": true, + "license": "BSD-2-Clause" + }, + "node_modules/npm/node_modules/http-proxy-agent": { + "version": "5.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/npm/node_modules/https-proxy-agent": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/npm/node_modules/humanize-ms": { + "version": "1.2.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/npm/node_modules/iconv-lite": { + "version": "0.6.3", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/ieee754": { + "version": "1.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "BSD-3-Clause" + }, + "node_modules/npm/node_modules/ignore-walk": { + "version": "6.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/imurmurhash": { + "version": "0.1.4", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/npm/node_modules/indent-string": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/inflight": { + "version": "1.0.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/npm/node_modules/inherits": { + "version": "2.0.4", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/ini": { + "version": "4.1.1", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/init-package-json": { + "version": "5.0.0", + "inBundle": 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/npm/node_modules/ip": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/ip-regex": { + "version": "4.3.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/is-cidr": { + "version": "4.0.2", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "cidr-regex": "^3.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/is-core-module": { + "version": "2.12.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/npm/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/is-lambda": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/isexe": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/jackspeak": { + "version": "2.2.1", + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/npm/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/json-stringify-nice": { + "version": "1.1.4", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/jsonparse": { + "version": "1.3.1", + "engines": [ + "node >= 0.2.0" + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff": { + "version": "6.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff-apply": { + "version": "5.5.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/libnpmaccess": { + "version": "7.0.2", + "inBundle": 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/npm/node_modules/libnpmdiff": { + "version": "5.0.19", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^6.3.0", + "@npmcli/disparity-colors": "^3.0.0", + "@npmcli/installed-package-contents": "^2.0.2", + "binary-extensions": "^2.2.0", + "diff": "^5.1.0", + "minimatch": "^9.0.0", + "npm-package-arg": "^10.1.0", + "pacote": "^15.0.8", + "tar": "^6.1.13" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmexec": { + "version": "6.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^6.3.0", + "@npmcli/run-script": "^6.0.0", + "ci-info": "^3.7.1", + "npm-package-arg": "^10.1.0", + "npmlog": "^7.0.1", + "pacote": "^15.0.8", + "proc-log": "^3.0.0", + "read": "^2.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "walk-up-path": "^3.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmfund": { + "version": "4.0.19", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^6.3.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmhook": { + "version": "9.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmorg": { + "version": "5.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmpack": { + "version": "5.0.19", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^6.3.0", + "@npmcli/run-script": "^6.0.0", + "npm-package-arg": "^10.1.0", + "pacote": "^15.0.8" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmpublish": { + "version": "7.5.0", + "inBundle": 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/npm/node_modules/libnpmsearch": { + "version": "6.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^14.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmteam": { + "version": "5.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmversion": { + "version": "4.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^4.0.1", + "@npmcli/run-script": "^6.0.0", + "json-parse-even-better-errors": "^3.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/lru-cache": { + "version": "7.18.3", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/npm/node_modules/make-fetch-happen": { + "version": "11.1.1", + "inBundle": 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/node_modules/minimatch": { + "version": "9.0.3", + "inBundle": 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/node_modules/minipass": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-collect": { + "version": "1.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-fetch": { + "version": "3.0.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^5.0.0", + "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/node_modules/minipass-flush": { + "version": "1.0.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-json-stream": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/npm/node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-pipeline": { + "version": "1.2.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-sized": { + "version": "1.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minizlib": { + "version": "2.1.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/mkdirp": { + "version": "1.0.4", + "inBundle": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/ms": { + "version": "2.1.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/mute-stream": { + "version": "1.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/negotiator": { + "version": "0.6.3", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/npm/node_modules/node-gyp": { + "version": "9.4.0", + "inBundle": 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": "^11.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/npm/node_modules/node-gyp/node_modules/abbrev": { + "version": "1.1.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/node-gyp/node_modules/are-we-there-yet": { + "version": "3.0.1", + "inBundle": 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/npm/node_modules/node-gyp/node_modules/brace-expansion": { + "version": "1.1.11", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/gauge": { + "version": "4.0.4", + "inBundle": 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/npm/node_modules/node-gyp/node_modules/glob": { + "version": "7.2.3", + "inBundle": 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/npm/node_modules/node-gyp/node_modules/minimatch": { + "version": "3.1.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/nopt": { + "version": "6.0.0", + "inBundle": 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/npm/node_modules/node-gyp/node_modules/npmlog": { + "version": "6.0.2", + "inBundle": 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/npm/node_modules/node-gyp/node_modules/readable-stream": { + "version": "3.6.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/signal-exit": { + "version": "3.0.7", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/node-gyp/node_modules/which": { + "version": "2.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/nopt": { + "version": "7.2.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/normalize-package-data": { + "version": "5.0.0", + "inBundle": 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/npm/node_modules/npm-audit-report": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-bundled": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-install-checks": { + "version": "6.1.1", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-package-arg": { + "version": "10.1.0", + "inBundle": 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/node_modules/npm-packlist": { + "version": "7.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^6.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-pick-manifest": { + "version": "8.0.1", + "inBundle": 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/node_modules/npm-profile": { + "version": "7.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-registry-fetch": { + "version": "14.0.5", + "inBundle": 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/node_modules/npm-user-validate": { + "version": "2.0.0", + "inBundle": true, + "license": "BSD-2-Clause", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npmlog": { + "version": "7.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^4.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^5.0.0", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/once": { + "version": "1.4.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/npm/node_modules/p-map": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/pacote": { + "version": "15.2.0", + "inBundle": 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/npm/node_modules/parse-conflict-json": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/path-is-absolute": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/path-key": { + "version": "3.1.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/path-scurry": { + "version": "1.9.2", + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^9.1.1", + "minipass": "^5.0.0 || ^6.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/path-scurry/node_modules/lru-cache": { + "version": "9.1.1", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/npm/node_modules/postcss-selector-parser": { + "version": "6.0.13", + "inBundle": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm/node_modules/proc-log": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/process": { + "version": "0.11.10", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/npm/node_modules/promise-all-reject-late": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/promise-call-limit": { + "version": "1.0.2", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/promise-inflight": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/promise-retry": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/promzard": { + "version": "1.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "read": "^2.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/qrcode-terminal": { + "version": "0.12.0", + "inBundle": true, + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/npm/node_modules/read": { + "version": "2.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "mute-stream": "~1.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/read-cmd-shim": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/read-package-json": { + "version": "6.0.4", + "inBundle": 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/npm/node_modules/read-package-json-fast": { + "version": "3.0.2", + "inBundle": 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/npm/node_modules/readable-stream": { + "version": "4.4.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/retry": { + "version": "0.12.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm/node_modules/rimraf": { + "version": "3.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/npm/node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "inBundle": 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/npm/node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/npm/node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/safer-buffer": { + "version": "2.1.2", + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/npm/node_modules/semver": { + "version": "7.5.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/set-blocking": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/shebang-command": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/shebang-regex": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/signal-exit": { + "version": "4.0.2", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/sigstore": { + "version": "1.7.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.1.0", + "@sigstore/tuf": "^1.0.1", + "make-fetch-happen": "^11.0.1" + }, + "bin": { + "sigstore": "bin/sigstore.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/smart-buffer": { + "version": "4.2.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/npm/node_modules/socks": { + "version": "2.7.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/npm/node_modules/socks-proxy-agent": { + "version": "7.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm/node_modules/spdx-correct": { + "version": "3.2.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-exceptions": { + "version": "2.3.0", + "inBundle": true, + "license": "CC-BY-3.0" + }, + "node_modules/npm/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-license-ids": { + "version": "3.0.13", + "inBundle": true, + "license": "CC0-1.0" + }, + "node_modules/npm/node_modules/ssri": { + "version": "10.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/string_decoder": { + "version": "1.3.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/npm/node_modules/string-width": { + "version": "4.2.3", + "inBundle": 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/npm/node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "inBundle": 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/npm/node_modules/strip-ansi": { + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/supports-color": { + "version": "9.4.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/npm/node_modules/tar": { + "version": "6.1.15", + "inBundle": true, + "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" + } + }, + "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/text-table": { + "version": "0.2.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/tiny-relative-date": { + "version": "1.3.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/treeverse": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/tuf-js": { + "version": "1.1.7", + "inBundle": 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/npm/node_modules/unique-filename": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/unique-slug": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/util-deprecate": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/validate-npm-package-license": { + "version": "3.0.4", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/npm/node_modules/validate-npm-package-name": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/walk-up-path": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/wcwidth": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/npm/node_modules/which": { + "version": "3.0.1", + "inBundle": 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/npm/node_modules/wide-align": { + "version": "1.1.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/npm/node_modules/wrap-ansi": { + "version": "8.1.0", + "inBundle": 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/npm/node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "inBundle": 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/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "inBundle": 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/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrappy": { + "version": "1.0.2", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/write-file-atomic": { + "version": "5.0.1", + "inBundle": 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/npm/node_modules/yallist": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "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/opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", + "dev": true, + "bin": { + "opencollective-postinstall": "index.js" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "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, + "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/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-name": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz", + "integrity": "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==", + "dev": true, + "dependencies": { + "macos-release": "^2.5.0", + "windows-release": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-each-series": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz", + "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==", + "engines": { + "node": ">=12" + }, + "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==", + "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", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-is-promise": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", + "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-limit": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-locate": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "dependencies": { + "aggregate-error": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "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-queue/node_modules/p-timeout": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-reduce": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", + "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/p-try": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "dev": true + }, + "node_modules/parent-module": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dev": true, + "dependencies": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pastebin-api": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/pastebin-api/-/pastebin-api-5.1.6.tgz", + "integrity": "sha512-FI2ZeXLxroI2tuRVd5LI7eNmiANFxDOdlhXxSMqtOXTJn1KSt2UC8kglhndUOOPt6p9XPVnuS7XGW/KbiBbbzw==", + "dev": true, + "dependencies": { + "fast-xml-parser": "^4.1.3", + "undici": "^5.21.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "node_modules/path-exists": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", + "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "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==", + "dev": true, + "dependencies": { + "through": "~2.3" + } + }, + "node_modules/pdfjs-dist": { + "version": "2.12.313", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.12.313.tgz", + "integrity": "sha512-1x6iXO4Qnv6Eb+YFdN5JdUzt4pAkxSp3aLAYPX93eQCyg/m7QFzXVWJHJVtoW48CI8HCXju4dSkhQZwoheL5mA==", + "dev": true, + "peerDependencies": { + "worker-loader": "^3.0.8" + }, + "peerDependenciesMeta": { + "worker-loader": { + "optional": true + } + } + }, + "node_modules/pdfmake": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/pdfmake/-/pdfmake-0.2.7.tgz", + "integrity": "sha512-ClLpgx30H5G3EDvRW1MrA1Xih6YxEaSgIVFrOyBMgAAt62V+hxsyWAi6JNP7u1Fc5JKYAbpb4RRVw8Rhvmz5cQ==", + "dev": true, + "dependencies": { + "@foliojs-fork/linebreak": "^1.1.1", + "@foliojs-fork/pdfkit": "^0.13.0", + "iconv-lite": "^0.6.3", + "xmldoc": "^1.1.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/pdfmake/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, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/pirates": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-conf": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", + "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", + "dependencies": { + "find-up": "^2.0.0", + "load-json-file": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "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", + "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", + "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", + "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", + "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", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/png-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz", + "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==", + "dev": true + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.7.1", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.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==" + }, + "node_modules/progress": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" + }, + "node_modules/proxy-middleware": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", + "integrity": "sha512-EGCG8SeoIRVMhsqHQUdDigB2i7qU7fCsWASwn54+nPutYO8n4q6EiwMzyfWlC+dzRFExP+kvcnDFdBDHoZBU7Q==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/psl": { + "version": "1.8.0", + "dev": true, + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "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": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "engines": { + "node": ">=8" + } + }, + "node_modules/quote-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", + "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==", + "dev": true, + "dependencies": { + "buffer-equal": "0.0.1", + "minimist": "^1.1.3", + "through2": "^2.0.0" + }, + "bin": { + "quote-stream": "bin/cmd.js" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/read-pkg": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-8.0.0.tgz", + "integrity": "sha512-Ajb9oSjxXBw0YyOiwtQ2dKbAA/vMnUPnY63XcCk+mXo0BwIdQEMgZLZiMWGttQHcUhUgbK0mH85ethMPKXxziw==", + "dependencies": { + "@types/normalize-package-data": "^2.4.1", + "normalize-package-data": "^5.0.0", + "parse-json": "^7.0.0", + "type-fest": "^3.8.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-10.0.0.tgz", + "integrity": "sha512-jgmKiS//w2Zs+YbX039CorlkOp8FIVbSAN8r8GJHDsGlmNPXo+VeHkqAwCiQVTTx5/LwLZTcEw59z3DvcLbr0g==", + "dependencies": { + "find-up": "^6.3.0", + "read-pkg": "^8.0.0", + "type-fest": "^3.12.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-pkg/node_modules/lines-and-columns": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/read-pkg/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==", + "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-pkg/node_modules/parse-json": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.0.0.tgz", + "integrity": "sha512-kP+TQYAzAiVnzOlWOe0diD6L35s9bJh0SCn95PIbZFKrOYuIRQsQkeWEYxzVDuHTt9V9YqvYCJ2Qo4z9wdfZPw==", + "dependencies": { + "@babel/code-frame": "^7.21.4", + "error-ex": "^1.3.2", + "json-parse-even-better-errors": "^3.0.0", + "lines-and-columns": "^2.0.3", + "type-fest": "^3.8.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "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==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/redent/node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/redeyed": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", + "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==", + "dependencies": { + "esprima": "~4.0.0" + } + }, + "node_modules/reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "dev": true + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regextras": { + "version": "0.7.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.1.14" + } + }, + "node_modules/registry-auth-token": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", + "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", + "dependencies": { + "@pnpm/npm-conf": "^2.1.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": 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, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.9.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", + "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", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "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, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "2.6.3", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" + }, + "node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-clear": { + "version": "2.0.7", + "dev": true, + "license": "ISC", + "dependencies": { + "rimraf": "^2.6.2" + } + }, + "node_modules/rollup-plugin-copy": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-copy/-/rollup-plugin-copy-3.4.0.tgz", + "integrity": "sha512-rGUmYYsYsceRJRqLVlE9FivJMxJ7X6jDlP79fmFkL8sJs7VVMSVyA2yfyL+PGyO/vJs4A87hwhgVfz61njI+uQ==", + "dev": true, + "dependencies": { + "@types/fs-extra": "^8.0.1", + "colorette": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "10.0.1", + "is-plain-object": "^3.0.0" + }, + "engines": { + "node": ">=8.3" + } + }, + "node_modules/rollup-plugin-copy/node_modules/globby": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", + "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/rollup-plugin-copy/node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/rollup-plugin-screeps-world": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/rollup-plugin-screeps-world/-/rollup-plugin-screeps-world-1.0.4.tgz", + "integrity": "sha512-+NB/KH8kuOjaenOySZVrPnRU5O/ny48otYYyI/Flg5tww59XIA95JZbmgnoN8J8GbjmDk+D5s+RV4YSK9r2ucw==", + "dev": true, + "dependencies": { + "git-rev-sync": "^3.0.2", + "screeps-api": "^1.11.0" + } + }, + "node_modules/rollup-plugin-screeps-world/node_modules/git-rev-sync": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/git-rev-sync/-/git-rev-sync-3.0.2.tgz", + "integrity": "sha512-Nd5RiYpyncjLv0j6IONy0lGzAqdRXUaBctuGBbrEA2m6Bn4iDrN/9MeQTXuiquw8AEKL9D2BW0nw5m/lQvxqnQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "1.0.5", + "graceful-fs": "4.1.15", + "shelljs": "0.8.5" + } + }, + "node_modules/rollup-plugin-screeps-world/node_modules/graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true + }, + "node_modules/rollup-plugin-screeps-world/node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/rollup-plugin-terser/node_modules/jest-worker": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { + "version": "4.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/rollup-plugin-typescript2": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.36.0.tgz", + "integrity": "sha512-NB2CSQDxSe9+Oe2ahZbf+B4bh7pHwjV5L+RSYpCu7Q5ROuN94F9b6ioWwKfz3ueL3KTtmX4o2MUH2cgHDIEUsw==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^4.1.2", + "find-cache-dir": "^3.3.2", + "fs-extra": "^10.0.0", + "semver": "^7.5.4", + "tslib": "^2.6.2" + }, + "peerDependencies": { + "rollup": ">=1.26.3", + "typescript": ">=2.4.0" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/rollup-plugin-typescript2/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, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/rollup-plugin-typescript2/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, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/rollup-plugin-typescript2/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "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/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" + }, + "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, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", + "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", + "dev": true + }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "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.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "node_modules/saxes": { + "version": "5.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/scope-analyzer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.2.tgz", + "integrity": "sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ==", + "dev": true, + "dependencies": { + "array-from": "^2.1.1", + "dash-ast": "^2.0.1", + "es6-map": "^0.1.5", + "es6-set": "^0.1.5", + "es6-symbol": "^3.1.1", + "estree-is-function": "^1.0.0", + "get-assigned-identifiers": "^1.1.0" + } + }, + "node_modules/screeps-api": { + "version": "1.16.0", + "dev": true, + "license": "ISC", + "dependencies": { + "axios": "^0.21.1", + "commander": "^7.2.0", + "debug": "^4.1.1", + "ws": "^7.4.4", + "yamljs": "^0.3.0" + }, + "bin": { + "screeps-api": "bin/screeps-api.js" + }, + "optionalDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + } + }, + "node_modules/screeps-api/node_modules/commander": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/screeps-api/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/screeps-api/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/screeps-db-importer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/screeps-db-importer/-/screeps-db-importer-1.1.0.tgz", + "integrity": "sha512-bbkO0n7DJpu9DzG2PGwEi4FZA64+iCbkYcBiqNYIx/l5vurldEF16UZLBir7tIpC1aJ2OCl6y7Mb1xaN2qDTMQ==", + "dev": true, + "dependencies": { + "node-fetch": "^3.3.1", + "winston": "^3.8.2" + } + }, + "node_modules/screeps-db-importer/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dev": true, + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/screeps-grafana-go_carbon": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/screeps-grafana-go_carbon/-/screeps-grafana-go_carbon-1.0.5.tgz", + "integrity": "sha512-YLN87Jd9d1wrcWB38kTJLHMR7aoEgfXlNAexP6axBLDmBxpBPwcW6M7bb9/P0q1Q/m20GRtcPBrdFn1Sk4R39A==", + "dev": true, + "dependencies": { + "axios": "^0.27.2", + "dotenv": "^16.0.2", + "fs-extra": "^11.1.0", + "get-port-please": "^3.0.1", + "minimist": "^1.2.7", + "winston": "^3.8.1" + }, + "bin": { + "screeps-grafana-go_carbon": "bin/setup.js" + } + }, + "node_modules/screeps-grafana-go_carbon/node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/screeps-grafana-go_carbon/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/screeps-grafana-go_carbon/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/screeps-grafana-go_carbon/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/screeps-jest": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/screeps-jest/-/screeps-jest-2.0.2.tgz", + "integrity": "sha512-2jVH1fKX2U4SQBbbGe5rF5lUGtsE7AcsteV7+L4//WngXl5z16nv7DyHq0yNFrxuaRYZUUBLOaSE4gjr7h6H0A==", + "dev": true, + "peerDependencies": { + "jest": ">=27" + } + }, + "node_modules/screeps-performance-server": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.12.1.tgz", + "integrity": "sha512-alq0Ek6OQJnTLIwgO0b6TwjrinQB1nEviOTP+aNz8iuIq4rYAKLyi4+H9JzyoXjt1V2faLTSCp/VKzKk400VAQ==", + "dev": true, + "dependencies": { + "@octokit/core": "^4.2.0", + "discord.js": "^14.9.0", + "dotenv": "^16.0.3", + "get-port": "^6.1.2", + "json-beautify": "^1.1.1", + "lodash": "^4.17.21", + "minimist": "^1.2.7", + "ncp": "^2.0.0", + "node-fetch": "^2.6.7", + "node-powershell": "^5.0.1", + "pastebin-api": "^5.1.6", + "q": "^1.5.1", + "screeps-api": "1.16.0", + "screeps-db-importer": "latest", + "winston": "^3.8.2" + }, + "bin": { + "screeps-performance-server": "bin/setup.js" + } + }, + "node_modules/screeps-performance-server/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, + "engines": { + "node": ">= 14" + } + }, + "node_modules/screeps-performance-server/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, + "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/screeps-performance-server/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, + "dependencies": { + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/screeps-performance-server/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, + "dependencies": { + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/screeps-performance-server/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, + "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/screeps-performance-server/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, + "dependencies": { + "@octokit/types": "^9.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/screeps-performance-server/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, + "dependencies": { + "@octokit/openapi-types": "^18.0.0" + } + }, + "node_modules/screeps-performance-server/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/screeps-performance-server/node_modules/lodash": { + "version": "4.17.21", + "dev": true, + "license": "MIT" + }, + "node_modules/screeps-viz": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/screeps-viz/-/screeps-viz-2.1.3.tgz", + "integrity": "sha512-c96u2MTtrXzjv4O1K89J1EWgapbP0C9xqx2gCOZ5uLTBDr1RaAuIQZkOquqHA8ELhSNd9xr9X7Qt5vCOMMknSw==", + "dev": true + }, + "node_modules/semantic-release": { + "version": "21.0.7", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-21.0.7.tgz", + "integrity": "sha512-peRDSXN+hF8EFSKzze90ff/EnAmgITHQ/a3SZpRV3479ny0BIZWEJ33uX6/GlOSKdaSxo9hVRDyv2/u2MuF+Bw==", + "dependencies": { + "@semantic-release/commit-analyzer": "^10.0.0", + "@semantic-release/error": "^4.0.0", + "@semantic-release/github": "^9.0.0", + "@semantic-release/npm": "^10.0.2", + "@semantic-release/release-notes-generator": "^11.0.0", + "aggregate-error": "^4.0.1", + "cosmiconfig": "^8.0.0", + "debug": "^4.0.0", + "env-ci": "^9.0.0", + "execa": "^7.0.0", + "figures": "^5.0.0", + "find-versions": "^5.1.0", + "get-stream": "^6.0.0", + "git-log-parser": "^1.2.0", + "hook-std": "^3.0.0", + "hosted-git-info": "^6.0.0", + "lodash-es": "^4.17.21", + "marked": "^5.0.0", + "marked-terminal": "^5.1.1", + "micromatch": "^4.0.2", + "p-each-series": "^3.0.0", + "p-reduce": "^3.0.0", + "read-pkg-up": "^10.0.0", + "resolve-from": "^5.0.0", + "semver": "^7.3.2", + "semver-diff": "^4.0.0", + "signale": "^1.2.1", + "yargs": "^17.5.1" + }, + "bin": { + "semantic-release": "bin/semantic-release.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/semantic-release/node_modules/@semantic-release/commit-analyzer": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-10.0.1.tgz", + "integrity": "sha512-9ejHzTAijYs9z246sY/dKBatmOPcd0GQ7lH4MgLCkv1q4GCiDZRkjHJkaQZXZVaK7mJybS+sH3Ng6G8i3pYMGQ==", + "dependencies": { + "conventional-changelog-angular": "^6.0.0", + "conventional-commits-filter": "^3.0.0", + "conventional-commits-parser": "^4.0.0", + "debug": "^4.0.0", + "import-from": "^4.0.0", + "lodash-es": "^4.17.21", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "semantic-release": ">=20.1.0" + } + }, + "node_modules/semantic-release/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/semantic-release/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/semantic-release/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/semantic-release/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/semver-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", + "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-regex": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", + "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/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 + }, + "node_modules/send/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/shallow-copy": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", + "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==", + "dev": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "license": "ISC" + }, + "node_modules/signale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", + "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", + "dependencies": { + "chalk": "^2.3.2", + "figures": "^2.0.0", + "pkg-conf": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/signale/node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "dev": true, + "license": "MIT" + }, + "node_modules/sinon": { + "version": "6.3.5", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.0.2", + "@sinonjs/formatio": "^3.0.0", + "@sinonjs/samsam": "^2.1.2", + "diff": "^3.5.0", + "lodash.get": "^4.4.2", + "lolex": "^2.7.5", + "nise": "^1.4.5", + "supports-color": "^5.5.0", + "type-detect": "^4.0.8" + } + }, + "node_modules/sinon-chai": { + "version": "3.7.0", + "dev": true, + "license": "(BSD-2-Clause OR WTFPL)", + "peerDependencies": { + "chai": "^4.0.0", + "sinon": ">=4.0.0" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true + }, + "node_modules/spawn-error-forwarder": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", + "integrity": "sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==" + }, + "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==", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.11", + "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==", + "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==", + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/stack-utils": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/static-eval": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz", + "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==", + "dev": true, + "dependencies": { + "escodegen": "^1.11.1" + } + }, + "node_modules/static-eval/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/static-module": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/static-module/-/static-module-3.0.4.tgz", + "integrity": "sha512-gb0v0rrgpBkifXCa3yZXxqVmXDVE+ETXj6YlC/jt5VzOnGXR2C15+++eXuMDUYsePnbhf+lwW0pE1UXyOLtGCw==", + "dev": true, + "dependencies": { + "acorn-node": "^1.3.0", + "concat-stream": "~1.6.0", + "convert-source-map": "^1.5.1", + "duplexer2": "~0.1.4", + "escodegen": "^1.11.1", + "has": "^1.0.1", + "magic-string": "0.25.1", + "merge-source-map": "1.0.4", + "object-inspect": "^1.6.0", + "readable-stream": "~2.3.3", + "scope-analyzer": "^2.0.1", + "shallow-copy": "~0.0.1", + "static-eval": "^2.0.5", + "through2": "~2.0.3" + } + }, + "node_modules/static-module/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/static-module/node_modules/magic-string": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz", + "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.1" + } + }, + "node_modules/static-module/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, + "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/static-module/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/static-module/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "dev": true, + "dependencies": { + "duplexer": "~0.1.1", + "through": "~2.3.4" + } + }, + "node_modules/stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", + "dependencies": { + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-combiner2/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==", + "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/stream-combiner2/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==" + }, + "node_modules/stream-combiner2/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==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-template": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-1.0.0.tgz", + "integrity": "sha512-SLqR3GBUXuoPP5MmYtD7ompvXiG87QjT6lzOszyXjTM86Uu7At7vNnt2xgyTLq5o9T4IxTYFyGxcULqpsmsfdg==", + "dev": true + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-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, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringz": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/stringz/-/stringz-2.1.0.tgz", + "integrity": "sha512-KlywLT+MZ+v0IRepfMxRtnSvDCMc3nR1qqCs3m/qIbSOWkNZYT8XHQA31rS3TnKp0c5xjZu3M4GY/2aRKSi/6A==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-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, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "dev": true, + "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==", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "dev": true + }, + "node_modules/stylis": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", + "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" + }, + "node_modules/supports-color": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/temp-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", + "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", + "engines": { + "node": ">=14.16" + } + }, + "node_modules/tempy": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz", + "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==", + "dependencies": { + "is-stream": "^3.0.0", + "temp-dir": "^3.0.0", + "type-fest": "^2.12.2", + "unique-string": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-link/node_modules/ansi-escapes": { + "version": "4.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-link/node_modules/type-fest": { + "version": "0.21.3", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.14.2", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/text-hex": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/throat": { + "version": "6.0.1", + "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==" + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "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==", + "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==" + }, + "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==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "dev": true + }, + "node_modules/tmpl": { + "version": "1.0.5", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/traverse": { + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", + "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/trim-buffer": { + "version": "5.0.0", + "dev": true, + "license": "MIT" + }, + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/triple-beam": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "engines": { + "node": ">=6.10" + } + }, + "node_modules/ts-jest": { + "version": "27.0.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.5.tgz", + "integrity": "sha512-lIJApzfTaSSbtlksfFNHkWOzLJuuSm4faFAfo5kvzOiRAuoN4/eKxVJ2zEAho8aecE04qX6K1pAzfH5QHL1/8w==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^27.0.0", + "json5": "2.x", + "lodash": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@types/jest": "^27.0.0", + "babel-jest": ">=27.0.0 <28", + "jest": "^27.0.0", + "typescript": ">=3.8 <5.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true }, - "d3-force": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", - "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-quadtree": "1 - 3", - "d3-timer": "1 - 3" - } + "@types/jest": { + "optional": true }, - "d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==" - }, - "d3-geo": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", - "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", - "requires": { - "d3-array": "2.5.0 - 3" - } + "babel-jest": { + "optional": true + } + } + }, + "node_modules/ts-jest/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/ts-jest/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-mixer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz", + "integrity": "sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==", + "dev": true + }, + "node_modules/ts-morph": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-18.0.0.tgz", + "integrity": "sha512-Kg5u0mk19PIIe4islUI/HWRvm9bC1lHejK4S0oh1zaZ77TMZAEmQC0sHQYiu2RgCQFZKXz1fMVi/7nOOeirznA==", + "dev": true, + "dependencies": { + "@ts-morph/common": "~0.19.0", + "code-block-writer": "^12.0.0" + } + }, + "node_modules/ts-node": { + "version": "10.8.1", + "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/acorn-walk": { + "version": "8.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "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 + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", + "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "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": { + "version": "5.22.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz", + "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==", + "dev": true, + "dependencies": { + "busboy": "^1.6.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-properties": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", + "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", + "dev": true, + "dependencies": { + "base64-js": "^1.3.0", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "dev": true, + "dependencies": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } + }, + "node_modules/unique-string": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", + "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", + "dependencies": { + "crypto-random-string": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" + }, + "node_modules/universalify": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unix-crypt-td-js": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz", + "integrity": "sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw==", + "dev": true + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "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" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-join": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", + "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/utf-8-validate": { + "version": "5.0.9", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/uvu": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", + "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", + "dependencies": { + "dequal": "^2.0.0", + "diff": "^5.0.0", + "kleur": "^4.0.3", + "sade": "^1.7.3" + }, + "bin": { + "uvu": "bin.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/uvu/node_modules/diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/uvu/node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-to-istanbul": { + "version": "8.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.4", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "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==", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validator": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", + "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "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, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/web-worker": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", + "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=10.4" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/whatwg-url/node_modules/lodash": { + "version": "4.17.21", + "dev": true, + "license": "MIT" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/windows-release": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", + "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==", + "dev": true, + "dependencies": { + "execa": "^4.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/windows-release/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/windows-release/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/windows-release/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/windows-release/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/windows-release/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/windows-release/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/winston": { + "version": "3.8.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@colors/colors": "1.5.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.4.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.5.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport": { + "version": "4.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 6.4.0" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "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==" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-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, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.8", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true }, - "d3-hierarchy": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", - "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==" - }, - "d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "requires": { - "d3-color": "1 - 3" - } + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/xmldoc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.3.0.tgz", + "integrity": "sha512-y7IRWW6PvEnYQZNZFMRLNJw+p3pezM4nKYPfr15g4OOW9i8VpeydycFuipE2297OvZnh3jSb2pxOt9QpkZUVng==", + "dev": true, + "dependencies": { + "sax": "^1.2.4" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yamljs": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "glob": "^7.0.5" + }, + "bin": { + "json2yaml": "bin/json2yaml", + "yaml2json": "bin/yaml2json" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } + }, + "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==", + "engines": { + "node": ">=12" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@aduh95/viz.js": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@aduh95/viz.js/-/viz.js-3.4.0.tgz", + "integrity": "sha512-KI2nVf9JdwWCXqK6RVf+9/096G7VWN4Z84mnynlyZKao2xQENW8WNEjLmvdlxS5X8PNWXFC1zqwm7tveOXw/4A==", + "dev": true + }, + "@ampproject/remapping": { + "version": "2.2.0", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@angular-devkit/core": { + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.6.tgz", + "integrity": "sha512-3OjtrPWvsqVkMBwqPeE65ccCIw56FooNpVVAJ0XwhVQv5mA81pmbCzU7JsR6U449ZT7O4cQblzZMQvWvx74HCg==", + "dev": true, + "requires": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } }, - "d3-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", - "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==" - }, - "d3-polygon": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", - "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==" - }, - "d3-quadtree": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", - "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==" - }, - "d3-random": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", - "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==" - }, - "d3-sankey": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", - "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", - "requires": { - "d3-array": "1 - 2", - "d3-shape": "^1.2.0" - }, - "dependencies": { - "d3-array": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", - "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", - "requires": { - "internmap": "^1.0.0" - } - }, - "d3-path": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", - "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" - }, - "d3-shape": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", - "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", - "requires": { - "d3-path": "1" - } - }, - "internmap": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", - "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" - } - } + "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 }, - "d3-scale": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", - "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", - "requires": { - "d3-array": "2.10.0 - 3", - "d3-format": "1 - 3", - "d3-interpolate": "1.2.0 - 3", - "d3-time": "2.1.1 - 3", - "d3-time-format": "2 - 4" - } + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + } + } + }, + "@angular-devkit/schematics": { + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.6.tgz", + "integrity": "sha512-KA8P78gaS76HMHGBOM8JHJXWLOxCIShYVB2Un/Cu6z3jVODvXq+ILZUc1Y0RsAce/vsl2wf8qpoh5Lku9KJHUQ==", + "dev": true, + "requires": { + "@angular-devkit/core": "16.1.6", + "jsonc-parser": "3.2.0", + "magic-string": "0.30.0", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "dependencies": { + "magic-string": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + } + } + }, + "@babel/code-frame": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "requires": { + "@babel/highlight": "^7.22.5" + } + }, + "@babel/compat-data": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "dev": true + }, + "@babel/core": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", + "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.9", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helpers": "^7.22.6", + "@babel/parser": "^7.22.7", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.8", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "d3-scale-chromatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", - "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", - "requires": { - "d3-color": "1 - 3", - "d3-interpolate": "1 - 3" - } + "ms": { + "version": "2.1.2", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", + "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", + "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", + "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } }, - "d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==" + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz", + "integrity": "sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", + "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", + "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "d3-shape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", - "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", - "requires": { - "d3-path": "^3.1.0" - } + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dev": true, + "requires": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", + "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.5" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", + "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.9" + } + }, + "@babel/helper-replace-supers": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", + "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==" + }, + "@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.9.tgz", + "integrity": "sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helpers": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", + "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", + "dev": true, + "requires": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.6", + "@babel/types": "^7.22.5" + } + }, + "@babel/highlight": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "requires": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.22.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", + "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", + "dev": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "requires": {} + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-async-generator-functions": { + "version": "7.22.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz", + "integrity": "sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", + "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", + "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", + "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-transform-numeric-separator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-transform-object-rest-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + } + }, + "@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-transform-optional-chaining": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz", + "integrity": "sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", + "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.1" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", + "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/preset-env": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.9.tgz", + "integrity": "sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.9", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.7", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.6", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.6", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.4", + "babel-plugin-polyfill-corejs3": "^0.8.2", + "babel-plugin-polyfill-regenerator": "^0.5.1", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + } + }, + "@babel/preset-modules": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", + "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "@babel/runtime": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", + "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.11" + } + }, + "@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/traverse": { + "version": "7.22.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", + "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.7", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.7", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "d3-time": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", - "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", - "requires": { - "d3-array": "2 - 3" - } + "ms": { + "version": "2.1.2", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "dev": true + }, + "@braintree/sanitize-url": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz", + "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==" + }, + "@colors/colors": { + "version": "1.5.0", + "devOptional": true + }, + "@compodoc/compodoc": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/@compodoc/compodoc/-/compodoc-1.1.21.tgz", + "integrity": "sha512-/FDlwRgKzmkGuorDnURuCzoGY6rZ0KY7Mj5/PwnEjMs0y1CRRPHBJC9I0yVIjn8j8gxVy8PPc6dna0lY1MWwhg==", + "dev": true, + "requires": { + "@angular-devkit/schematics": "^16.0.1", + "@babel/core": "^7.21.8", + "@babel/preset-env": "^7.21.5", + "@compodoc/live-server": "^1.2.3", + "@compodoc/ngd-transformer": "^2.1.3", + "chalk": "4.1.2", + "cheerio": "^1.0.0-rc.12", + "chokidar": "^3.5.3", + "colors": "1.4.0", + "commander": "^10.0.1", + "cosmiconfig": "^8.1.3", + "decache": "^4.6.1", + "fancy-log": "^2.0.0", + "fast-glob": "^3.2.12", + "fs-extra": "^11.1.1", + "glob": "^10.2.4", + "handlebars": "^4.7.7", + "html-entities": "^2.3.3", + "i18next": "^22.4.15", + "inside": "^1.0.0", + "json5": "^2.2.3", + "lodash": "^4.17.21", + "loglevel": "^1.8.1", + "loglevel-plugin-prefix": "^0.8.4", + "lunr": "^2.3.9", + "marked": "4.3.0", + "minimist": "^1.2.8", + "opencollective-postinstall": "^2.0.3", + "os-name": "4.0.1", + "pdfjs-dist": "2.12.313", + "pdfmake": "^0.2.7", + "semver": "^7.5.1", + "traverse": "^0.6.7", + "ts-morph": "^18.0.0", + "uuid": "^9.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "d3-time-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", - "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "requires": { - "d3-time": "1 - 3" - } + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } }, - "d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==" - }, - "d3-transition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "requires": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - } + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "d3-zoom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", - "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "2 - 3", - "d3-transition": "2 - 3" - } + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "dagre-d3-es": { - "version": "7.0.10", - "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.10.tgz", - "integrity": "sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==", - "requires": { - "d3": "^7.8.2", - "lodash-es": "^4.17.21" - } + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "dash-ast": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", - "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==", - "dev": true - }, - "data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "dev": true - }, - "data-urls": { - "version": "2.0.0", - "dev": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } + "commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true }, - "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==" + "fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } }, - "dayjs": { - "version": "1.11.9", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", - "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==" + "glob": { + "version": "10.3.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", + "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + } }, - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } + "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 }, - "decache": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.2.tgz", - "integrity": "sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==", - "dev": true, - "requires": { - "callsite": "^1.0.0" - } + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" - }, - "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==", - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==" - } - } + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, - "decimal.js": { - "version": "10.3.1", - "dev": true + "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 }, - "decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "requires": { - "character-entities": "^2.0.0" - } + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } }, - "dedent": { - "version": "0.7.0", - "dev": true + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, - "deep-eql": { - "version": "3.0.1", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "@compodoc/live-server": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@compodoc/live-server/-/live-server-1.2.3.tgz", + "integrity": "sha512-hDmntVCyjjaxuJzPzBx68orNZ7TW4BtHWMnXlIVn5dqhK7vuFF/11hspO1cMmc+2QTYgqde1TBcb3127S7Zrow==", + "dev": true, + "requires": { + "chokidar": "^3.5.2", + "colors": "1.4.0", + "connect": "^3.7.0", + "cors": "latest", + "event-stream": "4.0.1", + "faye-websocket": "0.11.x", + "http-auth": "4.1.9", + "http-auth-connect": "^1.0.5", + "morgan": "^1.10.0", + "object-assign": "latest", + "open": "8.4.0", + "proxy-middleware": "latest", + "send": "latest", + "serve-index": "^1.9.1" + } + }, + "@compodoc/ngd-core": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@compodoc/ngd-core/-/ngd-core-2.1.1.tgz", + "integrity": "sha512-Z+wE6wWZYVnudRYg6qunDlyh3Orw39Ib66Gvrz5kX5u7So+iu3tr6sQJdqH6yGS3hAjig5avlfhWLlgsb6/x1Q==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.3", + "fancy-log": "^2.0.0", + "typescript": "^5.0.4" + }, + "dependencies": { + "typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true + } + } + }, + "@compodoc/ngd-transformer": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@compodoc/ngd-transformer/-/ngd-transformer-2.1.3.tgz", + "integrity": "sha512-oWxJza7CpWR8/FeWYfE6j+jgncnGBsTWnZLt5rD2GUpsGSQTuGrsFPnmbbaVLgRS5QIVWBJYke7QFBr/7qVMWg==", + "dev": true, + "requires": { + "@aduh95/viz.js": "3.4.0", + "@compodoc/ngd-core": "~2.1.1", + "dot": "^2.0.0-beta.1", + "fs-extra": "^11.1.1" + }, + "dependencies": { + "fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } }, - "deep-is": { - "version": "0.1.4", - "dev": true + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } + } + }, + "@dabh/diagnostics": { + "version": "2.0.3", + "dev": true, + "requires": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "@discordjs/builders": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.5.tgz", + "integrity": "sha512-SdweyCs/+mHj+PNhGLLle7RrRFX9ZAhzynHahMCLqp5Zeq7np7XC6/mgzHc79QoVlQ1zZtOkTTiJpOZu5V8Ufg==", + "dev": true, + "requires": { + "@discordjs/formatters": "^0.3.2", + "@discordjs/util": "^1.0.1", + "@sapphire/shapeshift": "^3.9.2", + "discord-api-types": "0.37.50", + "fast-deep-equal": "^3.1.3", + "ts-mixer": "^6.0.3", + "tslib": "^2.6.1" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + } + } + }, + "@discordjs/collection": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", + "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", + "dev": true + }, + "@discordjs/formatters": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.2.tgz", + "integrity": "sha512-lE++JZK8LSSDRM5nLjhuvWhGuKiXqu+JZ/DsOR89DVVia3z9fdCJVcHF2W/1Zxgq0re7kCzmAJlCMMX3tetKpA==", + "dev": true, + "requires": { + "discord-api-types": "0.37.50" + } + }, + "@discordjs/rest": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.0.1.tgz", + "integrity": "sha512-/eWAdDRvwX/rIE2tuQUmKaxmWeHmGealttIzGzlYfI4+a7y9b6ZoMp8BG/jaohs8D8iEnCNYaZiOFLVFLQb8Zg==", + "dev": true, + "requires": { + "@discordjs/collection": "^1.5.3", + "@discordjs/util": "^1.0.1", + "@sapphire/async-queue": "^1.5.0", + "@sapphire/snowflake": "^3.5.1", + "@vladfrangu/async_event_emitter": "^2.2.2", + "discord-api-types": "0.37.50", + "magic-bytes.js": "^1.0.15", + "tslib": "^2.6.1", + "undici": "5.22.1" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + } + } + }, + "@discordjs/util": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.0.1.tgz", + "integrity": "sha512-d0N2yCxB8r4bn00/hvFZwM7goDcUhtViC5un4hPj73Ba4yrChLSJD8fy7Ps5jpTLg1fE9n4K0xBLc1y9WGwSsA==", + "dev": true + }, + "@discordjs/ws": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.0.1.tgz", + "integrity": "sha512-avvAolBqN3yrSvdBPcJ/0j2g42ABzrv3PEL76e3YTp2WYMGH7cuspkjfSyNWaqYl1J+669dlLp+YFMxSVQyS5g==", + "dev": true, + "requires": { + "@discordjs/collection": "^1.5.3", + "@discordjs/rest": "^2.0.1", + "@discordjs/util": "^1.0.1", + "@sapphire/async-queue": "^1.5.0", + "@types/ws": "^8.5.5", + "@vladfrangu/async_event_emitter": "^2.2.2", + "discord-api-types": "0.37.50", + "tslib": "^2.6.1", + "ws": "^8.13.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true }, - "deepmerge": { - "version": "4.2.2", - "dev": true + "ws": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", + "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", + "dev": true, + "requires": {} + } + } + }, + "@eslint/eslintrc": { + "version": "0.4.3", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "dev": true }, - "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, - "requires": { - "clone": "^1.0.2" - } + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "espree": { + "version": "7.3.1", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + } }, - "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 - }, - "define-properties": { - "version": "1.1.4", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } + "globals": { + "version": "13.15.0", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } }, - "delaunator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", - "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", - "requires": { - "robust-predicates": "^3.0.0" - } + "ms": { + "version": "2.1.2", + "dev": true }, - "delayed-stream": { - "version": "1.0.0", - "dev": true + "strip-json-comments": { + "version": "3.1.1", + "dev": true + } + } + }, + "@foliojs-fork/fontkit": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@foliojs-fork/fontkit/-/fontkit-1.9.1.tgz", + "integrity": "sha512-U589voc2/ROnvx1CyH9aNzOQWJp127JGU1QAylXGQ7LoEAF6hMmahZLQ4eqAcgHUw+uyW4PjtCItq9qudPkK3A==", + "dev": true, + "requires": { + "@foliojs-fork/restructure": "^2.0.2", + "brfs": "^2.0.0", + "brotli": "^1.2.0", + "browserify-optional": "^1.0.1", + "clone": "^1.0.4", + "deep-equal": "^1.0.0", + "dfa": "^1.2.0", + "tiny-inflate": "^1.0.2", + "unicode-properties": "^1.2.2", + "unicode-trie": "^2.0.0" + } + }, + "@foliojs-fork/linebreak": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@foliojs-fork/linebreak/-/linebreak-1.1.1.tgz", + "integrity": "sha512-pgY/+53GqGQI+mvDiyprvPWgkTlVBS8cxqee03ejm6gKAQNsR1tCYCIvN9FHy7otZajzMqCgPOgC4cHdt4JPig==", + "dev": true, + "requires": { + "base64-js": "1.3.1", + "brfs": "^2.0.2", + "unicode-trie": "^2.0.0" + }, + "dependencies": { + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true + } + } + }, + "@foliojs-fork/pdfkit": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@foliojs-fork/pdfkit/-/pdfkit-0.13.0.tgz", + "integrity": "sha512-YXeG1fml9k97YNC9K8e292Pj2JzGt9uOIiBFuQFxHsdQ45BlxW+JU3RQK6JAvXU7kjhjP8rCcYvpk36JLD33sQ==", + "dev": true, + "requires": { + "@foliojs-fork/fontkit": "^1.9.1", + "@foliojs-fork/linebreak": "^1.1.1", + "crypto-js": "^4.0.0", + "png-js": "^1.0.0" + } + }, + "@foliojs-fork/restructure": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@foliojs-fork/restructure/-/restructure-2.0.2.tgz", + "integrity": "sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA==", + "dev": true + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, - "deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" - }, - "dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==" - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "dev": true - }, - "dfa": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", - "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", - "dev": true + "ms": { + "version": "2.1.2", + "dev": true + } + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "dev": true + }, + "@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, + "requires": { + "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" + }, + "dependencies": { + "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 }, - "diff": { - "version": "3.5.0", - "dev": true + "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 }, - "diff-sequences": { - "version": "27.5.1", - "dev": true + "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 }, - "dir-glob": { - "version": "3.0.1", - "requires": { - "path-type": "^4.0.0" - } + "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, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } }, - "discord-api-types": { - "version": "0.37.50", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.50.tgz", - "integrity": "sha512-X4CDiMnDbA3s3RaUXWXmgAIbY1uxab3fqe3qwzg5XutR3wjqi7M3IkgQbsIBzpqBN2YWr/Qdv7JrFRqSgb4TFg==", - "dev": true - }, - "discord.js": { - "version": "14.13.0", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.13.0.tgz", - "integrity": "sha512-Kufdvg7fpyTEwANGy9x7i4od4yu5c6gVddGi5CKm4Y5a6sF0VBODObI3o0Bh7TGCj0LfNT8Qp8z04wnLFzgnbA==", - "dev": true, - "requires": { - "@discordjs/builders": "^1.6.5", - "@discordjs/collection": "^1.5.3", - "@discordjs/formatters": "^0.3.2", - "@discordjs/rest": "^2.0.1", - "@discordjs/util": "^1.0.1", - "@discordjs/ws": "^1.0.1", - "@sapphire/snowflake": "^3.5.1", - "@types/ws": "^8.5.5", - "discord-api-types": "0.37.50", - "fast-deep-equal": "^3.1.3", - "lodash.snakecase": "^4.1.1", - "tslib": "^2.6.1", - "undici": "5.22.1", - "ws": "^8.13.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "ws": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", - "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", - "dev": true, - "requires": {} - } - } + "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, + "requires": { + "ansi-regex": "^6.0.1" + } }, - "doctrine": { - "version": "3.0.0", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } + "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, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } }, - "dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - } + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true - }, - "domexception": { - "version": "2.0.1", - "dev": true, - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "dev": true - } - } + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } }, - "domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "requires": { - "domelementtype": "^2.3.0" - } + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } }, - "dompurify": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.5.tgz", - "integrity": "sha512-F9e6wPGtY+8KNMRAVfxeCOHU0/NPWMSENNq4pQctuXRqqdEPW7q3CrLbR5Nse044WwacyjHGOMlvNsBe1y6z9A==" - }, - "domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dev": true, - "requires": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - } + "p-try": { + "version": "2.2.0", + "dev": true }, - "dot": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/dot/-/dot-2.0.0-beta.1.tgz", - "integrity": "sha512-kxM7fSnNQTXOmaeGuBSXM8O3fEsBb7XSDBllkGbRwa0lJSJTxxDE/4eSNGLKZUmlFw0f1vJ5qSV2BljrgQtgIA==", - "dev": true - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "requires": { - "is-obj": "^2.0.0" - } + "path-exists": { + "version": "4.0.0", + "dev": true }, - "dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", - "dev": true - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", - "requires": { - "readable-stream": "^2.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "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==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } + "resolve-from": { + "version": "5.0.0", + "dev": true + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "dev": true + }, + "@javascript-obfuscator/escodegen": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@javascript-obfuscator/escodegen/-/escodegen-2.3.0.tgz", + "integrity": "sha512-QVXwMIKqYMl3KwtTirYIA6gOCiJ0ZDtptXqAv/8KWLG9uQU2fZqTVy7a/A5RvcoZhbDoFfveTxuGxJ5ibzQtkw==", + "dev": true, + "requires": { + "@javascript-obfuscator/estraverse": "^5.3.0", + "esprima": "^4.0.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "@javascript-obfuscator/estraverse": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@javascript-obfuscator/estraverse/-/estraverse-5.4.0.tgz", + "integrity": "sha512-CZFX7UZVN9VopGbjTx4UXaXsi9ewoM1buL0kY7j1ftYdSs7p2spv9opxFjHlQ/QGTgh4UqufYqJJ0WKLml7b6w==", + "dev": true + }, + "@jest/console": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.4.473", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.473.tgz", - "integrity": "sha512-aVfC8+440vGfl06l8HKKn8/PD5jRfSnLkTTD65EFvU46igbpQRri1gxSzW9/+TeUlwYzrXk1sw867T96zlyECA==", - "dev": true - }, - "elkjs": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.8.2.tgz", - "integrity": "sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==" - }, - "emittery": { - "version": "0.8.1", - "dev": true + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "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==" - }, - "enabled": { - "version": "2.0.0", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "enquirer": { - "version": "2.3.6", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } + "color-name": { + "version": "1.1.4", + "dev": true }, - "entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true - }, - "env-ci": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-9.1.1.tgz", - "integrity": "sha512-Im2yEWeF4b2RAMAaWvGioXk6m0UNaIjD8hj28j2ij5ldnIFrDQT0+pzDvpbRkcjurhXhf/AsBKv8P2rtmGi9Aw==", - "requires": { - "execa": "^7.0.0", - "java-properties": "^1.0.2" - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "error-ex": { - "version": "1.3.2", - "requires": { - "is-arrayish": "^0.2.1" - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/core": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.2", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } }, - "es-abstract": { - "version": "1.20.1", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "es-shim-unscopables": { - "version": "1.0.0", - "dev": true, - "requires": { - "has": "^1.0.3" - } + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "es-to-primitive": { - "version": "1.2.1", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "dev": true, - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } + "color-name": { + "version": "1.1.4", + "dev": true }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-set": "~0.1.5", - "es6-symbol": "~3.1.1", - "event-emitter": "~0.3.5" - } + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } }, - "es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", - "dev": true - }, - "es6-set": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", - "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", - "dev": true, - "requires": { - "d": "^1.0.1", - "es5-ext": "^0.10.62", - "es6-iterator": "~2.0.3", - "es6-symbol": "^3.1.3", - "event-emitter": "^0.3.5", - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - } - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } + "type-fest": { + "version": "0.21.3", + "dev": true + } + } + }, + "@jest/environment": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + } + }, + "@jest/fake-timers": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "@jest/globals": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + } + }, + "@jest/reporters": { + "version": "27.5.1", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "escalade": { - "version": "3.1.1" + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "escape-string-regexp": { - "version": "1.0.5" + "color-name": { + "version": "1.1.4", + "dev": true }, - "escodegen": { - "version": "2.0.0", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "dev": true - } - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "eslint": { - "version": "7.32.0", - "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "acorn": { - "version": "7.4.1", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "astral-regex": { - "version": "2.0.0", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "dev": true - }, - "eslint-scope": { - "version": "5.1.1", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "dev": true - }, - "espree": { - "version": "7.3.1", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "dev": true - } - } - }, - "file-entry-cache": { - "version": "6.0.1", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "flat-cache": { - "version": "3.0.4", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.5", - "dev": true - }, - "globals": { - "version": "13.15.0", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "json-schema-traverse": { - "version": "1.0.0", - "dev": true - }, - "levn": { - "version": "0.4.1", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "ms": { - "version": "2.1.2", - "dev": true - }, - "optionator": { - "version": "0.9.1", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "prelude-ls": { - "version": "1.2.1", - "dev": true - }, - "regexpp": { - "version": "3.2.0", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "7.3.7", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "slice-ansi": { - "version": "4.0.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "table": { - "version": "6.8.0", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "ajv": { - "version": "8.11.0", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - } - } - }, - "type-check": { - "version": "0.4.0", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - } - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/source-map": { + "version": "27.5.1", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + } + }, + "@jest/test-result": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + } + }, + "@jest/transform": { + "version": "27.5.1", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "eslint-config-prettier": { - "version": "7.2.0", - "dev": true, - "requires": {} - }, - "eslint-import-resolver-node": { - "version": "0.3.6", - "dev": true, - "requires": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "dev": true - } - } + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "eslint-module-utils": { - "version": "2.7.3", - "dev": true, - "requires": { - "debug": "^3.2.7", - "find-up": "^2.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "dev": true - } - } + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "eslint-plugin-import": { - "version": "2.26.0", - "dev": true, - "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - } - } + "color-name": { + "version": "1.1.4", + "dev": true }, - "eslint-plugin-jest": { - "version": "24.7.0", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "^4.0.1" - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "eslint-plugin-jsdoc": { - "version": "31.6.1", - "dev": true, - "requires": { - "comment-parser": "1.1.2", - "debug": "^4.3.1", - "jsdoctypeparser": "^9.0.0", - "lodash": "^4.17.20", - "regextras": "^0.7.1", - "semver": "^7.3.4", - "spdx-expression-parse": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "lodash": { - "version": "4.17.21", - "dev": true - }, - "ms": { - "version": "2.1.2", - "dev": true - }, - "semver": { - "version": "7.3.7", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/types": { + "version": "27.5.1", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "eslint-plugin-prettier": { - "version": "3.4.1", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "eslint-plugin-screeps": { - "version": "2.1.0", - "dev": true, - "requires": {} + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } + "color-name": { + "version": "1.1.4", + "dev": true }, - "eslint-visitor-keys": { - "version": "1.3.0", - "dev": true + "has-flag": { + "version": "4.0.0", + "dev": true }, - "esprima": { - "version": "4.0.1" + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.1", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5" + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@octokit/auth-token": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", + "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==" + }, + "@octokit/core": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.0.tgz", + "integrity": "sha512-YbAtMWIrbZ9FCXbLwT9wWB8TyLjq9mxpKdgB3dUNxQcIVTf9hJ70gRPwAcqGZdY6WdJPZ0I7jLaaNDCiloGN2A==", + "requires": { + "@octokit/auth-token": "^4.0.0", + "@octokit/graphql": "^7.0.0", + "@octokit/request": "^8.0.2", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^11.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/endpoint": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.0.tgz", + "integrity": "sha512-szrQhiqJ88gghWY2Htt8MqUDO6++E/EIXqJ2ZEp5ma3uGS46o7LZAzSLt49myB7rT+Hfw5Y6gO3LmOxGzHijAQ==", + "requires": { + "@octokit/types": "^11.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "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==" + } + } + }, + "@octokit/graphql": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.1.tgz", + "integrity": "sha512-T5S3oZ1JOE58gom6MIcrgwZXzTaxRnxBso58xhozxHpOqSTgDS6YNeEUvZ/kRvXgPrRz/KHnZhtb7jUMRi9E6w==", + "requires": { + "@octokit/request": "^8.0.1", + "@octokit/types": "^11.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/openapi-types": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", + "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" + }, + "@octokit/plugin-paginate-rest": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-8.0.0.tgz", + "integrity": "sha512-2xZ+baZWUg+qudVXnnvXz7qfrTmDeYPCzangBVq/1gXxii/OiS//4shJp9dnCCvj1x+JAm9ji1Egwm1BA47lPQ==", + "requires": { + "@octokit/types": "^11.0.0" + } + }, + "@octokit/plugin-retry": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-6.0.0.tgz", + "integrity": "sha512-a1/A4A+PB1QoAHQfLJxGHhLfSAT03bR1jJz3GgQJZvty2ozawFWs93MiBQXO7SL2YbO7CIq0Goj4qLOBj8JeMQ==", + "requires": { + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^11.0.0", + "bottleneck": "^2.15.3" + } + }, + "@octokit/plugin-throttling": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-7.0.0.tgz", + "integrity": "sha512-KL2k/d0uANc8XqP5S64YcNFCudR3F5AaKO39XWdUtlJIjT9Ni79ekWJ6Kj5xvAw87udkOMEPcVf9xEge2+ahew==", + "requires": { + "@octokit/types": "^11.0.0", + "bottleneck": "^2.15.3" + } + }, + "@octokit/request": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.1.1.tgz", + "integrity": "sha512-8N+tdUz4aCqQmXl8FpHYfKG9GelDFd7XGVzyN8rc6WxVlYcfpHECnuRkgquzz+WzvHTK62co5di8gSXnzASZPQ==", + "requires": { + "@octokit/endpoint": "^9.0.0", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^11.1.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "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==" + } + } + }, + "@octokit/request-error": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.0.tgz", + "integrity": "sha512-1ue0DH0Lif5iEqT52+Rf/hf0RmGO9NWFjrzmrkArpG9trFfDM/efx00BJHdLGuro4BR/gECxCU2Twf5OKrRFsQ==", + "requires": { + "@octokit/types": "^11.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "@octokit/types": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-11.1.0.tgz", + "integrity": "sha512-Fz0+7GyLm/bHt8fwEqgvRBWwIV1S6wRRyq+V6exRKLVWaKGsuy6H9QFYeBVDV7rK6fO3XwHgQOPxv+cLj2zpXQ==", + "requires": { + "@octokit/openapi-types": "^18.0.0" + } + }, + "@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, + "optional": true + }, + "@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==" + }, + "@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "requires": { + "graceful-fs": "4.2.10" + } + }, + "@pnpm/npm-conf": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", + "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", + "requires": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + } + }, + "@rollup/plugin-commonjs": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-20.0.0.tgz", + "integrity": "sha512-5K0g5W2Ol8hAcTHqcTBHiA7M58tfmYi1o9KxeJuuRNpGaTa5iLjcyemBitCBcKXaHamOBBEH2dGom6v6Unmqjg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "commondir": "^1.0.1", + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" + } + }, + "@rollup/plugin-node-resolve": { + "version": "13.3.0", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "dependencies": { + "estree-walker": { + "version": "1.0.1", + "dev": true + } + } + }, + "@sapphire/async-queue": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", + "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==", + "dev": true + }, + "@sapphire/shapeshift": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.2.tgz", + "integrity": "sha512-YRbCXWy969oGIdqR/wha62eX8GNHsvyYi0Rfd4rNW6tSVVa8p0ELiMEuOH/k8rgtvRoM+EMV7Csqz77YdwiDpA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "lodash": "^4.17.21" + }, + "dependencies": { + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + } + } + }, + "@sapphire/snowflake": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz", + "integrity": "sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==", + "dev": true + }, + "@semantic-release/changelog": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@semantic-release/changelog/-/changelog-6.0.3.tgz", + "integrity": "sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==", + "dev": true, + "requires": { + "@semantic-release/error": "^3.0.0", + "aggregate-error": "^3.0.0", + "fs-extra": "^11.0.0", + "lodash": "^4.17.4" + }, + "dependencies": { + "@semantic-release/error": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", + "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", + "dev": true }, - "esquery": { - "version": "1.4.0", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "dev": true - } - } + "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, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } }, - "esrecurse": { - "version": "4.3.0", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "dev": true - } - } + "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 }, - "estraverse": { - "version": "4.3.0", - "dev": true + "fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } }, - "estree-is-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz", - "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==", - "dev": true + "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 }, - "estree-walker": { - "version": "2.0.2", - "dev": true + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } }, - "esutils": { - "version": "2.0.3", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, - "event-stream": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz", - "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==", - "dev": true, - "requires": { - "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" - } + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "@semantic-release/commit-analyzer": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz", + "integrity": "sha512-E+dr6L+xIHZkX4zNMe6Rnwg4YQrWNXK+rNsvwOPpdFppvZO1olE2fIgWhv89TkQErygevbjsZFSIxp+u6w2e5g==", + "dev": true, + "requires": { + "conventional-changelog-angular": "^5.0.0", + "conventional-commits-filter": "^2.0.0", + "conventional-commits-parser": "^3.2.3", + "debug": "^4.0.0", + "import-from": "^4.0.0", + "lodash": "^4.17.4", + "micromatch": "^4.0.2" + }, + "dependencies": { + "conventional-changelog-angular": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", + "dev": true, + "requires": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + } }, - "eventemitter3": { - "version": "4.0.7", - "dev": true + "conventional-commits-filter": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", + "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "dev": true, + "requires": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + } }, - "execa": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", - "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "dependencies": { - "human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==" - }, - "is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" - }, - "strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==" - } - } + "conventional-commits-parser": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", + "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", + "dev": true, + "requires": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + } }, - "exit": { - "version": "0.1.2", - "dev": true - }, - "expect": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - } + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dev": true, - "requires": { - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - } - } + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, - "fancy-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-2.0.0.tgz", - "integrity": "sha512-9CzxZbACXMUXW13tS0tI8XsGGmxWzO2DmYrGuBJOJ8k8q2K7hwfJA5qHjuPPe8wtsco33YR9wc+Rlr5wYFvhSA==", - "dev": true, - "requires": { - "color-support": "^1.1.3" - } + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, - "fast-deep-equal": { - "version": "3.1.3", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "dev": true - }, - "fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "requires": { + "readable-stream": "3" + } + } + } + }, + "@semantic-release/error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", + "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==" + }, + "@semantic-release/git": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@semantic-release/git/-/git-10.0.1.tgz", + "integrity": "sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==", + "dev": true, + "requires": { + "@semantic-release/error": "^3.0.0", + "aggregate-error": "^3.0.0", + "debug": "^4.0.0", + "dir-glob": "^3.0.0", + "execa": "^5.0.0", + "lodash": "^4.17.4", + "micromatch": "^4.0.0", + "p-reduce": "^2.0.0" + }, + "dependencies": { + "@semantic-release/error": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", + "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", + "dev": true }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "dev": true - }, - "fast-xml-parser": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.7.tgz", - "integrity": "sha512-J8r6BriSLO1uj2miOk1NW0YVm8AGOOu3Si2HQp/cSmo6EA4m3fcwu2WKjJ4RK9wMLBtg69y1kS8baDiQBR41Ig==", - "dev": true, - "requires": { - "strnum": "^1.0.5" - } + "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, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } }, - "fastestsmallesttextencoderdecoder-encodeinto": { - "version": "1.0.22", - "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder-encodeinto/-/fastestsmallesttextencoderdecoder-encodeinto-1.0.22.tgz", - "integrity": "sha512-csOz3cwJjZY75QcPHnY+v6cKWeofYCmhtLVYaurjcRn5vaNXoYe1Leo1ZkiZIxZp796+J5Z+TtmeMbbfYBfiiQ==", - "dev": true + "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 }, - "fastq": { - "version": "1.13.0", - "requires": { - "reusify": "^1.0.4" - } + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } }, - "fb-watchman": { - "version": "2.0.1", - "dev": true, - "requires": { - "bser": "2.1.1" - } + "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 }, - "fecha": { - "version": "4.2.3", - "dev": true - }, - "fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "dev": true, - "requires": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - } + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, - "figures": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", - "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", - "requires": { - "escape-string-regexp": "^5.0.0", - "is-unicode-supported": "^1.2.0" - }, - "dependencies": { - "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==" - } - } + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true }, - "fill-range": { - "version": "7.0.1", - "requires": { - "to-regex-range": "^5.0.1" - } + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - } + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } }, - "find-cache-dir": { - "version": "3.3.2", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } }, - "find-up": { - "version": "2.1.0", - "requires": { - "locate-path": "^2.0.0" - } + "p-reduce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", + "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", + "dev": true + } + } + }, + "@semantic-release/github": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-9.0.4.tgz", + "integrity": "sha512-kQCGFAsBErvCR6hzNuzu63cj4erQN2krm9zQlg8vl4j5X0mL0d/Ras0wmL5Gkr1TuSS2lweME7M4J5zvtDDDSA==", + "requires": { + "@octokit/core": "^5.0.0", + "@octokit/plugin-paginate-rest": "^8.0.0", + "@octokit/plugin-retry": "^6.0.0", + "@octokit/plugin-throttling": "^7.0.0", + "@semantic-release/error": "^4.0.0", + "aggregate-error": "^4.0.1", + "debug": "^4.3.4", + "dir-glob": "^3.0.1", + "globby": "^13.1.4", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "issue-parser": "^6.0.0", + "lodash-es": "^4.17.21", + "mime": "^3.0.0", + "p-filter": "^3.0.0", + "url-join": "^5.0.0" + }, + "dependencies": { + "agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "requires": { + "debug": "^4.3.4" + } }, - "find-versions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz", - "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==", - "requires": { - "semver-regex": "^4.0.5" - } + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } }, - "fn.name": { - "version": "1.1.0", - "dev": true - }, - "follow-redirects": { - "version": "1.15.1", - "dev": true - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "requires": { - "is-callable": "^1.1.3" - } + "globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } }, - "foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "dependencies": { - "signal-exit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", - "dev": true - } - } + "http-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "requires": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + } }, - "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==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } + "https-proxy-agent": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz", + "integrity": "sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==", + "requires": { + "agent-base": "^7.0.2", + "debug": "4" + } }, - "formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "dev": true, - "requires": { - "fetch-blob": "^3.1.2" - } + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true - }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", - "dev": true - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "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==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" + } + } + }, + "@semantic-release/npm": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-10.0.4.tgz", + "integrity": "sha512-6R3timIQ7VoL2QWRkc9DG8v74RQtRp7UOe/2KbNaqwJ815qOibAv65bH3RtTEhs4axEaHoZf7HDgFs5opaZ9Jw==", + "requires": { + "@semantic-release/error": "^4.0.0", + "aggregate-error": "^4.0.1", + "execa": "^7.0.0", + "fs-extra": "^11.0.0", + "lodash-es": "^4.17.21", + "nerf-dart": "^1.0.0", + "normalize-url": "^8.0.0", + "npm": "^9.5.0", + "rc": "^1.2.8", + "read-pkg": "^8.0.0", + "registry-auth-token": "^5.0.0", + "semver": "^7.1.2", + "tempy": "^3.0.0" + }, + "dependencies": { "fs-extra": { - "version": "8.1.0", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } }, - "fs.realpath": { - "version": "1.0.0", - "dev": true + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } }, - "fsevents": { - "version": "2.3.2", - "dev": true, - "optional": true + "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==", + "requires": { + "lru-cache": "^6.0.0" + } }, - "function-bind": { - "version": "1.1.1" - }, - "function.prototype.name": { - "version": "1.1.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } + } + }, + "@semantic-release/release-notes-generator": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-11.0.4.tgz", + "integrity": "sha512-j0Znnwq9IdWTCGzqSlkLv4MpALTsVDZxcVESzJCNN8pK2BYQlYaKsdZ1Ea/+7RlppI3vjhEi33ZKmjSGY1FLKw==", + "requires": { + "conventional-changelog-angular": "^6.0.0", + "conventional-changelog-writer": "^6.0.0", + "conventional-commits-filter": "^3.0.0", + "conventional-commits-parser": "^4.0.0", + "debug": "^4.0.0", + "get-stream": "^7.0.0", + "import-from": "^4.0.0", + "into-stream": "^7.0.0", + "lodash-es": "^4.17.21", + "read-pkg-up": "^10.0.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } }, - "functional-red-black-tree": { - "version": "1.0.1", - "dev": true - }, - "functions-have-names": { - "version": "1.2.3", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "dev": true - }, - "get-assigned-identifiers": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", - "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "get-func-name": { - "version": "2.0.0", - "dev": true - }, - "get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - } + "get-stream": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-7.0.1.tgz", + "integrity": "sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==" }, - "get-package-type": { - "version": "0.1.0", - "dev": true + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "@sinonjs/commons": { + "version": "1.8.3", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "8.1.0", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@sinonjs/formatio": { + "version": "3.2.2", + "dev": true, + "requires": { + "@sinonjs/commons": "^1", + "@sinonjs/samsam": "^3.1.0" + }, + "dependencies": { + "@sinonjs/samsam": { + "version": "3.3.3", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.3.0", + "array-from": "^2.1.1", + "lodash": "^4.17.15" + } }, - "get-port": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-6.1.2.tgz", - "integrity": "sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw==", - "dev": true + "lodash": { + "version": "4.17.21", + "dev": true + } + } + }, + "@sinonjs/samsam": { + "version": "2.1.3", + "dev": true + }, + "@sinonjs/text-encoding": { + "version": "0.7.1", + "dev": true + }, + "@tootallnate/once": { + "version": "1.1.2", + "dev": true + }, + "@ts-morph/common": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.19.0.tgz", + "integrity": "sha512-Unz/WHmd4pGax91rdIKWi51wnVUW11QttMEPpBiBgIewnc9UQIX7UDLxr5vRlqeByXCwhkF6VabSsI0raWcyAQ==", + "dev": true, + "requires": { + "fast-glob": "^3.2.12", + "minimatch": "^7.4.3", + "mkdirp": "^2.1.6", + "path-browserify": "^1.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } }, - "get-port-please": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.1.1.tgz", - "integrity": "sha512-3UBAyM3u4ZBVYDsxOQfJDxEa6XTbpBDrOjp4mf7ExFRt5BKs/QywQQiJsh2B+hxcZLSapWqCRvElUe8DnKcFHA==", - "dev": true + "minimatch": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", + "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } }, - "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==" - }, - "get-symbol-description": { - "version": "1.0.0", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } + "mkdirp": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz", + "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==", + "dev": true + } + } + }, + "@tsconfig/node10": { + "version": "1.0.9", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.3", + "dev": true + }, + "@types/babel__core": { + "version": "7.1.19", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.4", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.1", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.17.1", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/chai": { + "version": "4.3.1", + "dev": true + }, + "@types/d3-scale": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.3.tgz", + "integrity": "sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==", + "requires": { + "@types/d3-time": "*" + } + }, + "@types/d3-scale-chromatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", + "integrity": "sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw==" + }, + "@types/d3-time": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz", + "integrity": "sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==" + }, + "@types/debug": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", + "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", + "requires": { + "@types/ms": "*" + } + }, + "@types/estree": { + "version": "0.0.39", + "dev": true + }, + "@types/fs-extra": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.2.tgz", + "integrity": "sha512-SvSrYXfWSc7R4eqnOzbQF4TZmfpNSM9FrSWLU3EUnWBuyZqNBOrv1B1JA3byUDPUl9z4Ab3jeZG2eDdySlgNMg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/graceful-fs": { + "version": "4.1.5", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.1.tgz", + "integrity": "sha512-HTLpVXHrY69556ozYkcq47TtQJXpcWAWfkoqz+ZGz2JnmZhzlRjprCIyFnetSy8gpDWwTTGBcRVv1J1I1vBrHw==", + "dev": true, + "requires": { + "jest-diff": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, + "@types/json-schema": { + "version": "7.0.11", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "dev": true + }, + "@types/lodash": { + "version": "3.10.2", + "dev": true + }, + "@types/mdast": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.12.tgz", + "integrity": "sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==", + "requires": { + "@types/unist": "^2" + } + }, + "@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 + }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" + }, + "@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" + }, + "@types/node": { + "version": "13.13.52", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" + }, + "@types/prettier": { + "version": "2.6.3", + "dev": true + }, + "@types/resolve": { + "version": "1.17.1", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/screeps": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@types/screeps/-/screeps-3.3.3.tgz", + "integrity": "sha512-r+ru4iNv8wNaNBWvk2gMXYpG8Ok1GJ8NVV9WBIHa5I+hz2QGttnAus+1whDMIzES8x3yK83Usz+gHqm8ehIW7w==", + "dev": true + }, + "@types/sinon": { + "version": "5.0.7", + "dev": true + }, + "@types/sinon-chai": { + "version": "3.2.8", + "dev": true, + "requires": { + "@types/chai": "*", + "@types/sinon": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.1", + "dev": true + }, + "@types/unist": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.7.tgz", + "integrity": "sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==" + }, + "@types/validator": { + "version": "13.7.17", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.17.tgz", + "integrity": "sha512-aqayTNmeWrZcvnG2MG9eGYI6b7S5fl+yKgPs6bAjOTwPS316R5SxBGKvtSExfyoJU7pIeHJfsHI0Ji41RVMkvQ==", + "dev": true + }, + "@types/ws": { + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/yargs": { + "version": "16.0.4", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.0", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "4.33.0", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "git-log-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.0.tgz", - "integrity": "sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA==", - "requires": { - "argv-formatter": "~1.0.0", - "spawn-error-forwarder": "~1.0.0", - "split2": "~1.0.0", - "stream-combiner2": "~1.1.1", - "through2": "~2.0.0", - "traverse": "~0.6.6" - }, - "dependencies": { - "split2": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", - "integrity": "sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==", - "requires": { - "through2": "~2.0.0" - } - } - } + "ignore": { + "version": "5.2.0", + "dev": true }, - "glob": { - "version": "7.2.3", - "dev": true, - "requires": { - "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" - } + "ms": { + "version": "2.1.2", + "dev": true }, - "glob-parent": { - "version": "5.1.2", - "requires": { - "is-glob": "^4.0.1" - } + "regexpp": { + "version": "3.2.0", + "dev": true }, - "globals": { - "version": "11.12.0", - "dev": true + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/experimental-utils": { + "version": "4.33.0", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + } }, - "globby": { - "version": "11.1.0", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "ignore": { - "version": "5.2.0", - "dev": true - } - } + "eslint-visitor-keys": { + "version": "2.1.0", + "dev": true + } + } + }, + "@typescript-eslint/parser": { + "version": "4.33.0", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "debug": "^4.3.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3" - } + "ms": { + "version": "2.1.2", + "dev": true + } + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.33.0", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" + } + }, + "@typescript-eslint/types": { + "version": "4.33.0", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "4.33.0", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "graceful-fs": { - "version": "4.2.10" - }, - "handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.0" - } + "ms": { + "version": "2.1.2", + "dev": true + }, + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.33.0", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.33.0", + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "dev": true + } + } + }, + "@vladfrangu/async_event_emitter": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz", + "integrity": "sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==", + "dev": true + }, + "abab": { + "version": "2.0.6", + "dev": true + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "accumulate-stream": { + "version": "5.0.0", + "dev": true, + "requires": { + "bytes": "^3.1.0", + "ms": "^2.1.3" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "dev": true + } + } + }, + "acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true + }, + "acorn-globals": { + "version": "6.0.0", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "dev": true + } + } + }, + "acorn-jsx": { + "version": "5.3.2", + "dev": true, + "requires": {} + }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + } + } + }, + "acorn-walk": { + "version": "7.2.0", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "dev": true, + "requires": { + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "dev": true + } + } + }, + "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==", + "requires": { + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "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 + } + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true, + "optional": true + }, + "ansi-colors": { + "version": "4.1.3", + "dev": true + }, + "ansi-escapes": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", + "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", + "requires": { + "type-fest": "^3.0.0" + }, + "dependencies": { + "type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==" + } + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "3.2.1", + "requires": { + "color-convert": "^1.9.0" + } + }, + "ansicolors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==" + }, + "anymatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "apache-crypt": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.6.tgz", + "integrity": "sha512-072WetlM4blL8PREJVeY+WHiUh1R5VNt2HfceGS8aKqttPHcmqE5pkKuXPz/ULmJOFkc8Hw3kfKl6vy7Qka6DA==", + "dev": true, + "requires": { + "unix-crypt-td-js": "^1.1.4" + } + }, + "apache-md5": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.8.tgz", + "integrity": "sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA==", + "dev": true + }, + "arg": { + "version": "4.1.3", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "argv-formatter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", + "integrity": "sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==" + }, + "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 + }, + "array-from": { + "version": "2.1.1", + "dev": true + }, + "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==" + }, + "array-includes": { + "version": "3.1.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + } + }, + "array-union": { + "version": "2.1.0", + "dev": true + }, + "array.prototype.flat": { + "version": "1.3.0", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + } + }, + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true + }, + "assert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", + "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", + "dev": true, + "requires": { + "es6-object-assign": "^1.1.0", + "is-nan": "^1.2.1", + "object-is": "^1.0.1", + "util": "^0.12.0" + } + }, + "assertion-error": { + "version": "1.1.0", + "dev": true + }, + "ast-transform": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/ast-transform/-/ast-transform-0.0.0.tgz", + "integrity": "sha512-e/JfLiSoakfmL4wmTGPjv0HpTICVmxwXgYOB8x+mzozHL8v+dSfCbrJ8J8hJ0YBP0XcYu1aLZ6b/3TnxNK3P2A==", + "dev": true, + "requires": { + "escodegen": "~1.2.0", + "esprima": "~1.0.4", + "through": "~2.3.4" + }, + "dependencies": { + "escodegen": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.2.0.tgz", + "integrity": "sha512-yLy3Cc+zAC0WSmoT2fig3J87TpQ8UaZGx8ahCAs9FL8qNbyV7CVyPKS74DG4bsHiL5ew9sxdYx131OkBQMFnvA==", + "dev": true, + "requires": { + "esprima": "~1.0.4", + "estraverse": "~1.5.0", + "esutils": "~1.0.0", + "source-map": "~0.1.30" + } }, - "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==" + "esprima": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA==", + "dev": true }, - "has": { - "version": "1.0.3", - "requires": { - "function-bind": "^1.1.1" - } + "estraverse": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz", + "integrity": "sha512-FpCjJDfmo3vsc/1zKSeqR5k42tcIhxFIlvq+h9j0fO2q/h2uLKyweq7rYJ+0CoVvrGQOxIS5wyBrW/+vF58BUQ==", + "dev": true }, - "has-bigints": { - "version": "1.0.2", - "dev": true + "esutils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz", + "integrity": "sha512-x/iYH53X3quDwfHRz4y8rn4XcEwwCJeWsul9pF1zldMbGtgOtMNBEOuYWwB1EQlK2LRa1fev3YAgym/RElp5Cg==", + "dev": true }, - "has-flag": { - "version": "3.0.0" + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", + "dev": true, + "optional": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "ast-types": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.7.8.tgz", + "integrity": "sha512-RIOpVnVlltB6PcBJ5BMLx+H+6JJ/zjDGU0t7f0L6c2M1dqcK92VQopLBlPQ9R80AVXelfqYgjcPLtHtDbNFg0Q==", + "dev": true + }, + "async": { + "version": "3.2.4", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "dev": true + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, + "axios": { + "version": "0.21.4", + "dev": true, + "requires": { + "follow-redirects": "^1.14.0" + } + }, + "babel-jest": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "has-property-descriptors": { - "version": "1.0.0", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true - }, - "has-symbols": { - "version": "1.0.3", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "heap": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", - "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" + "color-name": { + "version": "1.1.4", + "dev": true }, - "hook-std": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-3.0.0.tgz", - "integrity": "sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==" + "has-flag": { + "version": "4.0.0", + "dev": true }, - "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==", - "requires": { - "lru-cache": "^7.5.1" - }, - "dependencies": { - "lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" - } - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "27.5.1", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", + "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.2", + "semver": "^6.3.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", + "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.4.2", + "core-js-compat": "^3.31.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", + "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.4.2" + } + }, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "27.5.1", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "dev": true + }, + "base32768": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base32768/-/base32768-3.0.1.tgz", + "integrity": "sha512-dNGY49X0IKN1kDl9y/6sii1Vced+f+4uAqOeRz/PshjNdPwSD+ntnHOg/YgDbLSZetp94d/XxGdpfbXDKv8BVQ==" + }, + "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 + }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", + "dev": true + }, + "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==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "bottleneck": { + "version": "2.19.5", + "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", + "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" + }, + "brace-expansion": { + "version": "1.1.11", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "requires": { + "fill-range": "^7.0.1" + } + }, + "brfs": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brfs/-/brfs-2.0.2.tgz", + "integrity": "sha512-IrFjVtwu4eTJZyu8w/V2gxU7iLTtcHih67sgEdzrhjLBMHp2uYefUBfdM4k2UvcuWMgV7PQDZHSLeNWnLFKWVQ==", + "dev": true, + "requires": { + "quote-stream": "^1.0.1", + "resolve": "^1.1.5", + "static-module": "^3.0.2", + "through2": "^2.0.0" + } + }, + "brotli": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", + "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", + "dev": true, + "requires": { + "base64-js": "^1.1.2" + } + }, + "browser-process-hrtime": { + "version": "1.0.0", + "dev": true + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", + "dev": true + } + } + }, + "browserify-optional": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-optional/-/browserify-optional-1.0.1.tgz", + "integrity": "sha512-VrhjbZ+Ba5mDiSYEuPelekQMfTbhcA2DhLk2VQWqdcCROWeFqlTcXZ7yfRkXCIl8E+g4gINJYJiRB7WEtfomAQ==", + "dev": true, + "requires": { + "ast-transform": "0.0.0", + "ast-types": "^0.7.0", + "browser-resolve": "^1.8.1" + } + }, + "browserslist": { + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + } + }, + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, + "bser": { + "version": "2.1.1", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", + "dev": true + }, + "buffer-from": { + "version": "1.1.2", + "dev": true + }, + "bufferutil": { + "version": "4.0.6", + "dev": true, + "optional": true, + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "builtin-modules": { + "version": "3.3.0", + "dev": true + }, + "busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dev": true, + "requires": { + "streamsearch": "^1.1.0" + } + }, + "bytes": { + "version": "3.1.2", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==", + "dev": true + }, + "callsites": { + "version": "3.1.0" + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "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==", + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, + "caniuse-lite": { + "version": "1.0.30001517", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz", + "integrity": "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==", + "dev": true + }, + "cardinal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", + "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==", + "requires": { + "ansicolors": "~0.3.2", + "redeyed": "~2.1.0" + } + }, + "chai": { + "version": "4.3.6", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + } + }, + "chalk": { + "version": "2.4.2", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chance": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/chance/-/chance-1.1.9.tgz", + "integrity": "sha512-TfxnA/DcZXRTA4OekA2zL9GH8qscbbl6X0ZqU4tXhGveVY/mXWvEQLt5GwZcYXTEyEFflVtj+pG8nc8EwSm1RQ==", + "dev": true + }, + "char-regex": { + "version": "1.0.2", + "dev": true + }, + "character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==" + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "dev": true + }, + "check-error": { + "version": "1.0.2", + "dev": true + }, + "cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "dev": true, + "requires": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "dependencies": { + "parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "requires": { + "entities": "^4.4.0" + } + } + } + }, + "cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + } + }, + "child-shell": { + "version": "5.0.0", + "dev": true, + "requires": { + "accumulate-stream": "^5.0.0", + "debug": "^4.3.2", + "kind-of": "^6.0.3", + "nanoid": "^3.1.30", + "p-queue": "6.6.2", + "p-timeout": "4.1.0", + "trim-buffer": "^5.0.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "html-encoding-sniffer": { - "version": "2.0.1", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.5" - } + "ms": { + "version": "2.1.2", + "dev": true + } + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "ci-info": { + "version": "3.3.2", + "dev": true + }, + "cjs-module-lexer": { + "version": "1.2.2", + "dev": true + }, + "class-validator": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.0.tgz", + "integrity": "sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==", + "dev": true, + "requires": { + "@types/validator": "^13.7.10", + "libphonenumber-js": "^1.10.14", + "validator": "^13.7.0" + } + }, + "clean-stack": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", + "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", + "requires": { + "escape-string-regexp": "5.0.0" + }, + "dependencies": { + "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==" + } + } + }, + "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, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", + "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", + "dev": true + }, + "cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true + }, + "co": { + "version": "4.6.0", + "dev": true + }, + "code-block-writer": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-12.0.0.tgz", + "integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==", + "dev": true + }, + "collect-v8-coverage": { + "version": "1.0.1", + "dev": true + }, + "color": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "color-convert": { + "version": "1.9.3", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3" + }, + "color-string": { + "version": "1.9.1", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "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 + }, + "colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true + }, + "colorspace": { + "version": "1.1.4", + "dev": true, + "requires": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, + "combined-stream": { + "version": "1.0.8", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "dev": true + }, + "comment-parser": { + "version": "1.1.2", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "dev": true + }, + "compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "requires": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "concat-map": { + "version": "0.0.1", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } }, - "html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", - "dev": true - }, - "html-escaper": { - "version": "2.0.2", - "dev": true - }, - "htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } + "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 }, - "http-auth": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-4.1.9.tgz", - "integrity": "sha512-kvPYxNGc9EKGTXvOMnTBQw2RZfuiSihK/mLw/a4pbtRueTE45S55Lw/3k5CktIf7Ak0veMKEIteDj4YkNmCzmQ==", - "dev": true, - "requires": { - "apache-crypt": "^1.1.2", - "apache-md5": "^1.0.6", - "bcryptjs": "^2.4.3", - "uuid": "^8.3.2" - }, - "dependencies": { - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - } - } + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + } + }, + "conventional-changelog-angular": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz", + "integrity": "sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==", + "requires": { + "compare-func": "^2.0.0" + } + }, + "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==", + "requires": { + "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" + }, + "dependencies": { + "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==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "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==", + "requires": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.1" + } + }, + "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==", + "requires": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.3.5", + "meow": "^8.1.2", + "split2": "^3.2.2" + } + }, + "convert-source-map": { + "version": "1.8.0", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "dev": true + } + } + }, + "core-js-compat": { + "version": "3.31.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.1.tgz", + "integrity": "sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA==", + "dev": true, + "requires": { + "browserslist": "^4.21.9" + } + }, + "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==" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "cose-base": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", + "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", + "requires": { + "layout-base": "^1.0.0" + } + }, + "cosmiconfig": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "requires": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + } + } + }, + "create-require": { + "version": "1.1.1", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "dev": true + }, + "crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==", + "dev": true + }, + "crypto-random-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + "requires": { + "type-fest": "^1.0.1" + }, + "dependencies": { + "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==" + } + } + }, + "css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true + }, + "cssom": { + "version": "0.4.4", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "dev": true + } + } + }, + "cytoscape": { + "version": "3.25.0", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.25.0.tgz", + "integrity": "sha512-7MW3Iz57mCUo6JQCho6CmPBCbTlJr7LzyEtIkutG255HLVd4XuBg2I9BkTZLI/e4HoaOB/BiAzXuQybQ95+r9Q==", + "requires": { + "heap": "^0.2.6", + "lodash": "^4.17.21" + }, + "dependencies": { + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + } + } + }, + "cytoscape-cose-bilkent": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", + "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", + "requires": { + "cose-base": "^1.0.0" + } + }, + "cytoscape-fcose": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", + "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", + "requires": { + "cose-base": "^2.2.0" + }, + "dependencies": { + "cose-base": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", + "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", + "requires": { + "layout-base": "^2.0.0" + } }, - "http-auth-connect": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/http-auth-connect/-/http-auth-connect-1.0.6.tgz", - "integrity": "sha512-yaO0QSCPqGCjPrl3qEEHjJP+lwZ6gMpXLuCBE06eWwcXomkI5TARtu0kxf9teFuBj6iaV3Ybr15jaWUvbzNzHw==", - "dev": true + "layout-base": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", + "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==" + } + } + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "d3": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", + "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==", + "requires": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + } + }, + "d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "requires": { + "internmap": "1 - 2" + } + }, + "d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==" + }, + "d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "requires": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + } + }, + "d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "requires": { + "d3-path": "1 - 3" + } + }, + "d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==" + }, + "d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "requires": { + "d3-array": "^3.2.0" + } + }, + "d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "requires": { + "delaunator": "5" + } + }, + "d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==" + }, + "d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "requires": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + } + }, + "d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "requires": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "dependencies": { - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - } - } + "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==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==" + }, + "d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "requires": { + "d3-dsv": "1 - 3" + } + }, + "d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "requires": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + } + }, + "d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==" + }, + "d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", + "requires": { + "d3-array": "2.5.0 - 3" + } + }, + "d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==" + }, + "d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "requires": { + "d3-color": "1 - 3" + } + }, + "d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==" + }, + "d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==" + }, + "d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==" + }, + "d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==" + }, + "d3-sankey": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", + "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", + "requires": { + "d3-array": "1 - 2", + "d3-shape": "^1.2.0" + }, + "dependencies": { + "d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "requires": { + "internmap": "^1.0.0" + } }, - "http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true + "d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" }, - "http-proxy-agent": { - "version": "4.0.1", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "dev": true - } - } + "d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "requires": { + "d3-path": "1" + } }, - "https-proxy-agent": { - "version": "5.0.1", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "dev": true - } - } + "internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + } + } + }, + "d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "requires": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + } + }, + "d3-scale-chromatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", + "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", + "requires": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + } + }, + "d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==" + }, + "d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "requires": { + "d3-path": "^3.1.0" + } + }, + "d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "requires": { + "d3-array": "2 - 3" + } + }, + "d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "requires": { + "d3-time": "1 - 3" + } + }, + "d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==" + }, + "d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "requires": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + } + }, + "d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "requires": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + } + }, + "dagre-d3-es": { + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.10.tgz", + "integrity": "sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==", + "requires": { + "d3": "^7.8.2", + "lodash-es": "^4.17.21" + } + }, + "dash-ast": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", + "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==", + "dev": true + }, + "data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "dev": true + }, + "data-urls": { + "version": "2.0.0", + "dev": true, + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } + }, + "dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==" + }, + "dayjs": { + "version": "1.11.9", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", + "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==" + }, + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decache": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.2.tgz", + "integrity": "sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==", + "dev": true, + "requires": { + "callsite": "^1.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" + }, + "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==", + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==" + } + } + }, + "decimal.js": { + "version": "10.3.1", + "dev": true + }, + "decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "requires": { + "character-entities": "^2.0.0" + } + }, + "dedent": { + "version": "0.7.0", + "dev": true + }, + "deep-eql": { + "version": "3.0.1", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "deep-is": { + "version": "0.1.4", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "dev": true + }, + "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, + "requires": { + "clone": "^1.0.2" + } + }, + "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 + }, + "define-properties": { + "version": "1.1.4", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "delaunator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", + "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", + "requires": { + "robust-predicates": "^3.0.0" + } + }, + "delayed-stream": { + "version": "1.0.0", + "dev": true + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" + }, + "dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "detect-newline": { + "version": "3.1.0", + "dev": true + }, + "dfa": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", + "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", + "dev": true + }, + "diff": { + "version": "3.5.0", + "dev": true + }, + "diff-sequences": { + "version": "27.5.1", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "requires": { + "path-type": "^4.0.0" + } + }, + "discord-api-types": { + "version": "0.37.50", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.50.tgz", + "integrity": "sha512-X4CDiMnDbA3s3RaUXWXmgAIbY1uxab3fqe3qwzg5XutR3wjqi7M3IkgQbsIBzpqBN2YWr/Qdv7JrFRqSgb4TFg==", + "dev": true + }, + "discord.js": { + "version": "14.13.0", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.13.0.tgz", + "integrity": "sha512-Kufdvg7fpyTEwANGy9x7i4od4yu5c6gVddGi5CKm4Y5a6sF0VBODObI3o0Bh7TGCj0LfNT8Qp8z04wnLFzgnbA==", + "dev": true, + "requires": { + "@discordjs/builders": "^1.6.5", + "@discordjs/collection": "^1.5.3", + "@discordjs/formatters": "^0.3.2", + "@discordjs/rest": "^2.0.1", + "@discordjs/util": "^1.0.1", + "@discordjs/ws": "^1.0.1", + "@sapphire/snowflake": "^3.5.1", + "@types/ws": "^8.5.5", + "discord-api-types": "0.37.50", + "fast-deep-equal": "^3.1.3", + "lodash.snakecase": "^4.1.1", + "tslib": "^2.6.1", + "undici": "5.22.1", + "ws": "^8.13.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true }, - "human-signals": { - "version": "2.1.0", - "dev": true - }, - "i18next": { - "version": "22.5.1", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.5.1.tgz", - "integrity": "sha512-8TGPgM3pAD+VRsMtUMNknRz3kzqwp/gPALrWMsDnmC1mKqJwpWyooQRLMcbTwq8z8YwSmuj+ZYvc+xCuEpkssA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.20.6" - } + "ws": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", + "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", + "dev": true, + "requires": {} + } + } + }, + "doctrine": { + "version": "3.0.0", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domexception": { + "version": "2.0.1", + "dev": true, + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "dev": true + } + } + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0" + } + }, + "dompurify": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.5.tgz", + "integrity": "sha512-F9e6wPGtY+8KNMRAVfxeCOHU0/NPWMSENNq4pQctuXRqqdEPW7q3CrLbR5Nse044WwacyjHGOMlvNsBe1y6z9A==" + }, + "domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + } + }, + "dot": { + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/dot/-/dot-2.0.0-beta.1.tgz", + "integrity": "sha512-kxM7fSnNQTXOmaeGuBSXM8O3fEsBb7XSDBllkGbRwa0lJSJTxxDE/4eSNGLKZUmlFw0f1vJ5qSV2BljrgQtgIA==", + "dev": true + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "requires": { + "is-obj": "^2.0.0" + } + }, + "dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "dev": true + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "requires": { + "readable-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } }, - "iconv-lite": { - "version": "0.4.24", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } + "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==" }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.473", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.473.tgz", + "integrity": "sha512-aVfC8+440vGfl06l8HKKn8/PD5jRfSnLkTTD65EFvU46igbpQRri1gxSzW9/+TeUlwYzrXk1sw867T96zlyECA==", + "dev": true + }, + "elkjs": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.8.2.tgz", + "integrity": "sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==" + }, + "emittery": { + "version": "0.8.1", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "enabled": { + "version": "2.0.0", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enquirer": { + "version": "2.3.6", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true + }, + "env-ci": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-9.1.1.tgz", + "integrity": "sha512-Im2yEWeF4b2RAMAaWvGioXk6m0UNaIjD8hj28j2ij5ldnIFrDQT0+pzDvpbRkcjurhXhf/AsBKv8P2rtmGi9Aw==", + "requires": { + "execa": "^7.0.0", + "java-properties": "^1.0.2" + } + }, + "error-ex": { + "version": "1.3.2", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.20.1", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-shim-unscopables": { + "version": "1.0.0", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "dev": true, + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "es6-object-assign": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", + "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", + "dev": true + }, + "es6-set": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", + "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", + "dev": true, + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "es6-iterator": "~2.0.3", + "es6-symbol": "^3.1.3", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "dependencies": { + "type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + } + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "escalade": { + "version": "3.1.1" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5" + }, + "escodegen": { + "version": "2.0.0", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "eslint": { + "version": "7.32.0", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } }, - "ignore": { - "version": "4.0.6", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } + "acorn": { + "version": "7.4.1", + "dev": true }, - "import-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz", - "integrity": "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==" - }, - "import-local": { - "version": "3.1.0", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "imurmurhash": { - "version": "0.1.4", - "dev": true + "astral-regex": { + "version": "2.0.0", + "dev": true }, - "indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==" + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "inflight": { - "version": "1.0.6", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "inherits": { - "version": "2.0.4" + "color-name": { + "version": "1.1.4", + "dev": true }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "inside": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/inside/-/inside-1.0.0.tgz", - "integrity": "sha512-tvFwvS4g7q6iDot/4FjtWFHwwpv6TVvEumbTdLQilk1F07ojakbXPQcvf3kMAlyNDpzKRzn+d33O3RuXODuxZQ==", - "dev": true - }, - "internal-slot": { - "version": "1.0.3", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "internmap": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==" - }, - "interpret": { - "version": "1.4.0", - "dev": true - }, - "into-stream": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-7.0.0.tgz", - "integrity": "sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==", - "requires": { - "from2": "^2.3.0", - "p-is-promise": "^3.0.0" - } + "escape-string-regexp": { + "version": "4.0.0", + "dev": true }, - "inversify": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/inversify/-/inversify-6.0.1.tgz", - "integrity": "sha512-B3ex30927698TJENHR++8FfEaJGqoWOgI6ZY5Ht/nLUsFCwHn6akbwtnUAPCgUepAnTpe2qHxhDNjoKLyz6rgQ==", - "dev": true - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } + "eslint-scope": { + "version": "5.1.1", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "dev": true + } + } }, - "is-arrayish": { - "version": "0.2.1" + "eslint-visitor-keys": { + "version": "2.1.0", + "dev": true + }, + "espree": { + "version": "7.3.1", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "dev": true + } + } + }, + "file-entry-cache": { + "version": "6.0.1", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "flat-cache": { + "version": "3.0.4", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.5", + "dev": true }, - "is-bigint": { - "version": "1.0.4", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } + "globals": { + "version": "13.15.0", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "is-boolean-object": { - "version": "1.1.2", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } + "json-schema-traverse": { + "version": "1.0.0", + "dev": true }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-builtin-module": { - "version": "3.1.0", - "dev": true, - "requires": { - "builtin-modules": "^3.0.0" - } + "levn": { + "version": "0.4.1", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } }, - "is-callable": { - "version": "1.2.4", - "dev": true + "ms": { + "version": "2.1.2", + "dev": true }, - "is-core-module": { - "version": "2.9.0", - "requires": { - "has": "^1.0.3" - } + "optionator": { + "version": "0.9.1", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } }, - "is-date-object": { - "version": "1.0.5", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } + "prelude-ls": { + "version": "1.2.1", + "dev": true }, - "is-docker": { - "version": "2.2.1", - "dev": true + "regexpp": { + "version": "3.2.0", + "dev": true }, - "is-extglob": { - "version": "2.1.1" + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-generator-fn": { - "version": "2.1.0", - "dev": true - }, - "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, - "requires": { - "has-tostringtag": "^1.0.0" - } + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "slice-ansi": { + "version": "4.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } }, - "is-glob": { - "version": "4.0.3", - "requires": { - "is-extglob": "^2.1.1" - } + "strip-json-comments": { + "version": "3.1.1", + "dev": true }, - "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 - }, - "is-module": { - "version": "1.0.0", - "dev": true - }, - "is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "table": { + "version": "6.8.0", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } } + } }, - "is-negative-zero": { - "version": "2.0.2", - "dev": true - }, - "is-number": { - "version": "7.0.0" - }, - "is-number-object": { - "version": "1.0.7", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } + "type-check": { + "version": "0.4.0", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + } + } + }, + "eslint-config-prettier": { + "version": "7.2.0", + "dev": true, + "requires": {} + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "dev": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "requires": { + "ms": "^2.1.1" + } }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + "ms": { + "version": "2.1.3", + "dev": true + } + } + }, + "eslint-module-utils": { + "version": "2.7.3", + "dev": true, + "requires": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "requires": { + "ms": "^2.1.1" + } }, - "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==" + "ms": { + "version": "2.1.3", + "dev": true + } + } + }, + "eslint-plugin-import": { + "version": "2.26.0", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + } + } + }, + "eslint-plugin-jest": { + "version": "24.7.0", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "^4.0.1" + } + }, + "eslint-plugin-jsdoc": { + "version": "31.6.1", + "dev": true, + "requires": { + "comment-parser": "1.1.2", + "debug": "^4.3.1", + "jsdoctypeparser": "^9.0.0", + "lodash": "^4.17.20", + "regextras": "^0.7.1", + "semver": "^7.3.4", + "spdx-expression-parse": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "is-plain-object": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", - "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", - "dev": true - }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "dev": true - }, - "is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "requires": { - "@types/estree": "*" - } + "lodash": { + "version": "4.17.21", + "dev": true }, - "is-regex": { - "version": "1.1.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } + "ms": { + "version": "2.1.2", + "dev": true }, - "is-shared-array-buffer": { - "version": "1.0.2", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "eslint-plugin-prettier": { + "version": "3.4.1", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-plugin-screeps": { + "version": "2.1.0", + "dev": true, + "requires": {} + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "dev": true + }, + "esprima": { + "version": "4.0.1" + }, + "esquery": { + "version": "1.4.0", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "dev": true + }, + "estree-is-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz", + "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "event-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz", + "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==", + "dev": true, + "requires": { + "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" + } + }, + "eventemitter3": { + "version": "4.0.7", + "dev": true + }, + "execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "dependencies": { + "human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==" }, "is-stream": { - "version": "2.0.1", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" }, - "is-symbol": { - "version": "1.0.4", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "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==", - "requires": { - "text-extensions": "^1.0.0" - } - }, - "is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dev": true, - "requires": { - "which-typed-array": "^1.1.11" - } - }, - "is-typedarray": { - "version": "1.0.0", - "dev": true - }, - "is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==" - }, - "is-weakref": { - "version": "1.0.2", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==" + } + } + }, + "exit": { + "version": "0.1.2", + "dev": true + }, + "expect": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + } + }, + "ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, + "requires": { + "type": "^2.7.2" + }, + "dependencies": { + "type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + } + } + }, + "fancy-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-2.0.0.tgz", + "integrity": "sha512-9CzxZbACXMUXW13tS0tI8XsGGmxWzO2DmYrGuBJOJ8k8q2K7hwfJA5qHjuPPe8wtsco33YR9wc+Rlr5wYFvhSA==", + "dev": true, + "requires": { + "color-support": "^1.1.3" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "dev": true + }, + "fast-diff": { + "version": "1.2.0", + "dev": true + }, + "fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "dev": true + }, + "fast-xml-parser": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.7.tgz", + "integrity": "sha512-J8r6BriSLO1uj2miOk1NW0YVm8AGOOu3Si2HQp/cSmo6EA4m3fcwu2WKjJ4RK9wMLBtg69y1kS8baDiQBR41Ig==", + "dev": true, + "requires": { + "strnum": "^1.0.5" + } + }, + "fastestsmallesttextencoderdecoder-encodeinto": { + "version": "1.0.22", + "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder-encodeinto/-/fastestsmallesttextencoderdecoder-encodeinto-1.0.22.tgz", + "integrity": "sha512-csOz3cwJjZY75QcPHnY+v6cKWeofYCmhtLVYaurjcRn5vaNXoYe1Leo1ZkiZIxZp796+J5Z+TtmeMbbfYBfiiQ==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fb-watchman": { + "version": "2.0.1", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "fecha": { + "version": "4.2.3", + "dev": true + }, + "fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "dev": true, + "requires": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + } + }, + "figures": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", + "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", + "requires": { + "escape-string-regexp": "^5.0.0", + "is-unicode-supported": "^1.2.0" + }, + "dependencies": { + "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==" + } + } + }, + "fill-range": { + "version": "7.0.1", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "find-cache-dir": { + "version": "3.3.2", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "2.1.0", + "requires": { + "locate-path": "^2.0.0" + } + }, + "find-versions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz", + "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==", + "requires": { + "semver-regex": "^4.0.5" + } + }, + "fn.name": { + "version": "1.1.0", + "dev": true + }, + "follow-redirects": { + "version": "1.15.1", + "dev": true + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "dependencies": { + "signal-exit": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "dev": true + } + } + }, + "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==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, + "requires": { + "fetch-blob": "^3.1.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true + }, + "from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } }, - "is-wsl": { - "version": "2.2.0", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } + "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==" }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "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==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "fs-extra": { + "version": "8.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1" + }, + "function.prototype.name": { + "version": "1.1.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "dev": true + }, + "get-assigned-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-func-name": { + "version": "2.0.0", + "dev": true + }, + "get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + } + }, + "get-package-type": { + "version": "0.1.0", + "dev": true + }, + "get-port": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-6.1.2.tgz", + "integrity": "sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw==", + "dev": true + }, + "get-port-please": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.1.1.tgz", + "integrity": "sha512-3UBAyM3u4ZBVYDsxOQfJDxEa6XTbpBDrOjp4mf7ExFRt5BKs/QywQQiJsh2B+hxcZLSapWqCRvElUe8DnKcFHA==", + "dev": true + }, + "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==" + }, + "get-symbol-description": { + "version": "1.0.0", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "git-log-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.0.tgz", + "integrity": "sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA==", + "requires": { + "argv-formatter": "~1.0.0", + "spawn-error-forwarder": "~1.0.0", + "split2": "~1.0.0", + "stream-combiner2": "~1.1.1", + "through2": "~2.0.0", + "traverse": "~0.6.6" + }, + "dependencies": { + "split2": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", + "integrity": "sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==", + "requires": { + "through2": "~2.0.0" + } + } + } + }, + "glob": { + "version": "7.2.3", + "dev": true, + "requires": { + "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" + } + }, + "glob-parent": { + "version": "5.1.2", + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "11.12.0", + "dev": true + }, + "globby": { + "version": "11.1.0", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "ignore": { + "version": "5.2.0", + "dev": true + } + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "graceful-fs": { + "version": "4.2.10" + }, + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "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==" + }, + "has": { + "version": "1.0.3", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "dev": true + }, + "has-flag": { + "version": "3.0.0" + }, + "has-property-descriptors": { + "version": "1.0.0", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" + }, + "hook-std": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-3.0.0.tgz", + "integrity": "sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==" + }, + "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==", + "requires": { + "lru-cache": "^7.5.1" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" + } + } + }, + "html-encoding-sniffer": { + "version": "2.0.1", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.5" + } + }, + "html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "dev": true + }, + "htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "http-auth": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-4.1.9.tgz", + "integrity": "sha512-kvPYxNGc9EKGTXvOMnTBQw2RZfuiSihK/mLw/a4pbtRueTE45S55Lw/3k5CktIf7Ak0veMKEIteDj4YkNmCzmQ==", + "dev": true, + "requires": { + "apache-crypt": "^1.1.2", + "apache-md5": "^1.0.6", + "bcryptjs": "^2.4.3", + "uuid": "^8.3.2" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + } + } + }, + "http-auth-connect": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/http-auth-connect/-/http-auth-connect-1.0.6.tgz", + "integrity": "sha512-yaO0QSCPqGCjPrl3qEEHjJP+lwZ6gMpXLuCBE06eWwcXomkI5TARtu0kxf9teFuBj6iaV3Ybr15jaWUvbzNzHw==", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "dependencies": { + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "http-proxy-agent": { + "version": "4.0.1", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "issue-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-6.0.0.tgz", - "integrity": "sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==", - "requires": { - "lodash.capitalize": "^4.2.1", - "lodash.escaperegexp": "^4.1.2", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.uniqby": "^4.7.0" - } + "ms": { + "version": "2.1.2", + "dev": true + } + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.2.0", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - } + "ms": { + "version": "2.1.2", + "dev": true + } + } + }, + "human-signals": { + "version": "2.1.0", + "dev": true + }, + "i18next": { + "version": "22.5.1", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.5.1.tgz", + "integrity": "sha512-8TGPgM3pAD+VRsMtUMNknRz3kzqwp/gPALrWMsDnmC1mKqJwpWyooQRLMcbTwq8z8YwSmuj+ZYvc+xCuEpkssA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.20.6" + } + }, + "iconv-lite": { + "version": "0.4.24", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz", + "integrity": "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==" + }, + "import-local": { + "version": "3.1.0", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "dev": true + }, + "indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==" + }, + "inflight": { + "version": "1.0.6", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "inside": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/inside/-/inside-1.0.0.tgz", + "integrity": "sha512-tvFwvS4g7q6iDot/4FjtWFHwwpv6TVvEumbTdLQilk1F07ojakbXPQcvf3kMAlyNDpzKRzn+d33O3RuXODuxZQ==", + "dev": true + }, + "internal-slot": { + "version": "1.0.3", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==" + }, + "interpret": { + "version": "1.4.0", + "dev": true + }, + "into-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-7.0.0.tgz", + "integrity": "sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==", + "requires": { + "from2": "^2.3.0", + "p-is-promise": "^3.0.0" + } + }, + "inversify": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/inversify/-/inversify-6.0.1.tgz", + "integrity": "sha512-B3ex30927698TJENHR++8FfEaJGqoWOgI6ZY5Ht/nLUsFCwHn6akbwtnUAPCgUepAnTpe2qHxhDNjoKLyz6rgQ==", + "dev": true + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1" + }, + "is-bigint": { + "version": "1.0.4", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-builtin-module": { + "version": "3.1.0", + "dev": true, + "requires": { + "builtin-modules": "^3.0.0" + } + }, + "is-callable": { + "version": "1.2.4", + "dev": true + }, + "is-core-module": { + "version": "2.9.0", + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-docker": { + "version": "2.2.1", + "dev": true + }, + "is-extglob": { + "version": "2.1.1" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-generator-fn": { + "version": "2.1.0", + "dev": true + }, + "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, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.3", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "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 + }, + "is-module": { + "version": "1.0.0", + "dev": true + }, + "is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "is-negative-zero": { + "version": "2.0.2", + "dev": true + }, + "is-number": { + "version": "7.0.0" + }, + "is-number-object": { + "version": "1.0.7", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + }, + "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==" + }, + "is-plain-object": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", + "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", + "dev": true + }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "dev": true + }, + "is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "requires": { + "@types/estree": "*" + } + }, + "is-regex": { + "version": "1.1.4", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-stream": { + "version": "2.0.1", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "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==", + "requires": { + "text-extensions": "^1.0.0" + } + }, + "is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "requires": { + "which-typed-array": "^1.1.11" + } + }, + "is-typedarray": { + "version": "1.0.0", + "dev": true + }, + "is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==" + }, + "is-weakref": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-wsl": { + "version": "2.2.0", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "issue-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-6.0.0.tgz", + "integrity": "sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==", + "requires": { + "lodash.capitalize": "^4.2.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.uniqby": "^4.7.0" + } + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "5.2.0", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "dev": true }, - "istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "dev": true - } - } + "ms": { + "version": "2.1.2", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "3.1.4", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jackspeak": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.2.tgz", + "integrity": "sha512-mgNtVv4vUuaKA97yxUHoA3+FkuhtxkjdXEWOyB/N76fjy0FjezEt34oy3epBtvCvS+7DyKwqCFWx/oJLV5+kCg==", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, + "java-properties": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", + "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==" + }, + "javascript-obfuscator": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/javascript-obfuscator/-/javascript-obfuscator-4.0.2.tgz", + "integrity": "sha512-MRBQREvjEwqEGdwNGG7yp0te5uZBFzrPZdxEs4rDYkPpHhhOQu+E0IhSXP7bO9dIUWXZU0Kkdohsuws525aVGQ==", + "dev": true, + "requires": { + "@javascript-obfuscator/escodegen": "2.3.0", + "@javascript-obfuscator/estraverse": "5.4.0", + "acorn": "8.8.2", + "assert": "2.0.0", + "chalk": "4.1.2", + "chance": "1.1.9", + "class-validator": "0.14.0", + "commander": "10.0.0", + "eslint-scope": "7.1.1", + "eslint-visitor-keys": "3.3.0", + "fast-deep-equal": "3.1.3", + "inversify": "6.0.1", + "js-string-escape": "1.0.1", + "md5": "2.3.0", + "mkdirp": "2.1.3", + "multimatch": "5.0.0", + "opencollective-postinstall": "2.0.3", + "process": "0.11.10", + "reflect-metadata": "0.1.13", + "source-map-support": "0.5.21", + "string-template": "1.0.0", + "stringz": "2.1.0", + "tslib": "2.5.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "istanbul-reports": { - "version": "3.1.4", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "jackspeak": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.2.tgz", - "integrity": "sha512-mgNtVv4vUuaKA97yxUHoA3+FkuhtxkjdXEWOyB/N76fjy0FjezEt34oy3epBtvCvS+7DyKwqCFWx/oJLV5+kCg==", - "dev": true, - "requires": { - "@isaacs/cliui": "^8.0.2", - "@pkgjs/parseargs": "^0.11.0" - } + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "java-properties": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", - "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==" - }, - "javascript-obfuscator": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/javascript-obfuscator/-/javascript-obfuscator-4.0.2.tgz", - "integrity": "sha512-MRBQREvjEwqEGdwNGG7yp0te5uZBFzrPZdxEs4rDYkPpHhhOQu+E0IhSXP7bO9dIUWXZU0Kkdohsuws525aVGQ==", - "dev": true, - "requires": { - "@javascript-obfuscator/escodegen": "2.3.0", - "@javascript-obfuscator/estraverse": "5.4.0", - "acorn": "8.8.2", - "assert": "2.0.0", - "chalk": "4.1.2", - "chance": "1.1.9", - "class-validator": "0.14.0", - "commander": "10.0.0", - "eslint-scope": "7.1.1", - "eslint-visitor-keys": "3.3.0", - "fast-deep-equal": "3.1.3", - "inversify": "6.0.1", - "js-string-escape": "1.0.1", - "md5": "2.3.0", - "mkdirp": "2.1.3", - "multimatch": "5.0.0", - "opencollective-postinstall": "2.0.3", - "process": "0.11.10", - "reflect-metadata": "0.1.13", - "source-map-support": "0.5.21", - "string-template": "1.0.0", - "stringz": "2.1.0", - "tslib": "2.5.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "commander": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", - "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", - "dev": true - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - } - } + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "jest": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.1.0.tgz", - "integrity": "sha512-pSQDVwRSwb109Ss13lcMtdfS9r8/w2Zz8+mTUA9VORD66GflCdl8nUFCqM96geOD2EBwWCNURrNAfQsLIDNBdg==", - "dev": true, - "requires": { - "@jest/core": "^27.1.0", - "import-local": "^3.0.2", - "jest-cli": "^27.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "cliui": { - "version": "7.0.4", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "jest-cli": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "yargs": { - "version": "16.2.0", - "dev": true, - "requires": { - "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" - } - } - } + "commander": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", + "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", + "dev": true }, - "jest-changed-files": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "execa": "^5.0.0", - "throat": "^6.0.1" - }, - "dependencies": { - "execa": { - "version": "5.1.1", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "onetime": { - "version": "5.1.2", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - } - } + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true }, - "jest-circus": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, - "jest-config": { - "version": "27.5.1", - "dev": true, - "requires": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } }, - "jest-diff": { - "version": "27.5.1", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "dev": true + } + } + }, + "jest": { + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.1.0.tgz", + "integrity": "sha512-pSQDVwRSwb109Ss13lcMtdfS9r8/w2Zz8+mTUA9VORD66GflCdl8nUFCqM96geOD2EBwWCNURrNAfQsLIDNBdg==", + "dev": true, + "requires": { + "@jest/core": "^27.1.0", + "import-local": "^3.0.2", + "jest-cli": "^27.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "jest-docblock": { - "version": "27.5.1", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "jest-each": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "cliui": { + "version": "7.0.4", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } }, - "jest-environment-jsdom": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" - } + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "jest-environment-node": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - } + "color-name": { + "version": "1.1.4", + "dev": true }, - "jest-get-type": { - "version": "27.5.1", - "dev": true - }, - "jest-haste-map": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - } + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "jest-cli": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + } }, - "jest-jasmine2": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } }, - "jest-leak-detector": { - "version": "27.5.1", - "dev": true, - "requires": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } + "yargs": { + "version": "16.2.0", + "dev": true, + "requires": { + "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" + } + } + } + }, + "jest-changed-files": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "dependencies": { + "execa": { + "version": "5.1.1", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } }, - "jest-matcher-utils": { - "version": "27.5.1", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "mimic-fn": { + "version": "2.1.0", + "dev": true }, - "jest-message-util": { - "version": "27.5.1", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "npm-run-path": { + "version": "4.0.1", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } }, - "jest-mock": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*" - } + "onetime": { + "version": "5.1.2", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + } + } + }, + "jest-circus": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "jest-pnp-resolver": { - "version": "1.2.2", - "dev": true, - "requires": {} + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "jest-regex-util": { - "version": "27.5.1", - "dev": true + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "jest-resolve": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "color-name": { + "version": "1.1.4", + "dev": true }, - "jest-resolve-dependencies": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "jest-runner": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-config": { + "version": "27.5.1", + "dev": true, + "requires": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "jest-runtime": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "execa": { - "version": "5.1.1", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "mimic-fn": { - "version": "2.1.0", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "onetime": { - "version": "5.1.2", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "strip-bom": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "jest-serializer": { - "version": "27.5.1", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "jest-snapshot": { - "version": "27.5.1", - "dev": true, - "requires": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "semver": { - "version": "7.3.7", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "color-name": { + "version": "1.1.4", + "dev": true }, - "jest-util": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "jest-validate": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "leven": "^3.1.0", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "camelcase": { - "version": "6.3.0", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "strip-json-comments": { + "version": "3.1.1", + "dev": true }, - "jest-watcher": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.5.1", - "string-length": "^4.0.1" - }, - "dependencies": { - "ansi-escapes": { - "version": "4.3.2", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-fest": { - "version": "0.21.3", - "dev": true - } - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-diff": { + "version": "27.5.1", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "jest-worker": { - "version": "27.5.1", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "js-string-escape": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", - "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", - "dev": true + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "js-tokens": { - "version": "4.0.0" + "color-name": { + "version": "1.1.4", + "dev": true }, - "js-yaml": { - "version": "3.14.1", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "jsdoctypeparser": { - "version": "9.0.0", - "dev": true - }, - "jsdom": { - "version": "16.7.0", - "dev": true, - "requires": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "form-data": { - "version": "3.0.1", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "tough-cookie": { - "version": "4.0.0", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - } - } - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-docblock": { + "version": "27.5.1", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "jsesc": { - "version": "2.5.2", - "dev": true + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "json-beautify": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/json-beautify/-/json-beautify-1.1.1.tgz", - "integrity": "sha512-17j+Hk2lado0xqKtUcyAjK0AtoHnPSIgktWRsEXgdFQFG9UnaGw6CHa0J7xsvulxRpFl6CrkDFHght1p5ZJc4A==", - "dev": true + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "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==" + "color-name": { + "version": "1.1.4", + "dev": true }, - "json-parse-even-better-errors": { - "version": "2.3.1" + "has-flag": { + "version": "4.0.0", + "dev": true }, - "json-schema-traverse": { - "version": "0.4.1", - "dev": true + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-environment-jsdom": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + } + }, + "jest-environment-node": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "jest-get-type": { + "version": "27.5.1", + "dev": true + }, + "jest-haste-map": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + } + }, + "jest-jasmine2": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "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==" + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true + "color-name": { + "version": "1.1.4", + "dev": true }, - "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 + "has-flag": { + "version": "4.0.0", + "dev": true }, - "jsonfile": { - "version": "4.0.0", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-leak-detector": { + "version": "27.5.1", + "dev": true, + "requires": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-matcher-utils": { + "version": "27.5.1", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==" - }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "just-extend": { - "version": "4.2.1", - "dev": true + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "khroma": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz", - "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==" + "color-name": { + "version": "1.1.4", + "dev": true }, - "kind-of": { - "version": "6.0.3" + "has-flag": { + "version": "4.0.0", + "dev": true }, - "kleur": { - "version": "3.0.3", - "dev": true + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-message-util": { + "version": "27.5.1", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "kuler": { - "version": "2.0.0", - "dev": true + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "layout-base": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", - "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==" + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "leven": { - "version": "3.1.0", - "dev": true + "color-name": { + "version": "1.1.4", + "dev": true }, - "levn": { - "version": "0.3.0", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "libphonenumber-js": { - "version": "1.10.37", - "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.37.tgz", - "integrity": "sha512-Z10PCaOCiAxbUxLyR31DNeeNugSVP6iv/m7UrSKS5JHziEMApJtgku4e9Q69pzzSC9LnQiM09sqsGf2ticZnMw==", - "dev": true + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-mock": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*" + } + }, + "jest-pnp-resolver": { + "version": "1.2.2", + "dev": true, + "requires": {} + }, + "jest-regex-util": { + "version": "27.5.1", + "dev": true + }, + "jest-resolve": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "lines-and-columns": { - "version": "1.2.4" - }, - "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==", - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "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==", - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - } - } + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "locate-path": { - "version": "2.0.0", - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "lodash": { - "version": "3.10.1", - "dev": true - }, - "lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" - }, - "lodash.capitalize": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", - "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "lodash.escaperegexp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", - "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==" - }, - "lodash.get": { - "version": "4.4.2", - "dev": true - }, - "lodash.ismatch": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==" - }, - "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==" - }, - "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==" - }, - "lodash.merge": { - "version": "4.6.2", - "dev": true - }, - "lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", - "dev": true - }, - "lodash.truncate": { - "version": "4.4.2", - "dev": true - }, - "lodash.uniqby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", - "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==" - }, - "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, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "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 - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "color-name": { + "version": "1.1.4", + "dev": true }, - "logform": { - "version": "2.4.2", - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" - }, - "dependencies": { - "ms": { - "version": "2.1.3", - "dev": true - } - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "loglevel": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", - "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", - "dev": true + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-resolve-dependencies": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + } + }, + "jest-runner": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "loglevel-plugin-prefix": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", - "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", - "dev": true + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "lolex": { - "version": "2.7.5", - "dev": true - }, - "loupe": { - "version": "2.3.4", - "dev": true, - "requires": { - "get-func-name": "^2.0.0" - } + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "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==", - "requires": { - "yallist": "^4.0.0" - } + "color-name": { + "version": "1.1.4", + "dev": true }, - "lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true + "has-flag": { + "version": "4.0.0", + "dev": true }, - "macos-release": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.1.tgz", - "integrity": "sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A==", - "dev": true + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-runtime": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "magic-bytes.js": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.0.17.tgz", - "integrity": "sha512-PEDpPzHpKe5AxkVmQrNPHFRvPN2ELkkj3eIg4IZO9JdhBiAY3aU53lgYXs9j8B7lpza+QiW0UA4QHCH7EskSeg==", - "dev": true + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "make-dir": { - "version": "3.1.0", - "dev": true, - "requires": { - "semver": "^6.0.0" - } + "color-name": { + "version": "1.1.4", + "dev": true }, - "make-error": { - "version": "1.3.6", - "dev": true + "execa": { + "version": "5.1.1", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } }, - "makeerror": { - "version": "1.0.12", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==" + "mimic-fn": { + "version": "2.1.0", + "dev": true }, - "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==", - "dev": true + "npm-run-path": { + "version": "4.0.1", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } }, - "marked": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-5.1.2.tgz", - "integrity": "sha512-ahRPGXJpjMjwSOlBoTMZAK7ATXkli5qCPxZ21TG44rx1KEo44bii4ekgTDQPNRQ4Kh7JMb9Ub1PVk1NxRSsorg==" - }, - "marked-terminal": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-5.2.0.tgz", - "integrity": "sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA==", - "requires": { - "ansi-escapes": "^6.2.0", - "cardinal": "^2.1.1", - "chalk": "^5.2.0", - "cli-table3": "^0.6.3", - "node-emoji": "^1.11.0", - "supports-hyperlinks": "^2.3.0" - }, - "dependencies": { - "chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==" - } - } + "onetime": { + "version": "5.1.2", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } }, - "md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "dev": true, - "requires": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } + "strip-bom": { + "version": "4.0.0", + "dev": true }, - "mdast-util-from-markdown": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", - "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-serializer": { + "version": "27.5.1", + "dev": true, + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + } + }, + "jest-snapshot": { + "version": "27.5.1", + "dev": true, + "requires": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", - "requires": { - "@types/mdast": "^3.0.0" - } + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "requires": { - "@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" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "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==" - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "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==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "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==" - }, - "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==" - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "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==", - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "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==" - } - } - }, - "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==", - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" - } - } - }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" - }, - "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==" - } - } + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "merge-source-map": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", - "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", - "dev": true, - "requires": { - "source-map": "^0.5.6" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true - } - } + "color-name": { + "version": "1.1.4", + "dev": true }, - "merge-stream": { - "version": "2.0.0" - }, - "merge2": { - "version": "1.4.1" - }, - "mermaid": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.3.0.tgz", - "integrity": "sha512-H5quxuQjwXC8M1WuuzhAp2TdqGg74t5skfDBrNKJ7dt3z8Wprl5S6h9VJsRhoBUTSs1TMtHEdplLhCqXleZZLw==", - "requires": { - "@braintree/sanitize-url": "^6.0.2", - "@types/d3-scale": "^4.0.3", - "@types/d3-scale-chromatic": "^3.0.0", - "cytoscape": "^3.23.0", - "cytoscape-cose-bilkent": "^4.1.0", - "cytoscape-fcose": "^2.1.0", - "d3": "^7.4.0", - "d3-sankey": "^0.12.3", - "dagre-d3-es": "7.0.10", - "dayjs": "^1.11.7", - "dompurify": "3.0.5", - "elkjs": "^0.8.2", - "khroma": "^2.0.0", - "lodash-es": "^4.17.21", - "mdast-util-from-markdown": "^1.3.0", - "non-layered-tidy-tree-layout": "^2.0.2", - "stylis": "^4.1.3", - "ts-dedent": "^2.2.0", - "uuid": "^9.0.0", - "web-worker": "^1.2.0" - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "micromark": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", - "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", - "requires": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, - "micromark-core-commonmark": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", - "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", - "requires": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-util": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "micromark-factory-destination": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", - "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "micromark-factory-label": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", - "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "micromark-factory-space": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", - "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" - } + "color-name": { + "version": "1.1.4", + "dev": true }, - "micromark-factory-title": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", - "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "micromark-factory-whitespace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", - "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-validate": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "micromark-util-character": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", - "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", - "requires": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } + "camelcase": { + "version": "6.3.0", + "dev": true }, - "micromark-util-chunked": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", - "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", - "requires": { - "micromark-util-symbol": "^1.0.0" - } + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "micromark-util-classify-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", - "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "micromark-util-combine-extensions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", - "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", - "requires": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" - } + "color-name": { + "version": "1.1.4", + "dev": true }, - "micromark-util-decode-numeric-character-reference": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", - "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", - "requires": { - "micromark-util-symbol": "^1.0.0" - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "micromark-util-decode-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", - "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", - "requires": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-watcher": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.2", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } }, - "micromark-util-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", - "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==" - }, - "micromark-util-html-tag-name": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", - "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==" - }, - "micromark-util-normalize-identifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", - "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", - "requires": { - "micromark-util-symbol": "^1.0.0" - } + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "micromark-util-resolve-all": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", - "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", - "requires": { - "micromark-util-types": "^1.0.0" - } + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "micromark-util-sanitize-uri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", - "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "micromark-util-subtokenize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", - "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", - "requires": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } + "color-name": { + "version": "1.1.4", + "dev": true }, - "micromark-util-symbol": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", - "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==" - }, - "micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==" - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==" - }, - "mime-db": { - "version": "1.52.0", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } }, - "mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==" + "type-fest": { + "version": "0.21.3", + "dev": true + } + } + }, + "jest-worker": { + "version": "27.5.1", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "dev": true }, - "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==" + "supports-color": { + "version": "8.1.1", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-string-escape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", + "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0" + }, + "js-yaml": { + "version": "3.14.1", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsdoctypeparser": { + "version": "9.0.0", + "dev": true + }, + "jsdom": { + "version": "16.7.0", + "dev": true, + "requires": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "form-data": { + "version": "3.0.1", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "tough-cookie": { + "version": "4.0.0", + "dev": true, + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + } + } + } + }, + "jsesc": { + "version": "2.5.2", + "dev": true + }, + "json-beautify": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/json-beautify/-/json-beautify-1.1.1.tgz", + "integrity": "sha512-17j+Hk2lado0xqKtUcyAjK0AtoHnPSIgktWRsEXgdFQFG9UnaGw6CHa0J7xsvulxRpFl6CrkDFHght1p5ZJc4A==", + "dev": true + }, + "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==" + }, + "json-parse-even-better-errors": { + "version": "2.3.1" + }, + "json-schema-traverse": { + "version": "0.4.1", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true + }, + "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==" + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "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 + }, + "jsonfile": { + "version": "4.0.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==" + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "just-extend": { + "version": "4.2.1", + "dev": true + }, + "khroma": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz", + "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==" + }, + "kind-of": { + "version": "6.0.3" + }, + "kleur": { + "version": "3.0.3", + "dev": true + }, + "kuler": { + "version": "2.0.0", + "dev": true + }, + "layout-base": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==" + }, + "leven": { + "version": "3.1.0", + "dev": true + }, + "levn": { + "version": "0.3.0", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "libphonenumber-js": { + "version": "1.10.37", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.37.tgz", + "integrity": "sha512-Z10PCaOCiAxbUxLyR31DNeeNugSVP6iv/m7UrSKS5JHziEMApJtgku4e9Q69pzzSC9LnQiM09sqsGf2ticZnMw==", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4" + }, + "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==", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "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==", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + } + } + }, + "locate-path": { + "version": "2.0.0", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "3.10.1", + "dev": true + }, + "lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "lodash.capitalize": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", + "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==" + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==" + }, + "lodash.get": { + "version": "4.4.2", + "dev": true + }, + "lodash.ismatch": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==" + }, + "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==" + }, + "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==" + }, + "lodash.merge": { + "version": "4.6.2", + "dev": true + }, + "lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", + "dev": true + }, + "lodash.truncate": { + "version": "4.4.2", + "dev": true + }, + "lodash.uniqby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", + "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==" + }, + "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, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "minimatch": { - "version": "3.1.2", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" - }, - "minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "dependencies": { - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" - } - } + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "minipass": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz", - "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==", - "dev": true + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "mkdirp": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.3.tgz", - "integrity": "sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw==", - "dev": true - }, - "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==" - }, - "morgan": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", - "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", - "dev": true, - "requires": { - "basic-auth": "~2.0.1", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-finished": "~2.3.0", - "on-headers": "~1.0.2" - } + "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 }, - "mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==" + "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 }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "logform": { + "version": "2.4.2", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + }, + "dependencies": { "ms": { - "version": "2.0.0", - "dev": true - }, - "multimatch": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", - "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", - "dev": true, - "requires": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" - } - }, - "nanoid": { - "version": "3.3.4", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "dev": true - }, - "ncp": { - "version": "2.0.0", - "dev": true - }, - "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 - }, - "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==" - }, - "nerf-dart": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", - "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==" - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true - }, - "nise": { - "version": "1.5.3", - "dev": true, - "requires": { - "@sinonjs/formatio": "^3.2.1", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "lolex": "^5.0.1", - "path-to-regexp": "^1.7.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "dev": true - }, - "lolex": { - "version": "5.1.2", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "path-to-regexp": { - "version": "1.8.0", - "dev": true, - "requires": { - "isarray": "0.0.1" - } - } - } + "version": "2.1.3", + "dev": true + } + } + }, + "loglevel": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", + "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", + "dev": true + }, + "loglevel-plugin-prefix": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", + "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", + "dev": true + }, + "lolex": { + "version": "2.7.5", + "dev": true + }, + "loupe": { + "version": "2.3.4", + "dev": true, + "requires": { + "get-func-name": "^2.0.0" + } + }, + "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==", + "requires": { + "yallist": "^4.0.0" + } + }, + "lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "macos-release": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.1.tgz", + "integrity": "sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A==", + "dev": true + }, + "magic-bytes.js": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.0.17.tgz", + "integrity": "sha512-PEDpPzHpKe5AxkVmQrNPHFRvPN2ELkkj3eIg4IZO9JdhBiAY3aU53lgYXs9j8B7lpza+QiW0UA4QHCH7EskSeg==", + "dev": true + }, + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "make-dir": { + "version": "3.1.0", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "make-error": { + "version": "1.3.6", + "dev": true + }, + "makeerror": { + "version": "1.0.12", + "dev": true, + "requires": { + "tmpl": "1.0.5" + } + }, + "map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==" + }, + "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==", + "dev": true + }, + "marked": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-5.1.2.tgz", + "integrity": "sha512-ahRPGXJpjMjwSOlBoTMZAK7ATXkli5qCPxZ21TG44rx1KEo44bii4ekgTDQPNRQ4Kh7JMb9Ub1PVk1NxRSsorg==" + }, + "marked-terminal": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-5.2.0.tgz", + "integrity": "sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA==", + "requires": { + "ansi-escapes": "^6.2.0", + "cardinal": "^2.1.1", + "chalk": "^5.2.0", + "cli-table3": "^0.6.3", + "node-emoji": "^1.11.0", + "supports-hyperlinks": "^2.3.0" + }, + "dependencies": { + "chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==" + } + } + }, + "md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dev": true, + "requires": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "mdast-util-from-markdown": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", + "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" + } + }, + "mdast-util-to-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", + "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "requires": { + "@types/mdast": "^3.0.0" + } + }, + "meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "requires": { + "@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" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } }, - "node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "dev": true - }, - "node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "requires": { - "lodash": "^4.17.21" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - } - } + "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==" }, - "node-fetch": { - "version": "2.6.7", - "dev": true, - "requires": { - "whatwg-url": "^5.0.0" - }, - "dependencies": { - "tr46": { - "version": "0.0.3", - "dev": true - }, - "webidl-conversions": { - "version": "3.0.1", - "dev": true - }, - "whatwg-url": { - "version": "5.0.0", - "dev": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - } - } + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } }, - "node-gyp-build": { - "version": "4.4.0", - "dev": true, - "optional": true - }, - "node-int64": { - "version": "0.4.0", - "dev": true - }, - "node-powershell": { - "version": "5.0.1", - "dev": true, - "requires": { - "child-shell": "^5.0.0", - "is-wsl": "^2.2.0" - } + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "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==", + "requires": { + "p-limit": "^2.2.0" + } }, - "node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true + "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==" }, - "non-layered-tidy-tree-layout": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", - "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" + "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==" }, - "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==", - "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "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==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" + } }, - "dependencies": { - "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==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "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==", - "requires": { - "lru-cache": "^6.0.0" - } - } + "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==" } + } }, - "normalize-path": { - "version": "3.0.0", - "dev": true - }, - "normalize-url": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", - "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==" - }, - "npm": { - "version": "9.8.1", - "resolved": "https://registry.npmjs.org/npm/-/npm-9.8.1.tgz", - "integrity": "sha512-AfDvThQzsIXhYgk9zhbk5R+lh811lKkLAeQMMhSypf1BM7zUafeIIBzMzespeuVEJ0+LvY36oRQYf7IKLzU3rw==", - "requires": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^6.3.0", - "@npmcli/config": "^6.2.1", - "@npmcli/fs": "^3.1.0", - "@npmcli/map-workspaces": "^3.0.4", - "@npmcli/package-json": "^4.0.1", - "@npmcli/promise-spawn": "^6.0.2", - "@npmcli/run-script": "^6.0.2", - "abbrev": "^2.0.0", - "archy": "~1.0.0", - "cacache": "^17.1.3", - "chalk": "^5.3.0", - "ci-info": "^3.8.0", - "cli-columns": "^4.0.0", - "cli-table3": "^0.6.3", - "columnify": "^1.6.0", - "fastest-levenshtein": "^1.0.16", - "fs-minipass": "^3.0.2", - "glob": "^10.2.7", - "graceful-fs": "^4.2.11", - "hosted-git-info": "^6.1.1", - "ini": "^4.1.1", - "init-package-json": "^5.0.0", - "is-cidr": "^4.0.2", - "json-parse-even-better-errors": "^3.0.0", - "libnpmaccess": "^7.0.2", - "libnpmdiff": "^5.0.19", - "libnpmexec": "^6.0.3", - "libnpmfund": "^4.0.19", - "libnpmhook": "^9.0.3", - "libnpmorg": "^5.0.4", - "libnpmpack": "^5.0.19", - "libnpmpublish": "^7.5.0", - "libnpmsearch": "^6.0.2", - "libnpmteam": "^5.0.3", - "libnpmversion": "^4.0.2", - "make-fetch-happen": "^11.1.1", - "minimatch": "^9.0.3", - "minipass": "^5.0.0", - "minipass-pipeline": "^1.2.4", - "ms": "^2.1.2", - "node-gyp": "^9.4.0", - "nopt": "^7.2.0", - "npm-audit-report": "^5.0.0", - "npm-install-checks": "^6.1.1", - "npm-package-arg": "^10.1.0", - "npm-pick-manifest": "^8.0.1", - "npm-profile": "^7.0.1", - "npm-registry-fetch": "^14.0.5", - "npm-user-validate": "^2.0.0", - "npmlog": "^7.0.1", - "p-map": "^4.0.0", - "pacote": "^15.2.0", - "parse-conflict-json": "^3.0.1", - "proc-log": "^3.0.0", - "qrcode-terminal": "^0.12.0", - "read": "^2.1.0", - "semver": "^7.5.4", - "sigstore": "^1.7.0", - "ssri": "^10.0.4", - "supports-color": "^9.4.0", - "tar": "^6.1.15", - "text-table": "~0.2.0", - "tiny-relative-date": "^1.3.0", - "treeverse": "^3.0.0", - "validate-npm-package-name": "^5.0.0", - "which": "^3.0.1", - "write-file-atomic": "^5.0.1" - }, - "dependencies": { - "@colors/colors": { - "version": "1.5.0", - "bundled": true, - "optional": true - }, - "@isaacs/cliui": { - "version": "8.0.2", - "bundled": true, - "requires": { - "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" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "bundled": true - }, - "emoji-regex": { - "version": "9.2.2", - "bundled": true - }, - "string-width": { - "version": "5.1.2", - "bundled": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.1.0", - "bundled": true, - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "@isaacs/string-locale-compare": { - "version": "1.1.0", - "bundled": true - }, - "@npmcli/arborist": { - "version": "6.3.0", - "bundled": true, - "requires": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^3.1.0", - "@npmcli/installed-package-contents": "^2.0.2", - "@npmcli/map-workspaces": "^3.0.2", - "@npmcli/metavuln-calculator": "^5.0.0", - "@npmcli/name-from-folder": "^2.0.0", - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^4.0.0", - "@npmcli/query": "^3.0.0", - "@npmcli/run-script": "^6.0.0", - "bin-links": "^4.0.1", - "cacache": "^17.0.4", - "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^6.1.1", - "json-parse-even-better-errors": "^3.0.0", - "json-stringify-nice": "^1.1.4", - "minimatch": "^9.0.0", - "nopt": "^7.0.0", - "npm-install-checks": "^6.0.0", - "npm-package-arg": "^10.1.0", - "npm-pick-manifest": "^8.0.1", - "npm-registry-fetch": "^14.0.3", - "npmlog": "^7.0.1", - "pacote": "^15.0.8", - "parse-conflict-json": "^3.0.0", - "proc-log": "^3.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.2", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^10.0.1", - "treeverse": "^3.0.0", - "walk-up-path": "^3.0.1" - } - }, - "@npmcli/config": { - "version": "6.2.1", - "bundled": true, - "requires": { - "@npmcli/map-workspaces": "^3.0.2", - "ci-info": "^3.8.0", - "ini": "^4.1.0", - "nopt": "^7.0.0", - "proc-log": "^3.0.0", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.5", - "walk-up-path": "^3.0.1" - } - }, - "@npmcli/disparity-colors": { - "version": "3.0.0", - "bundled": true, - "requires": { - "ansi-styles": "^4.3.0" - } - }, - "@npmcli/fs": { - "version": "3.1.0", - "bundled": true, - "requires": { - "semver": "^7.3.5" - } - }, - "@npmcli/git": { - "version": "4.1.0", - "bundled": true, - "requires": { - "@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" - } - }, - "@npmcli/installed-package-contents": { - "version": "2.0.2", - "bundled": true, - "requires": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - } - }, - "@npmcli/map-workspaces": { - "version": "3.0.4", - "bundled": true, - "requires": { - "@npmcli/name-from-folder": "^2.0.0", - "glob": "^10.2.2", - "minimatch": "^9.0.0", - "read-package-json-fast": "^3.0.0" - } - }, - "@npmcli/metavuln-calculator": { - "version": "5.0.1", - "bundled": true, - "requires": { - "cacache": "^17.0.0", - "json-parse-even-better-errors": "^3.0.0", - "pacote": "^15.0.0", - "semver": "^7.3.5" - } - }, - "@npmcli/name-from-folder": { - "version": "2.0.0", - "bundled": true - }, - "@npmcli/node-gyp": { - "version": "3.0.0", - "bundled": true - }, - "@npmcli/package-json": { - "version": "4.0.1", - "bundled": true, - "requires": { - "@npmcli/git": "^4.1.0", - "glob": "^10.2.2", - "hosted-git-info": "^6.1.1", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", - "proc-log": "^3.0.0", - "semver": "^7.5.3" - } - }, - "@npmcli/promise-spawn": { - "version": "6.0.2", - "bundled": true, - "requires": { - "which": "^3.0.0" - } - }, - "@npmcli/query": { - "version": "3.0.0", - "bundled": true, - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "@npmcli/run-script": { - "version": "6.0.2", - "bundled": true, - "requires": { - "@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" - } - }, - "@pkgjs/parseargs": { - "version": "0.11.0", - "bundled": true, - "optional": true - }, - "@sigstore/protobuf-specs": { - "version": "0.1.0", - "bundled": true - }, - "@sigstore/tuf": { - "version": "1.0.2", - "bundled": true, - "requires": { - "@sigstore/protobuf-specs": "^0.1.0", - "tuf-js": "^1.1.7" - } - }, - "@tootallnate/once": { - "version": "2.0.0", - "bundled": true - }, - "@tufjs/canonical-json": { - "version": "1.0.0", - "bundled": true - }, - "@tufjs/models": { - "version": "1.0.4", - "bundled": true, - "requires": { - "@tufjs/canonical-json": "1.0.0", - "minimatch": "^9.0.0" - } - }, - "abbrev": { - "version": "2.0.0", - "bundled": true - }, - "abort-controller": { - "version": "3.0.0", - "bundled": true, - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "agent-base": { - "version": "6.0.2", - "bundled": true, - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.3.0", - "bundled": true, - "requires": { - "debug": "^4.1.0", - "depd": "^2.0.0", - "humanize-ms": "^1.2.1" - } - }, - "aggregate-error": { - "version": "3.1.0", - "bundled": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ansi-regex": { - "version": "5.0.1", - "bundled": true - }, - "ansi-styles": { - "version": "4.3.0", - "bundled": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "aproba": { - "version": "2.0.0", - "bundled": true - }, - "archy": { - "version": "1.0.0", - "bundled": true - }, - "are-we-there-yet": { - "version": "4.0.0", - "bundled": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^4.1.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "bundled": true - }, - "base64-js": { - "version": "1.5.1", - "bundled": true - }, - "bin-links": { - "version": "4.0.2", - "bundled": true, - "requires": { - "cmd-shim": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "read-cmd-shim": "^4.0.0", - "write-file-atomic": "^5.0.0" - } - }, - "binary-extensions": { - "version": "2.2.0", - "bundled": true - }, - "brace-expansion": { - "version": "2.0.1", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "buffer": { - "version": "6.0.3", - "bundled": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "builtins": { - "version": "5.0.1", - "bundled": true, - "requires": { - "semver": "^7.0.0" - } - }, - "cacache": { - "version": "17.1.3", - "bundled": true, - "requires": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "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" - } - }, - "chalk": { - "version": "5.3.0", - "bundled": true - }, - "chownr": { - "version": "2.0.0", - "bundled": true - }, - "ci-info": { - "version": "3.8.0", - "bundled": true - }, - "cidr-regex": { - "version": "3.1.1", - "bundled": true, - "requires": { - "ip-regex": "^4.1.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "bundled": true - }, - "cli-columns": { - "version": "4.0.0", - "bundled": true, - "requires": { - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - } - }, - "cli-table3": { - "version": "0.6.3", - "bundled": true, - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - } - }, - "clone": { - "version": "1.0.4", - "bundled": true - }, - "cmd-shim": { - "version": "6.0.1", - "bundled": true - }, - "color-convert": { - "version": "2.0.1", - "bundled": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "bundled": true - }, - "color-support": { - "version": "1.1.3", - "bundled": true - }, - "columnify": { - "version": "1.6.0", - "bundled": true, - "requires": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - } - }, - "common-ancestor-path": { - "version": "1.0.1", - "bundled": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true - }, - "cross-spawn": { - "version": "7.0.3", - "bundled": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "dependencies": { - "which": { - "version": "2.0.2", - "bundled": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "cssesc": { - "version": "3.0.0", - "bundled": true - }, - "debug": { - "version": "4.3.4", - "bundled": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "bundled": true - } - } - }, - "defaults": { - "version": "1.0.4", - "bundled": true, - "requires": { - "clone": "^1.0.2" - } - }, - "delegates": { - "version": "1.0.0", - "bundled": true - }, - "depd": { - "version": "2.0.0", - "bundled": true - }, - "diff": { - "version": "5.1.0", - "bundled": true - }, - "eastasianwidth": { - "version": "0.2.0", - "bundled": true - }, - "emoji-regex": { - "version": "8.0.0", - "bundled": true - }, - "encoding": { - "version": "0.1.13", - "bundled": true, - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - } - }, - "env-paths": { - "version": "2.2.1", - "bundled": true - }, - "err-code": { - "version": "2.0.3", - "bundled": true - }, - "event-target-shim": { - "version": "5.0.1", - "bundled": true - }, - "events": { - "version": "3.3.0", - "bundled": true - }, - "exponential-backoff": { - "version": "3.1.1", - "bundled": true - }, - "fastest-levenshtein": { - "version": "1.0.16", - "bundled": true - }, - "foreground-child": { - "version": "3.1.1", - "bundled": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - } - }, - "fs-minipass": { - "version": "3.0.2", - "bundled": true, - "requires": { - "minipass": "^5.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true - }, - "function-bind": { - "version": "1.1.1", - "bundled": true - }, - "gauge": { - "version": "5.0.1", - "bundled": true, - "requires": { - "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": "^4.0.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - } - }, - "glob": { - "version": "10.2.7", - "bundled": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - } - }, - "graceful-fs": { - "version": "4.2.11", - "bundled": true - }, - "has": { - "version": "1.0.3", - "bundled": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true - }, - "hosted-git-info": { - "version": "6.1.1", - "bundled": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "http-cache-semantics": { - "version": "4.1.1", - "bundled": true - }, - "http-proxy-agent": { - "version": "5.0.0", - "bundled": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "bundled": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "humanize-ms": { - "version": "1.2.1", - "bundled": true, - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.6.3", - "bundled": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "ieee754": { - "version": "1.2.1", - "bundled": true - }, - "ignore-walk": { - "version": "6.0.3", - "bundled": true, - "requires": { - "minimatch": "^9.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "bundled": true - }, - "indent-string": { - "version": "4.0.0", - "bundled": true - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "bundled": true - }, - "ini": { - "version": "4.1.1", - "bundled": true - }, - "init-package-json": { - "version": "5.0.0", - "bundled": true, - "requires": { - "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" - } - }, - "ip": { - "version": "2.0.0", - "bundled": true - }, - "ip-regex": { - "version": "4.3.0", - "bundled": true - }, - "is-cidr": { - "version": "4.0.2", - "bundled": true, - "requires": { - "cidr-regex": "^3.1.1" - } - }, - "is-core-module": { - "version": "2.12.1", - "bundled": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "bundled": true - }, - "is-lambda": { - "version": "1.0.1", - "bundled": true - }, - "isexe": { - "version": "2.0.0", - "bundled": true - }, - "jackspeak": { - "version": "2.2.1", - "bundled": true, - "requires": { - "@isaacs/cliui": "^8.0.2", - "@pkgjs/parseargs": "^0.11.0" - } - }, - "json-parse-even-better-errors": { - "version": "3.0.0", - "bundled": true - }, - "json-stringify-nice": { - "version": "1.1.4", - "bundled": true - }, - "jsonparse": { - "version": "1.3.1", - "bundled": true - }, - "just-diff": { - "version": "6.0.2", - "bundled": true - }, - "just-diff-apply": { - "version": "5.5.0", - "bundled": true - }, - "libnpmaccess": { - "version": "7.0.2", - "bundled": true, - "requires": { - "npm-package-arg": "^10.1.0", - "npm-registry-fetch": "^14.0.3" - } - }, - "libnpmdiff": { - "version": "5.0.19", - "bundled": true, - "requires": { - "@npmcli/arborist": "^6.3.0", - "@npmcli/disparity-colors": "^3.0.0", - "@npmcli/installed-package-contents": "^2.0.2", - "binary-extensions": "^2.2.0", - "diff": "^5.1.0", - "minimatch": "^9.0.0", - "npm-package-arg": "^10.1.0", - "pacote": "^15.0.8", - "tar": "^6.1.13" - } - }, - "libnpmexec": { - "version": "6.0.3", - "bundled": true, - "requires": { - "@npmcli/arborist": "^6.3.0", - "@npmcli/run-script": "^6.0.0", - "ci-info": "^3.7.1", - "npm-package-arg": "^10.1.0", - "npmlog": "^7.0.1", - "pacote": "^15.0.8", - "proc-log": "^3.0.0", - "read": "^2.0.0", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.7", - "walk-up-path": "^3.0.1" - } - }, - "libnpmfund": { - "version": "4.0.19", - "bundled": true, - "requires": { - "@npmcli/arborist": "^6.3.0" - } - }, - "libnpmhook": { - "version": "9.0.3", - "bundled": true, - "requires": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^14.0.3" - } - }, - "libnpmorg": { - "version": "5.0.4", - "bundled": true, - "requires": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^14.0.3" - } - }, - "libnpmpack": { - "version": "5.0.19", - "bundled": true, - "requires": { - "@npmcli/arborist": "^6.3.0", - "@npmcli/run-script": "^6.0.0", - "npm-package-arg": "^10.1.0", - "pacote": "^15.0.8" - } - }, - "libnpmpublish": { - "version": "7.5.0", - "bundled": true, - "requires": { - "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" - } - }, - "libnpmsearch": { - "version": "6.0.2", - "bundled": true, - "requires": { - "npm-registry-fetch": "^14.0.3" - } - }, - "libnpmteam": { - "version": "5.0.3", - "bundled": true, - "requires": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^14.0.3" - } - }, - "libnpmversion": { - "version": "4.0.2", - "bundled": true, - "requires": { - "@npmcli/git": "^4.0.1", - "@npmcli/run-script": "^6.0.0", - "json-parse-even-better-errors": "^3.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.7" - } - }, - "lru-cache": { - "version": "7.18.3", - "bundled": true - }, - "make-fetch-happen": { - "version": "11.1.1", - "bundled": true, - "requires": { - "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" - } - }, - "minimatch": { - "version": "9.0.3", - "bundled": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "minipass": { - "version": "5.0.0", - "bundled": true - }, - "minipass-collect": { - "version": "1.0.2", - "bundled": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minipass-fetch": { - "version": "3.0.3", - "bundled": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^5.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - } - }, - "minipass-flush": { - "version": "1.0.5", - "bundled": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minipass-json-stream": { - "version": "1.0.1", - "bundled": true, - "requires": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "bundled": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minipass-sized": { - "version": "1.0.3", - "bundled": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minizlib": { - "version": "2.1.2", - "bundled": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "mkdirp": { - "version": "1.0.4", - "bundled": true - }, - "ms": { - "version": "2.1.3", - "bundled": true - }, - "mute-stream": { - "version": "1.0.0", - "bundled": true - }, - "negotiator": { - "version": "0.6.3", - "bundled": true - }, - "node-gyp": { - "version": "9.4.0", - "bundled": true, - "requires": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^11.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" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true - }, - "are-we-there-yet": { - "version": "3.0.1", - "bundled": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "gauge": { - "version": "4.0.4", - "bundled": true, - "requires": { - "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" - } - }, - "glob": { - "version": "7.2.3", - "bundled": true, - "requires": { - "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" - } - }, - "minimatch": { - "version": "3.1.2", - "bundled": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "nopt": { - "version": "6.0.0", - "bundled": true, - "requires": { - "abbrev": "^1.0.0" - } - }, - "npmlog": { - "version": "6.0.2", - "bundled": true, - "requires": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - } - }, - "readable-stream": { - "version": "3.6.2", - "bundled": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "signal-exit": { - "version": "3.0.7", - "bundled": true - }, - "which": { - "version": "2.0.2", - "bundled": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "nopt": { - "version": "7.2.0", - "bundled": true, - "requires": { - "abbrev": "^2.0.0" - } - }, - "normalize-package-data": { - "version": "5.0.0", - "bundled": true, - "requires": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - } - }, - "npm-audit-report": { - "version": "5.0.0", - "bundled": true - }, - "npm-bundled": { - "version": "3.0.0", - "bundled": true, - "requires": { - "npm-normalize-package-bin": "^3.0.0" - } - }, - "npm-install-checks": { - "version": "6.1.1", - "bundled": true, - "requires": { - "semver": "^7.1.1" - } - }, - "npm-normalize-package-bin": { - "version": "3.0.1", - "bundled": true - }, - "npm-package-arg": { - "version": "10.1.0", - "bundled": true, - "requires": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - } - }, - "npm-packlist": { - "version": "7.0.4", - "bundled": true, - "requires": { - "ignore-walk": "^6.0.0" - } - }, - "npm-pick-manifest": { - "version": "8.0.1", - "bundled": true, - "requires": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^10.0.0", - "semver": "^7.3.5" - } - }, - "npm-profile": { - "version": "7.0.1", - "bundled": true, - "requires": { - "npm-registry-fetch": "^14.0.0", - "proc-log": "^3.0.0" - } - }, - "npm-registry-fetch": { - "version": "14.0.5", - "bundled": true, - "requires": { - "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" - } - }, - "npm-user-validate": { - "version": "2.0.0", - "bundled": true - }, - "npmlog": { - "version": "7.0.1", - "bundled": true, - "requires": { - "are-we-there-yet": "^4.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^5.0.0", - "set-blocking": "^2.0.0" - } - }, - "once": { - "version": "1.4.0", - "bundled": true, - "requires": { - "wrappy": "1" - } - }, - "p-map": { - "version": "4.0.0", - "bundled": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "pacote": { - "version": "15.2.0", - "bundled": true, - "requires": { - "@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" - } - }, - "parse-conflict-json": { - "version": "3.0.1", - "bundled": true, - "requires": { - "json-parse-even-better-errors": "^3.0.0", - "just-diff": "^6.0.0", - "just-diff-apply": "^5.2.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true - }, - "path-key": { - "version": "3.1.1", - "bundled": true - }, - "path-scurry": { - "version": "1.9.2", - "bundled": true, - "requires": { - "lru-cache": "^9.1.1", - "minipass": "^5.0.0 || ^6.0.2" - }, - "dependencies": { - "lru-cache": { - "version": "9.1.1", - "bundled": true - } - } - }, - "postcss-selector-parser": { - "version": "6.0.13", - "bundled": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "proc-log": { - "version": "3.0.0", - "bundled": true - }, - "process": { - "version": "0.11.10", - "bundled": true - }, - "promise-all-reject-late": { - "version": "1.0.1", - "bundled": true - }, - "promise-call-limit": { - "version": "1.0.2", - "bundled": true - }, - "promise-inflight": { - "version": "1.0.1", - "bundled": true - }, - "promise-retry": { - "version": "2.0.1", - "bundled": true, - "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - } - }, - "promzard": { - "version": "1.0.0", - "bundled": true, - "requires": { - "read": "^2.0.0" - } - }, - "qrcode-terminal": { - "version": "0.12.0", - "bundled": true - }, - "read": { - "version": "2.1.0", - "bundled": true, - "requires": { - "mute-stream": "~1.0.0" - } - }, - "read-cmd-shim": { - "version": "4.0.0", - "bundled": true - }, - "read-package-json": { - "version": "6.0.4", - "bundled": true, - "requires": { - "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" - } - }, - "read-package-json-fast": { - "version": "3.0.2", - "bundled": true, - "requires": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - } - }, - "readable-stream": { - "version": "4.4.0", - "bundled": true, - "requires": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10" - } - }, - "retry": { - "version": "0.12.0", - "bundled": true - }, - "rimraf": { - "version": "3.0.2", - "bundled": true, - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.2.3", - "bundled": true, - "requires": { - "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" - } - }, - "minimatch": { - "version": "3.1.2", - "bundled": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "safe-buffer": { - "version": "5.2.1", - "bundled": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "optional": true - }, - "semver": { - "version": "7.5.4", - "bundled": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "bundled": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true - }, - "shebang-command": { - "version": "2.0.0", - "bundled": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "bundled": true - }, - "signal-exit": { - "version": "4.0.2", - "bundled": true - }, - "sigstore": { - "version": "1.7.0", - "bundled": true, - "requires": { - "@sigstore/protobuf-specs": "^0.1.0", - "@sigstore/tuf": "^1.0.1", - "make-fetch-happen": "^11.0.1" - } - }, - "smart-buffer": { - "version": "4.2.0", - "bundled": true - }, - "socks": { - "version": "2.7.1", - "bundled": true, - "requires": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - } - }, - "socks-proxy-agent": { - "version": "7.0.0", - "bundled": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - } - }, - "spdx-correct": { - "version": "3.2.0", - "bundled": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "bundled": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "bundled": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.13", - "bundled": true - }, - "ssri": { - "version": "10.0.4", - "bundled": true, - "requires": { - "minipass": "^5.0.0" - } - }, - "string_decoder": { - "version": "1.3.0", - "bundled": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-width": { - "version": "4.2.3", - "bundled": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string-width-cjs": { - "version": "npm:string-width@4.2.3", - "bundled": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "bundled": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-ansi-cjs": { - "version": "npm:strip-ansi@6.0.1", - "bundled": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "supports-color": { - "version": "9.4.0", - "bundled": true - }, - "tar": { - "version": "6.1.15", - "bundled": true, - "requires": { - "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" - }, - "dependencies": { - "fs-minipass": { - "version": "2.1.0", - "bundled": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - } - } - }, - "text-table": { - "version": "0.2.0", - "bundled": true - }, - "tiny-relative-date": { - "version": "1.3.0", - "bundled": true - }, - "treeverse": { - "version": "3.0.0", - "bundled": true - }, - "tuf-js": { - "version": "1.1.7", - "bundled": true, - "requires": { - "@tufjs/models": "1.0.4", - "debug": "^4.3.4", - "make-fetch-happen": "^11.1.1" - } - }, - "unique-filename": { - "version": "3.0.0", - "bundled": true, - "requires": { - "unique-slug": "^4.0.0" - } - }, - "unique-slug": { - "version": "4.0.0", - "bundled": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "bundled": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validate-npm-package-name": { - "version": "5.0.0", - "bundled": true, - "requires": { - "builtins": "^5.0.0" - } - }, - "walk-up-path": { - "version": "3.0.1", - "bundled": true - }, - "wcwidth": { - "version": "1.0.1", - "bundled": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "which": { - "version": "3.0.1", - "bundled": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wide-align": { - "version": "1.1.5", - "bundled": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "wrap-ansi": { - "version": "8.1.0", - "bundled": true, - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "bundled": true - }, - "ansi-styles": { - "version": "6.2.1", - "bundled": true - }, - "emoji-regex": { - "version": "9.2.2", - "bundled": true - }, - "string-width": { - "version": "5.1.2", - "bundled": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.1.0", - "bundled": true, - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "wrap-ansi-cjs": { - "version": "npm:wrap-ansi@7.0.0", - "bundled": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true - }, - "write-file-atomic": { - "version": "5.0.1", - "bundled": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - } - }, - "yallist": { - "version": "4.0.0", - "bundled": true - } - } + "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==", + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + } + } }, - "npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "requires": { - "path-key": "^4.0.0" - }, - "dependencies": { - "path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==" - } - } + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } + "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==" + } + } + }, + "merge-source-map": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", + "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", + "dev": true, + "requires": { + "source-map": "^0.5.6" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true + } + } + }, + "merge-stream": { + "version": "2.0.0" + }, + "merge2": { + "version": "1.4.1" + }, + "mermaid": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.3.0.tgz", + "integrity": "sha512-H5quxuQjwXC8M1WuuzhAp2TdqGg74t5skfDBrNKJ7dt3z8Wprl5S6h9VJsRhoBUTSs1TMtHEdplLhCqXleZZLw==", + "requires": { + "@braintree/sanitize-url": "^6.0.2", + "@types/d3-scale": "^4.0.3", + "@types/d3-scale-chromatic": "^3.0.0", + "cytoscape": "^3.23.0", + "cytoscape-cose-bilkent": "^4.1.0", + "cytoscape-fcose": "^2.1.0", + "d3": "^7.4.0", + "d3-sankey": "^0.12.3", + "dagre-d3-es": "7.0.10", + "dayjs": "^1.11.7", + "dompurify": "3.0.5", + "elkjs": "^0.8.2", + "khroma": "^2.0.0", + "lodash-es": "^4.17.21", + "mdast-util-from-markdown": "^1.3.0", + "non-layered-tidy-tree-layout": "^2.0.2", + "stylis": "^4.1.3", + "ts-dedent": "^2.2.0", + "uuid": "^9.0.0", + "web-worker": "^1.2.0" + } + }, + "micromark": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", + "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", + "requires": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } }, - "nwsapi": { - "version": "2.2.0", - "dev": true - }, - "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 - }, - "object-inspect": { - "version": "1.12.2", - "dev": true - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "micromark-core-commonmark": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", + "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", + "requires": { + "decode-named-character-reference": "^1.0.0", + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "micromark-factory-destination": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", + "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-factory-label": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", + "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "micromark-factory-space": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", + "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-factory-title": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", + "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", + "requires": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-factory-whitespace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", + "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", + "requires": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-character": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", + "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", + "requires": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-chunked": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", + "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", + "requires": { + "micromark-util-symbol": "^1.0.0" + } + }, + "micromark-util-classify-character": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", + "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-combine-extensions": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", + "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", + "requires": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-decode-numeric-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", + "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", + "requires": { + "micromark-util-symbol": "^1.0.0" + } + }, + "micromark-util-decode-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", + "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", + "requires": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "micromark-util-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", + "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==" + }, + "micromark-util-html-tag-name": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", + "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==" + }, + "micromark-util-normalize-identifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", + "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", + "requires": { + "micromark-util-symbol": "^1.0.0" + } + }, + "micromark-util-resolve-all": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", + "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", + "requires": { + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-sanitize-uri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", + "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "micromark-util-subtokenize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", + "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", + "requires": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "micromark-util-symbol": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", + "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==" + }, + "micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==" + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==" + }, + "mime-db": { + "version": "1.52.0", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==" + }, + "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==" + }, + "minimatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" + }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "dependencies": { + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" + } + } + }, + "minipass": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz", + "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==", + "dev": true + }, + "mkdirp": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.3.tgz", + "integrity": "sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw==", + "dev": true + }, + "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==" + }, + "morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dev": true, + "requires": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + } + }, + "mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==" + }, + "ms": { + "version": "2.0.0", + "dev": true + }, + "multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + } + }, + "nanoid": { + "version": "3.3.4", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "dev": true + }, + "ncp": { + "version": "2.0.0", + "dev": true + }, + "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 + }, + "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==" + }, + "nerf-dart": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", + "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==" + }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, + "nise": { + "version": "1.5.3", + "dev": true, + "requires": { + "@sinonjs/formatio": "^3.2.1", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "lolex": "^5.0.1", + "path-to-regexp": "^1.7.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "dev": true }, - "object-keys": { - "version": "1.1.1", - "dev": true - }, - "object.assign": { - "version": "4.1.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } + "lolex": { + "version": "5.1.2", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "path-to-regexp": { + "version": "1.8.0", + "dev": true, + "requires": { + "isarray": "0.0.1" + } + } + } + }, + "node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "dev": true + }, + "node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "requires": { + "lodash": "^4.17.21" + }, + "dependencies": { + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + } + } + }, + "node-fetch": { + "version": "2.6.7", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "0.0.3", + "dev": true }, - "object.values": { - "version": "1.1.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } + "webidl-conversions": { + "version": "3.0.1", + "dev": true }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } + "whatwg-url": { + "version": "5.0.0", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, + "node-gyp-build": { + "version": "4.4.0", + "dev": true, + "optional": true + }, + "node-int64": { + "version": "0.4.0", + "dev": true + }, + "node-powershell": { + "version": "5.0.1", + "dev": true, + "requires": { + "child-shell": "^5.0.0", + "is-wsl": "^2.2.0" + } + }, + "node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, + "non-layered-tidy-tree-layout": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", + "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" + }, + "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==", + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "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==", + "requires": { + "lru-cache": "^6.0.0" + } }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true + "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==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "normalize-path": { + "version": "3.0.0", + "dev": true + }, + "normalize-url": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", + "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==" + }, + "npm": { + "version": "9.8.1", + "resolved": "https://registry.npmjs.org/npm/-/npm-9.8.1.tgz", + "integrity": "sha512-AfDvThQzsIXhYgk9zhbk5R+lh811lKkLAeQMMhSypf1BM7zUafeIIBzMzespeuVEJ0+LvY36oRQYf7IKLzU3rw==", + "requires": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^6.3.0", + "@npmcli/config": "^6.2.1", + "@npmcli/fs": "^3.1.0", + "@npmcli/map-workspaces": "^3.0.4", + "@npmcli/package-json": "^4.0.1", + "@npmcli/promise-spawn": "^6.0.2", + "@npmcli/run-script": "^6.0.2", + "abbrev": "^2.0.0", + "archy": "~1.0.0", + "cacache": "^17.1.3", + "chalk": "^5.3.0", + "ci-info": "^3.8.0", + "cli-columns": "^4.0.0", + "cli-table3": "^0.6.3", + "columnify": "^1.6.0", + "fastest-levenshtein": "^1.0.16", + "fs-minipass": "^3.0.2", + "glob": "^10.2.7", + "graceful-fs": "^4.2.11", + "hosted-git-info": "^6.1.1", + "ini": "^4.1.1", + "init-package-json": "^5.0.0", + "is-cidr": "^4.0.2", + "json-parse-even-better-errors": "^3.0.0", + "libnpmaccess": "^7.0.2", + "libnpmdiff": "^5.0.19", + "libnpmexec": "^6.0.3", + "libnpmfund": "^4.0.19", + "libnpmhook": "^9.0.3", + "libnpmorg": "^5.0.4", + "libnpmpack": "^5.0.19", + "libnpmpublish": "^7.5.0", + "libnpmsearch": "^6.0.2", + "libnpmteam": "^5.0.3", + "libnpmversion": "^4.0.2", + "make-fetch-happen": "^11.1.1", + "minimatch": "^9.0.3", + "minipass": "^5.0.0", + "minipass-pipeline": "^1.2.4", + "ms": "^2.1.2", + "node-gyp": "^9.4.0", + "nopt": "^7.2.0", + "npm-audit-report": "^5.0.0", + "npm-install-checks": "^6.1.1", + "npm-package-arg": "^10.1.0", + "npm-pick-manifest": "^8.0.1", + "npm-profile": "^7.0.1", + "npm-registry-fetch": "^14.0.5", + "npm-user-validate": "^2.0.0", + "npmlog": "^7.0.1", + "p-map": "^4.0.0", + "pacote": "^15.2.0", + "parse-conflict-json": "^3.0.1", + "proc-log": "^3.0.0", + "qrcode-terminal": "^0.12.0", + "read": "^2.1.0", + "semver": "^7.5.4", + "sigstore": "^1.7.0", + "ssri": "^10.0.4", + "supports-color": "^9.4.0", + "tar": "^6.1.15", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "treeverse": "^3.0.0", + "validate-npm-package-name": "^5.0.0", + "which": "^3.0.1", + "write-file-atomic": "^5.0.1" + }, + "dependencies": { + "@colors/colors": { + "version": "1.5.0", + "bundled": true, + "optional": true }, - "once": { - "version": "1.4.0", - "requires": { - "wrappy": "1" - } + "@isaacs/cliui": { + "version": "8.0.2", + "bundled": true, + "requires": { + "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" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "bundled": true + }, + "emoji-regex": { + "version": "9.2.2", + "bundled": true + }, + "string-width": { + "version": "5.1.2", + "bundled": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "bundled": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "@isaacs/string-locale-compare": { + "version": "1.1.0", + "bundled": true + }, + "@npmcli/arborist": { + "version": "6.3.0", + "bundled": true, + "requires": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^3.1.0", + "@npmcli/installed-package-contents": "^2.0.2", + "@npmcli/map-workspaces": "^3.0.2", + "@npmcli/metavuln-calculator": "^5.0.0", + "@npmcli/name-from-folder": "^2.0.0", + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^4.0.0", + "@npmcli/query": "^3.0.0", + "@npmcli/run-script": "^6.0.0", + "bin-links": "^4.0.1", + "cacache": "^17.0.4", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^6.1.1", + "json-parse-even-better-errors": "^3.0.0", + "json-stringify-nice": "^1.1.4", + "minimatch": "^9.0.0", + "nopt": "^7.0.0", + "npm-install-checks": "^6.0.0", + "npm-package-arg": "^10.1.0", + "npm-pick-manifest": "^8.0.1", + "npm-registry-fetch": "^14.0.3", + "npmlog": "^7.0.1", + "pacote": "^15.0.8", + "parse-conflict-json": "^3.0.0", + "proc-log": "^3.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.2", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^10.0.1", + "treeverse": "^3.0.0", + "walk-up-path": "^3.0.1" + } + }, + "@npmcli/config": { + "version": "6.2.1", + "bundled": true, + "requires": { + "@npmcli/map-workspaces": "^3.0.2", + "ci-info": "^3.8.0", + "ini": "^4.1.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.5", + "walk-up-path": "^3.0.1" + } + }, + "@npmcli/disparity-colors": { + "version": "3.0.0", + "bundled": true, + "requires": { + "ansi-styles": "^4.3.0" + } + }, + "@npmcli/fs": { + "version": "3.1.0", + "bundled": true, + "requires": { + "semver": "^7.3.5" + } + }, + "@npmcli/git": { + "version": "4.1.0", + "bundled": true, + "requires": { + "@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" + } + }, + "@npmcli/installed-package-contents": { + "version": "2.0.2", + "bundled": true, + "requires": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + } + }, + "@npmcli/map-workspaces": { + "version": "3.0.4", + "bundled": true, + "requires": { + "@npmcli/name-from-folder": "^2.0.0", + "glob": "^10.2.2", + "minimatch": "^9.0.0", + "read-package-json-fast": "^3.0.0" + } + }, + "@npmcli/metavuln-calculator": { + "version": "5.0.1", + "bundled": true, + "requires": { + "cacache": "^17.0.0", + "json-parse-even-better-errors": "^3.0.0", + "pacote": "^15.0.0", + "semver": "^7.3.5" + } + }, + "@npmcli/name-from-folder": { + "version": "2.0.0", + "bundled": true + }, + "@npmcli/node-gyp": { + "version": "3.0.0", + "bundled": true + }, + "@npmcli/package-json": { + "version": "4.0.1", + "bundled": true, + "requires": { + "@npmcli/git": "^4.1.0", + "glob": "^10.2.2", + "hosted-git-info": "^6.1.1", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "proc-log": "^3.0.0", + "semver": "^7.5.3" + } + }, + "@npmcli/promise-spawn": { + "version": "6.0.2", + "bundled": true, + "requires": { + "which": "^3.0.0" + } + }, + "@npmcli/query": { + "version": "3.0.0", + "bundled": true, + "requires": { + "postcss-selector-parser": "^6.0.10" + } + }, + "@npmcli/run-script": { + "version": "6.0.2", + "bundled": true, + "requires": { + "@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" + } }, - "one-time": { - "version": "1.0.0", - "dev": true, - "requires": { - "fn.name": "1.x.x" - } + "@pkgjs/parseargs": { + "version": "0.11.0", + "bundled": true, + "optional": true + }, + "@sigstore/protobuf-specs": { + "version": "0.1.0", + "bundled": true + }, + "@sigstore/tuf": { + "version": "1.0.2", + "bundled": true, + "requires": { + "@sigstore/protobuf-specs": "^0.1.0", + "tuf-js": "^1.1.7" + } }, - "onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "requires": { - "mimic-fn": "^4.0.0" - } + "@tootallnate/once": { + "version": "2.0.0", + "bundled": true + }, + "@tufjs/canonical-json": { + "version": "1.0.0", + "bundled": true + }, + "@tufjs/models": { + "version": "1.0.4", + "bundled": true, + "requires": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + } + }, + "abbrev": { + "version": "2.0.0", + "bundled": true + }, + "abort-controller": { + "version": "3.0.0", + "bundled": true, + "requires": { + "event-target-shim": "^5.0.0" + } }, - "open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } + "agent-base": { + "version": "6.0.2", + "bundled": true, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.3.0", + "bundled": true, + "requires": { + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" + } }, - "opencollective-postinstall": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", - "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", - "dev": true + "aggregate-error": { + "version": "3.1.0", + "bundled": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } }, - "optionator": { - "version": "0.8.3", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } + "ansi-regex": { + "version": "5.0.1", + "bundled": true }, - "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, - "requires": { - "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" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "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 - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "ansi-styles": { + "version": "4.3.0", + "bundled": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "aproba": { + "version": "2.0.0", + "bundled": true + }, + "archy": { + "version": "1.0.0", + "bundled": true + }, + "are-we-there-yet": { + "version": "4.0.0", + "bundled": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^4.1.0" + } }, - "os-name": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz", - "integrity": "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==", - "dev": true, - "requires": { - "macos-release": "^2.5.0", - "windows-release": "^4.0.0" - } + "balanced-match": { + "version": "1.0.2", + "bundled": true }, - "p-each-series": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz", - "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==" - }, - "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==", - "requires": { - "p-map": "^5.1.0" - } + "base64-js": { + "version": "1.5.1", + "bundled": true + }, + "bin-links": { + "version": "4.0.2", + "bundled": true, + "requires": { + "cmd-shim": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "read-cmd-shim": "^4.0.0", + "write-file-atomic": "^5.0.0" + } }, - "p-finally": { - "version": "1.0.0", - "dev": true + "binary-extensions": { + "version": "2.2.0", + "bundled": true }, - "p-is-promise": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", - "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==" + "brace-expansion": { + "version": "2.0.1", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0" + } }, - "p-limit": { - "version": "1.3.0", - "requires": { - "p-try": "^1.0.0" - } + "buffer": { + "version": "6.0.3", + "bundled": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "builtins": { + "version": "5.0.1", + "bundled": true, + "requires": { + "semver": "^7.0.0" + } + }, + "cacache": { + "version": "17.1.3", + "bundled": true, + "requires": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "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" + } }, - "p-locate": { - "version": "2.0.0", - "requires": { - "p-limit": "^1.1.0" - } + "chalk": { + "version": "5.3.0", + "bundled": true }, - "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==", - "requires": { - "aggregate-error": "^4.0.0" - } + "chownr": { + "version": "2.0.0", + "bundled": true }, - "p-queue": { - "version": "6.6.2", - "dev": true, - "requires": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" - }, - "dependencies": { - "p-timeout": { - "version": "3.2.0", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - } - } + "ci-info": { + "version": "3.8.0", + "bundled": true }, - "p-reduce": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", - "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==" + "cidr-regex": { + "version": "3.1.1", + "bundled": true, + "requires": { + "ip-regex": "^4.1.0" + } }, - "p-timeout": { - "version": "4.1.0", - "dev": true + "clean-stack": { + "version": "2.2.0", + "bundled": true }, - "p-try": { - "version": "1.0.0" - }, - "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "requires": { - "callsites": "^3.0.0" - } + "cli-columns": { + "version": "4.0.0", + "bundled": true, + "requires": { + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + } }, - "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==", - "requires": { - "@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" - } + "cli-table3": { + "version": "0.6.3", + "bundled": true, + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } }, - "parse5": { - "version": "6.0.1", - "dev": true - }, - "parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "dev": true, - "requires": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - }, - "dependencies": { - "parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, - "requires": { - "entities": "^4.4.0" - } - } - } + "clone": { + "version": "1.0.4", + "bundled": true }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pastebin-api": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/pastebin-api/-/pastebin-api-5.1.6.tgz", - "integrity": "sha512-FI2ZeXLxroI2tuRVd5LI7eNmiANFxDOdlhXxSMqtOXTJn1KSt2UC8kglhndUOOPt6p9XPVnuS7XGW/KbiBbbzw==", - "dev": true, - "requires": { - "fast-xml-parser": "^4.1.3", - "undici": "^5.21.0" - } + "cmd-shim": { + "version": "6.0.1", + "bundled": true }, - "path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true + "color-convert": { + "version": "2.0.1", + "bundled": true, + "requires": { + "color-name": "~1.1.4" + } }, - "path-exists": { - "version": "3.0.0" + "color-name": { + "version": "1.1.4", + "bundled": true }, - "path-is-absolute": { - "version": "1.0.1", - "dev": true + "color-support": { + "version": "1.1.3", + "bundled": true }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "columnify": { + "version": "1.6.0", + "bundled": true, + "requires": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + } }, - "path-parse": { - "version": "1.0.7" + "common-ancestor-path": { + "version": "1.0.1", + "bundled": true }, - "path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "dev": true, - "requires": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", - "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", - "dev": true - } - } + "concat-map": { + "version": "0.0.1", + "bundled": true }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "pathval": { - "version": "1.1.1", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "through": "~2.3" - } + "console-control-strings": { + "version": "1.1.0", + "bundled": true }, - "pdfjs-dist": { - "version": "2.12.313", - "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.12.313.tgz", - "integrity": "sha512-1x6iXO4Qnv6Eb+YFdN5JdUzt4pAkxSp3aLAYPX93eQCyg/m7QFzXVWJHJVtoW48CI8HCXju4dSkhQZwoheL5mA==", - "dev": true, - "requires": {} - }, - "pdfmake": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/pdfmake/-/pdfmake-0.2.7.tgz", - "integrity": "sha512-ClLpgx30H5G3EDvRW1MrA1Xih6YxEaSgIVFrOyBMgAAt62V+hxsyWAi6JNP7u1Fc5JKYAbpb4RRVw8Rhvmz5cQ==", - "dev": true, - "requires": { - "@foliojs-fork/linebreak": "^1.1.1", - "@foliojs-fork/pdfkit": "^0.13.0", - "iconv-lite": "^0.6.3", - "xmldoc": "^1.1.2" - }, - "dependencies": { - "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, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } + "cross-spawn": { + "version": "7.0.3", + "bundled": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "bundled": true, + "requires": { + "isexe": "^2.0.0" + } } + } }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1" - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" - }, - "pirates": { - "version": "4.0.5", - "dev": true - }, - "pkg-conf": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", - "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", - "requires": { - "find-up": "^2.0.0", - "load-json-file": "^4.0.0" - } + "cssesc": { + "version": "3.0.0", + "bundled": true }, - "pkg-dir": { - "version": "4.2.0", - "dev": true, - "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "dev": true - } - } + "debug": { + "version": "4.3.4", + "bundled": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "bundled": true + } + } }, - "png-js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz", - "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==", - "dev": true + "defaults": { + "version": "1.0.4", + "bundled": true, + "requires": { + "clone": "^1.0.2" + } }, - "prelude-ls": { - "version": "1.1.2", - "dev": true - }, - "prettier": { - "version": "2.7.1", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } + "delegates": { + "version": "1.0.0", + "bundled": true }, - "pretty-format": { - "version": "27.5.1", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "dev": true - } - } + "depd": { + "version": "2.0.0", + "bundled": true }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true - }, - "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==" - }, - "progress": { - "version": "2.0.3", - "dev": true - }, - "prompts": { - "version": "2.4.2", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } + "diff": { + "version": "5.1.0", + "bundled": true }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" - }, - "proxy-middleware": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", - "integrity": "sha512-EGCG8SeoIRVMhsqHQUdDigB2i7qU7fCsWASwn54+nPutYO8n4q6EiwMzyfWlC+dzRFExP+kvcnDFdBDHoZBU7Q==", - "dev": true - }, - "psl": { - "version": "1.8.0", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } + "eastasianwidth": { + "version": "0.2.0", + "bundled": true }, - "punycode": { - "version": "2.1.1", - "dev": true - }, - "q": { - "version": "1.5.1", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3" - }, - "quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==" - }, - "quote-stream": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", - "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==", - "dev": true, - "requires": { - "buffer-equal": "0.0.1", - "minimist": "^1.1.3", - "through2": "^2.0.0" - } + "emoji-regex": { + "version": "8.0.0", + "bundled": true }, - "randombytes": { - "version": "2.1.0", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } + "encoding": { + "version": "0.1.13", + "bundled": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + } }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } + "env-paths": { + "version": "2.2.1", + "bundled": true }, - "react-is": { - "version": "17.0.2", - "dev": true + "err-code": { + "version": "2.0.3", + "bundled": true }, - "read-pkg": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-8.0.0.tgz", - "integrity": "sha512-Ajb9oSjxXBw0YyOiwtQ2dKbAA/vMnUPnY63XcCk+mXo0BwIdQEMgZLZiMWGttQHcUhUgbK0mH85ethMPKXxziw==", - "requires": { - "@types/normalize-package-data": "^2.4.1", - "normalize-package-data": "^5.0.0", - "parse-json": "^7.0.0", - "type-fest": "^3.8.0" - }, - "dependencies": { - "json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==" - }, - "lines-and-columns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==" - }, - "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==", - "requires": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - } - }, - "parse-json": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.0.0.tgz", - "integrity": "sha512-kP+TQYAzAiVnzOlWOe0diD6L35s9bJh0SCn95PIbZFKrOYuIRQsQkeWEYxzVDuHTt9V9YqvYCJ2Qo4z9wdfZPw==", - "requires": { - "@babel/code-frame": "^7.21.4", - "error-ex": "^1.3.2", - "json-parse-even-better-errors": "^3.0.0", - "lines-and-columns": "^2.0.3", - "type-fest": "^3.8.0" - } - }, - "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==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==" - } - } + "event-target-shim": { + "version": "5.0.1", + "bundled": true }, - "read-pkg-up": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-10.0.0.tgz", - "integrity": "sha512-jgmKiS//w2Zs+YbX039CorlkOp8FIVbSAN8r8GJHDsGlmNPXo+VeHkqAwCiQVTTx5/LwLZTcEw59z3DvcLbr0g==", - "requires": { - "find-up": "^6.3.0", - "read-pkg": "^8.0.0", - "type-fest": "^3.12.0" - }, - "dependencies": { - "find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "requires": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - } - }, - "locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "requires": { - "p-locate": "^6.0.0" - } - }, - "p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "requires": { - "yocto-queue": "^1.0.0" - } - }, - "p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "requires": { - "p-limit": "^4.0.0" - } - }, - "path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==" - }, - "type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==" - } - } + "events": { + "version": "3.3.0", + "bundled": true }, - "readable-stream": { - "version": "3.6.0", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } + "exponential-backoff": { + "version": "3.1.1", + "bundled": true }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } + "fastest-levenshtein": { + "version": "1.0.16", + "bundled": true }, - "rechoir": { - "version": "0.6.2", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } + "foreground-child": { + "version": "3.1.1", + "bundled": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, + "fs-minipass": { + "version": "3.0.2", + "bundled": true, + "requires": { + "minipass": "^5.0.0" + } }, - "redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "dependencies": { - "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==" - } - } + "fs.realpath": { + "version": "1.0.0", + "bundled": true }, - "redeyed": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", - "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==", - "requires": { - "esprima": "~4.0.0" - } + "function-bind": { + "version": "1.1.1", + "bundled": true + }, + "gauge": { + "version": "5.0.1", + "bundled": true, + "requires": { + "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": "^4.0.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + } }, - "reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", - "dev": true - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.2" - } + "glob": { + "version": "10.2.7", + "bundled": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + } }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } + "graceful-fs": { + "version": "4.2.11", + "bundled": true }, - "regexp.prototype.flags": { - "version": "1.4.3", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } + "has": { + "version": "1.0.3", + "bundled": true, + "requires": { + "function-bind": "^1.1.1" + } }, - "regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "requires": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - } + "has-unicode": { + "version": "2.0.1", + "bundled": true }, - "regextras": { - "version": "0.7.1", - "dev": true + "hosted-git-info": { + "version": "6.1.1", + "bundled": true, + "requires": { + "lru-cache": "^7.5.1" + } }, - "registry-auth-token": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", - "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", - "requires": { - "@pnpm/npm-conf": "^2.1.0" - } + "http-cache-semantics": { + "version": "4.1.1", + "bundled": true }, - "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true - } - } + "http-proxy-agent": { + "version": "5.0.0", + "bundled": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } }, - "require-directory": { - "version": "2.1.1" + "https-proxy-agent": { + "version": "5.0.1", + "bundled": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "humanize-ms": { + "version": "1.2.1", + "bundled": true, + "requires": { + "ms": "^2.0.0" + } }, - "require-from-string": { - "version": "2.0.2", - "dev": true + "iconv-lite": { + "version": "0.6.3", + "bundled": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } }, - "resolve": { - "version": "1.22.1", - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } + "ieee754": { + "version": "1.2.1", + "bundled": true }, - "resolve-cwd": { - "version": "3.0.0", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "dev": true - } - } + "ignore-walk": { + "version": "6.0.3", + "bundled": true, + "requires": { + "minimatch": "^9.0.0" + } }, - "resolve-from": { - "version": "4.0.0" - }, - "resolve.exports": { - "version": "1.1.0", - "dev": true - }, - "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, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "dependencies": { - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - } - } + "imurmurhash": { + "version": "0.1.4", + "bundled": true }, - "reusify": { - "version": "1.0.4" + "indent-string": { + "version": "4.0.0", + "bundled": true }, - "rimraf": { - "version": "2.6.3", - "dev": true, - "requires": { - "glob": "^7.1.3" - } + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } }, - "robust-predicates": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", - "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" - }, - "rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } + "inherits": { + "version": "2.0.4", + "bundled": true }, - "rollup-plugin-clear": { - "version": "2.0.7", - "dev": true, - "requires": { - "rimraf": "^2.6.2" - } + "ini": { + "version": "4.1.1", + "bundled": true + }, + "init-package-json": { + "version": "5.0.0", + "bundled": true, + "requires": { + "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" + } + }, + "ip": { + "version": "2.0.0", + "bundled": true + }, + "ip-regex": { + "version": "4.3.0", + "bundled": true + }, + "is-cidr": { + "version": "4.0.2", + "bundled": true, + "requires": { + "cidr-regex": "^3.1.1" + } }, - "rollup-plugin-copy": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-copy/-/rollup-plugin-copy-3.4.0.tgz", - "integrity": "sha512-rGUmYYsYsceRJRqLVlE9FivJMxJ7X6jDlP79fmFkL8sJs7VVMSVyA2yfyL+PGyO/vJs4A87hwhgVfz61njI+uQ==", - "dev": true, - "requires": { - "@types/fs-extra": "^8.0.1", - "colorette": "^1.1.0", - "fs-extra": "^8.1.0", - "globby": "10.0.1", - "is-plain-object": "^3.0.0" - }, - "dependencies": { - "globby": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", - "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - } - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true - } - } + "is-core-module": { + "version": "2.12.1", + "bundled": true, + "requires": { + "has": "^1.0.3" + } }, - "rollup-plugin-screeps-world": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/rollup-plugin-screeps-world/-/rollup-plugin-screeps-world-1.0.4.tgz", - "integrity": "sha512-+NB/KH8kuOjaenOySZVrPnRU5O/ny48otYYyI/Flg5tww59XIA95JZbmgnoN8J8GbjmDk+D5s+RV4YSK9r2ucw==", - "dev": true, - "requires": { - "git-rev-sync": "^3.0.2", - "screeps-api": "^1.11.0" - }, - "dependencies": { - "git-rev-sync": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/git-rev-sync/-/git-rev-sync-3.0.2.tgz", - "integrity": "sha512-Nd5RiYpyncjLv0j6IONy0lGzAqdRXUaBctuGBbrEA2m6Bn4iDrN/9MeQTXuiquw8AEKL9D2BW0nw5m/lQvxqnQ==", - "dev": true, - "requires": { - "escape-string-regexp": "1.0.5", - "graceful-fs": "4.1.15", - "shelljs": "0.8.5" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - } - } + "is-fullwidth-code-point": { + "version": "3.0.0", + "bundled": true }, - "rollup-plugin-terser": { - "version": "7.0.2", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "jest-worker": { - "version": "26.6.2", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "serialize-javascript": { - "version": "4.0.0", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "is-lambda": { + "version": "1.0.1", + "bundled": true }, - "rollup-plugin-typescript2": { - "version": "0.36.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.36.0.tgz", - "integrity": "sha512-NB2CSQDxSe9+Oe2ahZbf+B4bh7pHwjV5L+RSYpCu7Q5ROuN94F9b6ioWwKfz3ueL3KTtmX4o2MUH2cgHDIEUsw==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^4.1.2", - "find-cache-dir": "^3.3.2", - "fs-extra": "^10.0.0", - "semver": "^7.5.4", - "tslib": "^2.6.2" - }, - "dependencies": { - "@rollup/pluginutils": { - "version": "4.2.1", - "dev": true, - "requires": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - } - }, - "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, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } + "isexe": { + "version": "2.0.0", + "bundled": true }, - "run-parallel": { - "version": "1.2.0", - "requires": { - "queue-microtask": "^1.2.2" - } + "jackspeak": { + "version": "2.2.1", + "bundled": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } }, - "rw": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" - }, - "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, - "requires": { - "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", - "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", - "dev": true - } - } + "json-parse-even-better-errors": { + "version": "3.0.0", + "bundled": true }, - "sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "requires": { - "mri": "^1.1.0" - } + "json-stringify-nice": { + "version": "1.1.4", + "bundled": true }, - "safe-buffer": { - "version": "5.2.1" + "jsonparse": { + "version": "1.3.1", + "bundled": true + }, + "just-diff": { + "version": "6.0.2", + "bundled": true + }, + "just-diff-apply": { + "version": "5.5.0", + "bundled": true + }, + "libnpmaccess": { + "version": "7.0.2", + "bundled": true, + "requires": { + "npm-package-arg": "^10.1.0", + "npm-registry-fetch": "^14.0.3" + } + }, + "libnpmdiff": { + "version": "5.0.19", + "bundled": true, + "requires": { + "@npmcli/arborist": "^6.3.0", + "@npmcli/disparity-colors": "^3.0.0", + "@npmcli/installed-package-contents": "^2.0.2", + "binary-extensions": "^2.2.0", + "diff": "^5.1.0", + "minimatch": "^9.0.0", + "npm-package-arg": "^10.1.0", + "pacote": "^15.0.8", + "tar": "^6.1.13" + } + }, + "libnpmexec": { + "version": "6.0.3", + "bundled": true, + "requires": { + "@npmcli/arborist": "^6.3.0", + "@npmcli/run-script": "^6.0.0", + "ci-info": "^3.7.1", + "npm-package-arg": "^10.1.0", + "npmlog": "^7.0.1", + "pacote": "^15.0.8", + "proc-log": "^3.0.0", + "read": "^2.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "walk-up-path": "^3.0.1" + } + }, + "libnpmfund": { + "version": "4.0.19", + "bundled": true, + "requires": { + "@npmcli/arborist": "^6.3.0" + } + }, + "libnpmhook": { + "version": "9.0.3", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + } + }, + "libnpmorg": { + "version": "5.0.4", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + } + }, + "libnpmpack": { + "version": "5.0.19", + "bundled": true, + "requires": { + "@npmcli/arborist": "^6.3.0", + "@npmcli/run-script": "^6.0.0", + "npm-package-arg": "^10.1.0", + "pacote": "^15.0.8" + } + }, + "libnpmpublish": { + "version": "7.5.0", + "bundled": true, + "requires": { + "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" + } + }, + "libnpmsearch": { + "version": "6.0.2", + "bundled": true, + "requires": { + "npm-registry-fetch": "^14.0.3" + } + }, + "libnpmteam": { + "version": "5.0.3", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + } + }, + "libnpmversion": { + "version": "4.0.2", + "bundled": true, + "requires": { + "@npmcli/git": "^4.0.1", + "@npmcli/run-script": "^6.0.0", + "json-parse-even-better-errors": "^3.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.7" + } }, - "safe-stable-stringify": { - "version": "2.4.0", - "dev": true + "lru-cache": { + "version": "7.18.3", + "bundled": true + }, + "make-fetch-happen": { + "version": "11.1.1", + "bundled": true, + "requires": { + "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" + } }, - "safer-buffer": { - "version": "2.1.2" - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "saxes": { - "version": "5.0.1", - "dev": true, - "requires": { - "xmlchars": "^2.2.0" - } + "minimatch": { + "version": "9.0.3", + "bundled": true, + "requires": { + "brace-expansion": "^2.0.1" + } }, - "scope-analyzer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.2.tgz", - "integrity": "sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ==", - "dev": true, - "requires": { - "array-from": "^2.1.1", - "dash-ast": "^2.0.1", - "es6-map": "^0.1.5", - "es6-set": "^0.1.5", - "es6-symbol": "^3.1.1", - "estree-is-function": "^1.0.0", - "get-assigned-identifiers": "^1.1.0" + "minipass": { + "version": "5.0.0", + "bundled": true + }, + "minipass-collect": { + "version": "1.0.2", + "bundled": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-fetch": { + "version": "3.0.3", + "bundled": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^5.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + }, + "minipass-flush": { + "version": "1.0.5", + "bundled": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-json-stream": { + "version": "1.0.1", + "bundled": true, + "requires": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "bundled": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-sized": { + "version": "1.0.3", + "bundled": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minizlib": { + "version": "2.1.2", + "bundled": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } } + } }, - "screeps-api": { - "version": "1.16.0", - "dev": true, - "requires": { - "axios": "^0.21.1", - "bufferutil": "^4.0.1", - "commander": "^7.2.0", - "debug": "^4.1.1", - "utf-8-validate": "^5.0.2", - "ws": "^7.4.4", - "yamljs": "^0.3.0" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "dev": true - }, - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "dev": true - } - } + "mkdirp": { + "version": "1.0.4", + "bundled": true }, - "screeps-db-importer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/screeps-db-importer/-/screeps-db-importer-1.1.0.tgz", - "integrity": "sha512-bbkO0n7DJpu9DzG2PGwEi4FZA64+iCbkYcBiqNYIx/l5vurldEF16UZLBir7tIpC1aJ2OCl6y7Mb1xaN2qDTMQ==", - "dev": true, - "requires": { - "node-fetch": "^3.3.1", - "winston": "^3.8.2" - }, - "dependencies": { - "node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "dev": true, - "requires": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - } - } - } + "ms": { + "version": "2.1.3", + "bundled": true }, - "screeps-grafana-go_carbon": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/screeps-grafana-go_carbon/-/screeps-grafana-go_carbon-1.0.5.tgz", - "integrity": "sha512-YLN87Jd9d1wrcWB38kTJLHMR7aoEgfXlNAexP6axBLDmBxpBPwcW6M7bb9/P0q1Q/m20GRtcPBrdFn1Sk4R39A==", - "dev": true, - "requires": { - "axios": "^0.27.2", - "dotenv": "^16.0.2", - "fs-extra": "^11.1.0", - "get-port-please": "^3.0.1", - "minimist": "^1.2.7", - "winston": "^3.8.1" - }, - "dependencies": { - "axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "dev": true, - "requires": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" - } - }, - "fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } + "mute-stream": { + "version": "1.0.0", + "bundled": true }, - "screeps-jest": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/screeps-jest/-/screeps-jest-2.0.2.tgz", - "integrity": "sha512-2jVH1fKX2U4SQBbbGe5rF5lUGtsE7AcsteV7+L4//WngXl5z16nv7DyHq0yNFrxuaRYZUUBLOaSE4gjr7h6H0A==", - "dev": true, - "requires": {} - }, - "screeps-performance-server": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.12.1.tgz", - "integrity": "sha512-alq0Ek6OQJnTLIwgO0b6TwjrinQB1nEviOTP+aNz8iuIq4rYAKLyi4+H9JzyoXjt1V2faLTSCp/VKzKk400VAQ==", - "dev": true, - "requires": { - "@octokit/core": "^4.2.0", - "discord.js": "^14.9.0", - "dotenv": "^16.0.3", - "get-port": "^6.1.2", - "json-beautify": "^1.1.1", - "lodash": "^4.17.21", - "minimist": "^1.2.7", - "ncp": "^2.0.0", - "node-fetch": "^2.6.7", - "node-powershell": "^5.0.1", - "pastebin-api": "^5.1.6", - "q": "^1.5.1", - "screeps-api": "1.16.0", - "screeps-db-importer": "latest", - "winston": "^3.8.2" + "negotiator": { + "version": "0.6.3", + "bundled": true + }, + "node-gyp": { + "version": "9.4.0", + "bundled": true, + "requires": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^11.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" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true + }, + "are-we-there-yet": { + "version": "3.0.1", + "bundled": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } }, - "dependencies": { - "@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 - }, - "@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, - "requires": { - "@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" - } - }, - "@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, - "requires": { - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@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, - "requires": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^9.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@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, - "requires": { - "@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" - } - }, - "@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, - "requires": { - "@octokit/types": "^9.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "@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, - "requires": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "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 - }, - "lodash": { - "version": "4.17.21", - "dev": true - } - } - }, - "screeps-viz": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/screeps-viz/-/screeps-viz-2.1.3.tgz", - "integrity": "sha512-c96u2MTtrXzjv4O1K89J1EWgapbP0C9xqx2gCOZ5uLTBDr1RaAuIQZkOquqHA8ELhSNd9xr9X7Qt5vCOMMknSw==", - "dev": true - }, - "semantic-release": { - "version": "21.0.7", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-21.0.7.tgz", - "integrity": "sha512-peRDSXN+hF8EFSKzze90ff/EnAmgITHQ/a3SZpRV3479ny0BIZWEJ33uX6/GlOSKdaSxo9hVRDyv2/u2MuF+Bw==", - "requires": { - "@semantic-release/commit-analyzer": "^10.0.0", - "@semantic-release/error": "^4.0.0", - "@semantic-release/github": "^9.0.0", - "@semantic-release/npm": "^10.0.2", - "@semantic-release/release-notes-generator": "^11.0.0", - "aggregate-error": "^4.0.1", - "cosmiconfig": "^8.0.0", - "debug": "^4.0.0", - "env-ci": "^9.0.0", - "execa": "^7.0.0", - "figures": "^5.0.0", - "find-versions": "^5.1.0", - "get-stream": "^6.0.0", - "git-log-parser": "^1.2.0", - "hook-std": "^3.0.0", - "hosted-git-info": "^6.0.0", - "lodash-es": "^4.17.21", - "marked": "^5.0.0", - "marked-terminal": "^5.1.1", - "micromatch": "^4.0.2", - "p-each-series": "^3.0.0", - "p-reduce": "^3.0.0", - "read-pkg-up": "^10.0.0", - "resolve-from": "^5.0.0", - "semver": "^7.3.2", - "semver-diff": "^4.0.0", - "signale": "^1.2.1", - "yargs": "^17.5.1" + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "dependencies": { - "@semantic-release/commit-analyzer": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-10.0.1.tgz", - "integrity": "sha512-9ejHzTAijYs9z246sY/dKBatmOPcd0GQ7lH4MgLCkv1q4GCiDZRkjHJkaQZXZVaK7mJybS+sH3Ng6G8i3pYMGQ==", - "requires": { - "conventional-changelog-angular": "^6.0.0", - "conventional-commits-filter": "^3.0.0", - "conventional-commits-parser": "^4.0.0", - "debug": "^4.0.0", - "import-from": "^4.0.0", - "lodash-es": "^4.17.21", - "micromatch": "^4.0.2" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" - }, - "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==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - }, - "semver-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", - "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", - "requires": { - "semver": "^7.3.5" + "gauge": { + "version": "4.0.4", + "bundled": true, + "requires": { + "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" + } }, - "dependencies": { - "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==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "semver-regex": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", - "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==" - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "glob": { + "version": "7.2.3", + "bundled": true, + "requires": { + "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" + } }, - "dependencies": { - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "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 - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - } - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" + "minimatch": { + "version": "3.1.2", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + } }, - "dependencies": { - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - } + "nopt": { + "version": "6.0.0", + "bundled": true, + "requires": { + "abbrev": "^1.0.0" + } + }, + "npmlog": { + "version": "6.0.2", + "bundled": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + } + }, + "readable-stream": { + "version": "3.6.2", + "bundled": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "signal-exit": { + "version": "3.0.7", + "bundled": true + }, + "which": { + "version": "2.0.2", + "bundled": true, + "requires": { + "isexe": "^2.0.0" + } } + } }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true + "nopt": { + "version": "7.2.0", + "bundled": true, + "requires": { + "abbrev": "^2.0.0" + } }, - "shallow-copy": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", - "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==", - "dev": true + "normalize-package-data": { + "version": "5.0.0", + "bundled": true, + "requires": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + } + }, + "npm-audit-report": { + "version": "5.0.0", + "bundled": true + }, + "npm-bundled": { + "version": "3.0.0", + "bundled": true, + "requires": { + "npm-normalize-package-bin": "^3.0.0" + } + }, + "npm-install-checks": { + "version": "6.1.1", + "bundled": true, + "requires": { + "semver": "^7.1.1" + } + }, + "npm-normalize-package-bin": { + "version": "3.0.1", + "bundled": true + }, + "npm-package-arg": { + "version": "10.1.0", + "bundled": true, + "requires": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + } + }, + "npm-packlist": { + "version": "7.0.4", + "bundled": true, + "requires": { + "ignore-walk": "^6.0.0" + } + }, + "npm-pick-manifest": { + "version": "8.0.1", + "bundled": true, + "requires": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + } + }, + "npm-profile": { + "version": "7.0.1", + "bundled": true, + "requires": { + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0" + } + }, + "npm-registry-fetch": { + "version": "14.0.5", + "bundled": true, + "requires": { + "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" + } + }, + "npm-user-validate": { + "version": "2.0.0", + "bundled": true + }, + "npmlog": { + "version": "7.0.1", + "bundled": true, + "requires": { + "are-we-there-yet": "^4.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^5.0.0", + "set-blocking": "^2.0.0" + } }, - "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==", - "requires": { - "shebang-regex": "^3.0.0" - } + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1" + } }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "side-channel": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } + "p-map": { + "version": "4.0.0", + "bundled": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "pacote": { + "version": "15.2.0", + "bundled": true, + "requires": { + "@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" + } + }, + "parse-conflict-json": { + "version": "3.0.1", + "bundled": true, + "requires": { + "json-parse-even-better-errors": "^3.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" + } }, - "signal-exit": { - "version": "3.0.7" - }, - "signale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", - "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", - "requires": { - "chalk": "^2.3.2", - "figures": "^2.0.0", - "pkg-conf": "^2.1.0" - }, - "dependencies": { - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", - "requires": { - "escape-string-regexp": "^1.0.5" - } - } - } + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + }, + "path-key": { + "version": "3.1.1", + "bundled": true + }, + "path-scurry": { + "version": "1.9.2", + "bundled": true, + "requires": { + "lru-cache": "^9.1.1", + "minipass": "^5.0.0 || ^6.0.2" + }, + "dependencies": { + "lru-cache": { + "version": "9.1.1", + "bundled": true + } + } + }, + "postcss-selector-parser": { + "version": "6.0.13", + "bundled": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "proc-log": { + "version": "3.0.0", + "bundled": true + }, + "process": { + "version": "0.11.10", + "bundled": true + }, + "promise-all-reject-late": { + "version": "1.0.1", + "bundled": true + }, + "promise-call-limit": { + "version": "1.0.2", + "bundled": true + }, + "promise-inflight": { + "version": "1.0.1", + "bundled": true + }, + "promise-retry": { + "version": "2.0.1", + "bundled": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "promzard": { + "version": "1.0.0", + "bundled": true, + "requires": { + "read": "^2.0.0" + } + }, + "qrcode-terminal": { + "version": "0.12.0", + "bundled": true + }, + "read": { + "version": "2.1.0", + "bundled": true, + "requires": { + "mute-stream": "~1.0.0" + } + }, + "read-cmd-shim": { + "version": "4.0.0", + "bundled": true + }, + "read-package-json": { + "version": "6.0.4", + "bundled": true, + "requires": { + "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" + } + }, + "read-package-json-fast": { + "version": "3.0.2", + "bundled": true, + "requires": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + } }, - "simple-swizzle": { - "version": "0.2.2", - "dev": true, - "requires": { - "is-arrayish": "^0.3.1" + "readable-stream": { + "version": "4.4.0", + "bundled": true, + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10" + } + }, + "retry": { + "version": "0.12.0", + "bundled": true + }, + "rimraf": { + "version": "3.0.2", + "bundled": true, + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "dev": true - } + "glob": { + "version": "7.2.3", + "bundled": true, + "requires": { + "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" + } + }, + "minimatch": { + "version": "3.1.2", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + } } + } }, - "sinon": { - "version": "6.3.5", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.0.2", - "@sinonjs/formatio": "^3.0.0", - "@sinonjs/samsam": "^2.1.2", - "diff": "^3.5.0", - "lodash.get": "^4.4.2", - "lolex": "^2.7.5", - "nise": "^1.4.5", - "supports-color": "^5.5.0", - "type-detect": "^4.0.8" - } + "safe-buffer": { + "version": "5.2.1", + "bundled": true }, - "sinon-chai": { - "version": "3.7.0", - "dev": true, - "requires": {} + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "optional": true }, - "sisteransi": { - "version": "1.0.5", - "dev": true + "semver": { + "version": "7.5.4", + "bundled": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + } + } }, - "slash": { - "version": "3.0.0", - "dev": true + "set-blocking": { + "version": "2.0.0", + "bundled": true }, - "source-map": { - "version": "0.6.1" - }, - "source-map-support": { - "version": "0.5.21", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } + "shebang-command": { + "version": "2.0.0", + "bundled": true, + "requires": { + "shebang-regex": "^3.0.0" + } }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true + "shebang-regex": { + "version": "3.0.0", + "bundled": true }, - "spawn-error-forwarder": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", - "integrity": "sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==" + "signal-exit": { + "version": "4.0.2", + "bundled": true + }, + "sigstore": { + "version": "1.7.0", + "bundled": true, + "requires": { + "@sigstore/protobuf-specs": "^0.1.0", + "@sigstore/tuf": "^1.0.1", + "make-fetch-happen": "^11.0.1" + } + }, + "smart-buffer": { + "version": "4.2.0", + "bundled": true + }, + "socks": { + "version": "2.7.1", + "bundled": true, + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "7.0.0", + "bundled": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } }, "spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } + "version": "3.2.0", + "bundled": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } }, "spdx-exceptions": { - "version": "2.3.0" + "version": "2.3.0", + "bundled": true }, "spdx-expression-parse": { - "version": "3.0.1", - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } + "version": "3.0.1", + "bundled": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } }, "spdx-license-ids": { - "version": "3.0.11" - }, - "split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "requires": { - "through": "2" - } - }, - "split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "requires": { - "readable-stream": "^3.0.0" - } + "version": "3.0.13", + "bundled": true }, - "sprintf-js": { - "version": "1.0.3", - "dev": true + "ssri": { + "version": "10.0.4", + "bundled": true, + "requires": { + "minipass": "^5.0.0" + } }, - "stack-trace": { - "version": "0.0.10", - "dev": true + "string_decoder": { + "version": "1.3.0", + "bundled": true, + "requires": { + "safe-buffer": "~5.2.0" + } }, - "stack-utils": { - "version": "2.0.5", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "dev": true - } - } + "string-width": { + "version": "4.2.3", + "bundled": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } }, - "static-eval": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz", - "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==", - "dev": true, - "requires": { - "escodegen": "^1.11.1" - }, - "dependencies": { - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - } - } + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "bundled": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } }, - "static-module": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/static-module/-/static-module-3.0.4.tgz", - "integrity": "sha512-gb0v0rrgpBkifXCa3yZXxqVmXDVE+ETXj6YlC/jt5VzOnGXR2C15+++eXuMDUYsePnbhf+lwW0pE1UXyOLtGCw==", - "dev": true, - "requires": { - "acorn-node": "^1.3.0", - "concat-stream": "~1.6.0", - "convert-source-map": "^1.5.1", - "duplexer2": "~0.1.4", - "escodegen": "^1.11.1", - "has": "^1.0.1", - "magic-string": "0.25.1", - "merge-source-map": "1.0.4", - "object-inspect": "^1.6.0", - "readable-stream": "~2.3.3", - "scope-analyzer": "^2.0.1", - "shallow-copy": "~0.0.1", - "static-eval": "^2.0.5", - "through2": "~2.0.3" - }, - "dependencies": { - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "magic-string": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz", - "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.1" - } - }, - "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, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } + "strip-ansi": { + "version": "6.0.1", + "bundled": true, + "requires": { + "ansi-regex": "^5.0.1" + } }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true - }, - "stream-combiner": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", - "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", - "dev": true, - "requires": { - "duplexer": "~0.1.1", - "through": "~2.3.4" - } + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "bundled": true, + "requires": { + "ansi-regex": "^5.0.1" + } }, - "stream-combiner2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", - "requires": { - "duplexer2": "~0.1.0", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "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==", - "requires": { - "safe-buffer": "~5.1.0" - } + "supports-color": { + "version": "9.4.0", + "bundled": true + }, + "tar": { + "version": "6.1.15", + "bundled": true, + "requires": { + "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" + }, + "dependencies": { + "fs-minipass": { + "version": "2.1.0", + "bundled": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } } + } } + } }, - "streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true + "text-table": { + "version": "0.2.0", + "bundled": true + }, + "tiny-relative-date": { + "version": "1.3.0", + "bundled": true + }, + "treeverse": { + "version": "3.0.0", + "bundled": true + }, + "tuf-js": { + "version": "1.1.7", + "bundled": true, + "requires": { + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.1" + } + }, + "unique-filename": { + "version": "3.0.0", + "bundled": true, + "requires": { + "unique-slug": "^4.0.0" + } + }, + "unique-slug": { + "version": "4.0.0", + "bundled": true, + "requires": { + "imurmurhash": "^0.1.4" + } }, - "string_decoder": { - "version": "1.3.0", - "requires": { - "safe-buffer": "~5.2.0" - } + "util-deprecate": { + "version": "1.0.2", + "bundled": true }, - "string-length": { - "version": "4.0.2", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } + "validate-npm-package-license": { + "version": "3.0.4", + "bundled": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "5.0.0", + "bundled": true, + "requires": { + "builtins": "^5.0.0" + } + }, + "walk-up-path": { + "version": "3.0.1", + "bundled": true }, - "string-template": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string-template/-/string-template-1.0.0.tgz", - "integrity": "sha512-SLqR3GBUXuoPP5MmYtD7ompvXiG87QjT6lzOszyXjTM86Uu7At7vNnt2xgyTLq5o9T4IxTYFyGxcULqpsmsfdg==", - "dev": true + "wcwidth": { + "version": "1.0.1", + "bundled": true, + "requires": { + "defaults": "^1.0.3" + } }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } + "which": { + "version": "3.0.1", + "bundled": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.5", + "bundled": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } }, - "string-width-cjs": { - "version": "npm:string-width@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, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "wrap-ansi": { + "version": "8.1.0", + "bundled": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "bundled": true + }, + "ansi-styles": { + "version": "6.2.1", + "bundled": true + }, + "emoji-regex": { + "version": "9.2.2", + "bundled": true + }, + "string-width": { + "version": "5.1.2", + "bundled": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "bundled": true, + "requires": { + "ansi-regex": "^6.0.1" + } } + } }, - "string.prototype.trimend": { - "version": "1.0.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "bundled": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } }, - "string.prototype.trimstart": { - "version": "1.0.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } + "wrappy": { + "version": "1.0.2", + "bundled": true }, - "stringz": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/stringz/-/stringz-2.1.0.tgz", - "integrity": "sha512-KlywLT+MZ+v0IRepfMxRtnSvDCMc3nR1qqCs3m/qIbSOWkNZYT8XHQA31rS3TnKp0c5xjZu3M4GY/2aRKSi/6A==", - "dev": true, - "requires": { - "char-regex": "^1.0.2" - } + "write-file-atomic": { + "version": "5.0.1", + "bundled": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + } }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } + "yallist": { + "version": "4.0.0", + "bundled": true + } + } + }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "requires": { + "path-key": "^4.0.0" + }, + "dependencies": { + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==" + } + } + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "nwsapi": { + "version": "2.2.0", + "dev": true + }, + "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 + }, + "object-inspect": { + "version": "1.12.2", + "dev": true + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "dev": true + }, + "object.assign": { + "version": "4.1.4", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "object.values": { + "version": "1.1.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "requires": { + "wrappy": "1" + } + }, + "one-time": { + "version": "1.0.0", + "dev": true, + "requires": { + "fn.name": "1.x.x" + } + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", + "dev": true + }, + "optionator": { + "version": "0.8.3", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "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, + "requires": { + "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" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "strip-ansi-cjs": { - "version": "npm:strip-ansi@6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "strip-bom": { - "version": "3.0.0" + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "strip-final-newline": { - "version": "2.0.0", - "dev": true - }, - "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==", - "requires": { - "min-indent": "^1.0.0" - } + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" + "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 + }, + "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 }, - "strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "dev": true + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "os-name": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz", + "integrity": "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==", + "dev": true, + "requires": { + "macos-release": "^2.5.0", + "windows-release": "^4.0.0" + } + }, + "p-each-series": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz", + "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==" + }, + "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==", + "requires": { + "p-map": "^5.1.0" + } + }, + "p-finally": { + "version": "1.0.0", + "dev": true + }, + "p-is-promise": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", + "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==" + }, + "p-limit": { + "version": "1.3.0", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "requires": { + "p-limit": "^1.1.0" + } + }, + "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==", + "requires": { + "aggregate-error": "^4.0.0" + } + }, + "p-queue": { + "version": "6.6.2", + "dev": true, + "requires": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "dependencies": { + "p-timeout": { + "version": "3.2.0", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + } + } + }, + "p-reduce": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", + "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==" + }, + "p-timeout": { + "version": "4.1.0", + "dev": true + }, + "p-try": { + "version": "1.0.0" + }, + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "requires": { + "callsites": "^3.0.0" + } + }, + "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==", + "requires": { + "@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" + } + }, + "parse5": { + "version": "6.0.1", + "dev": true + }, + "parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dev": true, + "requires": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "dependencies": { + "parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "requires": { + "entities": "^4.4.0" + } + } + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pastebin-api": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/pastebin-api/-/pastebin-api-5.1.6.tgz", + "integrity": "sha512-FI2ZeXLxroI2tuRVd5LI7eNmiANFxDOdlhXxSMqtOXTJn1KSt2UC8kglhndUOOPt6p9XPVnuS7XGW/KbiBbbzw==", + "dev": true, + "requires": { + "fast-xml-parser": "^4.1.3", + "undici": "^5.21.0" + } + }, + "path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "path-exists": { + "version": "3.0.0" + }, + "path-is-absolute": { + "version": "1.0.1", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "path-parse": { + "version": "1.0.7" + }, + "path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "requires": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", + "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", + "dev": true + } + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "pathval": { + "version": "1.1.1", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "through": "~2.3" + } + }, + "pdfjs-dist": { + "version": "2.12.313", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.12.313.tgz", + "integrity": "sha512-1x6iXO4Qnv6Eb+YFdN5JdUzt4pAkxSp3aLAYPX93eQCyg/m7QFzXVWJHJVtoW48CI8HCXju4dSkhQZwoheL5mA==", + "dev": true, + "requires": {} + }, + "pdfmake": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/pdfmake/-/pdfmake-0.2.7.tgz", + "integrity": "sha512-ClLpgx30H5G3EDvRW1MrA1Xih6YxEaSgIVFrOyBMgAAt62V+hxsyWAi6JNP7u1Fc5JKYAbpb4RRVw8Rhvmz5cQ==", + "dev": true, + "requires": { + "@foliojs-fork/linebreak": "^1.1.1", + "@foliojs-fork/pdfkit": "^0.13.0", + "iconv-lite": "^0.6.3", + "xmldoc": "^1.1.2" + }, + "dependencies": { + "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, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" + }, + "pirates": { + "version": "4.0.5", + "dev": true + }, + "pkg-conf": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", + "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", + "requires": { + "find-up": "^2.0.0", + "load-json-file": "^4.0.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } }, - "stylis": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", - "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } }, - "supports-color": { - "version": "5.5.0", - "requires": { - "has-flag": "^3.0.0" - } + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } }, - "supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0" - }, - "supports-color": { - "version": "7.2.0", - "requires": { - "has-flag": "^4.0.0" - } - } - } + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0" - }, - "symbol-tree": { - "version": "3.2.4", - "dev": true - }, - "temp-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", - "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==" - }, - "tempy": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz", - "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==", - "requires": { - "is-stream": "^3.0.0", - "temp-dir": "^3.0.0", - "type-fest": "^2.12.2", - "unique-string": "^3.0.0" - }, - "dependencies": { - "is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" - }, - "type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==" - } - } + "p-try": { + "version": "2.2.0", + "dev": true }, - "terminal-link": { - "version": "2.1.1", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "dependencies": { - "ansi-escapes": { - "version": "4.3.2", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "type-fest": { - "version": "0.21.3", - "dev": true - } - } + "path-exists": { + "version": "4.0.0", + "dev": true + } + } + }, + "png-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz", + "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "dev": true + }, + "prettier": { + "version": "2.7.1", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "pretty-format": { + "version": "27.5.1", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "dev": true + } + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true + }, + "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==" + }, + "progress": { + "version": "2.0.3", + "dev": true + }, + "prompts": { + "version": "2.4.2", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" + }, + "proxy-middleware": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", + "integrity": "sha512-EGCG8SeoIRVMhsqHQUdDigB2i7qU7fCsWASwn54+nPutYO8n4q6EiwMzyfWlC+dzRFExP+kvcnDFdBDHoZBU7Q==", + "dev": true + }, + "psl": { + "version": "1.8.0", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "dev": true + }, + "q": { + "version": "1.5.1", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3" + }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==" + }, + "quote-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", + "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==", + "dev": true, + "requires": { + "buffer-equal": "0.0.1", + "minimist": "^1.1.3", + "through2": "^2.0.0" + } + }, + "randombytes": { + "version": "2.1.0", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "react-is": { + "version": "17.0.2", + "dev": true + }, + "read-pkg": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-8.0.0.tgz", + "integrity": "sha512-Ajb9oSjxXBw0YyOiwtQ2dKbAA/vMnUPnY63XcCk+mXo0BwIdQEMgZLZiMWGttQHcUhUgbK0mH85ethMPKXxziw==", + "requires": { + "@types/normalize-package-data": "^2.4.1", + "normalize-package-data": "^5.0.0", + "parse-json": "^7.0.0", + "type-fest": "^3.8.0" + }, + "dependencies": { + "json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==" }, - "terser": { - "version": "5.14.2", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - } + "lines-and-columns": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==" }, - "test-exclude": { - "version": "6.0.0", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } + "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==", + "requires": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + } }, - "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==" + "parse-json": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.0.0.tgz", + "integrity": "sha512-kP+TQYAzAiVnzOlWOe0diD6L35s9bJh0SCn95PIbZFKrOYuIRQsQkeWEYxzVDuHTt9V9YqvYCJ2Qo4z9wdfZPw==", + "requires": { + "@babel/code-frame": "^7.21.4", + "error-ex": "^1.3.2", + "json-parse-even-better-errors": "^3.0.0", + "lines-and-columns": "^2.0.3", + "type-fest": "^3.8.0" + } }, - "text-hex": { - "version": "1.0.0", - "dev": true + "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==", + "requires": { + "lru-cache": "^6.0.0" + } }, - "text-table": { - "version": "0.2.0", - "dev": true + "type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==" + } + } + }, + "read-pkg-up": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-10.0.0.tgz", + "integrity": "sha512-jgmKiS//w2Zs+YbX039CorlkOp8FIVbSAN8r8GJHDsGlmNPXo+VeHkqAwCiQVTTx5/LwLZTcEw59z3DvcLbr0g==", + "requires": { + "find-up": "^6.3.0", + "read-pkg": "^8.0.0", + "type-fest": "^3.12.0" + }, + "dependencies": { + "find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "requires": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + } }, - "throat": { - "version": "6.0.1", - "dev": true + "locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "requires": { + "p-locate": "^6.0.0" + } }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "requires": { + "yocto-queue": "^1.0.0" + } }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "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==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } + "p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "requires": { + "p-limit": "^4.0.0" + } }, - "tiny-inflate": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", - "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", - "dev": true + "path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==" }, - "tmpl": { - "version": "1.0.5", - "dev": true + "type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==" + } + } + }, + "readable-stream": { + "version": "3.6.0", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "rechoir": { + "version": "0.6.2", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "dependencies": { + "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==" + } + } + }, + "redeyed": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", + "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==", + "requires": { + "esprima": "~4.0.0" + } + }, + "reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "dev": true + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "requires": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + } + }, + "regextras": { + "version": "0.7.1", + "dev": true + }, + "registry-auth-token": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", + "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", + "requires": { + "@pnpm/npm-conf": "^2.1.0" + } + }, + "regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + } + } + }, + "require-directory": { + "version": "2.1.1" + }, + "require-from-string": { + "version": "2.0.2", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "dev": true + } + } + }, + "resolve-from": { + "version": "4.0.0" + }, + "resolve.exports": { + "version": "1.1.0", + "dev": true + }, + "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, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true }, - "to-fast-properties": { - "version": "2.0.0", - "dev": true + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + } + } + }, + "reusify": { + "version": "1.0.4" + }, + "rimraf": { + "version": "2.6.3", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" + }, + "rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "rollup-plugin-clear": { + "version": "2.0.7", + "dev": true, + "requires": { + "rimraf": "^2.6.2" + } + }, + "rollup-plugin-copy": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-copy/-/rollup-plugin-copy-3.4.0.tgz", + "integrity": "sha512-rGUmYYsYsceRJRqLVlE9FivJMxJ7X6jDlP79fmFkL8sJs7VVMSVyA2yfyL+PGyO/vJs4A87hwhgVfz61njI+uQ==", + "dev": true, + "requires": { + "@types/fs-extra": "^8.0.1", + "colorette": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "10.0.1", + "is-plain-object": "^3.0.0" + }, + "dependencies": { + "globby": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", + "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + } }, - "to-regex-range": { - "version": "5.0.1", - "requires": { - "is-number": "^7.0.0" - } + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true + } + } + }, + "rollup-plugin-screeps-world": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/rollup-plugin-screeps-world/-/rollup-plugin-screeps-world-1.0.4.tgz", + "integrity": "sha512-+NB/KH8kuOjaenOySZVrPnRU5O/ny48otYYyI/Flg5tww59XIA95JZbmgnoN8J8GbjmDk+D5s+RV4YSK9r2ucw==", + "dev": true, + "requires": { + "git-rev-sync": "^3.0.2", + "screeps-api": "^1.11.0" + }, + "dependencies": { + "git-rev-sync": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/git-rev-sync/-/git-rev-sync-3.0.2.tgz", + "integrity": "sha512-Nd5RiYpyncjLv0j6IONy0lGzAqdRXUaBctuGBbrEA2m6Bn4iDrN/9MeQTXuiquw8AEKL9D2BW0nw5m/lQvxqnQ==", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "graceful-fs": "4.1.15", + "shelljs": "0.8.5" + } }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true + }, + "shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + } + } + }, + "rollup-plugin-terser": { + "version": "7.0.2", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "dev": true }, - "tr46": { - "version": "2.1.0", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } + "jest-worker": { + "version": "26.6.2", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "serialize-javascript": { + "version": "4.0.0", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } }, - "traverse": { - "version": "0.6.7", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", - "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==" - }, - "trim-buffer": { - "version": "5.0.0", - "dev": true - }, - "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==" - }, - "triple-beam": { - "version": "1.3.0", - "dev": true - }, - "ts-dedent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", - "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==" - }, - "ts-jest": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.5.tgz", - "integrity": "sha512-lIJApzfTaSSbtlksfFNHkWOzLJuuSm4faFAfo5kvzOiRAuoN4/eKxVJ2zEAho8aecE04qX6K1pAzfH5QHL1/8w==", - "dev": true, - "requires": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", - "json5": "2.x", - "lodash": "4.x", - "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "rollup-plugin-typescript2": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.36.0.tgz", + "integrity": "sha512-NB2CSQDxSe9+Oe2ahZbf+B4bh7pHwjV5L+RSYpCu7Q5ROuN94F9b6ioWwKfz3ueL3KTtmX4o2MUH2cgHDIEUsw==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^4.1.2", + "find-cache-dir": "^3.3.2", + "fs-extra": "^10.0.0", + "semver": "^7.5.4", + "tslib": "^2.6.2" + }, + "dependencies": { + "@rollup/pluginutils": { + "version": "4.2.1", + "dev": true, + "requires": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + } }, - "ts-mixer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz", - "integrity": "sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==", - "dev": true - }, - "ts-morph": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-18.0.0.tgz", - "integrity": "sha512-Kg5u0mk19PIIe4islUI/HWRvm9bC1lHejK4S0oh1zaZ77TMZAEmQC0sHQYiu2RgCQFZKXz1fMVi/7nOOeirznA==", - "dev": true, - "requires": { - "@ts-morph/common": "~0.19.0", - "code-block-writer": "^12.0.0" - } + "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, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } }, - "ts-node": { - "version": "10.8.1", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "acorn-walk": { - "version": "8.2.0", - "dev": true - }, - "diff": { - "version": "4.0.2", - "dev": true - } - } + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } }, - "tsconfig-paths": { - "version": "3.14.1", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - } - } + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, "tslib": { - "version": "1.14.1", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true }, - "type-detect": { - "version": "4.0.8", - "dev": true - }, - "type-fest": { - "version": "0.20.2", - "dev": true - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "run-parallel": { + "version": "1.2.0", + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" + }, + "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, + "requires": { + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", + "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", + "dev": true + } + } + }, + "sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "requires": { + "mri": "^1.1.0" + } + }, + "safe-buffer": { + "version": "5.2.1" + }, + "safe-stable-stringify": { + "version": "2.4.0", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "saxes": { + "version": "5.0.1", + "dev": true, + "requires": { + "xmlchars": "^2.2.0" + } + }, + "scope-analyzer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.2.tgz", + "integrity": "sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ==", + "dev": true, + "requires": { + "array-from": "^2.1.1", + "dash-ast": "^2.0.1", + "es6-map": "^0.1.5", + "es6-set": "^0.1.5", + "es6-symbol": "^3.1.1", + "estree-is-function": "^1.0.0", + "get-assigned-identifiers": "^1.1.0" + } + }, + "screeps-api": { + "version": "1.16.0", + "dev": true, + "requires": { + "axios": "^0.21.1", + "bufferutil": "^4.0.1", + "commander": "^7.2.0", + "debug": "^4.1.1", + "utf-8-validate": "^5.0.2", + "ws": "^7.4.4", + "yamljs": "^0.3.0" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "dev": true }, - "typescript": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", - "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", - "dev": true - }, - "uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", - "optional": true - }, - "unbox-primitive": { - "version": "1.0.2", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "undici": { - "version": "5.22.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz", - "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==", - "dev": true, - "requires": { - "busboy": "^1.6.0" - } + "ms": { + "version": "2.1.2", + "dev": true + } + } + }, + "screeps-db-importer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/screeps-db-importer/-/screeps-db-importer-1.1.0.tgz", + "integrity": "sha512-bbkO0n7DJpu9DzG2PGwEi4FZA64+iCbkYcBiqNYIx/l5vurldEF16UZLBir7tIpC1aJ2OCl6y7Mb1xaN2qDTMQ==", + "dev": true, + "requires": { + "node-fetch": "^3.3.1", + "winston": "^3.8.2" + }, + "dependencies": { + "node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dev": true, + "requires": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + } + } + } + }, + "screeps-grafana-go_carbon": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/screeps-grafana-go_carbon/-/screeps-grafana-go_carbon-1.0.5.tgz", + "integrity": "sha512-YLN87Jd9d1wrcWB38kTJLHMR7aoEgfXlNAexP6axBLDmBxpBPwcW6M7bb9/P0q1Q/m20GRtcPBrdFn1Sk4R39A==", + "dev": true, + "requires": { + "axios": "^0.27.2", + "dotenv": "^16.0.2", + "fs-extra": "^11.1.0", + "get-port-please": "^3.0.1", + "minimist": "^1.2.7", + "winston": "^3.8.1" + }, + "dependencies": { + "axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dev": true, + "requires": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } + "fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } }, - "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true - }, - "unicode-properties": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", - "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", - "dev": true, - "requires": { - "base64-js": "^1.3.0", - "unicode-trie": "^2.0.0" - } + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } }, - "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true - }, - "unicode-trie": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", - "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", - "dev": true, - "requires": { - "pako": "^0.2.5", - "tiny-inflate": "^1.0.0" - } + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "screeps-jest": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/screeps-jest/-/screeps-jest-2.0.2.tgz", + "integrity": "sha512-2jVH1fKX2U4SQBbbGe5rF5lUGtsE7AcsteV7+L4//WngXl5z16nv7DyHq0yNFrxuaRYZUUBLOaSE4gjr7h6H0A==", + "dev": true, + "requires": {} + }, + "screeps-performance-server": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.12.1.tgz", + "integrity": "sha512-alq0Ek6OQJnTLIwgO0b6TwjrinQB1nEviOTP+aNz8iuIq4rYAKLyi4+H9JzyoXjt1V2faLTSCp/VKzKk400VAQ==", + "dev": true, + "requires": { + "@octokit/core": "^4.2.0", + "discord.js": "^14.9.0", + "dotenv": "^16.0.3", + "get-port": "^6.1.2", + "json-beautify": "^1.1.1", + "lodash": "^4.17.21", + "minimist": "^1.2.7", + "ncp": "^2.0.0", + "node-fetch": "^2.6.7", + "node-powershell": "^5.0.1", + "pastebin-api": "^5.1.6", + "q": "^1.5.1", + "screeps-api": "1.16.0", + "screeps-db-importer": "latest", + "winston": "^3.8.2" + }, + "dependencies": { + "@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 }, - "unique-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", - "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", - "requires": { - "crypto-random-string": "^4.0.0" - } + "@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, + "requires": { + "@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" + } }, - "unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "requires": { - "@types/unist": "^2.0.0" - } + "@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, + "requires": { + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } }, - "universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" + "@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, + "requires": { + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", + "universal-user-agent": "^6.0.0" + } }, - "universalify": { - "version": "0.1.2", - "dev": true - }, - "unix-crypt-td-js": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz", - "integrity": "sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true - }, - "update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } + "@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, + "requires": { + "@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" + } }, - "uri-js": { - "version": "4.4.1", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } + "@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, + "requires": { + "@octokit/types": "^9.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } }, - "url-join": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", - "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==" + "@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, + "requires": { + "@octokit/openapi-types": "^18.0.0" + } }, - "utf-8-validate": { - "version": "5.0.9", - "dev": true, - "optional": true, - "requires": { - "node-gyp-build": "^4.3.0" - } + "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 }, - "util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } + "lodash": { + "version": "4.17.21", + "dev": true + } + } + }, + "screeps-viz": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/screeps-viz/-/screeps-viz-2.1.3.tgz", + "integrity": "sha512-c96u2MTtrXzjv4O1K89J1EWgapbP0C9xqx2gCOZ5uLTBDr1RaAuIQZkOquqHA8ELhSNd9xr9X7Qt5vCOMMknSw==", + "dev": true + }, + "semantic-release": { + "version": "21.0.7", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-21.0.7.tgz", + "integrity": "sha512-peRDSXN+hF8EFSKzze90ff/EnAmgITHQ/a3SZpRV3479ny0BIZWEJ33uX6/GlOSKdaSxo9hVRDyv2/u2MuF+Bw==", + "requires": { + "@semantic-release/commit-analyzer": "^10.0.0", + "@semantic-release/error": "^4.0.0", + "@semantic-release/github": "^9.0.0", + "@semantic-release/npm": "^10.0.2", + "@semantic-release/release-notes-generator": "^11.0.0", + "aggregate-error": "^4.0.1", + "cosmiconfig": "^8.0.0", + "debug": "^4.0.0", + "env-ci": "^9.0.0", + "execa": "^7.0.0", + "figures": "^5.0.0", + "find-versions": "^5.1.0", + "get-stream": "^6.0.0", + "git-log-parser": "^1.2.0", + "hook-std": "^3.0.0", + "hosted-git-info": "^6.0.0", + "lodash-es": "^4.17.21", + "marked": "^5.0.0", + "marked-terminal": "^5.1.1", + "micromatch": "^4.0.2", + "p-each-series": "^3.0.0", + "p-reduce": "^3.0.0", + "read-pkg-up": "^10.0.0", + "resolve-from": "^5.0.0", + "semver": "^7.3.2", + "semver-diff": "^4.0.0", + "signale": "^1.2.1", + "yargs": "^17.5.1" + }, + "dependencies": { + "@semantic-release/commit-analyzer": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-10.0.1.tgz", + "integrity": "sha512-9ejHzTAijYs9z246sY/dKBatmOPcd0GQ7lH4MgLCkv1q4GCiDZRkjHJkaQZXZVaK7mJybS+sH3Ng6G8i3pYMGQ==", + "requires": { + "conventional-changelog-angular": "^6.0.0", + "conventional-commits-filter": "^3.0.0", + "conventional-commits-parser": "^4.0.0", + "debug": "^4.0.0", + "import-from": "^4.0.0", + "lodash-es": "^4.17.21", + "micromatch": "^4.0.2" + } }, - "util-deprecate": { - "version": "1.0.2" + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" - }, - "uvu": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", - "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", - "requires": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3" - }, - "dependencies": { - "diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==" - }, - "kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==" - } - } + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" }, - "v8-compile-cache": { - "version": "2.3.0", - "dev": true - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "dev": true - }, - "v8-to-istanbul": { - "version": "8.1.1", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "dev": true - } - } + "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==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + }, + "semver-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", + "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", + "requires": { + "semver": "^7.3.5" + }, + "dependencies": { + "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==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "semver-regex": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", + "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==" + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true }, - "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==", - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } + "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 }, - "validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", - "dev": true - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true - }, - "w3c-hr-time": { - "version": "1.0.2", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } }, - "w3c-xmlserializer": { - "version": "2.0.0", - "dev": true, - "requires": { - "xml-name-validator": "^3.0.0" - } + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + } + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true }, - "walker": { - "version": "1.0.8", - "dev": true, - "requires": { - "makeerror": "1.0.12" - } + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true }, - "web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", - "dev": true + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "shallow-copy": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", + "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==", + "dev": true + }, + "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==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "side-channel": { + "version": "1.0.4", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7" + }, + "signale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", + "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", + "requires": { + "chalk": "^2.3.2", + "figures": "^2.0.0", + "pkg-conf": "^2.1.0" + }, + "dependencies": { + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "requires": { + "escape-string-regexp": "^1.0.5" + } + } + } + }, + "simple-swizzle": { + "version": "0.2.2", + "dev": true, + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "dev": true + } + } + }, + "sinon": { + "version": "6.3.5", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.0.2", + "@sinonjs/formatio": "^3.0.0", + "@sinonjs/samsam": "^2.1.2", + "diff": "^3.5.0", + "lodash.get": "^4.4.2", + "lolex": "^2.7.5", + "nise": "^1.4.5", + "supports-color": "^5.5.0", + "type-detect": "^4.0.8" + } + }, + "sinon-chai": { + "version": "3.7.0", + "dev": true, + "requires": {} + }, + "sisteransi": { + "version": "1.0.5", + "dev": true + }, + "slash": { + "version": "3.0.0", + "dev": true + }, + "source-map": { + "version": "0.6.1" + }, + "source-map-support": { + "version": "0.5.21", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "spawn-error-forwarder": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", + "integrity": "sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==" + }, + "spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0" + }, + "spdx-expression-parse": { + "version": "3.0.1", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11" + }, + "split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "requires": { + "through": "2" + } + }, + "split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "requires": { + "readable-stream": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "dev": true + }, + "stack-trace": { + "version": "0.0.10", + "dev": true + }, + "stack-utils": { + "version": "2.0.5", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "dev": true + } + } + }, + "static-eval": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz", + "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==", + "dev": true, + "requires": { + "escodegen": "^1.11.1" + }, + "dependencies": { + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + } + } + }, + "static-module": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/static-module/-/static-module-3.0.4.tgz", + "integrity": "sha512-gb0v0rrgpBkifXCa3yZXxqVmXDVE+ETXj6YlC/jt5VzOnGXR2C15+++eXuMDUYsePnbhf+lwW0pE1UXyOLtGCw==", + "dev": true, + "requires": { + "acorn-node": "^1.3.0", + "concat-stream": "~1.6.0", + "convert-source-map": "^1.5.1", + "duplexer2": "~0.1.4", + "escodegen": "^1.11.1", + "has": "^1.0.1", + "magic-string": "0.25.1", + "merge-source-map": "1.0.4", + "object-inspect": "^1.6.0", + "readable-stream": "~2.3.3", + "scope-analyzer": "^2.0.1", + "shallow-copy": "~0.0.1", + "static-eval": "^2.0.5", + "through2": "~2.0.3" + }, + "dependencies": { + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } }, - "web-worker": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", - "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" + "magic-string": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz", + "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.1" + } }, - "webidl-conversions": { - "version": "6.1.0", - "dev": true - }, - "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "requires": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } + "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, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } + "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 }, - "whatwg-mimetype": { - "version": "2.3.0", - "dev": true + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true + }, + "stream-combiner": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", + "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", + "dev": true, + "requires": { + "duplexer": "~0.1.1", + "through": "~2.3.4" + } + }, + "stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", + "requires": { + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } }, - "whatwg-url": { - "version": "8.7.0", - "dev": true, - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "dev": true - } - } + "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==" }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } + "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==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "dev": true + }, + "string_decoder": { + "version": "1.3.0", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-length": { + "version": "4.0.2", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "string-template": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-1.0.0.tgz", + "integrity": "sha512-SLqR3GBUXuoPP5MmYtD7ompvXiG87QjT6lzOszyXjTM86Uu7At7vNnt2xgyTLq5o9T4IxTYFyGxcULqpsmsfdg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string-width-cjs": { + "version": "npm:string-width@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, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "stringz": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/stringz/-/stringz-2.1.0.tgz", + "integrity": "sha512-KlywLT+MZ+v0IRepfMxRtnSvDCMc3nR1qqCs3m/qIbSOWkNZYT8XHQA31rS3TnKp0c5xjZu3M4GY/2aRKSi/6A==", + "dev": true, + "requires": { + "char-regex": "^1.0.2" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0" + }, + "strip-final-newline": { + "version": "2.0.0", + "dev": true + }, + "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==", + "requires": { + "min-indent": "^1.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" + }, + "strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "dev": true + }, + "stylis": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", + "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" + }, + "supports-color": { + "version": "5.5.0", + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0" }, - "which-boxed-primitive": { - "version": "1.0.2", - "dev": true, - "requires": { - "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" - } + "supports-color": { + "version": "7.2.0", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0" + }, + "symbol-tree": { + "version": "3.2.4", + "dev": true + }, + "temp-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", + "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==" + }, + "tempy": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz", + "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==", + "requires": { + "is-stream": "^3.0.0", + "temp-dir": "^3.0.0", + "type-fest": "^2.12.2", + "unique-string": "^3.0.0" + }, + "dependencies": { + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" }, - "which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } + "type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==" + } + } + }, + "terminal-link": { + "version": "2.1.1", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.2", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } }, - "windows-release": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", - "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==", - "dev": true, - "requires": { - "execa": "^4.0.2" - }, - "dependencies": { - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - } - } + "type-fest": { + "version": "0.21.3", + "dev": true + } + } + }, + "terser": { + "version": "5.14.2", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } + }, + "test-exclude": { + "version": "6.0.0", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "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==" + }, + "text-hex": { + "version": "1.0.0", + "dev": true + }, + "text-table": { + "version": "0.2.0", + "dev": true + }, + "throat": { + "version": "6.0.1", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } }, - "winston": { - "version": "3.8.2", - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "@dabh/diagnostics": "^2.0.2", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.4.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.5.0" - } + "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==" }, - "winston-transport": { - "version": "4.5.0", - "dev": true, - "requires": { - "logform": "^2.3.2", - "readable-stream": "^3.6.0", - "triple-beam": "^1.3.0" - } + "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==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "dev": true + }, + "tmpl": { + "version": "1.0.5", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "tr46": { + "version": "2.1.0", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "traverse": { + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", + "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==" + }, + "trim-buffer": { + "version": "5.0.0", + "dev": true + }, + "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==" + }, + "triple-beam": { + "version": "1.3.0", + "dev": true + }, + "ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==" + }, + "ts-jest": { + "version": "27.0.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.5.tgz", + "integrity": "sha512-lIJApzfTaSSbtlksfFNHkWOzLJuuSm4faFAfo5kvzOiRAuoN4/eKxVJ2zEAho8aecE04qX6K1pAzfH5QHL1/8w==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^27.0.0", + "json5": "2.x", + "lodash": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + }, + "dependencies": { + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, - "word-wrap": { - "version": "1.2.3", - "dev": true + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "ts-mixer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz", + "integrity": "sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==", + "dev": true + }, + "ts-morph": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-18.0.0.tgz", + "integrity": "sha512-Kg5u0mk19PIIe4islUI/HWRvm9bC1lHejK4S0oh1zaZ77TMZAEmQC0sHQYiu2RgCQFZKXz1fMVi/7nOOeirznA==", + "dev": true, + "requires": { + "@ts-morph/common": "~0.19.0", + "code-block-writer": "^12.0.0" + } + }, + "ts-node": { + "version": "10.8.1", + "dev": true, + "requires": { + "@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" + }, + "dependencies": { + "acorn-walk": { + "version": "8.2.0", + "dev": true }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + "diff": { + "version": "4.0.2", + "dev": true + } + } + }, + "tsconfig-paths": { + "version": "3.14.1", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "tslib": { + "version": "1.14.1", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-detect": { + "version": "4.0.8", + "dev": true + }, + "type-fest": { + "version": "0.20.2", + "dev": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", + "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", + "dev": true + }, + "uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "optional": true + }, + "unbox-primitive": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "undici": { + "version": "5.22.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz", + "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==", + "dev": true, + "requires": { + "busboy": "^1.6.0" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true + }, + "unicode-properties": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", + "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", + "dev": true, + "requires": { + "base64-js": "^1.3.0", + "unicode-trie": "^2.0.0" + } + }, + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true + }, + "unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "dev": true, + "requires": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } + }, + "unique-string": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", + "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", + "requires": { + "crypto-random-string": "^4.0.0" + } + }, + "unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "requires": { + "@types/unist": "^2.0.0" + } + }, + "universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" + }, + "universalify": { + "version": "0.1.2", + "dev": true + }, + "unix-crypt-td-js": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz", + "integrity": "sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "url-join": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", + "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==" + }, + "utf-8-validate": { + "version": "5.0.9", + "dev": true, + "optional": true, + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "util-deprecate": { + "version": "1.0.2" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true + }, + "uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" + }, + "uvu": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", + "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", + "requires": { + "dequal": "^2.0.0", + "diff": "^5.0.0", + "kleur": "^4.0.3", + "sade": "^1.7.3" + }, + "dependencies": { + "diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==" }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - } - } + "kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==" + } + } + }, + "v8-compile-cache": { + "version": "2.3.0", + "dev": true + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "dev": true + }, + "v8-to-istanbul": { + "version": "8.1.1", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.4", + "dev": true + } + } + }, + "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==", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validator": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", + "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true + }, + "w3c-hr-time": { + "version": "1.0.2", + "dev": true, + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "2.0.0", + "dev": true, + "requires": { + "xml-name-validator": "^3.0.0" + } + }, + "walker": { + "version": "1.0.8", + "dev": true, + "requires": { + "makeerror": "1.0.12" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "dev": true + }, + "web-worker": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", + "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" + }, + "webidl-conversions": { + "version": "6.1.0", + "dev": true + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.5", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "dev": true + }, + "whatwg-url": { + "version": "8.7.0", + "dev": true, + "requires": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "dependencies": { + "lodash": { + "version": "4.17.21", + "dev": true + } + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "requires": { + "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" + } + }, + "which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, + "windows-release": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", + "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==", + "dev": true, + "requires": { + "execa": "^4.0.2" + }, + "dependencies": { + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } }, - "wrap-ansi-cjs": { - "version": "npm:wrap-ansi@7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } }, - "wrappy": { - "version": "1.0.2" + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true }, - "write-file-atomic": { - "version": "3.0.3", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true }, - "ws": { - "version": "7.5.8", - "dev": true, - "requires": {} - }, - "xml-name-validator": { - "version": "3.0.0", - "dev": true - }, - "xmlchars": { - "version": "2.2.0", - "dev": true - }, - "xmldoc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.3.0.tgz", - "integrity": "sha512-y7IRWW6PvEnYQZNZFMRLNJw+p3pezM4nKYPfr15g4OOW9i8VpeydycFuipE2297OvZnh3jSb2pxOt9QpkZUVng==", - "dev": true, - "requires": { - "sax": "^1.2.4" - } + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + } + } + }, + "winston": { + "version": "3.8.2", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.4.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.5.0" + } + }, + "winston-transport": { + "version": "4.5.0", + "dev": true, + "requires": { + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "dev": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - }, - "yamljs": { - "version": "0.3.0", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "glob": "^7.0.5" - } + "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==" + } + } + }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "dependencies": { - "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==" - } - } + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "wrappy": { + "version": "1.0.2" + }, + "write-file-atomic": { + "version": "3.0.3", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "7.5.8", + "dev": true, + "requires": {} + }, + "xml-name-validator": { + "version": "3.0.0", + "dev": true + }, + "xmlchars": { + "version": "2.2.0", + "dev": true + }, + "xmldoc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.3.0.tgz", + "integrity": "sha512-y7IRWW6PvEnYQZNZFMRLNJw+p3pezM4nKYPfr15g4OOW9i8VpeydycFuipE2297OvZnh3jSb2pxOt9QpkZUVng==", + "dev": true, + "requires": { + "sax": "^1.2.4" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yamljs": { + "version": "0.3.0", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "glob": "^7.0.5" + } + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "dependencies": { "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==" - }, - "yn": { - "version": "3.1.1", - "dev": true - }, - "yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==" + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" } + } + }, + "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==" + }, + "yn": { + "version": "3.1.1", + "dev": true + }, + "yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==" } + } } diff --git a/package.json b/package.json index 69a6344a0..1e8e287b6 100644 --- a/package.json +++ b/package.json @@ -1,107 +1,108 @@ { - "name": "the-international-screeps-bot", - "version": "2.117.0", - "description": "", - "files": [ - "dist" - ], - "main": "dist/main.js", - "scripts": { - "init": "npm i", - "init-rust": "cd src/wasm && cargo build && rustup default nightly", - "init-total": "npm i && npm run init-rust", - "build-total": "npm run build-wasm && npm run build", - "build": "rollup -c", - "build-wasm": "cd src/wasm && wasm-pack build --target web --config build.rustflags=['-Ctarget-cpu=mvp'] -Z build-std=std,panic_abort && git add --force pkg/* && git rm --force pkg/.gitignore", - "lint": "eslint src", - "lint-fix": "eslint src --fix", - "push-mmo": "rollup -c --environment DEST:mmo", - "push-pserver": "rollup -c --environment DEST:pserver", - "watch-mmo": "rollup -cw --environment DEST:mmo", - "watch-pserver": "rollup -cw --environment DEST:pserver", - "server": "node server", - "test": "jest", - "test-watch": "jest --watch", - "test-cov": "jest --coverage", - "test-only": "bash -c 'jest --watch --coverage --verbose --collectCoverageFrom=\"**/*$1*\" $1' -- ", - "release": "semantic-release", - "compodoc": "npx @compodoc/compodoc -p tsconfig.json --disableSourceCode --output docs", - "compodoc:serve": "npx @compodoc/compodoc -p tsconfig.json --disableSourceCode -s --output docs" - }, - "repository": { - "type": "git", - "url": "https://github.com/The-International-Screeps-Bot/The-International-Open-Source" - }, - "bugs": { - "url": "https://github.com/The-International-Screeps-Bot/The-International-Open-Source/issues" - }, - "author": "Carson Burke", - "contributors": [ - "Pieterbrandsen" - ], - "license": "GNU GPLv3", - "homepage": "https://github.com/The-International-Screeps-Bot/The-International-Open-Source", - "keywords": [ - "screeps", - "screeps bot", - "commie bot", - "the international", - "the international screeps bot" - ], - "devDependencies": { - "@compodoc/compodoc": "^1.1.19", - "@rollup/plugin-commonjs": "^20.0.0", - "@rollup/plugin-node-resolve": "^13.0.4", - "@semantic-release/changelog": "^6.0.3", - "@semantic-release/commit-analyzer": "^9.0.2", - "@semantic-release/git": "^10.0.1", - "@semantic-release/release-notes-generator": "^11.0.1", - "@types/chai": "^4.3.0", - "@types/jest": "^27.0.1", - "@types/lodash": "3.10.2", - "@types/node": "^13.13.1", - "@types/screeps": "^3.3.3", - "@types/sinon": "^5.0.5", - "@types/sinon-chai": "^3.2.0", - "@typescript-eslint/eslint-plugin": "^4.20.0", - "@typescript-eslint/parser": "^4.20.0", - "chai": "^4.2.0", - "dotenv": "^16.0.2", - "eslint": "^7.23.0", - "eslint-config-prettier": "^7.2.0", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-jest": "^24.1.3", - "eslint-plugin-jsdoc": "^31.6.1", - "eslint-plugin-prettier": "^3.3.1", - "eslint-plugin-screeps": "^2.1.0", - "fastestsmallesttextencoderdecoder-encodeinto": "^1.0.22", - "javascript-obfuscator": "^4.0.2", - "jest": "^27.1.0", - "lodash": "^3.10.1", - "prettier": "^2.3.2", - "rollup": "^2.79.1", - "rollup-plugin-clear": "^2.0.7", - "rollup-plugin-copy": "^3.4.0", - "rollup-plugin-screeps-world": "^1.0.4", - "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-typescript2": "^0.36.0", - "screeps-grafana-go_carbon": "^1.0.5", - "screeps-jest": "^2.0.2", - "screeps-performance-server": "^1.12.1", - "screeps-viz": "^2.1.3", - "sinon": "^6.3.5", - "sinon-chai": "^3.2.0", - "ts-jest": "^27.0.5", - "ts-node": "^10.2.0", - "tsconfig-paths": "^3.10.1", - "typescript": "4.4", - "yaml": "^1.10.2" - }, - "dependencies": { - "base32768": "^3.0.1", - "mermaid": "^10.3.0", - "semantic-release": "^21.0.7", - "source-map": "~0.6.1" - }, - "screeps_bot": true + "name": "the-international-screeps-bot", + "version": "2.117.0", + "description": "", + "files": [ + "dist" + ], + "main": "dist/main.js", + "scripts": { + "init": "npm i", + "init-rust": "cd src/wasm && cargo build && rustup default nightly", + "init-total": "npm i && npm run init-rust", + "build-total": "npm run build-wasm && npm run build", + "build": "rollup -c", + "build-wasm": "cd src/wasm && wasm-pack build --target web --config build.rustflags=['-Ctarget-cpu=mvp'] -Z build-std=std,panic_abort && git add --force pkg/* && git rm --force pkg/.gitignore", + "lint": "eslint src", + "lint-fix": "eslint src --fix", + "push-mmo": "rollup -c --environment DEST:mmo", + "push-pserver": "rollup -c --environment DEST:pserver", + "watch-mmo": "rollup -cw --environment DEST:mmo", + "watch-pserver": "rollup -cw --environment DEST:pserver", + "server": "node server", + "server-debug": "node server --debug", + "test": "jest", + "test-watch": "jest --watch", + "test-cov": "jest --coverage", + "test-only": "bash -c 'jest --watch --coverage --verbose --collectCoverageFrom=\"**/*$1*\" $1' -- ", + "release": "semantic-release", + "compodoc": "npx @compodoc/compodoc -p tsconfig.json --disableSourceCode --output docs", + "compodoc:serve": "npx @compodoc/compodoc -p tsconfig.json --disableSourceCode -s --output docs" + }, + "repository": { + "type": "git", + "url": "https://github.com/The-International-Screeps-Bot/The-International-Open-Source" + }, + "bugs": { + "url": "https://github.com/The-International-Screeps-Bot/The-International-Open-Source/issues" + }, + "author": "Carson Burke", + "contributors": [ + "Pieterbrandsen" + ], + "license": "GNU GPLv3", + "homepage": "https://github.com/The-International-Screeps-Bot/The-International-Open-Source", + "keywords": [ + "screeps", + "screeps bot", + "commie bot", + "the international", + "the international screeps bot" + ], + "devDependencies": { + "@compodoc/compodoc": "^1.1.19", + "@rollup/plugin-commonjs": "^20.0.0", + "@rollup/plugin-node-resolve": "^13.0.4", + "@semantic-release/changelog": "^6.0.3", + "@semantic-release/commit-analyzer": "^9.0.2", + "@semantic-release/git": "^10.0.1", + "@semantic-release/release-notes-generator": "^11.0.1", + "@types/chai": "^4.3.0", + "@types/jest": "^27.0.1", + "@types/lodash": "3.10.2", + "@types/node": "^13.13.1", + "@types/screeps": "^3.3.3", + "@types/sinon": "^5.0.5", + "@types/sinon-chai": "^3.2.0", + "@typescript-eslint/eslint-plugin": "^4.20.0", + "@typescript-eslint/parser": "^4.20.0", + "chai": "^4.2.0", + "dotenv": "^16.0.2", + "eslint": "^7.23.0", + "eslint-config-prettier": "^7.2.0", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-jest": "^24.1.3", + "eslint-plugin-jsdoc": "^31.6.1", + "eslint-plugin-prettier": "^3.3.1", + "eslint-plugin-screeps": "^2.1.0", + "fastestsmallesttextencoderdecoder-encodeinto": "^1.0.22", + "javascript-obfuscator": "^4.0.2", + "jest": "^27.1.0", + "lodash": "^3.10.1", + "prettier": "^2.3.2", + "rollup": "^2.79.1", + "rollup-plugin-clear": "^2.0.7", + "rollup-plugin-copy": "^3.4.0", + "rollup-plugin-screeps-world": "^1.0.4", + "rollup-plugin-terser": "^7.0.2", + "rollup-plugin-typescript2": "^0.36.0", + "screeps-grafana-go_carbon": "^1.0.5", + "screeps-jest": "^2.0.2", + "screeps-performance-server": "^1.12.1", + "screeps-viz": "^2.1.3", + "sinon": "^6.3.5", + "sinon-chai": "^3.2.0", + "ts-jest": "^27.0.5", + "ts-node": "^10.2.0", + "tsconfig-paths": "^3.10.1", + "typescript": "4.4", + "yaml": "^1.10.2" + }, + "dependencies": { + "base32768": "^3.0.1", + "mermaid": "^10.3.0", + "semantic-release": "^21.0.7", + "source-map": "~0.6.1" + }, + "screeps_bot": true } diff --git a/rollup.config.js b/rollup.config.js index 1a1104b9b..d909ab543 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -69,5 +69,5 @@ export default { // warn about everything else console.warn(warning.message) - } + }, } diff --git a/server.js b/server.js index a06bb1a31..3c1a23117 100644 --- a/server.js +++ b/server.js @@ -2,6 +2,7 @@ const { join } = require('path') const { execSync } = require('child_process') require('dotenv').config() const minimist = require('minimist') +const fs = require('fs') const argv = minimist(process.argv.slice(2)) @@ -25,19 +26,33 @@ function getPorts() { const ports = getPorts() const options = { stdio: 'inherit' } +const srcPath = join(__dirname, 'src') const botPath = join(__dirname, 'dist') console.log('START') // execSync( // `npx screeps-grafana-go_carbon setup && npx screeps-grafana-go_carbon --grafanaPort=${ports.grafanaPort} --relayPort=${ports.relayPort} --force ${argv.debug ? '--debug' : ''} --deleteLogs --deleteWhisper`, // options, // ) + +function customCopyFile(src, dest, searchText, replaceText) { + const text = fs.readFileSync(src, 'utf8') + + const regex = new RegExp(searchText, 'g') + const result = text.replace(regex, replaceText) + fs.writeFileSync(dest, result, 'utf8') +} + +customCopyFile(join(srcPath,"settings.example.ts"), join(srcPath,"settings.ts"),'Example','') +customCopyFile(join(srcPath,"other/userScript/userScript.example.ts"), join(srcPath,"other/userScript/userScript.ts"),'Example','') execSync('npm run build', options) + +const cmdString = `npx screeps-performance-server --maxTickCount=${argv.maxTicks || 20000} --maxBots=10 --botFilePath=${botPath} --steamKey=${ + process.env.STEAM_KEY +} --exportUrl=${process.env.EXPORT_API_URL} --serverPort=${ports.serverPort} --cliPort=${ports.cliPort} --force ${ + argv.debug ? '--debug' : '' +} --deleteLogs --tickDuration=${argv.tickDuration || 250} --logFilter='Error:'`; execSync( - `npx screeps-performance-server --maxTickCount=${argv.maxTicks || 20000} --maxBots=10 --botFilePath=${botPath} --steamKey=${ - process.env.STEAM_KEY - } --exportUrl=${process.env.EXPORT_API_URL} --serverPort=${ports.serverPort} --cliPort=${ports.cliPort} --force ${ - argv.debug ? '--debug' : '' - } --deleteLogs --tickDuration=${argv.tickDuration || 250} --logFilter='Error:'`, + cmdString, options, ) // if (argv.stopGrafana) execSync('npx screeps-grafana stop') diff --git a/src/other/userScript/userScript.example.ts b/src/other/userScript/userScript.example.ts index ca4418bc3..595bedcc9 100644 --- a/src/other/userScript/userScript.example.ts +++ b/src/other/userScript/userScript.example.ts @@ -1,15 +1,9 @@ // IMPORTANT: If you want to use the userScript, copy this file, name it userScript.ts, and rename references to userScriptExample to userScript and UserScriptExample to UserScript class UserScriptExample implements UserScriptTemplate { - initialRun() { - - } - run() { - - } - endRun() { - - } + initialRun() {} + run() {} + endRun() {} } -global.userScriptExample = new UserScriptExample() +global.userScript = new UserScriptExample() diff --git a/src/settings.example.ts b/src/settings.example.ts index 251c205da..68c558e59 100644 --- a/src/settings.example.ts +++ b/src/settings.example.ts @@ -1,4 +1,4 @@ -import { defaultSettings } from "./settingsDefault"; +import { defaultSettings } from './settingsDefault' // IMPORTANT: To setup your settings, copy this file, name it settings.ts, and rename settingsExample to settings @@ -6,11 +6,11 @@ import { defaultSettings } from "./settingsDefault"; * Edit these settings to your preference */ global.settingsExample = { - // Assigns the default settings - ...defaultSettings, - // Your preferences here - roomVisuals: false, - // etc... + // Assigns the default settings + ...defaultSettings, + // Your preferences here + roomVisuals: true, + // etc... } // Some examples for what you would have in settings.ts diff --git a/tsconfig.json b/tsconfig.json index 710fabb4a..f9d90859e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,27 +1,27 @@ { - "compilerOptions": { - "allowJs": true, - "experimentalDecorators": true, - "module": "esnext", - "lib": ["es2019", "dom"], - "target": "es2019", - "moduleResolution": "Node", - "outDir": "dist", - "baseUrl": "src/", - "strict": true, - "noImplicitAny": true, - "removeComments": true, - "noImplicitReturns": true, - "allowSyntheticDefaultImports": true, - "allowUnreachableCode": true, - "strictNullChecks": false, - "esModuleInterop": true, - "sourceMap": true, - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - }, - "exclude": ["node_modules", "dist", "docs"], - "typedocOptions": { - "out": "./docs" - } + "compilerOptions": { + "allowJs": true, + "experimentalDecorators": true, + "module": "esnext", + "lib": ["es2019", "dom"], + "target": "es2019", + "moduleResolution": "Node", + "outDir": "dist", + "baseUrl": "src/", + "strict": true, + "noImplicitAny": true, + "removeComments": true, + "noImplicitReturns": true, + "allowSyntheticDefaultImports": true, + "allowUnreachableCode": true, + "strictNullChecks": false, + "esModuleInterop": true, + "sourceMap": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true + }, + "exclude": ["node_modules", "dist", "docs"], + "typedocOptions": { + "out": "./docs" + } } From 47d35a91d85c7e6a8163bfc3dabb28c26ea673c6 Mon Sep 17 00:00:00 2001 From: Pieter Brandsen Date: Fri, 22 Dec 2023 17:16:22 +0100 Subject: [PATCH 003/190] Added exist check --- server.js | 1 + 1 file changed, 1 insertion(+) diff --git a/server.js b/server.js index 3c1a23117..2cbc33cfa 100644 --- a/server.js +++ b/server.js @@ -35,6 +35,7 @@ console.log('START') // ) function customCopyFile(src, dest, searchText, replaceText) { + if (fs.existsSync(dest)) return; const text = fs.readFileSync(src, 'utf8') const regex = new RegExp(searchText, 'g') From 4a88f28c5967615557d53b0512dff4c82f47f0d7 Mon Sep 17 00:00:00 2001 From: Pieter Date: Fri, 22 Dec 2023 21:38:24 +0000 Subject: [PATCH 004/190] Readded testing --- .github/workflows/CD-Long.yml | 34 ---------------------------------- .github/workflows/CD.yml | 3 ++- server.js | 3 ++- 3 files changed, 4 insertions(+), 36 deletions(-) delete mode 100644 .github/workflows/CD-Long.yml diff --git a/.github/workflows/CD-Long.yml b/.github/workflows/CD-Long.yml deleted file mode 100644 index c75fe5e44..000000000 --- a/.github/workflows/CD-Long.yml +++ /dev/null @@ -1,34 +0,0 @@ - -name: Auto upload - -on: - push: - branches: - - Main -jobs: - VerifyUpload: - timeout-minutes: 129600 - runs-on: self-hosted - steps: - - name: 'Cleanup build folder' - run: | - ls -la ./ - rm -rf ./* || true - rm -rf ./.??* || true - ls -la ./ - - uses: actions/checkout@v3 - - name: Use Node.js 16.x - uses: actions/setup-node@v3 - with: - node-version: 16.x - cache: 'npm' - - name: Get IP - run: hostname -I - - name: Install dependencies - run: npm install - - name: Start instances - run: node server --maxTicks=250000 --debug --tickDuration=5000 - env: - STEAM_API_KEY: ${{ secrets.STEAM_API_KEY }} - EXPORT_API_URL: ${{ secrets.EXPORT_API_URL }} - ACTIONS_RUNNER_NAME: ${{ runner.name }} diff --git a/.github/workflows/CD.yml b/.github/workflows/CD.yml index 9a9190724..07baa8fab 100644 --- a/.github/workflows/CD.yml +++ b/.github/workflows/CD.yml @@ -30,5 +30,6 @@ jobs: run: node server --maxTicks=25000 --debug --tickDuration=5000 env: STEAM_API_KEY: ${{ secrets.STEAM_API_KEY }} - EXPORT_API_URL: ${{ secrets.EXPORT_API_URL }} + EXPORT_DISCORD_WEBHOOK_URL: ${{ secrets.EXPORT_DISCORD_WEBHOOK_URL }} + EXPORT_PASTEBIN_KEY: ${{ secrets.EXPORT_PASTEBIN_KEY }} ACTIONS_RUNNER_NAME: ${{ runner.name }} diff --git a/server.js b/server.js index 3c1a23117..32bf0a9cd 100644 --- a/server.js +++ b/server.js @@ -35,6 +35,7 @@ console.log('START') // ) function customCopyFile(src, dest, searchText, replaceText) { + if (fs.existsSync(dest)) return; const text = fs.readFileSync(src, 'utf8') const regex = new RegExp(searchText, 'g') @@ -48,7 +49,7 @@ execSync('npm run build', options) const cmdString = `npx screeps-performance-server --maxTickCount=${argv.maxTicks || 20000} --maxBots=10 --botFilePath=${botPath} --steamKey=${ process.env.STEAM_KEY -} --exportUrl=${process.env.EXPORT_API_URL} --serverPort=${ports.serverPort} --cliPort=${ports.cliPort} --force ${ +} --discordWebHookUrl=${process.env.EXPORT_DISCORD_WEBHOOK_URL} --pasteBinUrlDevKey=${process.env.EXPORT_PASTEBIN_KEY} --serverPort=${ports.serverPort} --cliPort=${ports.cliPort} --force ${ argv.debug ? '--debug' : '' } --deleteLogs --tickDuration=${argv.tickDuration || 250} --logFilter='Error:'`; execSync( From 3508c8b4dd43ee0904e16b90125e9c3e47bc280d Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 23 Dec 2023 02:12:32 -0800 Subject: [PATCH 005/190] (migration) 118 -> 120; power creep pathing fix --- src/international/customPathFinder.ts | 4 +++- src/international/migration.ts | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/international/customPathFinder.ts b/src/international/customPathFinder.ts index 32955b2ba..4911c0405 100644 --- a/src/international/customPathFinder.ts +++ b/src/international/customPathFinder.ts @@ -414,7 +414,9 @@ function generatePath(args: CustomPathFinderArgs, allowedRoomNames: Set) // The pather is a creep, it isn't in a quad, and it hasn't already weighted roads if (args.creep) { - const creepMemory = Memory.creeps[args.creep.name] + + const creepMemory = Memory.creeps[args.creep.name] || Memory.powerCreeps[args.creep.name] + if ( (!creepMemory[CreepMemoryKeys.squadMembers] || creepMemory[CreepMemoryKeys.squadMembers].length < 3) && diff --git a/src/international/migration.ts b/src/international/migration.ts index d27e1e0cd..e17efeda6 100644 --- a/src/international/migration.ts +++ b/src/international/migration.ts @@ -20,6 +20,10 @@ export class MigrationManager { Memory.nukeRequests = {} Memory.breakingVersion += 1 } + if (Memory.breakingVersion === 118) { + Memory.players = {} + Memory.breakingVersion += 2 + } if (Memory.breakingVersion < global.settings.breakingVersion) { global.killCreeps() From 11af7ba4856e85bc3cb6091b223e294752b67bdd Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 23 Dec 2023 02:14:56 -0800 Subject: [PATCH 006/190] needsNewPath powerCreep fix --- src/room/creeps/creepPrototypes/creepMoveFunctions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts index 885c1e30b..fd8954334 100644 --- a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts @@ -61,7 +61,7 @@ PowerCreep.prototype.needsNewPath = Creep.prototype.needsNewPath = function ( // Inform true if there is no lastCache value in the creep's memory - const creepMemory = Memory.creeps[this.name] + const creepMemory = Memory.creeps[this.name] || Memory.powerCreeps[this.name] if (!creepMemory[CreepMemoryKeys.lastCache]) return true if (creepMemory[CreepMemoryKeys.flee] !== args.flee) return true From 1d083857b27cf2e19e11b998fda0099d7f7d2eb0 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 23 Dec 2023 13:42:07 -0800 Subject: [PATCH 007/190] powered sourceHarvester spawning carry fix, relay fixes --- src/room/commune/spawning/spawnRequests.ts | 2 +- src/room/creeps/roleManagers/commune/hauler.ts | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/room/commune/spawning/spawnRequests.ts b/src/room/commune/spawning/spawnRequests.ts index 0b00312f4..ee337b43b 100644 --- a/src/room/commune/spawning/spawnRequests.ts +++ b/src/room/commune/spawning/spawnRequests.ts @@ -122,7 +122,7 @@ export class SpawnRequestsManager { for (let i = 1; i <= workAmount; i++) { defaultParts.push(WORK) if (i % 2 === 0) defaultParts.push(MOVE) - if (i + (1 % 5) === 0) defaultParts.push(CARRY) + if ((i + 1) % 5 === 0) defaultParts.push(CARRY) } return { diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index 10fad8ea8..e3ed4dedb 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -773,17 +773,17 @@ export class Hauler extends Creep { // ensure the creep receiving creep is empty if (creepAtPos.usedNextStore > 0) return false - /* let amount: number | undefined */ + let amount: number | undefined const logisticsRequest = Memory.creeps[this.name][CreepMemoryKeys.roomLogisticsRequests][0] if (logisticsRequest) { const target = findObjectWithID(logisticsRequest[CreepRoomLogisticsRequestKeys.target]) // Don't relay if they are close to our logistics target if (getRange(target.pos, creepAtPos.pos) <= 1) return false - /* amount = logisticsRequest[CreepRoomLogisticsRequestKeys.amount] */ + amount = logisticsRequest[CreepRoomLogisticsRequestKeys.amount] } - this.transfer(creepAtPos, RESOURCE_ENERGY/* , amount */) + this.transfer(creepAtPos, RESOURCE_ENERGY, amount) this.movedResource = true creepAtPos.movedResource = true @@ -797,7 +797,7 @@ export class Hauler extends Creep { log('creepAtPos Energy', creepAtPos.freeNextStore) log('nextEnergy', Math.min(this.store.energy, creepAtPos.freeNextStore)) */ - const nextEnergy = Math.min(this.store.energy, creepAtPos.freeNextStore) + const nextEnergy = amount ?? Math.min(this.store.energy, creepAtPos.freeNextStore) this.nextStore.energy -= nextEnergy creepAtPos.nextStore.energy += nextEnergy /* @@ -823,6 +823,7 @@ export class Hauler extends Creep { // record relaying information to avoid swapping creepMemory[CreepMemoryKeys.previousRelayer] = [creepAtPos.name, Game.time] + creepAtPosMemory[CreepMemoryKeys.previousRelayer] = [this.name, Game.time] // Trade room logistics requests From f7418afa4085a9447485a9feb209efcf23e2fe69 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 23 Dec 2023 15:10:16 -0800 Subject: [PATCH 008/190] spawnTarget for sourceHarvester and fastFiller --- .../spawning/spawnRequestConstructors.ts | 79 ++++++++----------- src/room/commune/spawning/spawnRequests.ts | 15 +++- src/room/commune/spawning/spawnUtils.ts | 21 ++--- .../commune/spawning/spawningStructures.ts | 64 +++++++++------ src/types/spawnRequest.ts | 10 ++- src/types/utilityTypes.ts | 3 + src/utils/utils.ts | 28 ++++++- 7 files changed, 135 insertions(+), 85 deletions(-) create mode 100644 src/types/utilityTypes.ts diff --git a/src/room/commune/spawning/spawnRequestConstructors.ts b/src/room/commune/spawning/spawnRequestConstructors.ts index 286785a68..a7ee57a75 100644 --- a/src/room/commune/spawning/spawnRequestConstructors.ts +++ b/src/room/commune/spawning/spawnRequestConstructors.ts @@ -4,28 +4,7 @@ import { SpawnRequestArgs } from 'types/spawnRequest' export type SpawnRequestConstructor = (room: Room, args: SpawnRequestArgs) => SpawnRequest[] -export const spawnRequestConstructors = { - createSpawnRequest( - priority: number, - role: CreepRoles, - defaultParts: number, - bodyPartCounts: { [key in PartsByPriority]: number }, - tier: number, - cost: number, - memory: any, - ): SpawnRequest { - return { - role, - priority, - defaultParts, - bodyPartCounts, - tier, - cost, - extraOpts: { - memory, - }, - } - }, +export class SpawnRequestConstructors { /** * Generally, all creeps will have the same bodies */ @@ -159,22 +138,24 @@ export const spawnRequestConstructors = { // Create a spawnRequest using previously constructed information - const request = spawnRequestConstructors.createSpawnRequest( - args.priority, - args.role, - args.defaultParts.length, + spawnRequests.push({ + role: args.role, + priority: args.priority, + defaultParts: args.defaultParts.length, bodyPartCounts, + spawnTarget: args.spawnTarget, tier, cost, - args.memoryAdditions, - ) - spawnRequests.push(request) + extraOpts: { + memory: args.memoryAdditions, + }, + }) args.creepsQuota -= 1 } return spawnRequests - }, + } spawnRequestGroupDiverse(room: Room, args: SpawnRequestArgs) { const spawnRequests: SpawnRequest[] = [] @@ -325,22 +306,24 @@ export const spawnRequestConstructors = { // Create a spawnRequest using previously constructed information - const request = spawnRequestConstructors.createSpawnRequest( - args.priority, - args.role, - args.defaultParts.length, + spawnRequests.push({ + role: args.role, + priority: args.priority, + defaultParts: args.defaultParts.length, bodyPartCounts, + spawnTarget: args.spawnTarget, tier, cost, - args.memoryAdditions, - ) - spawnRequests.push(request) + extraOpts: { + memory: args.memoryAdditions, + }, + }) args.maxCreeps -= 1 } return spawnRequests - }, + } spawnRequestGroupUniform(room: Room, args: SpawnRequestArgs) { const spawnRequests: SpawnRequest[] = [] @@ -426,16 +409,18 @@ export const spawnRequestConstructors = { // Create a spawnRequest using previously constructed information - const request = spawnRequestConstructors.createSpawnRequest( - args.priority, - args.role, - args.defaultParts.length, + spawnRequests.push({ + role: args.role, + priority: args.priority, + defaultParts: args.defaultParts.length, bodyPartCounts, + spawnTarget: args.spawnTarget, tier, cost, - args.memoryAdditions, - ) - spawnRequests.push(request) + extraOpts: { + memory: args.memoryAdditions, + }, + }) // Prepare values for next iteration check args.partsQuota -= partsCount @@ -443,5 +428,7 @@ export const spawnRequestConstructors = { } return spawnRequests - }, + } } + +export const spawnRequestConstructors = new SpawnRequestConstructors() diff --git a/src/room/commune/spawning/spawnRequests.ts b/src/room/commune/spawning/spawnRequests.ts index ee337b43b..a91aad611 100644 --- a/src/room/commune/spawning/spawnRequests.ts +++ b/src/room/commune/spawning/spawnRequests.ts @@ -90,6 +90,10 @@ export class SpawnRequestsManager { private sourceHarvester() { const sources = this.communeManager.room.roomManager.communeSources for (let sourceIndex = 0; sourceIndex < sources.length; sourceIndex++) { + + const source = sources[sourceIndex] + const spawnTarget = source.pos + // Construct requests for sourceHarvesters this.rawSpawnRequestsArgs.push( @@ -107,7 +111,6 @@ export class SpawnRequestsManager { // Account for power regenerating sources - const source = sources[sourceIndex] const effect = source.effectsData.get(PWR_REGEN_SOURCE) as PowerEffect if (effect) { workAmount += Math.round( @@ -136,6 +139,7 @@ export class SpawnRequestsManager { priority, maxCostPerCreep, spawnGroup: spawnGroup, + spawnTarget, memoryAdditions: { [CreepMemoryKeys.sourceIndex]: sourceIndex, [CreepMemoryKeys.preferRoads]: true, @@ -155,6 +159,7 @@ export class SpawnRequestsManager { priority, maxCostPerCreep, spawnGroup: spawnGroup, + spawnTarget, memoryAdditions: { [CreepMemoryKeys.sourceIndex]: sourceIndex, [CreepMemoryKeys.preferRoads]: true, @@ -174,6 +179,7 @@ export class SpawnRequestsManager { priority, maxCostPerCreep, spawnGroup: spawnGroup, + spawnTarget, memoryAdditions: { [CreepMemoryKeys.sourceIndex]: sourceIndex, [CreepMemoryKeys.preferRoads]: true, @@ -193,6 +199,7 @@ export class SpawnRequestsManager { priority, maxCostPerCreep, spawnGroup: spawnGroup, + spawnTarget, memoryAdditions: { [CreepMemoryKeys.sourceIndex]: sourceIndex, [CreepMemoryKeys.preferRoads]: true, @@ -212,6 +219,7 @@ export class SpawnRequestsManager { priority, maxCostPerCreep, spawnGroup: spawnGroup, + spawnTarget, memoryAdditions: { [CreepMemoryKeys.sourceIndex]: sourceIndex, [CreepMemoryKeys.preferRoads]: true, @@ -235,6 +243,7 @@ export class SpawnRequestsManager { priority, maxCostPerCreep, spawnGroup: spawnGroup, + spawnTarget, memoryAdditions: { [CreepMemoryKeys.sourceIndex]: sourceIndex, [CreepMemoryKeys.preferRoads]: true, @@ -392,6 +401,9 @@ export class SpawnRequestsManager { this.communeManager.room.roomManager.fastFillerPositions.length if (!fastFillerPositionsCount) return false + const anchor = this.communeManager.room.roomManager.anchor + if (!anchor) throw Error('no anchor for room ' + this.communeManager.room.name) + let priority = 0.75 let totalFastFillerEnergy = 0 @@ -417,6 +429,7 @@ export class SpawnRequestsManager { creepsQuota: fastFillerPositionsCount, minCostPerCreep: 150, priority, + spawnTarget: anchor, memoryAdditions: {}, } })(), diff --git a/src/room/commune/spawning/spawnUtils.ts b/src/room/commune/spawning/spawnUtils.ts index e3c98322d..0e5273afb 100644 --- a/src/room/commune/spawning/spawnUtils.ts +++ b/src/room/commune/spawning/spawnUtils.ts @@ -1,14 +1,12 @@ import { creepRoles } from 'international/constants' -import { collectiveManager } from 'international/collective' -import { customLog } from 'utils/logging' -import { newID } from 'utils/utils' import { SpawnRequest } from 'types/spawnRequest' -export const spawnUtils = { - testSpawn: function (spawn: StructureSpawn, spawnRequest: SpawnRequest, requestID: number) { - return spawn.spawnCreep(spawnRequest.body, requestID.toString(), { dryRun: true }) - }, - advancedSpawn: function (spawn: StructureSpawn, spawnRequest: SpawnRequest, requestID: number) { +export class SpawnUtils { + testSpawn(spawn: StructureSpawn, body: BodyPartConstant[], requestID: number) { + return spawn.spawnCreep(body, requestID.toString(), { dryRun: true }) + } + + advancedSpawn(spawn: StructureSpawn, spawnRequest: SpawnRequest, body: BodyPartConstant[], requestID: number) { spawnRequest.extraOpts.energyStructures = spawn.room.communeManager.spawningStructuresByPriority @@ -20,6 +18,9 @@ export const spawnUtils = { requestID, ].join('_') - return spawn.spawnCreep(spawnRequest.body, creepName, spawnRequest.extraOpts) - }, + const spawnResult = spawn.spawnCreep(body, creepName, spawnRequest.extraOpts as SpawnOptions) + return spawnResult + } } + +export const spawnUtils = new SpawnUtils() diff --git a/src/room/commune/spawning/spawningStructures.ts b/src/room/commune/spawning/spawningStructures.ts index 5e6965304..9bc002f21 100644 --- a/src/room/commune/spawning/spawningStructures.ts +++ b/src/room/commune/spawning/spawningStructures.ts @@ -11,7 +11,7 @@ import { import { collectiveManager } from 'international/collective' import { statsManager } from 'international/statsManager' import { LogTypes, customLog, stringifyLog } from 'utils/logging' -import { findAdjacentCoordsToCoord, getRange, newID, utils } from 'utils/utils' +import { findAdjacentCoordsToCoord, findLowestScore, findWithLowestScore, getRange, newID, utils } from 'utils/utils' import { packCoord, unpackPosAt } from 'other/codec' import { CommuneManager } from '../commune' import './spawnUtils' @@ -33,8 +33,6 @@ export class SpawningStructuresManager { inactiveSpawns: StructureSpawn[] activeSpawns: StructureSpawn[] - spawnIndex: number - constructor(communeManager: CommuneManager) { this.communeManager = communeManager } @@ -99,8 +97,6 @@ export class SpawningStructuresManager { const spawnRequestsArgs = this.communeManager.spawnRequestsManager.run() - this.spawnIndex = this.inactiveSpawns.length - 1 - for (const requestArgs of spawnRequestsArgs) { const spawnRequests = spawnRequestConstructorsByType[requestArgs.type](this.communeManager.room, requestArgs) @@ -113,6 +109,7 @@ export class SpawningStructuresManager { } private runSpawnRequest(request: SpawnRequest): Result { + // We're trying to build a creep larger than this room can spawn // If this is ran then there is a bug in spawnRequest creation @@ -145,16 +142,17 @@ export class SpawningStructuresManager { return Result.fail } - this.configSpawnRequest(request) + const body = this.constructBodyFromSpawnRequest(request) // Try to find inactive spawn, if can't, stop the loop - const spawn = this.inactiveSpawns[this.spawnIndex] + const spawnIndex = this.findSpawnIndexForSpawnRequest(request) + const spawn = this.inactiveSpawns[spawnIndex] const ID = collectiveManager.newCustomCreepID() // See if creep can be spawned - const testSpawnResult = spawnUtils.testSpawn(spawn, request, ID) + const testSpawnResult = spawnUtils.testSpawn(spawn, body, ID) // If creep can't be spawned @@ -162,7 +160,7 @@ export class SpawningStructuresManager { if (testSpawnResult === ERR_NOT_ENOUGH_ENERGY) { customLog( 'Failed to spawn: dryrun failed', - `request: ${testSpawnResult}, role: ${request.role}, cost: ${request.cost} / ${this.communeManager.nextSpawnEnergyAvailable}, body: (${request.body.length}) ${request.body}`, + `request: ${testSpawnResult}, role: ${request.role}, cost: ${request.cost} / ${this.communeManager.nextSpawnEnergyAvailable}, body: (${body.length}) ${body}`, { type: LogTypes.error, }, @@ -172,7 +170,7 @@ export class SpawningStructuresManager { customLog( 'Failed to spawn: dryrun failed', - `request: ${testSpawnResult}, role: ${request.role}, cost: ${request.cost} / ${this.communeManager.nextSpawnEnergyAvailable}, body: (${request.body.length}) ${request.body}`, + `request: ${testSpawnResult}, role: ${request.role}, cost: ${request.cost} / ${this.communeManager.nextSpawnEnergyAvailable}, body: (${body.length}) ${body}`, { type: LogTypes.error, }, @@ -184,7 +182,7 @@ export class SpawningStructuresManager { // Spawn the creep for real request.extraOpts.directions = this.findDirections(spawn.pos) - const result = spawnUtils.advancedSpawn(spawn, request, ID) + const result = spawnUtils.advancedSpawn(spawn, request, body, ID) if (result !== OK) { customLog( 'Failed to spawn: spawning failed', @@ -198,21 +196,37 @@ export class SpawningStructuresManager { return Result.fail } + // Otherwise we succeeded // Record in stats the costs this.communeManager.nextSpawnEnergyAvailable -= request.cost statsManager.updateStat(this.communeManager.room.name, 'eosp', request.cost) - // Record spawn usage and check if there is another spawn - this.spawnIndex -= 1 - if (this.spawnIndex < 0) return Result.stop + // The spawn we intented to spawn should no longer be considered inactive + this.inactiveSpawns.splice(spawnIndex, 1) + + // We probably used up the last remaining inactive spawn, so don't try again this tick + if (!this.inactiveSpawns.length) return Result.stop - // Otherwise we succeeded return Result.success } - private configSpawnRequest(request: SpawnRequest) { - request.body = [] + private findSpawnIndexForSpawnRequest(request: SpawnRequest) { + + if (request.spawnTarget) { + + const [score, index] = utils.findIndexWithLowestScore(this.inactiveSpawns, spawn => { + return getRange(spawn.pos, request.spawnTarget) + }) + + return index + } + + return 0 + } + + private constructBodyFromSpawnRequest(request: SpawnRequest) { + let body: BodyPartConstant[] = [] if (request.role === 'hauler') { const ratio = @@ -220,16 +234,16 @@ export class SpawningStructuresManager { request.bodyPartCounts[MOVE] for (let i = -1; i < request.bodyPartCounts[CARRY] - 1; i++) { - request.body.push(CARRY) - if (i % ratio === 0) request.body.push(MOVE) + body.push(CARRY) + if (i % ratio === 0) body.push(MOVE) } for (let i = -1; i < request.bodyPartCounts[WORK] - 1; i++) { - request.body.push(WORK) - if (i % ratio === 0) request.body.push(MOVE) + body.push(WORK) + if (i % ratio === 0) body.push(MOVE) } - return + return body } const endParts: BodyPartConstant[] = [] @@ -255,7 +269,7 @@ export class SpawningStructuresManager { } else priorityPartsCount = request.bodyPartCounts[part] - 1 for (let i = 0; i < priorityPartsCount; i++) { - request.body.push(part) + body.push(part) } if (skipEndPart) continue @@ -264,7 +278,8 @@ export class SpawningStructuresManager { endParts.push(part) } - request.body = request.body.concat(endParts) + body = body.concat(endParts) + return body } private findDirections(pos: RoomPosition) { @@ -369,7 +384,6 @@ export class SpawningStructuresManager { row.push(requestArgs.role) row.push(requestArgs.priority) row.push(`${request.cost} / ${this.communeManager.nextSpawnEnergyAvailable}`) - row.push(request.body) data.push(row) } diff --git a/src/types/spawnRequest.ts b/src/types/spawnRequest.ts index ce12a731b..6b64ba005 100644 --- a/src/types/spawnRequest.ts +++ b/src/types/spawnRequest.ts @@ -1,3 +1,5 @@ +import { DeepPartial } from "./utilityTypes" + export interface SpawnRequestArgs { type: SpawnRequestTypes role: CreepRoles @@ -49,6 +51,10 @@ export interface SpawnRequestArgs { * The absolute max cost a creep may be applied with */ maxCostPerCreep?: number | undefined + /** + * The position for which the spawning creep would like to be closest too + */ + spawnTarget?: Coord } export interface SpawnRequestSkeleton { @@ -63,10 +69,10 @@ export interface SpawnRequest { priority: number defaultParts: number bodyPartCounts: { [key in PartsByPriority]: number } - body?: BodyPartConstant[] + spawnTarget?: Coord tier: number cost: number - extraOpts: SpawnOptions + extraOpts: DeepPartial } export enum SpawnRequestTypes { diff --git a/src/types/utilityTypes.ts b/src/types/utilityTypes.ts new file mode 100644 index 000000000..e422dd517 --- /dev/null +++ b/src/types/utilityTypes.ts @@ -0,0 +1,3 @@ +export type DeepPartial = { + [P in keyof T]?: T[P] extends object ? DeepPartial : T[P]; +}; diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 287c1bff6..bbd6ffb33 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -857,9 +857,35 @@ export function getMe() { throw Error('Could not find me') } -export const utils = { +export class Utils { isTickInterval(interval: number) { return (Game.time % interval === 0) } + /** + * + * @returns [score, index] + */ + findIndexWithLowestScore( + iter: T[], + f: (val: T) => number | false, + ): [number, number] { + let lowestScore = Infinity + let bestIndex: number + + for (let i = 0; i < iter.length; i++) { + const val = iter[i] + + const score = f(val) + if (score === false) continue + if (score >= lowestScore) continue + + lowestScore = score + bestIndex = i + } + + return [lowestScore, bestIndex] + } } + +export const utils = new Utils() From 894d2795050b03355307ce9032d86ab501cc1b94 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 23 Dec 2023 15:17:43 -0800 Subject: [PATCH 009/190] moved spawnRequestVisuals flag --- src/international/flags.ts | 57 +++++++++++++++++++ .../commune/spawning/spawningStructures.ts | 53 ----------------- 2 files changed, 57 insertions(+), 53 deletions(-) diff --git a/src/international/flags.ts b/src/international/flags.ts index 13eeb1bd7..477b2f2cd 100644 --- a/src/international/flags.ts +++ b/src/international/flags.ts @@ -6,6 +6,7 @@ import { roomNameUtils } from 'room/roomNameUtils' import { packCoord } from 'other/codec' import { findObjectWithID, isAlly } from 'utils/utils' import { customLog } from 'utils/logging' +import { spawnRequestConstructorsByType } from 'room/commune/spawning/spawningStructures' export class FlagManager { run() { @@ -440,6 +441,62 @@ export class FlagManager { const dynamicScore = roomNameUtils.findDynamicScore(roomName) customLog('dynamic score for ' + roomName, dynamicScore) } + + private spawnRequestVisuals(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const room = Game.rooms[roomName] + if (!room) { + + flag.setColor(COLOR_RED) + return + } + + const headers = ['role', 'priority', 'cost', 'parts'] + const data: any[][] = [] + + const spawnRequestsArgs = room.communeManager.spawnRequestsManager.run() + + for (const requestArgs of spawnRequestsArgs) { + const spawnRequests = spawnRequestConstructorsByType[requestArgs.type](room, requestArgs) + + for (const request of spawnRequests) { + const row: any[] = [] + row.push(requestArgs.role) + row.push(requestArgs.priority) + row.push(`${request.cost} / ${room.communeManager.nextSpawnEnergyAvailable}`) + + data.push(row) + } + } + + const height = 3 + data.length + + Dashboard({ + config: { + room: room.name, + }, + widgets: [ + { + pos: { + x: 1, + y: 1, + }, + width: 47, + height, + widget: Rectangle({ + data: Table(() => ({ + data, + config: { + label: 'Spawn Requests', + headers, + }, + })), + }), + }, + ], + }) + } } export const flagManager = new FlagManager() diff --git a/src/room/commune/spawning/spawningStructures.ts b/src/room/commune/spawning/spawningStructures.ts index 9bc002f21..b8b406206 100644 --- a/src/room/commune/spawning/spawningStructures.ts +++ b/src/room/commune/spawning/spawningStructures.ts @@ -84,7 +84,6 @@ export class SpawningStructuresManager { // There are no spawns if (!this.communeManager.room.roomManager.structures.spawn.length) return - this.visualizeRequests() this.test() this.runSpawning() } @@ -364,56 +363,4 @@ export class SpawningStructuresManager { } private testRequests() {} - - /** - * Debug - */ - private visualizeRequests() { - if (!Game.flags.spawnRequestVisuals) return - - const headers = ['role', 'priority', 'cost', 'parts'] - const data: any[][] = [] - - const spawnRequestsArgs = this.communeManager.spawnRequestsManager.run() - - for (const requestArgs of spawnRequestsArgs) { - const spawnRequests = spawnRequestConstructorsByType[requestArgs.type](this.communeManager.room, requestArgs) - - for (const request of spawnRequests) { - const row: any[] = [] - row.push(requestArgs.role) - row.push(requestArgs.priority) - row.push(`${request.cost} / ${this.communeManager.nextSpawnEnergyAvailable}`) - - data.push(row) - } - } - - const height = 3 + data.length - - Dashboard({ - config: { - room: this.communeManager.room.name, - }, - widgets: [ - { - pos: { - x: 1, - y: 1, - }, - width: 47, - height, - widget: Rectangle({ - data: Table(() => ({ - data, - config: { - label: 'Spawn Requests', - headers, - }, - })), - }), - }, - ], - }) - } } From 49d093f61c1b3b63e71d436dd2ea804f54395203 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 23 Dec 2023 15:25:22 -0800 Subject: [PATCH 010/190] (migration) SleepFor to enum --- src/international/constants.ts | 5 ++++- src/international/migration.ts | 5 +++++ src/room/creeps/roleManagers/commune/hauler.ts | 5 +++-- src/room/creeps/roleManagers/remote/remoteCoreAttacker.ts | 5 +++-- src/settingsDefault.ts | 2 +- 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/international/constants.ts b/src/international/constants.ts index 1ead89184..421cc1b2d 100644 --- a/src/international/constants.ts +++ b/src/international/constants.ts @@ -133,7 +133,10 @@ export enum RoomLogisticsRequestTypes { offer, } -export type SleepFor = 'any' | 'noMove' +export enum SleepFor { + any, + move, +} export enum CreepMemoryKeys { preferRoads, diff --git a/src/international/migration.ts b/src/international/migration.ts index e17efeda6..2c1e19314 100644 --- a/src/international/migration.ts +++ b/src/international/migration.ts @@ -24,6 +24,11 @@ export class MigrationManager { Memory.players = {} Memory.breakingVersion += 2 } + if (Memory.breakingVersion === 120) { + + global.killCreeps() + Memory.breakingVersion += 1 + } if (Memory.breakingVersion < global.settings.breakingVersion) { global.killCreeps() diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index e3ed4dedb..ca582a132 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -5,6 +5,7 @@ import { RoomLogisticsRequestTypes, RoomMemoryKeys, RoomTypes, + SleepFor, customColors, packedPosLength, relayOffsets, @@ -262,7 +263,7 @@ export class Hauler extends Creep { ], }) === Result.fail ) { - creepMemory[CreepMemoryKeys.sleepFor] = 'any' + creepMemory[CreepMemoryKeys.sleepFor] = SleepFor.any creepMemory[CreepMemoryKeys.sleepTime] = Game.time + randomIntRange(10, 50) } } @@ -1052,7 +1053,7 @@ export class Hauler extends Creep { const creepMemory = Memory.creeps[this.name] if ( - creepMemory[CreepMemoryKeys.sleepFor] === 'any' && + creepMemory[CreepMemoryKeys.sleepFor] === SleepFor.any && creepMemory[CreepMemoryKeys.sleepTime] > Game.time ) { this.message = '😴' diff --git a/src/room/creeps/roleManagers/remote/remoteCoreAttacker.ts b/src/room/creeps/roleManagers/remote/remoteCoreAttacker.ts index 093d5ed5d..08f5f7b14 100644 --- a/src/room/creeps/roleManagers/remote/remoteCoreAttacker.ts +++ b/src/room/creeps/roleManagers/remote/remoteCoreAttacker.ts @@ -5,6 +5,7 @@ import { Result, RoomMemoryKeys, RoomTypes, + SleepFor, } from 'international/constants' import { getRangeXY, randomIntRange, randomTick } from 'utils/utils' @@ -161,7 +162,7 @@ export class RemoteCoreAttacker extends Creep { const creepMemory = Memory.creeps[creep.name] if ( - creepMemory[CreepMemoryKeys.sleepFor] === 'any' && + creepMemory[CreepMemoryKeys.sleepFor] === SleepFor.any && creepMemory[CreepMemoryKeys.sleepTime] > Game.time ) { creep.message = '😴' @@ -198,7 +199,7 @@ export class RemoteCoreAttacker extends Creep { avoidDanger: true, }) === Result.fail ) { - creepMemory[CreepMemoryKeys.sleepFor] = 'any' + creepMemory[CreepMemoryKeys.sleepFor] = SleepFor.any creepMemory[CreepMemoryKeys.sleepTime] = Game.time + randomIntRange(10, 50) } diff --git a/src/settingsDefault.ts b/src/settingsDefault.ts index 2593eaca6..b4b577661 100644 --- a/src/settingsDefault.ts +++ b/src/settingsDefault.ts @@ -115,7 +115,7 @@ export interface Settings { * Default global.settings. DO NOT MODIFY for personal use; instead, include your preferences in global.settings.ts */ export const defaultSettings: Settings = { - breakingVersion: 120, + breakingVersion: 121, roomVisuals: false, baseVisuals: false, dataVisuals: false, From 71068fe29431e54696c5c9c83e736d0b23e6fad7 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 23 Dec 2023 15:35:03 -0800 Subject: [PATCH 011/190] fix shoving active parts reading --- src/room/creeps/creepPrototypes/creepMoveFunctions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts index fd8954334..2cb9ab89e 100644 --- a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts @@ -489,7 +489,7 @@ PowerCreep.prototype.findShoveCoord = Creep.prototype.findShoveCoord = function if (creepAtPos.fatigue > 0) return if (creepAtPos.moved) return if (creepAtPos.moveRequest) return - if (!this.getActiveBodyparts(MOVE)) return + if (creepAtPos.getActiveBodyparts(MOVE)) return } /* From 721d573f3428b7f4a8cd59074c0703611ff9117f Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 23 Dec 2023 16:00:42 -0800 Subject: [PATCH 012/190] power creep shove fixes --- src/room/commune/spawning/spawnRequestConstructors.ts | 6 +++--- src/room/creeps/creepPrototypes/creepMoveFunctions.ts | 3 ++- src/types/spawnRequest.ts | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/room/commune/spawning/spawnRequestConstructors.ts b/src/room/commune/spawning/spawnRequestConstructors.ts index a7ee57a75..14ab8a946 100644 --- a/src/room/commune/spawning/spawnRequestConstructors.ts +++ b/src/room/commune/spawning/spawnRequestConstructors.ts @@ -147,7 +147,7 @@ export class SpawnRequestConstructors { tier, cost, extraOpts: { - memory: args.memoryAdditions, + memory: args.memoryAdditions as CreepMemory, }, }) @@ -315,7 +315,7 @@ export class SpawnRequestConstructors { tier, cost, extraOpts: { - memory: args.memoryAdditions, + memory: args.memoryAdditions as CreepMemory, }, }) @@ -418,7 +418,7 @@ export class SpawnRequestConstructors { tier, cost, extraOpts: { - memory: args.memoryAdditions, + memory: args.memoryAdditions as CreepMemory, }, }) diff --git a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts index 2cb9ab89e..6613a591e 100644 --- a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts @@ -582,7 +582,8 @@ PowerCreep.prototype.shove = Creep.prototype.shove = function (avoidPackedCoords avoidPackedCoords.add(packCoord(this.pos)) avoidPackedCoords.add(packedShoveCoord) - if (!Game.creeps[creepAtPosName].shove(avoidPackedCoords)) return false + const creepAtPos = Game.creeps[creepAtPosName] || Game.powerCreeps[creepAtPosName] + if (!creepAtPos.shove(avoidPackedCoords)) return false } this.assignMoveRequest(shoveCoord) diff --git a/src/types/spawnRequest.ts b/src/types/spawnRequest.ts index 6b64ba005..7af4b6ff7 100644 --- a/src/types/spawnRequest.ts +++ b/src/types/spawnRequest.ts @@ -72,7 +72,7 @@ export interface SpawnRequest { spawnTarget?: Coord tier: number cost: number - extraOpts: DeepPartial + extraOpts: SpawnOptions } export enum SpawnRequestTypes { From 87ed5b22da4cc71170b8a443ced8e9f669595e96 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 23 Dec 2023 20:36:44 -0800 Subject: [PATCH 013/190] attack request requirements improvements --- src/room/commune/combatRequest.ts | 21 ++++++++++++++++++++- src/room/commune/spawning/spawnUtils.ts | 2 +- src/room/roomFunctions.ts | 8 -------- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/room/commune/combatRequest.ts b/src/room/commune/combatRequest.ts index 3400e67e0..be19ad9de 100644 --- a/src/room/commune/combatRequest.ts +++ b/src/room/commune/combatRequest.ts @@ -94,11 +94,30 @@ export class CombatRequestManager { this.manageAbandonment(requestName, index) return } - +/* const enemySquadData = requestRoom.roomManager.enemySquadData request[CombatRequestKeys.minRangedHeal] = Math.max(enemySquadData.highestRangedDamage, 1) request[CombatRequestKeys.minDamage] = enemySquadData.highestHeal * 1.2 + */ + + const towers = requestRoom.roomManager.structures.tower + + let minDamage = 1 + let minMeleeHeal = towers.length ? (towers.length * TOWER_POWER_ATTACK) : 1 + let minRangedHeal = towers.length ? (towers.length * TOWER_POWER_ATTACK) : 1 + + for (const enemyCreep of room.roomManager.enemyAttackers) { + // If we have tower(s) and its an invader, don't care about it + + minDamage += Math.max(enemyCreep.combatStrength.heal * 1.2, Math.ceil(enemyCreep.hits / 50)) + minMeleeHeal += enemyCreep.combatStrength.melee + enemyCreep.combatStrength.ranged + minRangedHeal += enemyCreep.combatStrength.ranged + } + + request[CombatRequestKeys.minRangedHeal] = Math.max(request[CombatRequestKeys.minRangedHeal], minRangedHeal) + request[CombatRequestKeys.minMeleeHeal] = Math.max(request[CombatRequestKeys.minRangedHeal], minMeleeHeal) + request[CombatRequestKeys.minDamage] = Math.max(request[CombatRequestKeys.minRangedHeal], minDamage) // If there are no enemyCreeps if ( diff --git a/src/room/commune/spawning/spawnUtils.ts b/src/room/commune/spawning/spawnUtils.ts index 0e5273afb..5dcf3bef3 100644 --- a/src/room/commune/spawning/spawnUtils.ts +++ b/src/room/commune/spawning/spawnUtils.ts @@ -18,7 +18,7 @@ export class SpawnUtils { requestID, ].join('_') - const spawnResult = spawn.spawnCreep(body, creepName, spawnRequest.extraOpts as SpawnOptions) + const spawnResult = spawn.spawnCreep(body, creepName, spawnRequest.extraOpts) return spawnResult } } diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index ebd9d5b80..f24706236 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -767,14 +767,6 @@ Room.prototype.createAttackCombatRequest = function (opts) { return } - if ( - !this.roomManager.notMyCreeps.enemy.length && - !this.find(FIND_HOSTILE_STRUCTURES).find( - structure => structure.structureType !== STRUCTURE_CONTROLLER, - ) - ) - return - if (global.settings.nonAggressionPlayers.includes(Memory.rooms[RoomMemoryKeys.owner])) return request = Memory.combatRequests[this.name] = { From 21fe6385a390505b33f36c29f3a46da27959b5cb Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sun, 24 Dec 2023 02:31:12 -0800 Subject: [PATCH 014/190] power creep enum tasks, ops transfering, periodic order optimization --- src/debug/debugUtils.ts | 8 +-- src/international/constants.ts | 7 +++ src/international/marketOrders.ts | 49 ++++++++++++++++++- src/main.ts | 1 + src/other/profilerRegister.ts | 3 +- src/room/commune/commune.ts | 2 +- src/room/commune/communeUtils.ts | 5 ++ .../commune/spawning/spawningStructures.ts | 29 ++++++----- src/room/commune/terminal/marketUtils.ts | 10 ++-- .../creeps/creepPrototypes/creepFunctions.ts | 2 +- src/room/creeps/powerCreeps/operator.ts | 42 +++++++++++++--- .../creeps/powerCreeps/powerCreepUtils.ts | 5 ++ src/room/roomUtils.ts | 5 ++ src/types.d.ts | 5 +- src/types/spawnRequest.ts | 2 + src/utils/logging.ts | 3 +- src/utils/utils.ts | 1 - 17 files changed, 141 insertions(+), 38 deletions(-) create mode 100644 src/room/commune/communeUtils.ts create mode 100644 src/room/creeps/powerCreeps/powerCreepUtils.ts create mode 100644 src/room/roomUtils.ts diff --git a/src/debug/debugUtils.ts b/src/debug/debugUtils.ts index 90c83613b..9af317777 100644 --- a/src/debug/debugUtils.ts +++ b/src/debug/debugUtils.ts @@ -1,4 +1,4 @@ -export const debugUtils = { +class DebugUtils { /** * Deeply stringifies values with some added benefits */ @@ -65,7 +65,7 @@ export const debugUtils = { } return recStringify(v, 0) - }, + } /** * I don't fully understand what this does or what it is meant to do */ @@ -117,5 +117,7 @@ export const debugUtils = { } return string } - }, + } } + +global.debugUtils = new DebugUtils() diff --git a/src/international/constants.ts b/src/international/constants.ts index 421cc1b2d..b92398d63 100644 --- a/src/international/constants.ts +++ b/src/international/constants.ts @@ -487,6 +487,13 @@ export const communeCreepRoles: Set = new Set([ 'rangedDefender', ]) +export enum PowerCreepTasks { + advancedEnablePower, + advancedGenerateOps, + advancedRenew, + transferOps, +} + export const powerCreepClassNames: PowerClassConstant[] = ['operator'] /** diff --git a/src/international/marketOrders.ts b/src/international/marketOrders.ts index 1de51d8d7..98c7e2e17 100644 --- a/src/international/marketOrders.ts +++ b/src/international/marketOrders.ts @@ -1,4 +1,4 @@ -import { findHighestScore, randomTick } from 'utils/utils' +import { findHighestScore, randomTick, utils } from 'utils/utils' import { PlayerMemoryKeys, Result, RoomMemoryKeys } from './constants' import { collectiveManager } from './collective' import { customLog } from 'utils/logging' @@ -15,6 +15,10 @@ export class MarketManager { this.resourceHistory = {} } + if (utils.isTickInterval(1000)) { + + this.optimizeMyOrders() + } this.pruneMyOrders() } @@ -32,6 +36,49 @@ export class MarketManager { } } + private optimizeMyOrders(): void { + + const myOrders = Game.market.orders + for (const ID in myOrders) { + // If the order is inactive (it likely has no remaining resources), delete it + + const order = myOrders[ID] + if (!order.active) { + + Game.market.cancelOrder(ID) + continue + } + + if (order.type === ORDER_BUY) { + + const orders = marketManager.orders[ORDER_BUY][order.resourceType] + if (!orders) continue + + const newPrice = Math.min( + Math.max(...orders.map(o => o.price)) * 1.01, + marketManager.getAvgPrice(order.resourceType) * 1.2, + ) + if (order.price === newPrice) continue + + Game.market.changeOrderPrice(ID, newPrice) + continue + } + + // The order type is sell + + const orders = marketManager.orders[ORDER_SELL][order.resourceType] + if (!orders) continue + + const newPrice = Math.min( + Math.min(...orders.map(o => o.price)) * 0.99, + marketManager.getAvgPrice(order.resourceType) * 0.8, + ) + if (order.price === newPrice) continue + + Game.market.changeOrderPrice(ID, newPrice) + } + } + /** * Finds the cheapest sell order */ diff --git a/src/main.ts b/src/main.ts index e03603e07..ed5e16668 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,6 +1,7 @@ import './settings' import './other/userScript/userScript' import './international/commands' +import './debug/debugUtils' import { collectiveManager } from './international/collective' import { roomsManager } from 'room/rooms' import './room/resourceAdditions' diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index 783a6a309..0ab7e6a8b 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -27,7 +27,6 @@ import { customFindPath } from 'international/customPathFinder' import { FlagManager } from 'international/flags' import { roomNameUtils } from 'room/roomNameUtils' import { creepUtils } from 'room/creeps/creepUtils' -import { debugUtils } from 'debug/debugUtils' import { spawnUtils } from 'room/commune/spawning/spawnUtils' import { marketUtils } from 'room/commune/terminal/marketUtils' import { CollectiveManager } from 'international/collective' @@ -129,7 +128,7 @@ export function profilerRegister() { // Objects - profiler.registerObject(debugUtils, 'debugUtils') + profiler.registerObject(global.debugUtils, 'debugUtils') profiler.registerObject(utils, 'utils') profiler.registerObject(marketUtils, 'marketUtils') diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index 1d15b59ef..3d156d52d 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -1211,7 +1211,7 @@ export class CommuneManager { resourceTargets.max[RESOURCE_POWER] = storingStructuresCapacity * 0.015 resourceTargets.min[RESOURCE_OPS] = storingStructuresCapacity * 0.01 - resourceTargets.max[RESOURCE_OPS] = storingStructuresCapacity * 0.027 + resourceTargets.max[RESOURCE_OPS] = storingStructuresCapacity * 0.02 resourceTargets.min[RESOURCE_METAL] = 0 resourceTargets.max[RESOURCE_METAL] = 0 diff --git a/src/room/commune/communeUtils.ts b/src/room/commune/communeUtils.ts new file mode 100644 index 000000000..3a5258a83 --- /dev/null +++ b/src/room/commune/communeUtils.ts @@ -0,0 +1,5 @@ +class CommuneUtils { + +} + +export const communeUtils = new CommuneUtils() diff --git a/src/room/commune/spawning/spawningStructures.ts b/src/room/commune/spawning/spawningStructures.ts index b8b406206..a449734c6 100644 --- a/src/room/commune/spawning/spawningStructures.ts +++ b/src/room/commune/spawning/spawningStructures.ts @@ -18,8 +18,7 @@ import './spawnUtils' import './spawnRequests' import { spawnUtils } from './spawnUtils' import { Dashboard, Rectangle, Table } from 'screeps-viz' -import { debugUtils } from 'debug/debugUtils' -import { SpawnRequest, SpawnRequestArgs, SpawnRequestTypes } from 'types/spawnRequest' +import { BodyPartCounts, SpawnRequest, SpawnRequestArgs, SpawnRequestTypes } from 'types/spawnRequest' import { SpawnRequestConstructor, spawnRequestConstructors } from './spawnRequestConstructors' export const spawnRequestConstructorsByType: {[key in SpawnRequestTypes]: SpawnRequestConstructor } = { @@ -141,7 +140,7 @@ export class SpawningStructuresManager { return Result.fail } - const body = this.constructBodyFromSpawnRequest(request) + const body = this.constructBodyFromSpawnRequest(request.role, request.bodyPartCounts) // Try to find inactive spawn, if can't, stop the loop @@ -185,7 +184,7 @@ export class SpawningStructuresManager { if (result !== OK) { customLog( 'Failed to spawn: spawning failed', - `error: ${result}, request: ${debugUtils.stringify(request)}`, + `error: ${result}, request: ${global.debugUtils.stringify(request)}`, { type: LogTypes.error, position: 3, @@ -224,20 +223,20 @@ export class SpawningStructuresManager { return 0 } - private constructBodyFromSpawnRequest(request: SpawnRequest) { + private constructBodyFromSpawnRequest(role: CreepRoles, bodyPartCounts: BodyPartCounts) { let body: BodyPartConstant[] = [] - if (request.role === 'hauler') { + if (role === 'hauler') { const ratio = - (request.bodyPartCounts[CARRY] + request.bodyPartCounts[WORK]) / - request.bodyPartCounts[MOVE] + (bodyPartCounts[CARRY] + bodyPartCounts[WORK]) / + bodyPartCounts[MOVE] - for (let i = -1; i < request.bodyPartCounts[CARRY] - 1; i++) { + for (let i = -1; i < bodyPartCounts[CARRY] - 1; i++) { body.push(CARRY) if (i % ratio === 0) body.push(MOVE) } - for (let i = -1; i < request.bodyPartCounts[WORK] - 1; i++) { + for (let i = -1; i < bodyPartCounts[WORK] - 1; i++) { body.push(WORK) if (i % ratio === 0) body.push(MOVE) } @@ -251,21 +250,21 @@ export class SpawningStructuresManager { const partType = partsByPriority[partIndex] const part = partsByPriorityPartType[partType] - if (!request.bodyPartCounts[part]) continue + if (!bodyPartCounts[part]) continue let skipEndPart: boolean let priorityPartsCount: number if (partType === RANGED_ATTACK) { - priorityPartsCount = request.bodyPartCounts[part] + priorityPartsCount = bodyPartCounts[part] skipEndPart = true } else if (partType === ATTACK || partType === TOUGH) { - priorityPartsCount = Math.ceil(request.bodyPartCounts[part] / 2) + priorityPartsCount = Math.ceil(bodyPartCounts[part] / 2) skipEndPart = true } else if (partType === 'secondaryTough' || partType === 'secondaryAttack') { - priorityPartsCount = Math.floor(request.bodyPartCounts[part] / 2) + priorityPartsCount = Math.floor(bodyPartCounts[part] / 2) skipEndPart = true - } else priorityPartsCount = request.bodyPartCounts[part] - 1 + } else priorityPartsCount = bodyPartCounts[part] - 1 for (let i = 0; i < priorityPartsCount; i++) { body.push(part) diff --git a/src/room/commune/terminal/marketUtils.ts b/src/room/commune/terminal/marketUtils.ts index e2db5c756..8ef4c5438 100644 --- a/src/room/commune/terminal/marketUtils.ts +++ b/src/room/commune/terminal/marketUtils.ts @@ -5,7 +5,7 @@ import { statsManager } from 'international/statsManager' import { marketManager } from 'international/marketOrders' import { Result, RoomStatsKeys } from 'international/constants' -export const marketUtils = { +class MarketUtils { advancedSell(room: Room, resourceType: ResourceConstant, amount: number) { const mySpecificOrders = marketManager.myOrders[room.name]?.[ORDER_SELL][resourceType] || [] @@ -64,7 +64,7 @@ export const marketUtils = { // Success return Result.success - }, + } advancedBuy(room: Room, resourceType: ResourceConstant, amount: number) { const mySpecificOrders = marketManager.myOrders[room.name]?.[ORDER_BUY][resourceType] || [] @@ -127,7 +127,7 @@ export const marketUtils = { // Success return Result.success - }, + } /** * Finds the largest possible transaction amount given a budget and starting amount * @param budget The number of energy willing to be invested in the trade @@ -153,7 +153,7 @@ export const marketUtils = { } return Math.floor(amount) - }, + } advancedDeal(room: Room, order: Order, amount: number) { const dealAmount = this.findLargestTransactionAmount( @@ -174,3 +174,5 @@ export const marketUtils = { return Result.success } } + +export const marketUtils = new MarketUtils() diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index eb3b141b1..cd19b9986 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -83,7 +83,7 @@ PowerCreep.prototype.isDying = function () { return this.ticksToLive < POWER_CREEP_LIFE_TIME / 5 } -Creep.prototype.advancedTransfer = function (target, resourceType = RESOURCE_ENERGY, amount) { +PowerCreep.prototype.advancedTransfer = Creep.prototype.advancedTransfer = function (target, resourceType = RESOURCE_ENERGY, amount) { // If creep isn't in transfer range if (this.pos.getRangeTo(target.pos) > 1) { diff --git a/src/room/creeps/powerCreeps/operator.ts b/src/room/creeps/powerCreeps/operator.ts index 35ec1ae61..81ae2419b 100644 --- a/src/room/creeps/powerCreeps/operator.ts +++ b/src/room/creeps/powerCreeps/operator.ts @@ -1,4 +1,4 @@ -import { Result, customColors, PowerCreepMemoryKeys } from 'international/constants' +import { Result, customColors, PowerCreepMemoryKeys, PowerCreepTasks } from 'international/constants' import { PowerTask } from 'types/roomRequests' import { customLog } from 'utils/logging' import { findObjectWithID, getRange } from 'utils/utils' @@ -46,6 +46,7 @@ export class Operator extends PowerCreep { if (this.findRenewTask()) return true if (this.findEnablePowerTask()) return true if (this.findGenerateOpsTask()) return true + if (this.findTransferOpsTask()) return true return false } @@ -54,11 +55,11 @@ export class Operator extends PowerCreep { if (!this.room.roomManager.powerSpawn) return false - this.memory[PowerCreepMemoryKeys.task] = 'advancedRenew' + this.memory[PowerCreepMemoryKeys.task] = PowerCreepTasks.advancedRenew return true } - advancedRenew?() { + [PowerCreepTasks.advancedRenew]?() { const powerSpawn = this.room.roomManager.powerSpawn if (!powerSpawn) return Result.fail @@ -88,11 +89,11 @@ export class Operator extends PowerCreep { if (controller.isPowerEnabled) return false - this.memory[PowerCreepMemoryKeys.task] = 'advancedEnablePower' + this.memory[PowerCreepMemoryKeys.task] = PowerCreepTasks.advancedEnablePower return true } - advancedEnablePower?() { + [PowerCreepTasks.advancedEnablePower]?() { const { controller } = this.room if (!controller || controller.isPowerEnabled) return Result.noAction @@ -124,11 +125,11 @@ export class Operator extends PowerCreep { if (power.cooldown) return false - this.memory[PowerCreepMemoryKeys.task] = 'advancedGenerateOps' + this.memory[PowerCreepMemoryKeys.task] = PowerCreepTasks.advancedGenerateOps return true } - advancedGenerateOps?() { + [PowerCreepTasks.advancedGenerateOps]?() { this.message = 'AGO' if (this.powered) return false @@ -138,6 +139,33 @@ export class Operator extends PowerCreep { return true } + findTransferOpsTask?() { + + const storedOps = this.store.getUsedCapacity(RESOURCE_OPS) + if (storedOps <= this.store.getCapacity() * 0.8) return false + + // We are sufficiently full of ops + + const storingStructure = this.room.communeManager.storingStructures[0] + if (!storingStructure) return false + + this.memory[PowerCreepMemoryKeys.task] = PowerCreepTasks.transferOps + return true + } + + [PowerCreepTasks.transferOps]?() { + + // We are sufficiently full of ops + + const storingStructure = this.room.communeManager.storingStructures[0] + if (!storingStructure) return false + + const transferAmount = this.store.getUsedCapacity(RESOURCE_OPS) * 0.5 + + this.advancedTransfer(storingStructure, RESOURCE_OPS, transferAmount) + return true + } + // Complex power tasks findPowerTask?() { diff --git a/src/room/creeps/powerCreeps/powerCreepUtils.ts b/src/room/creeps/powerCreeps/powerCreepUtils.ts new file mode 100644 index 000000000..53287ff37 --- /dev/null +++ b/src/room/creeps/powerCreeps/powerCreepUtils.ts @@ -0,0 +1,5 @@ +export class PowerCreepUtils { + +} + +export const powerCreepUtils = new PowerCreepUtils() diff --git a/src/room/roomUtils.ts b/src/room/roomUtils.ts new file mode 100644 index 000000000..484b4d470 --- /dev/null +++ b/src/room/roomUtils.ts @@ -0,0 +1,5 @@ +class RoomUtils { + +} + +export const roomUtils = new RoomUtils() diff --git a/src/types.d.ts b/src/types.d.ts index e9ddef88c..570d323a1 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -21,6 +21,7 @@ import { ReservedCoordTypes, WorkTypes, creepRoles, + PowerCreepTasks, } from 'international/constants' import { Operator } from 'room/creeps/powerCreeps/operator' import { MeleeDefender } from 'room/creeps/roleManagers/commune/defenders/meleeDefender' @@ -1416,7 +1417,7 @@ declare global { interface PowerCreepMemory extends CreepMemory { [PowerCreepMemoryKeys.commune]: string - [PowerCreepMemoryKeys.task]: keyof Operator + [PowerCreepMemoryKeys.task]: PowerCreepTasks [PowerCreepMemoryKeys.taskTarget]: Id [PowerCreepMemoryKeys.taskPower]: PowerConstant [PowerCreepMemoryKeys.taskRoom]: string @@ -1468,6 +1469,8 @@ declare global { lastReset: number + debugUtils: DebugUtils + // Command functions /** diff --git a/src/types/spawnRequest.ts b/src/types/spawnRequest.ts index 7af4b6ff7..5639d5821 100644 --- a/src/types/spawnRequest.ts +++ b/src/types/spawnRequest.ts @@ -64,6 +64,8 @@ export interface SpawnRequestSkeleton { bodyPartCounts: { [key in PartsByPriority]: number } } +export type BodyPartCounts = { [key in PartsByPriority]: number } + export interface SpawnRequest { role: CreepRoles priority: number diff --git a/src/utils/logging.ts b/src/utils/logging.ts index a60640736..97b0df69e 100644 --- a/src/utils/logging.ts +++ b/src/utils/logging.ts @@ -1,4 +1,3 @@ -import { debugUtils } from 'debug/debugUtils' import { collectiveManager } from 'international/collective' const customColors = { white: '#ffffff', @@ -85,5 +84,5 @@ export function customLog(title: any, message?: any, opts?: LogOpts) { } export function stringifyLog(title: any, message: any, opts?: LogOpts) { - return customLog(title, debugUtils.stringify(message), opts) + return customLog(title, global.debugUtils.stringify(message), opts) } diff --git a/src/utils/utils.ts b/src/utils/utils.ts index bbd6ffb33..9560fe848 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -17,7 +17,6 @@ import { Result, } from '../international/constants' import { collectiveManager } from '../international/collective' -import { debugUtils } from 'debug/debugUtils' import { LogTypes, customLog } from './logging' import { PlayerRelationships } from 'types/players' From e61160d129df620f5ee6b5a15a6859000ba1a9bf Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sun, 24 Dec 2023 22:59:51 -0800 Subject: [PATCH 015/190] remove codec caching --- src/debug/debugUtils.ts | 58 +++++++++ src/international/constants.ts | 1 + src/other/codec.ts | 137 ++++++--------------- src/room/commune/communeUtils.ts | 6 +- src/room/commune/labs.ts | 2 +- src/room/commune/spawning/spawnRequests.ts | 5 - src/types.d.ts | 3 + 7 files changed, 106 insertions(+), 106 deletions(-) diff --git a/src/debug/debugUtils.ts b/src/debug/debugUtils.ts index 9af317777..09091cc85 100644 --- a/src/debug/debugUtils.ts +++ b/src/debug/debugUtils.ts @@ -121,3 +121,61 @@ class DebugUtils { } global.debugUtils = new DebugUtils() + +global.stringify = function stringify(v: any, maxDepth = 3) { + let alreadyReferencedObjects: any[] = []; + const recStringify = (value: any, depth: number): string => { + switch (typeof value) { + case 'undefined': + return 'undefined'; + case 'boolean': + case 'number': + return value.toString(); + case 'string': + return '"' + value.toString() + '"'; + case 'function': + return 'function'; + case 'object': + if (value === null) + return "null"; + else if (value instanceof RoomPosition) { + return value.x+','+value.y+','+value.roomName; + } + else if (alreadyReferencedObjects.includes(value)) + return "*"; + else { + alreadyReferencedObjects.push(value); + if (value instanceof Array) { + if (value.length === 0) + return "[]"; + else if (depth > maxDepth) + return "[ ... ]"; + else { + let leftPad = new Array(depth).fill(" ").join(""); + let itemLeftPad = new Array(depth + 1).fill(" ").join(""); + return "[
" + + value.map(item => itemLeftPad + recStringify(item, depth + 1)).join(',
') + "
" + + leftPad + "]"; + } + } + else { + let props = Object.getOwnPropertyNames(value); + if (props.length === 0) + return "{}"; + else if (depth > maxDepth) + return "{ ... }"; + else { + let leftPad = new Array(depth).fill(" ").join(""); + let itemLeftPad = new Array(depth + 1).fill(" ").join(""); + return "{
" + + props.map(name => itemLeftPad + name + ': ' + recStringify(value[name], depth + 1)).join(',
') + "
" + + leftPad + "}"; + } + } + } + default: + return ''; + } + }; + return recStringify(v, 0); + } diff --git a/src/international/constants.ts b/src/international/constants.ts index b92398d63..527aa8753 100644 --- a/src/international/constants.ts +++ b/src/international/constants.ts @@ -174,6 +174,7 @@ export enum CreepMemoryKeys { sleepTime, targetID, previousRelayer, + stationary, } export enum PowerCreepMemoryKeys { diff --git a/src/other/codec.ts b/src/other/codec.ts index 31e69fd63..c5a6ea4cc 100644 --- a/src/other/codec.ts +++ b/src/other/codec.ts @@ -7,40 +7,22 @@ import { } from 'international/constants' import { encode, decode } from 'base32768' -export const packCache: StringMap = {} -export const unpackCache: StringMap = {} - -function getPackCacheKey(key: string) { - return packCache[key] -} -function setPackCacheKey(key: string, value: any): void { - packCache[key] = value -} - -function getUnpackCacheKey(key: string): any { - return unpackCache[key] -} -function setUnpackCacheKey(key: string, value: any): void { - unpackCache[key] = value -} - /** * Convert a standard 24-character hex id in screeps to a compressed UTF-16 encoded string of length 6. * * Benchmarking: average of 500ns to execute on shard2 public server, reduce stringified size by 75% */ export function packId(id: string) { - let packedId = getPackCacheKey(id) - if (packedId) return packedId - packedId = + + const packedID = String.fromCharCode(parseInt(id.substr(0, 4), 16)) + String.fromCharCode(parseInt(id.substr(4, 4), 16)) + String.fromCharCode(parseInt(id.substr(8, 4), 16)) + String.fromCharCode(parseInt(id.substr(12, 4), 16)) + String.fromCharCode(parseInt(id.substr(16, 4), 16)) + String.fromCharCode(parseInt(id.substr(20, 4), 16)) - setPackCacheKey(id, packedId) - return packedId + + return packedID } /** @@ -49,16 +31,15 @@ export function packId(id: string) { * Benchmarking: average of 1.3us to execute on shard2 public server */ export function unpackId(packedId: string) { - let id = getUnpackCacheKey(packedId) - if (id) return id - id = '' + + let id = '' let current: number for (let i = 0; i < 6; ++i) { current = packedId.charCodeAt(i) id += (current >>> 8).toString(16).padStart(2, '0') // String.padStart() requires es2017+ target id += (current & 0xff).toString(16).padStart(2, '0') } - setUnpackCacheKey(packedId, id) + return id } @@ -93,11 +74,8 @@ export function unpackIdList(packedIds: string) { * Packs a coord as two UInt8 characters. */ export function packCoord(coord: Coord) { - const key = coord.x + ',' + coord.y - let packedCoord = getPackCacheKey(key) - if (packedCoord) return packedCoord - packedCoord = encode(new Uint8Array([coord.x, coord.y])) - setPackCacheKey(key, packedCoord) + + const packedCoord = encode(new Uint8Array([coord.x, coord.y])) return packedCoord } @@ -105,11 +83,7 @@ export function packCoord(coord: Coord) { * Packs a coord as two Base32768 characters */ export function packXYAsCoord(x: number, y: number) { - const key = x + ',' + y - let packedCoord = getPackCacheKey(key) - if (packedCoord) return packedCoord - packedCoord = encode(new Uint8Array([x, y])) - setPackCacheKey(key, packedCoord) + const packedCoord = encode(new Uint8Array([x, y])) return packedCoord } @@ -119,12 +93,11 @@ export function packXYAsCoord(x: number, y: number) { * Benchmarking: average of 60ns-100ns to execute on shard2 public server */ export function unpackCoord(char: string) { - let coord = getUnpackCacheKey(char) - if (coord) return coord + const decoded = decode(char) - coord = { x: decoded[0], y: decoded[1] } - setUnpackCacheKey(char, coord) - return { x: decoded[0], y: decoded[1] } + const coord = { x: decoded[0], y: decoded[1] } + + return coord } /** @@ -241,11 +214,8 @@ export function unpackRoomName(q: number, x: number, y: number) { */ export function packPos(pos: RoomPosition) { const map = packRoomName(pos.roomName) - const key = map.quadrant + ',' + map.x + ',' + map.y + ',' + pos.x + ',' + pos.y - let packedPos = getPackCacheKey(key) - if (packedPos) return packedPos - packedPos = encode(new Uint8Array([map.quadrant, map.x, map.y, pos.x, pos.y])) - setPackCacheKey(key, packedPos) + const packedPos = encode(new Uint8Array([map.quadrant, map.x, map.y, pos.x, pos.y])) + return packedPos } @@ -254,11 +224,8 @@ export function packPos(pos: RoomPosition) { */ export function packXYAsPos(x: number, y: number, roomName: string) { const map = packRoomName(roomName) - const key = map.quadrant + ',' + map.x + ',' + map.y + ',' + x + ',' + y - let packedPos = getPackCacheKey(key) - if (packedPos) return packedPos - packedPos = encode(new Uint8Array([map.quadrant, map.x, map.y, x, y])) - setPackCacheKey(key, packedPos) + const packedPos = encode(new Uint8Array([map.quadrant, map.x, map.y, x, y])) + return packedPos } @@ -266,16 +233,15 @@ export function packXYAsPos(x: number, y: number, roomName: string) { * Unpacks a RoomPosition stored as a pair of Base32768 characters. */ export function unpackPos(chars: string) { - let pos = getUnpackCacheKey(chars) - if (pos) return new RoomPosition(pos.x, pos.y, pos.roomName) + const decoded = decode(chars) - pos = { + const coord = { x: decoded[3], y: decoded[4], roomName: unpackRoomName(decoded[0], decoded[1], decoded[2]), } - setUnpackCacheKey(chars, pos) - return new RoomPosition(pos.x, pos.y, pos.roomName) + + return new RoomPosition(coord.x, coord.y, coord.roomName) } /** @@ -319,21 +285,16 @@ export function packBasePlanCoord(planCoords: BasePlanCoord[]) { for (let i = 0; i < planCoords.length; i++) { const planCoord = planCoords[i] - const key = - 'b' + buildableStructureTypes.indexOf(planCoord.structureType) + ',' + planCoord.minRCL - let packedCoord = getPackCacheKey(key) - if (packedCoord) { - packedCoords += packedCoord - } else { - const encoded = encode( - new Uint8Array([ - buildableStructureTypes.indexOf(planCoord.structureType), - planCoord.minRCL, - ]), - ) - setPackCacheKey(key, encoded) - packedCoords += encoded - } + + const encoded = encode( + new Uint8Array([ + buildableStructureTypes.indexOf(planCoord.structureType), + planCoord.minRCL, + ]), + ) + + packedCoords += encoded + } packedCoords += '_' return packedCoords @@ -349,20 +310,12 @@ export function unpackBasePlanCoords(packedPlanCoords: string) { const packedPlanCoord = packedPlanCoords.slice(i, i + 2) if (!packedPlanCoord.length) continue - const key = 'b' + packedPlanCoord - let planCoord = getUnpackCacheKey(key) - if (planCoord) { - planCoords.push(planCoord) - continue - } - const data = decode(packedPlanCoord) - planCoord = { + + planCoords.push({ structureType: buildableStructureTypes[data[0]], minRCL: data[1], - } - setUnpackCacheKey(key, planCoord) - planCoords.push(planCoord) + }) } return planCoords } @@ -371,11 +324,8 @@ export function unpackBasePlanCoords(packedPlanCoords: string) { * Pack a planned cord for base building */ export function packRampartPlanCoord(planCoord: RampartPlanCoord) { - const key = Object.values(planCoord).join() - let packedCoord = getPackCacheKey(key) - if (packedCoord) return packedCoord - packedCoord = encode(new Uint8Array(Object.values(planCoord))) - setPackCacheKey(key, packedCoord) + + const packedCoord = encode(new Uint8Array(Object.values(planCoord))) return packedCoord } @@ -383,20 +333,9 @@ export function packRampartPlanCoord(planCoord: RampartPlanCoord) { * Unpack a planned cord for base building */ export function unpackRampartPlanCoord(chars: string): RampartPlanCoord { - let coord = getUnpackCacheKey(chars) - if (coord) { - const coordArray = coord.split(',') - return { - minRCL: Number(coordArray[0]), - coversStructure: Number(coordArray[1]), - buildForNuke: Number(coordArray[2]), - buildForThreat: Number(coordArray[3]), - needsStoringStructure: Number(coordArray[4]), - } - } const decoded = decode(chars) - coord = { + const coord = { minRCL: decoded[0], coversStructure: decoded[1], buildForNuke: decoded[2], diff --git a/src/room/commune/communeUtils.ts b/src/room/commune/communeUtils.ts index 3a5258a83..47063b124 100644 --- a/src/room/commune/communeUtils.ts +++ b/src/room/commune/communeUtils.ts @@ -1,5 +1,9 @@ class CommuneUtils { - + getUpgradeCapacity(room: Room) { + + const upgradeStructure = room.communeManager.upgradeStructure + + } } export const communeUtils = new CommuneUtils() diff --git a/src/room/commune/labs.ts b/src/room/commune/labs.ts index 145a21487..506b51322 100644 --- a/src/room/commune/labs.ts +++ b/src/room/commune/labs.ts @@ -65,7 +65,7 @@ const boostsInOrder: MineralBoostConstant[] = [ RESOURCE_ZYNTHIUM_ALKALIDE, RESOURCE_ZYNTHIUM_OXIDE, - // damage taken + // defence RESOURCE_CATALYZED_GHODIUM_ALKALIDE, RESOURCE_GHODIUM_ALKALIDE, diff --git a/src/room/commune/spawning/spawnRequests.ts b/src/room/commune/spawning/spawnRequests.ts index a91aad611..bd72cd49d 100644 --- a/src/room/commune/spawning/spawnRequests.ts +++ b/src/room/commune/spawning/spawnRequests.ts @@ -28,11 +28,6 @@ import { SpawnRequest, SpawnRequestArgs, SpawnRequestTypes } from 'types/spawnRe import { spawnUtils } from './spawnUtils' import { SpawnRequestConstructor, spawnRequestConstructors } from './spawnRequestConstructors' -interface SpawningHaulerCosts { - maxCost: number - minCost: number -} - export class SpawnRequestsManager { communeManager: CommuneManager diff --git a/src/types.d.ts b/src/types.d.ts index 570d323a1..8a769e48a 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -1413,6 +1413,7 @@ declare global { [CreepMemoryKeys.targetID]: Id // The name of the trader and tick for the previos relay action [CreepMemoryKeys.previousRelayer]: [string, number] + [CreepMemoryKeys.stationary]: boolean } interface PowerCreepMemory extends CreepMemory { @@ -1473,6 +1474,8 @@ declare global { // Command functions + stringify(v: any, maxDepth: number): void + /** * Deletes all properties of global */ From 5c199a517f9242711e5480120b600e9963130024 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sun, 24 Dec 2023 23:01:26 -0800 Subject: [PATCH 016/190] remove codec cache deletion --- src/international/constants.ts | 2 -- src/international/garbageCollector.ts | 15 +-------------- src/other/codec.ts | 1 - 3 files changed, 1 insertion(+), 17 deletions(-) diff --git a/src/international/constants.ts b/src/international/constants.ts index 527aa8753..3c1b4464c 100644 --- a/src/international/constants.ts +++ b/src/international/constants.ts @@ -1407,8 +1407,6 @@ export enum WorkTypes { attackController, } -export const codecCacheLength = 99999 - export enum SegmentIDs { General = 0, BasePlans = 1, diff --git a/src/international/garbageCollector.ts b/src/international/garbageCollector.ts index 0a3b87b1c..be4f5cc1f 100644 --- a/src/international/garbageCollector.ts +++ b/src/international/garbageCollector.ts @@ -1,6 +1,5 @@ import { Sleepable } from 'utils/sleepable' -import { RoomMemoryKeys, codecCacheLength } from './constants' -import { packCache, unpackCache } from 'other/codec' +import { RoomMemoryKeys } from './constants' /** * Intended to clean Memory, global, segments from stale data @@ -14,7 +13,6 @@ export class GarbageCollector extends Sleepable { this.cleanRooms() this.cleanPlayers() - this.cleanCodecCachePartial() } cleanRooms() { for (const roomName in Memory.rooms) { @@ -25,17 +23,6 @@ export class GarbageCollector extends Sleepable { } } cleanPlayers() {} - cleanCodecCachePartial() { - const packCacheKeys = Object.keys(packCache) - if (packCacheKeys.length > codecCacheLength) { - delete packCache[packCacheKeys[0]] - } - - const unpackCacheKeys = Object.keys(unpackCache) - if (unpackCacheKeys.length > codecCacheLength) { - delete unpackCache[unpackCacheKeys[0]] - } - } } export const garbageCollector = new GarbageCollector() diff --git a/src/other/codec.ts b/src/other/codec.ts index c5a6ea4cc..aaaa30dd9 100644 --- a/src/other/codec.ts +++ b/src/other/codec.ts @@ -3,7 +3,6 @@ import { buildableStructureTypes, packedPosLength, stampKeys, - // codecCacheLength, } from 'international/constants' import { encode, decode } from 'base32768' From 2efdbd292c74d2d57cd84b7d4d0d9b1a44c32a1a Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sun, 24 Dec 2023 23:14:13 -0800 Subject: [PATCH 017/190] higher pricing standards for order optimization --- src/international/marketOrders.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/international/marketOrders.ts b/src/international/marketOrders.ts index 98c7e2e17..4087e1115 100644 --- a/src/international/marketOrders.ts +++ b/src/international/marketOrders.ts @@ -55,7 +55,6 @@ export class MarketManager { if (!orders) continue const newPrice = Math.min( - Math.max(...orders.map(o => o.price)) * 1.01, marketManager.getAvgPrice(order.resourceType) * 1.2, ) if (order.price === newPrice) continue @@ -70,7 +69,6 @@ export class MarketManager { if (!orders) continue const newPrice = Math.min( - Math.min(...orders.map(o => o.price)) * 0.99, marketManager.getAvgPrice(order.resourceType) * 0.8, ) if (order.price === newPrice) continue From 19a00ba2abcda2feb612fde88399949d32bb5969 Mon Sep 17 00:00:00 2001 From: Pieter Date: Mon, 25 Dec 2023 11:42:32 +0100 Subject: [PATCH 018/190] Updated screeps performance server --- package-lock.json | 72380 ++++++++++++++++++++++---------------------- package.json | 2 +- 2 files changed, 36191 insertions(+), 36191 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5143f5953..5d01b8a2c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,36714 +1,36714 @@ { - "name": "the-international-screeps-bot", - "version": "2.117.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "the-international-screeps-bot", - "version": "2.117.0", - "license": "GNU GPLv3", - "dependencies": { - "base32768": "^3.0.1", - "mermaid": "^10.3.0", - "semantic-release": "^21.0.7", - "source-map": "~0.6.1" - }, - "devDependencies": { - "@compodoc/compodoc": "^1.1.19", - "@rollup/plugin-commonjs": "^20.0.0", - "@rollup/plugin-node-resolve": "^13.0.4", - "@semantic-release/changelog": "^6.0.3", - "@semantic-release/commit-analyzer": "^9.0.2", - "@semantic-release/git": "^10.0.1", - "@semantic-release/release-notes-generator": "^11.0.1", - "@types/chai": "^4.3.0", - "@types/jest": "^27.0.1", - "@types/lodash": "3.10.2", - "@types/node": "^13.13.1", - "@types/screeps": "^3.3.3", - "@types/sinon": "^5.0.5", - "@types/sinon-chai": "^3.2.0", - "@typescript-eslint/eslint-plugin": "^4.20.0", - "@typescript-eslint/parser": "^4.20.0", - "chai": "^4.2.0", - "dotenv": "^16.0.2", - "eslint": "^7.23.0", - "eslint-config-prettier": "^7.2.0", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-jest": "^24.1.3", - "eslint-plugin-jsdoc": "^31.6.1", - "eslint-plugin-prettier": "^3.3.1", - "eslint-plugin-screeps": "^2.1.0", - "fastestsmallesttextencoderdecoder-encodeinto": "^1.0.22", - "javascript-obfuscator": "^4.0.2", - "jest": "^27.1.0", - "lodash": "^3.10.1", - "prettier": "^2.3.2", - "rollup": "^2.79.1", - "rollup-plugin-clear": "^2.0.7", - "rollup-plugin-copy": "^3.4.0", - "rollup-plugin-screeps-world": "^1.0.4", - "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-typescript2": "^0.36.0", - "screeps-grafana-go_carbon": "^1.0.5", - "screeps-jest": "^2.0.2", - "screeps-performance-server": "^1.12.1", - "screeps-viz": "^2.1.3", - "sinon": "^6.3.5", - "sinon-chai": "^3.2.0", - "ts-jest": "^27.0.5", - "ts-node": "^10.2.0", - "tsconfig-paths": "^3.10.1", - "typescript": "4.4", - "yaml": "^1.10.2" - } - }, - "node_modules/@aduh95/viz.js": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@aduh95/viz.js/-/viz.js-3.4.0.tgz", - "integrity": "sha512-KI2nVf9JdwWCXqK6RVf+9/096G7VWN4Z84mnynlyZKao2xQENW8WNEjLmvdlxS5X8PNWXFC1zqwm7tveOXw/4A==", - "dev": true - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@angular-devkit/core": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.6.tgz", - "integrity": "sha512-3OjtrPWvsqVkMBwqPeE65ccCIw56FooNpVVAJ0XwhVQv5mA81pmbCzU7JsR6U449ZT7O4cQblzZMQvWvx74HCg==", - "dev": true, - "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/core/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@angular-devkit/core/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/@angular-devkit/core/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@angular-devkit/schematics": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.6.tgz", - "integrity": "sha512-KA8P78gaS76HMHGBOM8JHJXWLOxCIShYVB2Un/Cu6z3jVODvXq+ILZUc1Y0RsAce/vsl2wf8qpoh5Lku9KJHUQ==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "16.1.6", - "jsonc-parser": "3.2.0", - "magic-string": "0.30.0", - "ora": "5.4.1", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/schematics/node_modules/magic-string": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", - "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.13" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", - "dependencies": { - "@babel/highlight": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", - "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.8", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/core/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", - "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", - "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", - "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz", - "integrity": "sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", - "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", - "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", - "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", - "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.9.tgz", - "integrity": "sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", - "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", - "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.17.12", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz", - "integrity": "sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", - "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", - "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", - "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", - "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", - "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", - "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", - "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", - "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", - "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", - "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", - "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", - "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", - "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", - "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz", - "integrity": "sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", - "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", - "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", - "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.9.tgz", - "integrity": "sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.7", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.5", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.6", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.5", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.6", - "@babel/plugin-transform-parameters": "^7.22.5", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.5", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.5", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.4", - "babel-plugin-polyfill-corejs3": "^0.8.2", - "babel-plugin-polyfill-regenerator": "^0.5.1", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", - "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "node_modules/@babel/runtime": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", - "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.22.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", - "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.7", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/traverse/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@braintree/sanitize-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz", - "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==" - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@compodoc/compodoc": { - "version": "1.1.21", - "resolved": "https://registry.npmjs.org/@compodoc/compodoc/-/compodoc-1.1.21.tgz", - "integrity": "sha512-/FDlwRgKzmkGuorDnURuCzoGY6rZ0KY7Mj5/PwnEjMs0y1CRRPHBJC9I0yVIjn8j8gxVy8PPc6dna0lY1MWwhg==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@angular-devkit/schematics": "^16.0.1", - "@babel/core": "^7.21.8", - "@babel/preset-env": "^7.21.5", - "@compodoc/live-server": "^1.2.3", - "@compodoc/ngd-transformer": "^2.1.3", - "chalk": "4.1.2", - "cheerio": "^1.0.0-rc.12", - "chokidar": "^3.5.3", - "colors": "1.4.0", - "commander": "^10.0.1", - "cosmiconfig": "^8.1.3", - "decache": "^4.6.1", - "fancy-log": "^2.0.0", - "fast-glob": "^3.2.12", - "fs-extra": "^11.1.1", - "glob": "^10.2.4", - "handlebars": "^4.7.7", - "html-entities": "^2.3.3", - "i18next": "^22.4.15", - "inside": "^1.0.0", - "json5": "^2.2.3", - "lodash": "^4.17.21", - "loglevel": "^1.8.1", - "loglevel-plugin-prefix": "^0.8.4", - "lunr": "^2.3.9", - "marked": "4.3.0", - "minimist": "^1.2.8", - "opencollective-postinstall": "^2.0.3", - "os-name": "4.0.1", - "pdfjs-dist": "2.12.313", - "pdfmake": "^0.2.7", - "semver": "^7.5.1", - "traverse": "^0.6.7", - "ts-morph": "^18.0.0", - "uuid": "^9.0.0" - }, - "bin": { - "compodoc": "bin/index-cli.js" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@compodoc/compodoc/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@compodoc/compodoc/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@compodoc/compodoc/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@compodoc/compodoc/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@compodoc/compodoc/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@compodoc/compodoc/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@compodoc/compodoc/node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@compodoc/compodoc/node_modules/glob": { - "version": "10.3.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", - "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@compodoc/compodoc/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@compodoc/compodoc/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@compodoc/compodoc/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/@compodoc/compodoc/node_modules/marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", - "dev": true, - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@compodoc/compodoc/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, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@compodoc/compodoc/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, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@compodoc/compodoc/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@compodoc/compodoc/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@compodoc/live-server": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@compodoc/live-server/-/live-server-1.2.3.tgz", - "integrity": "sha512-hDmntVCyjjaxuJzPzBx68orNZ7TW4BtHWMnXlIVn5dqhK7vuFF/11hspO1cMmc+2QTYgqde1TBcb3127S7Zrow==", - "dev": true, - "dependencies": { - "chokidar": "^3.5.2", - "colors": "1.4.0", - "connect": "^3.7.0", - "cors": "latest", - "event-stream": "4.0.1", - "faye-websocket": "0.11.x", - "http-auth": "4.1.9", - "http-auth-connect": "^1.0.5", - "morgan": "^1.10.0", - "object-assign": "latest", - "open": "8.4.0", - "proxy-middleware": "latest", - "send": "latest", - "serve-index": "^1.9.1" - }, - "bin": { - "live-server": "live-server.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@compodoc/ngd-core": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@compodoc/ngd-core/-/ngd-core-2.1.1.tgz", - "integrity": "sha512-Z+wE6wWZYVnudRYg6qunDlyh3Orw39Ib66Gvrz5kX5u7So+iu3tr6sQJdqH6yGS3hAjig5avlfhWLlgsb6/x1Q==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.3", - "fancy-log": "^2.0.0", - "typescript": "^5.0.4" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@compodoc/ngd-core/node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/@compodoc/ngd-transformer": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@compodoc/ngd-transformer/-/ngd-transformer-2.1.3.tgz", - "integrity": "sha512-oWxJza7CpWR8/FeWYfE6j+jgncnGBsTWnZLt5rD2GUpsGSQTuGrsFPnmbbaVLgRS5QIVWBJYke7QFBr/7qVMWg==", - "dev": true, - "dependencies": { - "@aduh95/viz.js": "3.4.0", - "@compodoc/ngd-core": "~2.1.1", - "dot": "^2.0.0-beta.1", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@compodoc/ngd-transformer/node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@compodoc/ngd-transformer/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@compodoc/ngd-transformer/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@dabh/diagnostics": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, - "node_modules/@discordjs/builders": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.5.tgz", - "integrity": "sha512-SdweyCs/+mHj+PNhGLLle7RrRFX9ZAhzynHahMCLqp5Zeq7np7XC6/mgzHc79QoVlQ1zZtOkTTiJpOZu5V8Ufg==", - "dev": true, - "dependencies": { - "@discordjs/formatters": "^0.3.2", - "@discordjs/util": "^1.0.1", - "@sapphire/shapeshift": "^3.9.2", - "discord-api-types": "0.37.50", - "fast-deep-equal": "^3.1.3", - "ts-mixer": "^6.0.3", - "tslib": "^2.6.1" - }, - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/@discordjs/builders/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/@discordjs/collection": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", - "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", - "dev": true, - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/@discordjs/formatters": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.2.tgz", - "integrity": "sha512-lE++JZK8LSSDRM5nLjhuvWhGuKiXqu+JZ/DsOR89DVVia3z9fdCJVcHF2W/1Zxgq0re7kCzmAJlCMMX3tetKpA==", - "dev": true, - "dependencies": { - "discord-api-types": "0.37.50" - }, - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/@discordjs/rest": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.0.1.tgz", - "integrity": "sha512-/eWAdDRvwX/rIE2tuQUmKaxmWeHmGealttIzGzlYfI4+a7y9b6ZoMp8BG/jaohs8D8iEnCNYaZiOFLVFLQb8Zg==", - "dev": true, - "dependencies": { - "@discordjs/collection": "^1.5.3", - "@discordjs/util": "^1.0.1", - "@sapphire/async-queue": "^1.5.0", - "@sapphire/snowflake": "^3.5.1", - "@vladfrangu/async_event_emitter": "^2.2.2", - "discord-api-types": "0.37.50", - "magic-bytes.js": "^1.0.15", - "tslib": "^2.6.1", - "undici": "5.22.1" - }, - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/@discordjs/rest/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/@discordjs/util": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.0.1.tgz", - "integrity": "sha512-d0N2yCxB8r4bn00/hvFZwM7goDcUhtViC5un4hPj73Ba4yrChLSJD8fy7Ps5jpTLg1fE9n4K0xBLc1y9WGwSsA==", - "dev": true, - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/@discordjs/ws": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.0.1.tgz", - "integrity": "sha512-avvAolBqN3yrSvdBPcJ/0j2g42ABzrv3PEL76e3YTp2WYMGH7cuspkjfSyNWaqYl1J+669dlLp+YFMxSVQyS5g==", - "dev": true, - "dependencies": { - "@discordjs/collection": "^1.5.3", - "@discordjs/rest": "^2.0.1", - "@discordjs/util": "^1.0.1", - "@sapphire/async-queue": "^1.5.0", - "@types/ws": "^8.5.5", - "@vladfrangu/async_event_emitter": "^2.2.2", - "discord-api-types": "0.37.50", - "tslib": "^2.6.1", - "ws": "^8.13.0" - }, - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/@discordjs/ws/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/@discordjs/ws/node_modules/ws": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", - "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true + "name": "the-international-screeps-bot", + "version": "2.118.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "the-international-screeps-bot", + "version": "2.118.0", + "license": "GNU GPLv3", + "dependencies": { + "base32768": "^3.0.1", + "mermaid": "^10.3.0", + "semantic-release": "^21.0.7", + "source-map": "~0.6.1" + }, + "devDependencies": { + "@compodoc/compodoc": "^1.1.19", + "@rollup/plugin-commonjs": "^20.0.0", + "@rollup/plugin-node-resolve": "^13.0.4", + "@semantic-release/changelog": "^6.0.3", + "@semantic-release/commit-analyzer": "^9.0.2", + "@semantic-release/git": "^10.0.1", + "@semantic-release/release-notes-generator": "^11.0.1", + "@types/chai": "^4.3.0", + "@types/jest": "^27.0.1", + "@types/lodash": "3.10.2", + "@types/node": "^13.13.1", + "@types/screeps": "^3.3.3", + "@types/sinon": "^5.0.5", + "@types/sinon-chai": "^3.2.0", + "@typescript-eslint/eslint-plugin": "^4.20.0", + "@typescript-eslint/parser": "^4.20.0", + "chai": "^4.2.0", + "dotenv": "^16.0.2", + "eslint": "^7.23.0", + "eslint-config-prettier": "^7.2.0", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-jest": "^24.1.3", + "eslint-plugin-jsdoc": "^31.6.1", + "eslint-plugin-prettier": "^3.3.1", + "eslint-plugin-screeps": "^2.1.0", + "fastestsmallesttextencoderdecoder-encodeinto": "^1.0.22", + "javascript-obfuscator": "^4.0.2", + "jest": "^27.1.0", + "lodash": "^3.10.1", + "prettier": "^2.3.2", + "rollup": "^2.79.1", + "rollup-plugin-clear": "^2.0.7", + "rollup-plugin-copy": "^3.4.0", + "rollup-plugin-screeps-world": "^1.0.4", + "rollup-plugin-terser": "^7.0.2", + "rollup-plugin-typescript2": "^0.36.0", + "screeps-grafana-go_carbon": "^1.0.5", + "screeps-jest": "^2.0.2", + "screeps-performance-server": "^1.12.2", + "screeps-viz": "^2.1.3", + "sinon": "^6.3.5", + "sinon-chai": "^3.2.0", + "ts-jest": "^27.0.5", + "ts-node": "^10.2.0", + "tsconfig-paths": "^3.10.1", + "typescript": "4.4", + "yaml": "^1.10.2" + } }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/acorn": { - "version": "7.4.1", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@eslint/eslintrc/node_modules/espree": { - "version": "7.3.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.15.0", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@foliojs-fork/fontkit": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@foliojs-fork/fontkit/-/fontkit-1.9.1.tgz", - "integrity": "sha512-U589voc2/ROnvx1CyH9aNzOQWJp127JGU1QAylXGQ7LoEAF6hMmahZLQ4eqAcgHUw+uyW4PjtCItq9qudPkK3A==", - "dev": true, - "dependencies": { - "@foliojs-fork/restructure": "^2.0.2", - "brfs": "^2.0.0", - "brotli": "^1.2.0", - "browserify-optional": "^1.0.1", - "clone": "^1.0.4", - "deep-equal": "^1.0.0", - "dfa": "^1.2.0", - "tiny-inflate": "^1.0.2", - "unicode-properties": "^1.2.2", - "unicode-trie": "^2.0.0" - } - }, - "node_modules/@foliojs-fork/linebreak": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@foliojs-fork/linebreak/-/linebreak-1.1.1.tgz", - "integrity": "sha512-pgY/+53GqGQI+mvDiyprvPWgkTlVBS8cxqee03ejm6gKAQNsR1tCYCIvN9FHy7otZajzMqCgPOgC4cHdt4JPig==", - "dev": true, - "dependencies": { - "base64-js": "1.3.1", - "brfs": "^2.0.2", - "unicode-trie": "^2.0.0" - } - }, - "node_modules/@foliojs-fork/linebreak/node_modules/base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", - "dev": true - }, - "node_modules/@foliojs-fork/pdfkit": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@foliojs-fork/pdfkit/-/pdfkit-0.13.0.tgz", - "integrity": "sha512-YXeG1fml9k97YNC9K8e292Pj2JzGt9uOIiBFuQFxHsdQ45BlxW+JU3RQK6JAvXU7kjhjP8rCcYvpk36JLD33sQ==", - "dev": true, - "dependencies": { - "@foliojs-fork/fontkit": "^1.9.1", - "@foliojs-fork/linebreak": "^1.1.1", - "crypto-js": "^4.0.0", - "png-js": "^1.0.0" - } - }, - "node_modules/@foliojs-fork/restructure": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@foliojs-fork/restructure/-/restructure-2.0.2.tgz", - "integrity": "sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA==", - "dev": true - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "dev": true, - "license": "BSD-3-Clause" - }, - "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, - "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, - "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, - "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 - }, - "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, - "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, - "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, - "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/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-try": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@javascript-obfuscator/escodegen": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@javascript-obfuscator/escodegen/-/escodegen-2.3.0.tgz", - "integrity": "sha512-QVXwMIKqYMl3KwtTirYIA6gOCiJ0ZDtptXqAv/8KWLG9uQU2fZqTVy7a/A5RvcoZhbDoFfveTxuGxJ5ibzQtkw==", - "dev": true, - "dependencies": { - "@javascript-obfuscator/estraverse": "^5.3.0", - "esprima": "^4.0.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/@javascript-obfuscator/estraverse": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@javascript-obfuscator/estraverse/-/estraverse-5.4.0.tgz", - "integrity": "sha512-CZFX7UZVN9VopGbjTx4UXaXsi9ewoM1buL0kY7j1ftYdSs7p2spv9opxFjHlQ/QGTgh4UqufYqJJ0WKLml7b6w==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@jest/console": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", - "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/@jest/console/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/console/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/console/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/core/node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "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/@jest/core/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/core/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/core/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@jest/core/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@jest/environment": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", - "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/@jest/reporters/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/reporters/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/source-map": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.2", - "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/@jest/transform/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/transform/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/transform/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/transform/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "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/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/types/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "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", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@octokit/auth-token": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", - "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/core": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.0.tgz", - "integrity": "sha512-YbAtMWIrbZ9FCXbLwT9wWB8TyLjq9mxpKdgB3dUNxQcIVTf9hJ70gRPwAcqGZdY6WdJPZ0I7jLaaNDCiloGN2A==", - "dependencies": { - "@octokit/auth-token": "^4.0.0", - "@octokit/graphql": "^7.0.0", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/endpoint": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.0.tgz", - "integrity": "sha512-szrQhiqJ88gghWY2Htt8MqUDO6++E/EIXqJ2ZEp5ma3uGS46o7LZAzSLt49myB7rT+Hfw5Y6gO3LmOxGzHijAQ==", - "dependencies": { - "@octokit/types": "^11.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/endpoint/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@octokit/graphql": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.1.tgz", - "integrity": "sha512-T5S3oZ1JOE58gom6MIcrgwZXzTaxRnxBso58xhozxHpOqSTgDS6YNeEUvZ/kRvXgPrRz/KHnZhtb7jUMRi9E6w==", - "dependencies": { - "@octokit/request": "^8.0.1", - "@octokit/types": "^11.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/openapi-types": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", - "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-8.0.0.tgz", - "integrity": "sha512-2xZ+baZWUg+qudVXnnvXz7qfrTmDeYPCzangBVq/1gXxii/OiS//4shJp9dnCCvj1x+JAm9ji1Egwm1BA47lPQ==", - "dependencies": { - "@octokit/types": "^11.0.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": ">=5" - } - }, - "node_modules/@octokit/plugin-retry": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-6.0.0.tgz", - "integrity": "sha512-a1/A4A+PB1QoAHQfLJxGHhLfSAT03bR1jJz3GgQJZvty2ozawFWs93MiBQXO7SL2YbO7CIq0Goj4qLOBj8JeMQ==", - "dependencies": { - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0", - "bottleneck": "^2.15.3" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": ">=5" - } - }, - "node_modules/@octokit/plugin-throttling": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-7.0.0.tgz", - "integrity": "sha512-KL2k/d0uANc8XqP5S64YcNFCudR3F5AaKO39XWdUtlJIjT9Ni79ekWJ6Kj5xvAw87udkOMEPcVf9xEge2+ahew==", - "dependencies": { - "@octokit/types": "^11.0.0", - "bottleneck": "^2.15.3" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": "^5.0.0" - } - }, - "node_modules/@octokit/request": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.1.1.tgz", - "integrity": "sha512-8N+tdUz4aCqQmXl8FpHYfKG9GelDFd7XGVzyN8rc6WxVlYcfpHECnuRkgquzz+WzvHTK62co5di8gSXnzASZPQ==", - "dependencies": { - "@octokit/endpoint": "^9.0.0", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.1.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/request-error": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.0.tgz", - "integrity": "sha512-1ue0DH0Lif5iEqT52+Rf/hf0RmGO9NWFjrzmrkArpG9trFfDM/efx00BJHdLGuro4BR/gECxCU2Twf5OKrRFsQ==", - "dependencies": { - "@octokit/types": "^11.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/request/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@octokit/types": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-11.1.0.tgz", - "integrity": "sha512-Fz0+7GyLm/bHt8fwEqgvRBWwIV1S6wRRyq+V6exRKLVWaKGsuy6H9QFYeBVDV7rK6fO3XwHgQOPxv+cLj2zpXQ==", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "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, - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "dependencies": { - "graceful-fs": "4.2.10" - }, - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/npm-conf": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", - "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", - "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@rollup/plugin-commonjs": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-20.0.0.tgz", - "integrity": "sha512-5K0g5W2Ol8hAcTHqcTBHiA7M58tfmYi1o9KxeJuuRNpGaTa5iLjcyemBitCBcKXaHamOBBEH2dGom6v6Unmqjg==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^2.38.3" - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "13.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.1.0", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "rollup": "^2.42.0" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/pluginutils/node_modules/estree-walker": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@sapphire/async-queue": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", - "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==", - "dev": true, - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@sapphire/shapeshift": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.2.tgz", - "integrity": "sha512-YRbCXWy969oGIdqR/wha62eX8GNHsvyYi0Rfd4rNW6tSVVa8p0ELiMEuOH/k8rgtvRoM+EMV7Csqz77YdwiDpA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@sapphire/shapeshift/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/@sapphire/snowflake": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz", - "integrity": "sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==", - "dev": true, - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@semantic-release/changelog": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@semantic-release/changelog/-/changelog-6.0.3.tgz", - "integrity": "sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==", - "dev": true, - "dependencies": { - "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", - "fs-extra": "^11.0.0", - "lodash": "^4.17.4" - }, - "engines": { - "node": ">=14.17" - }, - "peerDependencies": { - "semantic-release": ">=18.0.0" - } - }, - "node_modules/@semantic-release/changelog/node_modules/@semantic-release/error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", - "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", - "dev": true, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/@semantic-release/changelog/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, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/changelog/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, - "engines": { - "node": ">=6" - } - }, - "node_modules/@semantic-release/changelog/node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@semantic-release/changelog/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/changelog/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@semantic-release/changelog/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/@semantic-release/changelog/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@semantic-release/commit-analyzer": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz", - "integrity": "sha512-E+dr6L+xIHZkX4zNMe6Rnwg4YQrWNXK+rNsvwOPpdFppvZO1olE2fIgWhv89TkQErygevbjsZFSIxp+u6w2e5g==", - "dev": true, - "dependencies": { - "conventional-changelog-angular": "^5.0.0", - "conventional-commits-filter": "^2.0.0", - "conventional-commits-parser": "^3.2.3", - "debug": "^4.0.0", - "import-from": "^4.0.0", - "lodash": "^4.17.4", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=14.17" - }, - "peerDependencies": { - "semantic-release": ">=18.0.0-beta.1" - } - }, - "node_modules/@semantic-release/commit-analyzer/node_modules/conventional-changelog-angular": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", - "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", - "dev": true, - "dependencies": { - "compare-func": "^2.0.0", - "q": "^1.5.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@semantic-release/commit-analyzer/node_modules/conventional-commits-filter": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", - "dev": true, - "dependencies": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@semantic-release/commit-analyzer/node_modules/conventional-commits-parser": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", - "dev": true, - "dependencies": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "conventional-commits-parser": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@semantic-release/commit-analyzer/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@semantic-release/commit-analyzer/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/@semantic-release/commit-analyzer/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@semantic-release/commit-analyzer/node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "dependencies": { - "readable-stream": "3" - } - }, - "node_modules/@semantic-release/error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", - "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==", - "engines": { - "node": ">=18" - } - }, - "node_modules/@semantic-release/git": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@semantic-release/git/-/git-10.0.1.tgz", - "integrity": "sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==", - "dev": true, - "dependencies": { - "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", - "debug": "^4.0.0", - "dir-glob": "^3.0.0", - "execa": "^5.0.0", - "lodash": "^4.17.4", - "micromatch": "^4.0.0", - "p-reduce": "^2.0.0" - }, - "engines": { - "node": ">=14.17" - }, - "peerDependencies": { - "semantic-release": ">=18.0.0" - } - }, - "node_modules/@semantic-release/git/node_modules/@semantic-release/error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", - "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", - "dev": true, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/@semantic-release/git/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, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/git/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, - "engines": { - "node": ">=6" - } - }, - "node_modules/@semantic-release/git/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@semantic-release/git/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "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/@semantic-release/git/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/git/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/@semantic-release/git/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@semantic-release/git/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@semantic-release/git/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/git/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/git/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/github": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-9.0.4.tgz", - "integrity": "sha512-kQCGFAsBErvCR6hzNuzu63cj4erQN2krm9zQlg8vl4j5X0mL0d/Ras0wmL5Gkr1TuSS2lweME7M4J5zvtDDDSA==", - "dependencies": { - "@octokit/core": "^5.0.0", - "@octokit/plugin-paginate-rest": "^8.0.0", - "@octokit/plugin-retry": "^6.0.0", - "@octokit/plugin-throttling": "^7.0.0", - "@semantic-release/error": "^4.0.0", - "aggregate-error": "^4.0.1", - "debug": "^4.3.4", - "dir-glob": "^3.0.1", - "globby": "^13.1.4", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "issue-parser": "^6.0.0", - "lodash-es": "^4.17.21", - "mime": "^3.0.0", - "p-filter": "^3.0.0", - "url-join": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "semantic-release": ">=20.1.0" - } - }, - "node_modules/@semantic-release/github/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@semantic-release/github/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@semantic-release/github/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "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/@semantic-release/github/node_modules/http-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@semantic-release/github/node_modules/https-proxy-agent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz", - "integrity": "sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@semantic-release/github/node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@semantic-release/github/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/@semantic-release/github/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/npm": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-10.0.4.tgz", - "integrity": "sha512-6R3timIQ7VoL2QWRkc9DG8v74RQtRp7UOe/2KbNaqwJ815qOibAv65bH3RtTEhs4axEaHoZf7HDgFs5opaZ9Jw==", - "dependencies": { - "@semantic-release/error": "^4.0.0", - "aggregate-error": "^4.0.1", - "execa": "^7.0.0", - "fs-extra": "^11.0.0", - "lodash-es": "^4.17.21", - "nerf-dart": "^1.0.0", - "normalize-url": "^8.0.0", - "npm": "^9.5.0", - "rc": "^1.2.8", - "read-pkg": "^8.0.0", - "registry-auth-token": "^5.0.0", - "semver": "^7.1.2", - "tempy": "^3.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "semantic-release": ">=20.1.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@semantic-release/npm/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@semantic-release/npm/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@semantic-release/npm/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@semantic-release/release-notes-generator": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-11.0.4.tgz", - "integrity": "sha512-j0Znnwq9IdWTCGzqSlkLv4MpALTsVDZxcVESzJCNN8pK2BYQlYaKsdZ1Ea/+7RlppI3vjhEi33ZKmjSGY1FLKw==", - "dependencies": { - "conventional-changelog-angular": "^6.0.0", - "conventional-changelog-writer": "^6.0.0", - "conventional-commits-filter": "^3.0.0", - "conventional-commits-parser": "^4.0.0", - "debug": "^4.0.0", - "get-stream": "^7.0.0", - "import-from": "^4.0.0", - "into-stream": "^7.0.0", - "lodash-es": "^4.17.21", - "read-pkg-up": "^10.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "semantic-release": ">=20.1.0" - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/get-stream": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-7.0.1.tgz", - "integrity": "sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.3", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "8.1.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@sinonjs/formatio": { - "version": "3.2.2", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^1", - "@sinonjs/samsam": "^3.1.0" - } - }, - "node_modules/@sinonjs/formatio/node_modules/@sinonjs/samsam": { - "version": "3.3.3", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^1.3.0", - "array-from": "^2.1.1", - "lodash": "^4.17.15" - } - }, - "node_modules/@sinonjs/formatio/node_modules/lodash": { - "version": "4.17.21", - "dev": true, - "license": "MIT" - }, - "node_modules/@sinonjs/samsam": { - "version": "2.1.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@sinonjs/text-encoding": { - "version": "0.7.1", - "dev": true, - "license": "(Unlicense OR Apache-2.0)" - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/@ts-morph/common": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.19.0.tgz", - "integrity": "sha512-Unz/WHmd4pGax91rdIKWi51wnVUW11QttMEPpBiBgIewnc9UQIX7UDLxr5vRlqeByXCwhkF6VabSsI0raWcyAQ==", - "dev": true, - "dependencies": { - "fast-glob": "^3.2.12", - "minimatch": "^7.4.3", - "mkdirp": "^2.1.6", - "path-browserify": "^1.0.1" - } - }, - "node_modules/@ts-morph/common/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@ts-morph/common/node_modules/minimatch": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", - "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@ts-morph/common/node_modules/mkdirp": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz", - "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==", - "dev": true, - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/babel__core": { - "version": "7.1.19", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.17.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.3.0" - } - }, - "node_modules/@types/chai": { - "version": "4.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-scale": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.3.tgz", - "integrity": "sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==", - "dependencies": { - "@types/d3-time": "*" - } - }, - "node_modules/@types/d3-scale-chromatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", - "integrity": "sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw==" - }, - "node_modules/@types/d3-time": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz", - "integrity": "sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==" - }, - "node_modules/@types/debug": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", - "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/estree": { - "version": "0.0.39", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/fs-extra": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.2.tgz", - "integrity": "sha512-SvSrYXfWSc7R4eqnOzbQF4TZmfpNSM9FrSWLU3EUnWBuyZqNBOrv1B1JA3byUDPUl9z4Ab3jeZG2eDdySlgNMg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.1.tgz", - "integrity": "sha512-HTLpVXHrY69556ozYkcq47TtQJXpcWAWfkoqz+ZGz2JnmZhzlRjprCIyFnetSy8gpDWwTTGBcRVv1J1I1vBrHw==", - "dev": true, - "dependencies": { - "jest-diff": "^27.0.0", - "pretty-format": "^27.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/lodash": { - "version": "3.10.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mdast": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.12.tgz", - "integrity": "sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==", - "dependencies": { - "@types/unist": "^2" - } - }, - "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 - }, - "node_modules/@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" - }, - "node_modules/@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" - }, - "node_modules/@types/node": { - "version": "13.13.52", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" - }, - "node_modules/@types/prettier": { - "version": "2.6.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/resolve": { - "version": "1.17.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/screeps": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@types/screeps/-/screeps-3.3.3.tgz", - "integrity": "sha512-r+ru4iNv8wNaNBWvk2gMXYpG8Ok1GJ8NVV9WBIHa5I+hz2QGttnAus+1whDMIzES8x3yK83Usz+gHqm8ehIW7w==", - "dev": true - }, - "node_modules/@types/sinon": { - "version": "5.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/sinon-chai": { - "version": "3.2.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/chai": "*", - "@types/sinon": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/unist": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.7.tgz", - "integrity": "sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==" - }, - "node_modules/@types/validator": { - "version": "13.7.17", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.17.tgz", - "integrity": "sha512-aqayTNmeWrZcvnG2MG9eGYI6b7S5fl+yKgPs6bAjOTwPS316R5SxBGKvtSExfyoJU7pIeHJfsHI0Ji41RVMkvQ==", - "dev": true - }, - "node_modules/@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.33.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/experimental-utils": "4.33.0", - "@typescript-eslint/scope-manager": "4.33.0", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/regexpp": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.3.7", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "4.33.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-scope": { - "version": "5.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-utils": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "4.33.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "4.33.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "4.33.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.7", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } - }, - "node_modules/@vladfrangu/async_event_emitter": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz", - "integrity": "sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==", - "dev": true, - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/abab": { - "version": "2.0.6", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accumulate-stream": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "^3.1.0", - "ms": "^2.1.3" - } - }, - "node_modules/accumulate-stream/node_modules/ms": { - "version": "2.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dev": true, - "dependencies": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "node_modules/acorn-node/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agent-base/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/agent-base/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "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==", - "dependencies": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "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/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "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 - }, - "node_modules/amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.4.2" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", - "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", - "dependencies": { - "type-fest": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ansicolors": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", - "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==" - }, - "node_modules/anymatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/apache-crypt": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.6.tgz", - "integrity": "sha512-072WetlM4blL8PREJVeY+WHiUh1R5VNt2HfceGS8aKqttPHcmqE5pkKuXPz/ULmJOFkc8Hw3kfKl6vy7Qka6DA==", - "dev": true, - "dependencies": { - "unix-crypt-td-js": "^1.1.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/apache-md5": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.8.tgz", - "integrity": "sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/argparse": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/argv-formatter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", - "integrity": "sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==" - }, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/array-from": { - "version": "2.1.1", - "dev": true, - "license": "MIT" - }, - "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==" - }, - "node_modules/array-includes": { - "version": "3.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/assert": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", - "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", - "dev": true, - "dependencies": { - "es6-object-assign": "^1.1.0", - "is-nan": "^1.2.1", - "object-is": "^1.0.1", - "util": "^0.12.0" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/ast-transform": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/ast-transform/-/ast-transform-0.0.0.tgz", - "integrity": "sha512-e/JfLiSoakfmL4wmTGPjv0HpTICVmxwXgYOB8x+mzozHL8v+dSfCbrJ8J8hJ0YBP0XcYu1aLZ6b/3TnxNK3P2A==", - "dev": true, - "dependencies": { - "escodegen": "~1.2.0", - "esprima": "~1.0.4", - "through": "~2.3.4" - } - }, - "node_modules/ast-transform/node_modules/escodegen": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.2.0.tgz", - "integrity": "sha512-yLy3Cc+zAC0WSmoT2fig3J87TpQ8UaZGx8ahCAs9FL8qNbyV7CVyPKS74DG4bsHiL5ew9sxdYx131OkBQMFnvA==", - "dev": true, - "dependencies": { - "esprima": "~1.0.4", - "estraverse": "~1.5.0", - "esutils": "~1.0.0" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=0.4.0" - }, - "optionalDependencies": { - "source-map": "~0.1.30" - } - }, - "node_modules/ast-transform/node_modules/esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", - "integrity": "sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ast-transform/node_modules/estraverse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz", - "integrity": "sha512-FpCjJDfmo3vsc/1zKSeqR5k42tcIhxFIlvq+h9j0fO2q/h2uLKyweq7rYJ+0CoVvrGQOxIS5wyBrW/+vF58BUQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ast-transform/node_modules/esutils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz", - "integrity": "sha512-x/iYH53X3quDwfHRz4y8rn4XcEwwCJeWsul9pF1zldMbGtgOtMNBEOuYWwB1EQlK2LRa1fev3YAgym/RElp5Cg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ast-transform/node_modules/source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", - "dev": true, - "optional": true, - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ast-types": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.7.8.tgz", - "integrity": "sha512-RIOpVnVlltB6PcBJ5BMLx+H+6JJ/zjDGU0t7f0L6c2M1dqcK92VQopLBlPQ9R80AVXelfqYgjcPLtHtDbNFg0Q==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/async": { - "version": "3.2.4", - "dev": true, - "license": "MIT" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axios": { - "version": "0.21.4", - "dev": true, - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.14.0" - } - }, - "node_modules/babel-jest": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "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/babel-jest/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-jest/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-jest/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", - "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.2", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", - "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.2", - "core-js-compat": "^3.31.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", - "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-plugin-jest-hoist": "^27.5.1", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/base32768": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base32768/-/base32768-3.0.1.tgz", - "integrity": "sha512-dNGY49X0IKN1kDl9y/6sii1Vced+f+4uAqOeRz/PshjNdPwSD+ntnHOg/YgDbLSZetp94d/XxGdpfbXDKv8BVQ==" - }, - "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" - } - ] - }, - "node_modules/basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "dev": true, - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/basic-auth/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "node_modules/bcryptjs": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", - "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", - "dev": true - }, - "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==" - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "node_modules/bottleneck": { - "version": "2.19.5", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brfs": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brfs/-/brfs-2.0.2.tgz", - "integrity": "sha512-IrFjVtwu4eTJZyu8w/V2gxU7iLTtcHih67sgEdzrhjLBMHp2uYefUBfdM4k2UvcuWMgV7PQDZHSLeNWnLFKWVQ==", - "dev": true, - "dependencies": { - "quote-stream": "^1.0.1", - "resolve": "^1.1.5", - "static-module": "^3.0.2", - "through2": "^2.0.0" - }, - "bin": { - "brfs": "bin/cmd.js" - } - }, - "node_modules/brotli": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", - "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", - "dev": true, - "dependencies": { - "base64-js": "^1.1.2" - } - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dev": true, - "dependencies": { - "resolve": "1.1.7" - } - }, - "node_modules/browser-resolve/node_modules/resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", - "dev": true - }, - "node_modules/browserify-optional": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-optional/-/browserify-optional-1.0.1.tgz", - "integrity": "sha512-VrhjbZ+Ba5mDiSYEuPelekQMfTbhcA2DhLk2VQWqdcCROWeFqlTcXZ7yfRkXCIl8E+g4gINJYJiRB7WEtfomAQ==", - "dev": true, - "dependencies": { - "ast-transform": "0.0.0", - "ast-types": "^0.7.0", - "browser-resolve": "^1.8.1" - } - }, - "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "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" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "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" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-equal": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/bufferutil": { - "version": "4.0.6", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "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==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/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==", - "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/caniuse-lite": { - "version": "1.0.30001517", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz", - "integrity": "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==", - "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" - } - ] - }, - "node_modules/cardinal": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", - "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==", - "dependencies": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" - }, - "bin": { - "cdl": "bin/cdl.js" - } - }, - "node_modules/chai": { - "version": "4.3.6", - "dev": true, - "license": "MIT", - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chance": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/chance/-/chance-1.1.9.tgz", - "integrity": "sha512-TfxnA/DcZXRTA4OekA2zL9GH8qscbbl6X0ZqU4tXhGveVY/mXWvEQLt5GwZcYXTEyEFflVtj+pG8nc8EwSm1RQ==", - "dev": true - }, - "node_modules/char-regex": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/check-error": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "dev": true, - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cheerio/node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/child-shell": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "accumulate-stream": "^5.0.0", - "debug": "^4.3.2", - "kind-of": "^6.0.3", - "nanoid": "^3.1.30", - "p-queue": "6.6.2", - "p-timeout": "4.1.0", - "trim-buffer": "^5.0.0" - } - }, - "node_modules/child-shell/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/child-shell/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/ci-info": { - "version": "3.3.2", - "dev": true, - "license": "MIT" - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "dev": true, - "license": "MIT" - }, - "node_modules/class-validator": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.0.tgz", - "integrity": "sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==", - "dev": true, - "dependencies": { - "@types/validator": "^13.7.10", - "libphonenumber-js": "^1.10.14", - "validator": "^13.7.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==", - "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==", - "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, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/co": { - "version": "4.6.0", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/code-block-writer": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-12.0.0.tgz", - "integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==", - "dev": true - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/color": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "license": "MIT" - }, - "node_modules/color-string": { - "version": "1.9.1", - "dev": true, - "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, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", - "dev": true - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/colorspace": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "color": "^3.1.3", - "text-hex": "1.0.x" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "2.20.3", - "dev": true, - "license": "MIT" - }, - "node_modules/comment-parser": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "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==", - "dependencies": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/concat-stream/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, - "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/concat-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/conventional-changelog-angular": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz", - "integrity": "sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==", - "dependencies": { - "compare-func": "^2.0.0" - }, - "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==", - "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/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/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==", - "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==", - "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/convert-source-map": { - "version": "1.8.0", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/convert-source-map/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/core-js-compat": { - "version": "3.31.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.1.tgz", - "integrity": "sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.9" - }, - "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==" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cose-base": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", - "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", - "dependencies": { - "layout-base": "^1.0.0" - } - }, - "node_modules/cosmiconfig": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", - "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", - "dependencies": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - } - }, - "node_modules/cosmiconfig/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/crypto-js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", - "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==", - "dev": true - }, - "node_modules/crypto-random-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", - "dependencies": { - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/crypto-random-string/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==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssom": { - "version": "0.4.4", - "dev": true, - "license": "MIT" - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "dev": true, - "license": "MIT" - }, - "node_modules/cytoscape": { - "version": "3.25.0", - "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.25.0.tgz", - "integrity": "sha512-7MW3Iz57mCUo6JQCho6CmPBCbTlJr7LzyEtIkutG255HLVd4XuBg2I9BkTZLI/e4HoaOB/BiAzXuQybQ95+r9Q==", - "dependencies": { - "heap": "^0.2.6", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/cytoscape-cose-bilkent": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", - "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", - "dependencies": { - "cose-base": "^1.0.0" - }, - "peerDependencies": { - "cytoscape": "^3.2.0" - } - }, - "node_modules/cytoscape-fcose": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", - "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", - "dependencies": { - "cose-base": "^2.2.0" - }, - "peerDependencies": { - "cytoscape": "^3.2.0" - } - }, - "node_modules/cytoscape-fcose/node_modules/cose-base": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", - "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", - "dependencies": { - "layout-base": "^2.0.0" - } - }, - "node_modules/cytoscape-fcose/node_modules/layout-base": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", - "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==" - }, - "node_modules/cytoscape/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/d3": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", - "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==", - "dependencies": { - "d3-array": "3", - "d3-axis": "3", - "d3-brush": "3", - "d3-chord": "3", - "d3-color": "3", - "d3-contour": "4", - "d3-delaunay": "6", - "d3-dispatch": "3", - "d3-drag": "3", - "d3-dsv": "3", - "d3-ease": "3", - "d3-fetch": "3", - "d3-force": "3", - "d3-format": "3", - "d3-geo": "3", - "d3-hierarchy": "3", - "d3-interpolate": "3", - "d3-path": "3", - "d3-polygon": "3", - "d3-quadtree": "3", - "d3-random": "3", - "d3-scale": "4", - "d3-scale-chromatic": "3", - "d3-selection": "3", - "d3-shape": "3", - "d3-time": "3", - "d3-time-format": "4", - "d3-timer": "3", - "d3-transition": "3", - "d3-zoom": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-array": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", - "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", - "dependencies": { - "internmap": "1 - 2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-axis": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", - "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-brush": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", - "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "3", - "d3-transition": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-chord": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", - "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", - "dependencies": { - "d3-path": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-contour": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", - "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", - "dependencies": { - "d3-array": "^3.2.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-delaunay": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", - "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", - "dependencies": { - "delaunator": "5" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dsv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", - "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", - "dependencies": { - "commander": "7", - "iconv-lite": "0.6", - "rw": "1" - }, - "bin": { - "csv2json": "bin/dsv2json.js", - "csv2tsv": "bin/dsv2dsv.js", - "dsv2dsv": "bin/dsv2dsv.js", - "dsv2json": "bin/dsv2json.js", - "json2csv": "bin/json2dsv.js", - "json2dsv": "bin/json2dsv.js", - "json2tsv": "bin/json2dsv.js", - "tsv2csv": "bin/dsv2dsv.js", - "tsv2json": "bin/dsv2json.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dsv/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/d3-dsv/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-fetch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", - "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", - "dependencies": { - "d3-dsv": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-force": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", - "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-quadtree": "1 - 3", - "d3-timer": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-geo": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", - "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", - "dependencies": { - "d3-array": "2.5.0 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-hierarchy": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", - "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "dependencies": { - "d3-color": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", - "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-polygon": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", - "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-quadtree": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", - "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-random": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", - "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-sankey": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", - "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", - "dependencies": { - "d3-array": "1 - 2", - "d3-shape": "^1.2.0" - } - }, - "node_modules/d3-sankey/node_modules/d3-array": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", - "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", - "dependencies": { - "internmap": "^1.0.0" - } - }, - "node_modules/d3-sankey/node_modules/d3-path": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", - "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" - }, - "node_modules/d3-sankey/node_modules/d3-shape": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", - "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", - "dependencies": { - "d3-path": "1" - } - }, - "node_modules/d3-sankey/node_modules/internmap": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", - "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" - }, - "node_modules/d3-scale": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", - "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", - "dependencies": { - "d3-array": "2.10.0 - 3", - "d3-format": "1 - 3", - "d3-interpolate": "1.2.0 - 3", - "d3-time": "2.1.1 - 3", - "d3-time-format": "2 - 4" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-scale-chromatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", - "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", - "dependencies": { - "d3-color": "1 - 3", - "d3-interpolate": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-shape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", - "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", - "dependencies": { - "d3-path": "^3.1.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-time": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", - "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", - "dependencies": { - "d3-array": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-time-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", - "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "dependencies": { - "d3-time": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-transition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "dependencies": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "d3-selection": "2 - 3" - } - }, - "node_modules/d3-zoom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", - "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "2 - 3", - "d3-transition": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/dagre-d3-es": { - "version": "7.0.10", - "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.10.tgz", - "integrity": "sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==", - "dependencies": { - "d3": "^7.8.2", - "lodash-es": "^4.17.21" - } - }, - "node_modules/dash-ast": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", - "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==", - "dev": true - }, - "node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/data-urls": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "engines": { - "node": "*" - } - }, - "node_modules/dayjs": { - "version": "1.11.9", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", - "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==" - }, - "node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/decache": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.2.tgz", - "integrity": "sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==", - "dev": true, - "dependencies": { - "callsite": "^1.0.0" - } - }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "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/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decimal.js": { - "version": "10.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/dedent": { - "version": "0.7.0", - "dev": true, - "license": "MIT" - }, - "node_modules/deep-eql": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "dependencies": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delaunator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", - "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", - "dependencies": { - "robust-predicates": "^3.0.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/dfa": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", - "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", - "dev": true - }, - "node_modules/diff": { - "version": "3.5.0", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/discord-api-types": { - "version": "0.37.50", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.50.tgz", - "integrity": "sha512-X4CDiMnDbA3s3RaUXWXmgAIbY1uxab3fqe3qwzg5XutR3wjqi7M3IkgQbsIBzpqBN2YWr/Qdv7JrFRqSgb4TFg==", - "dev": true - }, - "node_modules/discord.js": { - "version": "14.13.0", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.13.0.tgz", - "integrity": "sha512-Kufdvg7fpyTEwANGy9x7i4od4yu5c6gVddGi5CKm4Y5a6sF0VBODObI3o0Bh7TGCj0LfNT8Qp8z04wnLFzgnbA==", - "dev": true, - "dependencies": { - "@discordjs/builders": "^1.6.5", - "@discordjs/collection": "^1.5.3", - "@discordjs/formatters": "^0.3.2", - "@discordjs/rest": "^2.0.1", - "@discordjs/util": "^1.0.1", - "@discordjs/ws": "^1.0.1", - "@sapphire/snowflake": "^3.5.1", - "@types/ws": "^8.5.5", - "discord-api-types": "0.37.50", - "fast-deep-equal": "^3.1.3", - "lodash.snakecase": "^4.1.1", - "tslib": "^2.6.1", - "undici": "5.22.1", - "ws": "^8.13.0" - }, - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/discord.js/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/discord.js/node_modules/ws": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", - "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domexception": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/dompurify": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.5.tgz", - "integrity": "sha512-F9e6wPGtY+8KNMRAVfxeCOHU0/NPWMSENNq4pQctuXRqqdEPW7q3CrLbR5Nse044WwacyjHGOMlvNsBe1y6z9A==" - }, - "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dev": true, - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/dot/-/dot-2.0.0-beta.1.tgz", - "integrity": "sha512-kxM7fSnNQTXOmaeGuBSXM8O3fEsBb7XSDBllkGbRwa0lJSJTxxDE/4eSNGLKZUmlFw0f1vJ5qSV2BljrgQtgIA==", - "dev": true - }, - "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==", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", - "dev": true, - "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==", - "dev": true - }, - "node_modules/duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", - "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "node_modules/duplexer2/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==", - "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/duplexer2/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==" - }, - "node_modules/duplexer2/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==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "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 - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.4.473", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.473.tgz", - "integrity": "sha512-aVfC8+440vGfl06l8HKKn8/PD5jRfSnLkTTD65EFvU46igbpQRri1gxSzW9/+TeUlwYzrXk1sw867T96zlyECA==", - "dev": true - }, - "node_modules/elkjs": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.8.2.tgz", - "integrity": "sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==" - }, - "node_modules/emittery": { - "version": "0.8.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/enabled": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enquirer": { - "version": "2.3.6", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/env-ci": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-9.1.1.tgz", - "integrity": "sha512-Im2yEWeF4b2RAMAaWvGioXk6m0UNaIjD8hj28j2ij5ldnIFrDQT0+pzDvpbRkcjurhXhf/AsBKv8P2rtmGi9Aw==", - "dependencies": { - "execa": "^7.0.0", - "java-properties": "^1.0.2" - }, - "engines": { - "node": "^16.14 || >=18" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.20.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "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/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-set": "~0.1.5", - "es6-symbol": "~3.1.1", - "event-emitter": "~0.3.5" - } - }, - "node_modules/es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", - "dev": true - }, - "node_modules/es6-set": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", - "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", - "dev": true, - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.62", - "es6-iterator": "~2.0.3", - "es6-symbol": "^3.1.3", - "event-emitter": "^0.3.5", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/es6-set/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "2.0.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint": { - "version": "7.32.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/ms": { - "version": "2.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-module-utils": { - "version": "2.7.3", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils/node_modules/ms": { - "version": "2.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-plugin-import": { - "version": "2.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-jest": { - "version": "24.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/experimental-utils": "^4.0.1" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": ">= 4", - "eslint": ">=5" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-jsdoc": { - "version": "31.6.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "comment-parser": "1.1.2", - "debug": "^4.3.1", - "jsdoctypeparser": "^9.0.0", - "lodash": "^4.17.20", - "regextras": "^0.7.1", - "semver": "^7.3.4", - "spdx-expression-parse": "^3.0.1" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0" - } - }, - "node_modules/eslint-plugin-jsdoc/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-jsdoc/node_modules/lodash": { - "version": "4.17.21", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-plugin-jsdoc/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-plugin-jsdoc/node_modules/semver": { - "version": "7.3.7", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "3.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "eslint": ">=5.0.0", - "prettier": ">=1.13.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-screeps": { - "version": "2.1.0", - "dev": true, - "license": "GPL-3.0", - "peerDependencies": { - "eslint": ">=0.8.0" - } - }, - "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/eslint/node_modules/acorn": { - "version": "7.4.1", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/astral-regex": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "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/eslint/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "5.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint/node_modules/eslint-utils": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/espree": { - "version": "7.3.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/eslint/node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/file-entry-cache": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/eslint/node_modules/flat-cache": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/eslint/node_modules/flatted": { - "version": "3.2.5", - "dev": true, - "license": "ISC" - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.15.0", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/levn": { - "version": "0.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/optionator": { - "version": "0.9.1", - "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.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/prelude-ls": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/regexpp": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/eslint/node_modules/semver": { - "version": "7.3.7", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/slice-ansi": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/eslint/node_modules/strip-json-comments": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/table": { - "version": "6.8.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/eslint/node_modules/table/node_modules/ajv": { - "version": "8.11.0", - "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/eslint/node_modules/type-check": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-is-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz", - "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==", - "dev": true - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/esutils": { - "version": "2.0.3", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "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==", - "dev": true, - "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", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", - "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/execa/node_modules/human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/execa/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/execa/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dev": true, - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - }, - "node_modules/fancy-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-2.0.0.tgz", - "integrity": "sha512-9CzxZbACXMUXW13tS0tI8XsGGmxWzO2DmYrGuBJOJ8k8q2K7hwfJA5qHjuPPe8wtsco33YR9wc+Rlr5wYFvhSA==", - "dev": true, - "dependencies": { - "color-support": "^1.1.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-diff": { - "version": "1.2.0", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "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-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-xml-parser": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.7.tgz", - "integrity": "sha512-J8r6BriSLO1uj2miOk1NW0YVm8AGOOu3Si2HQp/cSmo6EA4m3fcwu2WKjJ4RK9wMLBtg69y1kS8baDiQBR41Ig==", - "dev": true, - "funding": [ - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - }, - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/fastestsmallesttextencoderdecoder-encodeinto": { - "version": "1.0.22", - "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder-encodeinto/-/fastestsmallesttextencoderdecoder-encodeinto-1.0.22.tgz", - "integrity": "sha512-csOz3cwJjZY75QcPHnY+v6cKWeofYCmhtLVYaurjcRn5vaNXoYe1Leo1ZkiZIxZp796+J5Z+TtmeMbbfYBfiiQ==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.13.0", - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fecha": { - "version": "4.2.3", - "dev": true, - "license": "MIT" - }, - "node_modules/fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], - "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, - "engines": { - "node": "^12.20 || >= 14.13" - } - }, - "node_modules/figures": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", - "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", - "dependencies": { - "escape-string-regexp": "^5.0.0", - "is-unicode-supported": "^1.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/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==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/find-versions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz", - "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==", - "dependencies": { - "semver-regex": "^4.0.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/fn.name": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/follow-redirects": { - "version": "1.15.1", - "dev": true, - "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, - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "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.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "dev": true, - "dependencies": { - "fetch-blob": "^3.1.2" - }, - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "engines": { - "node": ">= 0.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==", - "dev": true - }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "node_modules/from2/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==", - "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/from2/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==" - }, - "node_modules/from2/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==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "dev": 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.1", - "license": "MIT" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-assigned-identifiers": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", - "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", - "dev": true - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-port": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-6.1.2.tgz", - "integrity": "sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-port-please": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.1.1.tgz", - "integrity": "sha512-3UBAyM3u4ZBVYDsxOQfJDxEa6XTbpBDrOjp4mf7ExFRt5BKs/QywQQiJsh2B+hxcZLSapWqCRvElUe8DnKcFHA==", - "dev": true - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/git-log-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.0.tgz", - "integrity": "sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA==", - "dependencies": { - "argv-formatter": "~1.0.0", - "spawn-error-forwarder": "~1.0.0", - "split2": "~1.0.0", - "stream-combiner2": "~1.1.1", - "through2": "~2.0.0", - "traverse": "~0.6.6" - } - }, - "node_modules/git-log-parser/node_modules/split2": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", - "integrity": "sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==", - "dependencies": { - "through2": "~2.0.0" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "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/glob-parent": { - "version": "5.1.2", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "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/globby/node_modules/ignore": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "license": "ISC" - }, - "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "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==", - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/heap": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", - "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" - }, - "node_modules/hook-std": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-3.0.0.tgz", - "integrity": "sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/hosted-git-info/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==", - "engines": { - "node": ">=12" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ] - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/http-auth": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-4.1.9.tgz", - "integrity": "sha512-kvPYxNGc9EKGTXvOMnTBQw2RZfuiSihK/mLw/a4pbtRueTE45S55Lw/3k5CktIf7Ak0veMKEIteDj4YkNmCzmQ==", - "dev": true, - "dependencies": { - "apache-crypt": "^1.1.2", - "apache-md5": "^1.0.6", - "bcryptjs": "^2.4.3", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/http-auth-connect": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/http-auth-connect/-/http-auth-connect-1.0.6.tgz", - "integrity": "sha512-yaO0QSCPqGCjPrl3qEEHjJP+lwZ6gMpXLuCBE06eWwcXomkI5TARtu0kxf9teFuBj6iaV3Ybr15jaWUvbzNzHw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/http-auth/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/http-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/human-signals": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/i18next": { - "version": "22.5.1", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.5.1.tgz", - "integrity": "sha512-8TGPgM3pAD+VRsMtUMNknRz3kzqwp/gPALrWMsDnmC1mKqJwpWyooQRLMcbTwq8z8YwSmuj+ZYvc+xCuEpkssA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://locize.com" - }, - { - "type": "individual", - "url": "https://locize.com/i18next.html" - }, - { - "type": "individual", - "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" - } - ], - "dependencies": { - "@babel/runtime": "^7.20.6" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "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" - } - ] - }, - "node_modules/ignore": { - "version": "4.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "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-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz", - "integrity": "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==", - "engines": { - "node": ">=12.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "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", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "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==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "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==" - }, - "node_modules/inside": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/inside/-/inside-1.0.0.tgz", - "integrity": "sha512-tvFwvS4g7q6iDot/4FjtWFHwwpv6TVvEumbTdLQilk1F07ojakbXPQcvf3kMAlyNDpzKRzn+d33O3RuXODuxZQ==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/internmap": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", - "engines": { - "node": ">=12" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/into-stream": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-7.0.0.tgz", - "integrity": "sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==", - "dependencies": { - "from2": "^2.3.0", - "p-is-promise": "^3.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inversify": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/inversify/-/inversify-6.0.1.tgz", - "integrity": "sha512-B3ex30927698TJENHR++8FfEaJGqoWOgI6ZY5Ht/nLUsFCwHn6akbwtnUAPCgUepAnTpe2qHxhDNjoKLyz6rgQ==", - "dev": true - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": 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-arrayish": { - "version": "0.2.1", - "license": "MIT" - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "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==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "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-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-builtin-module": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "builtin-modules": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-callable": { - "version": "1.2.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.9.0", - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "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", - "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", - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "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, - "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", - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-module": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "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==", - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-object": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", - "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "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-shared-array-buffer": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "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==", - "dependencies": { - "text-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dev": true, - "dependencies": { - "which-typed-array": "^1.1.11" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "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==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/issue-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-6.0.0.tgz", - "integrity": "sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==", - "dependencies": { - "lodash.capitalize": "^4.2.1", - "lodash.escaperegexp": "^4.1.2", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.uniqby": "^4.7.0" - }, - "engines": { - "node": ">=10.13" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/istanbul-reports": { - "version": "3.1.4", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jackspeak": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.2.tgz", - "integrity": "sha512-mgNtVv4vUuaKA97yxUHoA3+FkuhtxkjdXEWOyB/N76fjy0FjezEt34oy3epBtvCvS+7DyKwqCFWx/oJLV5+kCg==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/java-properties": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", - "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/javascript-obfuscator": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/javascript-obfuscator/-/javascript-obfuscator-4.0.2.tgz", - "integrity": "sha512-MRBQREvjEwqEGdwNGG7yp0te5uZBFzrPZdxEs4rDYkPpHhhOQu+E0IhSXP7bO9dIUWXZU0Kkdohsuws525aVGQ==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@javascript-obfuscator/escodegen": "2.3.0", - "@javascript-obfuscator/estraverse": "5.4.0", - "acorn": "8.8.2", - "assert": "2.0.0", - "chalk": "4.1.2", - "chance": "1.1.9", - "class-validator": "0.14.0", - "commander": "10.0.0", - "eslint-scope": "7.1.1", - "eslint-visitor-keys": "3.3.0", - "fast-deep-equal": "3.1.3", - "inversify": "6.0.1", - "js-string-escape": "1.0.1", - "md5": "2.3.0", - "mkdirp": "2.1.3", - "multimatch": "5.0.0", - "opencollective-postinstall": "2.0.3", - "process": "0.11.10", - "reflect-metadata": "0.1.13", - "source-map-support": "0.5.21", - "string-template": "1.0.0", - "stringz": "2.1.0", - "tslib": "2.5.0" - }, - "bin": { - "javascript-obfuscator": "bin/javascript-obfuscator" - }, - "engines": { - "node": "^12.22.0 || ^14.0.0 || ^16.0.0 || ^17.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/javascript-obfuscator" - } - }, - "node_modules/javascript-obfuscator/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/javascript-obfuscator/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/javascript-obfuscator/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/javascript-obfuscator/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/javascript-obfuscator/node_modules/commander": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", - "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/javascript-obfuscator/node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/javascript-obfuscator/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/javascript-obfuscator/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/javascript-obfuscator/node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - }, - "node_modules/jest": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.1.0.tgz", - "integrity": "sha512-pSQDVwRSwb109Ss13lcMtdfS9r8/w2Zz8+mTUA9VORD66GflCdl8nUFCqM96geOD2EBwWCNURrNAfQsLIDNBdg==", - "dev": true, - "dependencies": { - "@jest/core": "^27.1.0", - "import-local": "^3.0.2", - "jest-cli": "^27.1.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "execa": "^5.0.0", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-changed-files/node_modules/execa": { - "version": "5.1.1", - "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/jest-changed-files/node_modules/mimic-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-changed-files/node_modules/npm-run-path": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-changed-files/node_modules/onetime": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-circus": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-circus/node_modules/chalk": { - "version": "4.1.2", - "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/jest-circus/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-circus/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-circus/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-circus/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-config": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", - "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/jest-config/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-config/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-config/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-config/node_modules/strip-json-comments": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-config/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "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/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-diff/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-docblock": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", - "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/jest-each/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-each/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-each/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-each/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-jasmine2": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-jasmine2/node_modules/chalk": { - "version": "4.1.2", - "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/jest-jasmine2/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-jasmine2/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-jasmine2/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-leak-detector": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "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/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-matcher-utils/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "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/jest-message-util/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-message-util/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-message-util/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-mock": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.2", - "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/jest-resolve/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-resolve/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-resolve/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-resolve/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.2", - "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/jest-runner/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runner/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-runner/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", - "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/jest-runtime/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runtime/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-runtime/node_modules/execa": { - "version": "5.1.1", - "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/jest-runtime/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/mimic-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-runtime/node_modules/npm-run-path": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/onetime": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-runtime/node_modules/strip-bom": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-serializer": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", - "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/jest-snapshot/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-snapshot/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.3.7", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "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/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-util/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "leven": "^3.1.0", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", - "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/jest-validate/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-validate/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-validate/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.5.1", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-watcher/node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.2", - "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/jest-watcher/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-watcher/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-watcher/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher/node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "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/jest/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest/node_modules/chalk": { - "version": "4.1.2", - "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/jest/node_modules/cliui": { - "version": "7.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/jest/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/jest-cli": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/yargs": { - "version": "16.2.0", - "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/js-string-escape": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", - "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsdoctypeparser": { - "version": "9.0.0", - "dev": true, - "license": "MIT", - "bin": { - "jsdoctypeparser": "bin/jsdoctypeparser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jsdom": { - "version": "16.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/form-data": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jsdom/node_modules/tough-cookie": { - "version": "4.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-beautify": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/json-beautify/-/json-beautify-1.1.1.tgz", - "integrity": "sha512-17j+Hk2lado0xqKtUcyAjK0AtoHnPSIgktWRsEXgdFQFG9UnaGw6CHa0J7xsvulxRpFl6CrkDFHght1p5ZJc4A==", - "dev": true, - "bin": { - "json-beautify": "bin/json-beautify" - } - }, - "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==" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "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==" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "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==", - "engines": [ - "node >= 0.2.0" - ] - }, - "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==", - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/just-extend": { - "version": "4.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/khroma": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz", - "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==" - }, - "node_modules/kind-of": { - "version": "6.0.3", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/kuler": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/layout-base": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", - "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==" - }, - "node_modules/leven": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/libphonenumber-js": { - "version": "1.10.37", - "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.37.tgz", - "integrity": "sha512-Z10PCaOCiAxbUxLyR31DNeeNugSVP6iv/m7UrSKS5JHziEMApJtgku4e9Q69pzzSC9LnQiM09sqsGf2ticZnMw==", - "dev": true - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "license": "MIT" - }, - "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==", - "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/load-json-file/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==", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/locate-path": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/lodash": { - "version": "3.10.1", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" - }, - "node_modules/lodash.capitalize": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", - "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "node_modules/lodash.escaperegexp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", - "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==" - }, - "node_modules/lodash.get": { - "version": "4.4.2", - "dev": true, - "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==" - }, - "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==" - }, - "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==" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", - "dev": true - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.uniqby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", - "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==" - }, - "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, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/logform": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@colors/colors": "1.5.0", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" - } - }, - "node_modules/logform/node_modules/ms": { - "version": "2.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/loglevel": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", - "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/loglevel" - } - }, - "node_modules/loglevel-plugin-prefix": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", - "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", - "dev": true - }, - "node_modules/lolex": { - "version": "2.7.5", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/loupe": { - "version": "2.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "get-func-name": "^2.0.0" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true - }, - "node_modules/macos-release": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.1.tgz", - "integrity": "sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/magic-bytes.js": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.0.17.tgz", - "integrity": "sha512-PEDpPzHpKe5AxkVmQrNPHFRvPN2ELkkj3eIg4IZO9JdhBiAY3aU53lgYXs9j8B7lpza+QiW0UA4QHCH7EskSeg==", - "dev": true - }, - "node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "dev": true, - "license": "ISC" - }, - "node_modules/makeerror": { - "version": "1.0.12", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.5" - } - }, - "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==", - "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==", - "dev": true - }, - "node_modules/marked": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-5.1.2.tgz", - "integrity": "sha512-ahRPGXJpjMjwSOlBoTMZAK7ATXkli5qCPxZ21TG44rx1KEo44bii4ekgTDQPNRQ4Kh7JMb9Ub1PVk1NxRSsorg==", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 16" - } - }, - "node_modules/marked-terminal": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-5.2.0.tgz", - "integrity": "sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA==", - "dependencies": { - "ansi-escapes": "^6.2.0", - "cardinal": "^2.1.1", - "chalk": "^5.2.0", - "cli-table3": "^0.6.3", - "node-emoji": "^1.11.0", - "supports-hyperlinks": "^2.3.0" - }, - "engines": { - "node": ">=14.13.1 || >=16.0.0" - }, - "peerDependencies": { - "marked": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" - } - }, - "node_modules/marked-terminal/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "dev": true, - "dependencies": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "node_modules/mdast-util-from-markdown": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", - "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", - "dependencies": { - "@types/mdast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "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/meow/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/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==" - }, - "node_modules/meow/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/meow/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/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==", - "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/meow/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==", - "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/meow/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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/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==", - "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/meow/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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/meow/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==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-source-map": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", - "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", - "dev": true, - "dependencies": { - "source-map": "^0.5.6" - } - }, - "node_modules/merge-source-map/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/mermaid": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.3.0.tgz", - "integrity": "sha512-H5quxuQjwXC8M1WuuzhAp2TdqGg74t5skfDBrNKJ7dt3z8Wprl5S6h9VJsRhoBUTSs1TMtHEdplLhCqXleZZLw==", - "dependencies": { - "@braintree/sanitize-url": "^6.0.2", - "@types/d3-scale": "^4.0.3", - "@types/d3-scale-chromatic": "^3.0.0", - "cytoscape": "^3.23.0", - "cytoscape-cose-bilkent": "^4.1.0", - "cytoscape-fcose": "^2.1.0", - "d3": "^7.4.0", - "d3-sankey": "^0.12.3", - "dagre-d3-es": "7.0.10", - "dayjs": "^1.11.7", - "dompurify": "3.0.5", - "elkjs": "^0.8.2", - "khroma": "^2.0.0", - "lodash-es": "^4.17.21", - "mdast-util-from-markdown": "^1.3.0", - "non-layered-tidy-tree-layout": "^2.0.2", - "stylis": "^4.1.3", - "ts-dedent": "^2.2.0", - "uuid": "^9.0.0", - "web-worker": "^1.2.0" - } - }, - "node_modules/micromark": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", - "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", - "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-factory-destination": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", - "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-label": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", - "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-factory-space": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", - "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-title": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", - "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-whitespace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", - "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-character": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", - "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-chunked": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", - "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-classify-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", - "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-combine-extensions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", - "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", - "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-decode-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", - "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", - "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-html-tag-name": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", - "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", - "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-resolve-all": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", - "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", - "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-subtokenize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", - "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", - "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/micromark/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "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==", - "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==", - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/minipass": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz", - "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/mkdirp": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.3.tgz", - "integrity": "sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw==", - "dev": true, - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/morgan": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", - "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", - "dev": true, - "dependencies": { - "basic-auth": "~2.0.1", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-finished": "~2.3.0", - "on-headers": "~1.0.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "dev": true, - "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, - "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/nanoid": { - "version": "3.3.4", - "dev": true, - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ncp": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "bin": { - "ncp": "bin/ncp" - } - }, - "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, - "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==" - }, - "node_modules/nerf-dart": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", - "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==" - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true - }, - "node_modules/nise": { - "version": "1.5.3", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/formatio": "^3.2.1", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "lolex": "^5.0.1", - "path-to-regexp": "^1.7.0" - } - }, - "node_modules/nise/node_modules/isarray": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/nise/node_modules/lolex": { - "version": "5.1.2", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/nise/node_modules/path-to-regexp": { - "version": "1.8.0", - "dev": true, - "license": "MIT", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "dependencies": { - "lodash": "^4.17.21" - } - }, - "node_modules/node-emoji/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "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-fetch/node_modules/tr46": { - "version": "0.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/node-gyp-build": { - "version": "4.4.0", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/node-powershell": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "child-shell": "^5.0.0", - "is-wsl": "^2.2.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true - }, - "node_modules/non-layered-tidy-tree-layout": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", - "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" - }, - "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==", - "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-package-data/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==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", - "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm": { - "version": "9.8.1", - "resolved": "https://registry.npmjs.org/npm/-/npm-9.8.1.tgz", - "integrity": "sha512-AfDvThQzsIXhYgk9zhbk5R+lh811lKkLAeQMMhSypf1BM7zUafeIIBzMzespeuVEJ0+LvY36oRQYf7IKLzU3rw==", - "bundleDependencies": [ - "@isaacs/string-locale-compare", - "@npmcli/arborist", - "@npmcli/config", - "@npmcli/fs", - "@npmcli/map-workspaces", - "@npmcli/package-json", - "@npmcli/promise-spawn", - "@npmcli/run-script", - "abbrev", - "archy", - "cacache", - "chalk", - "ci-info", - "cli-columns", - "cli-table3", - "columnify", - "fastest-levenshtein", - "fs-minipass", - "glob", - "graceful-fs", - "hosted-git-info", - "ini", - "init-package-json", - "is-cidr", - "json-parse-even-better-errors", - "libnpmaccess", - "libnpmdiff", - "libnpmexec", - "libnpmfund", - "libnpmhook", - "libnpmorg", - "libnpmpack", - "libnpmpublish", - "libnpmsearch", - "libnpmteam", - "libnpmversion", - "make-fetch-happen", - "minimatch", - "minipass", - "minipass-pipeline", - "ms", - "node-gyp", - "nopt", - "npm-audit-report", - "npm-install-checks", - "npm-package-arg", - "npm-pick-manifest", - "npm-profile", - "npm-registry-fetch", - "npm-user-validate", - "npmlog", - "p-map", - "pacote", - "parse-conflict-json", - "proc-log", - "qrcode-terminal", - "read", - "semver", - "sigstore", - "ssri", - "supports-color", - "tar", - "text-table", - "tiny-relative-date", - "treeverse", - "validate-npm-package-name", - "which", - "write-file-atomic" - ], - "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^6.3.0", - "@npmcli/config": "^6.2.1", - "@npmcli/fs": "^3.1.0", - "@npmcli/map-workspaces": "^3.0.4", - "@npmcli/package-json": "^4.0.1", - "@npmcli/promise-spawn": "^6.0.2", - "@npmcli/run-script": "^6.0.2", - "abbrev": "^2.0.0", - "archy": "~1.0.0", - "cacache": "^17.1.3", - "chalk": "^5.3.0", - "ci-info": "^3.8.0", - "cli-columns": "^4.0.0", - "cli-table3": "^0.6.3", - "columnify": "^1.6.0", - "fastest-levenshtein": "^1.0.16", - "fs-minipass": "^3.0.2", - "glob": "^10.2.7", - "graceful-fs": "^4.2.11", - "hosted-git-info": "^6.1.1", - "ini": "^4.1.1", - "init-package-json": "^5.0.0", - "is-cidr": "^4.0.2", - "json-parse-even-better-errors": "^3.0.0", - "libnpmaccess": "^7.0.2", - "libnpmdiff": "^5.0.19", - "libnpmexec": "^6.0.3", - "libnpmfund": "^4.0.19", - "libnpmhook": "^9.0.3", - "libnpmorg": "^5.0.4", - "libnpmpack": "^5.0.19", - "libnpmpublish": "^7.5.0", - "libnpmsearch": "^6.0.2", - "libnpmteam": "^5.0.3", - "libnpmversion": "^4.0.2", - "make-fetch-happen": "^11.1.1", - "minimatch": "^9.0.3", - "minipass": "^5.0.0", - "minipass-pipeline": "^1.2.4", - "ms": "^2.1.2", - "node-gyp": "^9.4.0", - "nopt": "^7.2.0", - "npm-audit-report": "^5.0.0", - "npm-install-checks": "^6.1.1", - "npm-package-arg": "^10.1.0", - "npm-pick-manifest": "^8.0.1", - "npm-profile": "^7.0.1", - "npm-registry-fetch": "^14.0.5", - "npm-user-validate": "^2.0.0", - "npmlog": "^7.0.1", - "p-map": "^4.0.0", - "pacote": "^15.2.0", - "parse-conflict-json": "^3.0.1", - "proc-log": "^3.0.0", - "qrcode-terminal": "^0.12.0", - "read": "^2.1.0", - "semver": "^7.5.4", - "sigstore": "^1.7.0", - "ssri": "^10.0.4", - "supports-color": "^9.4.0", - "tar": "^6.1.15", - "text-table": "~0.2.0", - "tiny-relative-date": "^1.3.0", - "treeverse": "^3.0.0", - "validate-npm-package-name": "^5.0.0", - "which": "^3.0.1", - "write-file-atomic": "^5.0.1" - }, - "bin": { - "npm": "bin/npm-cli.js", - "npx": "bin/npx-cli.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm/node_modules/@colors/colors": { - "version": "1.5.0", - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/npm/node_modules/@isaacs/cliui": { - "version": "8.0.2", - "inBundle": 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/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "inBundle": 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/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/npm/node_modules/@isaacs/string-locale-compare": { - "version": "1.1.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "6.3.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^3.1.0", - "@npmcli/installed-package-contents": "^2.0.2", - "@npmcli/map-workspaces": "^3.0.2", - "@npmcli/metavuln-calculator": "^5.0.0", - "@npmcli/name-from-folder": "^2.0.0", - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^4.0.0", - "@npmcli/query": "^3.0.0", - "@npmcli/run-script": "^6.0.0", - "bin-links": "^4.0.1", - "cacache": "^17.0.4", - "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^6.1.1", - "json-parse-even-better-errors": "^3.0.0", - "json-stringify-nice": "^1.1.4", - "minimatch": "^9.0.0", - "nopt": "^7.0.0", - "npm-install-checks": "^6.0.0", - "npm-package-arg": "^10.1.0", - "npm-pick-manifest": "^8.0.1", - "npm-registry-fetch": "^14.0.3", - "npmlog": "^7.0.1", - "pacote": "^15.0.8", - "parse-conflict-json": "^3.0.0", - "proc-log": "^3.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.2", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^10.0.1", - "treeverse": "^3.0.0", - "walk-up-path": "^3.0.1" - }, - "bin": { - "arborist": "bin/index.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/config": { - "version": "6.2.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/map-workspaces": "^3.0.2", - "ci-info": "^3.8.0", - "ini": "^4.1.0", - "nopt": "^7.0.0", - "proc-log": "^3.0.0", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.5", - "walk-up-path": "^3.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/disparity-colors": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "ansi-styles": "^4.3.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/fs": { - "version": "3.1.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/git": { - "version": "4.1.0", - "inBundle": 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/npm/node_modules/@npmcli/installed-package-contents": { - "version": "2.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "bin": { - "installed-package-contents": "lib/index.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/map-workspaces": { - "version": "3.0.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/name-from-folder": "^2.0.0", - "glob": "^10.2.2", - "minimatch": "^9.0.0", - "read-package-json-fast": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { - "version": "5.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "cacache": "^17.0.0", - "json-parse-even-better-errors": "^3.0.0", - "pacote": "^15.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/name-from-folder": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/node-gyp": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/package-json": { - "version": "4.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^4.1.0", - "glob": "^10.2.2", - "hosted-git-info": "^6.1.1", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", - "proc-log": "^3.0.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/promise-spawn": { - "version": "6.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/query": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "6.0.2", - "inBundle": 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/npm/node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/npm/node_modules/@sigstore/protobuf-specs": { - "version": "0.1.0", - "inBundle": true, - "license": "Apache-2.0", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@sigstore/tuf": { - "version": "1.0.2", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.1.0", - "tuf-js": "^1.1.7" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@tootallnate/once": { - "version": "2.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/@tufjs/canonical-json": { - "version": "1.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@tufjs/models": { - "version": "1.0.4", - "inBundle": 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/npm/node_modules/abbrev": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/abort-controller": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/npm/node_modules/agent-base": { - "version": "6.0.2", - "inBundle": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/npm/node_modules/agentkeepalive": { - "version": "4.3.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "depd": "^2.0.0", - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/npm/node_modules/aggregate-error": { - "version": "3.1.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/ansi-regex": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/ansi-styles": { - "version": "4.3.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/npm/node_modules/aproba": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/archy": { - "version": "1.0.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/are-we-there-yet": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^4.1.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/balanced-match": { - "version": "1.0.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/base64-js": { - "version": "1.5.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/bin-links": { - "version": "4.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "cmd-shim": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "read-cmd-shim": "^4.0.0", - "write-file-atomic": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/binary-extensions": { - "version": "2.2.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/brace-expansion": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/npm/node_modules/buffer": { - "version": "6.0.3", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/npm/node_modules/builtins": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/npm/node_modules/cacache": { - "version": "17.1.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "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/node_modules/chalk": { - "version": "5.3.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/npm/node_modules/chownr": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/ci-info": { - "version": "3.8.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/cidr-regex": { - "version": "3.1.1", - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "ip-regex": "^4.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/clean-stack": { - "version": "2.2.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/npm/node_modules/cli-columns": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/cli-table3": { - "version": "0.6.3", - "inBundle": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/npm/node_modules/clone": { - "version": "1.0.4", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/npm/node_modules/cmd-shim": { - "version": "6.0.1", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/color-convert": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/npm/node_modules/color-name": { - "version": "1.1.4", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/color-support": { - "version": "1.1.3", - "inBundle": true, - "license": "ISC", - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/npm/node_modules/columnify": { - "version": "1.6.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/npm/node_modules/common-ancestor-path": { - "version": "1.0.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/concat-map": { - "version": "0.0.1", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/console-control-strings": { - "version": "1.1.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/cross-spawn": { - "version": "7.0.3", - "inBundle": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/cssesc": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm/node_modules/debug": { - "version": "4.3.4", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/npm/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/defaults": { - "version": "1.0.4", - "inBundle": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm/node_modules/delegates": { - "version": "1.0.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/depd": { - "version": "2.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/npm/node_modules/diff": { - "version": "5.1.0", - "inBundle": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/npm/node_modules/eastasianwidth": { - "version": "0.2.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/emoji-regex": { - "version": "8.0.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/encoding": { - "version": "0.1.13", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/npm/node_modules/env-paths": { - "version": "2.2.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/npm/node_modules/err-code": { - "version": "2.0.3", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/event-target-shim": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/npm/node_modules/events": { - "version": "3.3.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/npm/node_modules/exponential-backoff": { - "version": "3.1.1", - "inBundle": true, - "license": "Apache-2.0" - }, - "node_modules/npm/node_modules/fastest-levenshtein": { - "version": "1.0.16", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/npm/node_modules/foreground-child": { - "version": "3.1.1", - "inBundle": 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/npm/node_modules/fs-minipass": { - "version": "3.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/fs.realpath": { - "version": "1.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/function-bind": { - "version": "1.1.1", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/gauge": { - "version": "5.0.1", - "inBundle": 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": "^4.0.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/glob": { - "version": "10.2.7", - "inBundle": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/graceful-fs": { - "version": "4.2.11", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/has": { - "version": "1.0.3", - "inBundle": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/npm/node_modules/has-unicode": { - "version": "2.0.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/hosted-git-info": { - "version": "6.1.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/http-cache-semantics": { - "version": "4.1.1", - "inBundle": true, - "license": "BSD-2-Clause" - }, - "node_modules/npm/node_modules/http-proxy-agent": { - "version": "5.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/npm/node_modules/https-proxy-agent": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/npm/node_modules/humanize-ms": { - "version": "1.2.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/npm/node_modules/iconv-lite": { - "version": "0.6.3", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm/node_modules/ieee754": { - "version": "1.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "BSD-3-Clause" - }, - "node_modules/npm/node_modules/ignore-walk": { - "version": "6.0.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/imurmurhash": { - "version": "0.1.4", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/npm/node_modules/indent-string": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/inflight": { - "version": "1.0.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/npm/node_modules/inherits": { - "version": "2.0.4", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/ini": { - "version": "4.1.1", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/init-package-json": { - "version": "5.0.0", - "inBundle": 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/npm/node_modules/ip": { - "version": "2.0.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/ip-regex": { - "version": "4.3.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/is-cidr": { - "version": "4.0.2", - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "cidr-regex": "^3.1.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/is-core-module": { - "version": "2.12.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/npm/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/is-lambda": { - "version": "1.0.1", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/isexe": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/jackspeak": { - "version": "2.2.1", - "inBundle": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/npm/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/json-stringify-nice": { - "version": "1.1.4", - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/jsonparse": { - "version": "1.3.1", - "engines": [ - "node >= 0.2.0" - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/just-diff": { - "version": "6.0.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/just-diff-apply": { - "version": "5.5.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/libnpmaccess": { - "version": "7.0.2", - "inBundle": 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/npm/node_modules/libnpmdiff": { - "version": "5.0.19", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^6.3.0", - "@npmcli/disparity-colors": "^3.0.0", - "@npmcli/installed-package-contents": "^2.0.2", - "binary-extensions": "^2.2.0", - "diff": "^5.1.0", - "minimatch": "^9.0.0", - "npm-package-arg": "^10.1.0", - "pacote": "^15.0.8", - "tar": "^6.1.13" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmexec": { - "version": "6.0.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^6.3.0", - "@npmcli/run-script": "^6.0.0", - "ci-info": "^3.7.1", - "npm-package-arg": "^10.1.0", - "npmlog": "^7.0.1", - "pacote": "^15.0.8", - "proc-log": "^3.0.0", - "read": "^2.0.0", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.7", - "walk-up-path": "^3.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmfund": { - "version": "4.0.19", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^6.3.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmhook": { - "version": "9.0.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^14.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmorg": { - "version": "5.0.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^14.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmpack": { - "version": "5.0.19", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^6.3.0", - "@npmcli/run-script": "^6.0.0", - "npm-package-arg": "^10.1.0", - "pacote": "^15.0.8" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmpublish": { - "version": "7.5.0", - "inBundle": 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/npm/node_modules/libnpmsearch": { - "version": "6.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-registry-fetch": "^14.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmteam": { - "version": "5.0.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^14.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmversion": { - "version": "4.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^4.0.1", - "@npmcli/run-script": "^6.0.0", - "json-parse-even-better-errors": "^3.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.7" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/lru-cache": { - "version": "7.18.3", - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/npm/node_modules/make-fetch-happen": { - "version": "11.1.1", - "inBundle": 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/node_modules/minimatch": { - "version": "9.0.3", - "inBundle": 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/node_modules/minipass": { - "version": "5.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-collect": { - "version": "1.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/minipass-collect/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-fetch": { - "version": "3.0.3", - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^5.0.0", - "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/node_modules/minipass-flush": { - "version": "1.0.5", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-json-stream": { - "version": "1.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/npm/node_modules/minipass-json-stream/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-pipeline": { - "version": "1.2.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-sized": { - "version": "1.0.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minizlib": { - "version": "2.1.2", - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/mkdirp": { - "version": "1.0.4", - "inBundle": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/ms": { - "version": "2.1.3", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/mute-stream": { - "version": "1.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/negotiator": { - "version": "0.6.3", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/npm/node_modules/node-gyp": { - "version": "9.4.0", - "inBundle": 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": "^11.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/npm/node_modules/node-gyp/node_modules/abbrev": { - "version": "1.1.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/node-gyp/node_modules/are-we-there-yet": { - "version": "3.0.1", - "inBundle": 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/npm/node_modules/node-gyp/node_modules/brace-expansion": { - "version": "1.1.11", - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/gauge": { - "version": "4.0.4", - "inBundle": 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/npm/node_modules/node-gyp/node_modules/glob": { - "version": "7.2.3", - "inBundle": 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/npm/node_modules/node-gyp/node_modules/minimatch": { - "version": "3.1.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/nopt": { - "version": "6.0.0", - "inBundle": 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/npm/node_modules/node-gyp/node_modules/npmlog": { - "version": "6.0.2", - "inBundle": 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/npm/node_modules/node-gyp/node_modules/readable-stream": { - "version": "3.6.2", - "inBundle": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/signal-exit": { - "version": "3.0.7", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/node-gyp/node_modules/which": { - "version": "2.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/nopt": { - "version": "7.2.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "abbrev": "^2.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/normalize-package-data": { - "version": "5.0.0", - "inBundle": 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/npm/node_modules/npm-audit-report": { - "version": "5.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-bundled": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-install-checks": { - "version": "6.1.1", - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-package-arg": { - "version": "10.1.0", - "inBundle": 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/node_modules/npm-packlist": { - "version": "7.0.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "ignore-walk": "^6.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-pick-manifest": { - "version": "8.0.1", - "inBundle": 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/node_modules/npm-profile": { - "version": "7.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-registry-fetch": "^14.0.0", - "proc-log": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-registry-fetch": { - "version": "14.0.5", - "inBundle": 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/node_modules/npm-user-validate": { - "version": "2.0.0", - "inBundle": true, - "license": "BSD-2-Clause", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npmlog": { - "version": "7.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "are-we-there-yet": "^4.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^5.0.0", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/once": { - "version": "1.4.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/npm/node_modules/p-map": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm/node_modules/pacote": { - "version": "15.2.0", - "inBundle": 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/npm/node_modules/parse-conflict-json": { - "version": "3.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "just-diff": "^6.0.0", - "just-diff-apply": "^5.2.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/path-is-absolute": { - "version": "1.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm/node_modules/path-key": { - "version": "3.1.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/path-scurry": { - "version": "1.9.2", - "inBundle": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^9.1.1", - "minipass": "^5.0.0 || ^6.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/path-scurry/node_modules/lru-cache": { - "version": "9.1.1", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/npm/node_modules/postcss-selector-parser": { - "version": "6.0.13", - "inBundle": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm/node_modules/proc-log": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/process": { - "version": "0.11.10", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/npm/node_modules/promise-all-reject-late": { - "version": "1.0.1", - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/promise-call-limit": { - "version": "1.0.2", - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/promise-inflight": { - "version": "1.0.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/promise-retry": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/promzard": { - "version": "1.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "read": "^2.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/qrcode-terminal": { - "version": "0.12.0", - "inBundle": true, - "bin": { - "qrcode-terminal": "bin/qrcode-terminal.js" - } - }, - "node_modules/npm/node_modules/read": { - "version": "2.1.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "mute-stream": "~1.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/read-cmd-shim": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/read-package-json": { - "version": "6.0.4", - "inBundle": 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/npm/node_modules/read-package-json-fast": { - "version": "3.0.2", - "inBundle": 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/npm/node_modules/readable-stream": { - "version": "4.4.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/retry": { - "version": "0.12.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/npm/node_modules/rimraf": { - "version": "3.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/npm/node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "inBundle": 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/npm/node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/npm/node_modules/safe-buffer": { - "version": "5.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/safer-buffer": { - "version": "2.1.2", - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/npm/node_modules/semver": { - "version": "7.5.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/set-blocking": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/shebang-command": { - "version": "2.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/shebang-regex": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/signal-exit": { - "version": "4.0.2", - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/sigstore": { - "version": "1.7.0", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.1.0", - "@sigstore/tuf": "^1.0.1", - "make-fetch-happen": "^11.0.1" - }, - "bin": { - "sigstore": "bin/sigstore.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/smart-buffer": { - "version": "4.2.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/npm/node_modules/socks": { - "version": "2.7.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/npm/node_modules/socks-proxy-agent": { - "version": "7.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/spdx-correct": { - "version": "3.2.0", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/npm/node_modules/spdx-exceptions": { - "version": "2.3.0", - "inBundle": true, - "license": "CC-BY-3.0" - }, - "node_modules/npm/node_modules/spdx-expression-parse": { - "version": "3.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.13", - "inBundle": true, - "license": "CC0-1.0" - }, - "node_modules/npm/node_modules/ssri": { - "version": "10.0.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/string_decoder": { - "version": "1.3.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/npm/node_modules/string-width": { - "version": "4.2.3", - "inBundle": 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/npm/node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "inBundle": 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/npm/node_modules/strip-ansi": { - "version": "6.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/supports-color": { - "version": "9.4.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/npm/node_modules/tar": { - "version": "6.1.15", - "inBundle": true, - "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" - } - }, - "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/text-table": { - "version": "0.2.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/tiny-relative-date": { - "version": "1.3.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/treeverse": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/tuf-js": { - "version": "1.1.7", - "inBundle": 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/npm/node_modules/unique-filename": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/unique-slug": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/util-deprecate": { - "version": "1.0.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/validate-npm-package-license": { - "version": "3.0.4", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/npm/node_modules/validate-npm-package-name": { - "version": "5.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/walk-up-path": { - "version": "3.0.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/wcwidth": { - "version": "1.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/npm/node_modules/which": { - "version": "3.0.1", - "inBundle": 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/npm/node_modules/wide-align": { - "version": "1.1.5", - "inBundle": true, - "license": "ISC", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/npm/node_modules/wrap-ansi": { - "version": "8.1.0", - "inBundle": 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/npm/node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "inBundle": 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/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "9.2.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { - "version": "5.1.2", - "inBundle": 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/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/npm/node_modules/wrappy": { - "version": "1.0.2", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/write-file-atomic": { - "version": "5.0.1", - "inBundle": 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/npm/node_modules/yallist": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nwsapi": { - "version": "2.2.0", - "dev": true, - "license": "MIT" - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/one-time": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fn.name": "1.x.x" - } - }, - "node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "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/opencollective-postinstall": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", - "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", - "dev": true, - "bin": { - "opencollective-postinstall": "index.js" - } - }, - "node_modules/optionator": { - "version": "0.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "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, - "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/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ora/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/ora/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/os-name": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz", - "integrity": "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==", - "dev": true, - "dependencies": { - "macos-release": "^2.5.0", - "windows-release": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-each-series": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz", - "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==", - "engines": { - "node": ">=12" - }, - "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==", - "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", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-is-promise": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", - "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/p-limit": { - "version": "1.3.0", - "license": "MIT", - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-locate": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "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==", - "dependencies": { - "aggregate-error": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-queue": { - "version": "6.6.2", - "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-queue/node_modules/p-timeout": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-reduce": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", - "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-timeout": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/p-try": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", - "dev": true - }, - "node_modules/parent-module": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "dev": true, - "dependencies": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pastebin-api": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/pastebin-api/-/pastebin-api-5.1.6.tgz", - "integrity": "sha512-FI2ZeXLxroI2tuRVd5LI7eNmiANFxDOdlhXxSMqtOXTJn1KSt2UC8kglhndUOOPt6p9XPVnuS7XGW/KbiBbbzw==", - "dev": true, - "dependencies": { - "fast-xml-parser": "^4.1.3", - "undici": "^5.21.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true - }, - "node_modules/path-exists": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "dev": true, - "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", - "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "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==", - "dev": true, - "dependencies": { - "through": "~2.3" - } - }, - "node_modules/pdfjs-dist": { - "version": "2.12.313", - "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.12.313.tgz", - "integrity": "sha512-1x6iXO4Qnv6Eb+YFdN5JdUzt4pAkxSp3aLAYPX93eQCyg/m7QFzXVWJHJVtoW48CI8HCXju4dSkhQZwoheL5mA==", - "dev": true, - "peerDependencies": { - "worker-loader": "^3.0.8" - }, - "peerDependenciesMeta": { - "worker-loader": { - "optional": true - } - } - }, - "node_modules/pdfmake": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/pdfmake/-/pdfmake-0.2.7.tgz", - "integrity": "sha512-ClLpgx30H5G3EDvRW1MrA1Xih6YxEaSgIVFrOyBMgAAt62V+hxsyWAi6JNP7u1Fc5JKYAbpb4RRVw8Rhvmz5cQ==", - "dev": true, - "dependencies": { - "@foliojs-fork/linebreak": "^1.1.1", - "@foliojs-fork/pdfkit": "^0.13.0", - "iconv-lite": "^0.6.3", - "xmldoc": "^1.1.2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/pdfmake/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, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/pirates": { - "version": "4.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-conf": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", - "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", - "dependencies": { - "find-up": "^2.0.0", - "load-json-file": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "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", - "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", - "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", - "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", - "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", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/png-js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz", - "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==", - "dev": true - }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.7.1", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pretty-format": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "engines": { - "node": ">= 0.6.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==" - }, - "node_modules/progress": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" - }, - "node_modules/proxy-middleware": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", - "integrity": "sha512-EGCG8SeoIRVMhsqHQUdDigB2i7qU7fCsWASwn54+nPutYO8n4q6EiwMzyfWlC+dzRFExP+kvcnDFdBDHoZBU7Q==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/psl": { - "version": "1.8.0", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/q": { - "version": "1.5.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "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": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "engines": { - "node": ">=8" - } - }, - "node_modules/quote-stream": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", - "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==", - "dev": true, - "dependencies": { - "buffer-equal": "0.0.1", - "minimist": "^1.1.3", - "through2": "^2.0.0" - }, - "bin": { - "quote-stream": "bin/cmd.js" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/react-is": { - "version": "17.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/read-pkg": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-8.0.0.tgz", - "integrity": "sha512-Ajb9oSjxXBw0YyOiwtQ2dKbAA/vMnUPnY63XcCk+mXo0BwIdQEMgZLZiMWGttQHcUhUgbK0mH85ethMPKXxziw==", - "dependencies": { - "@types/normalize-package-data": "^2.4.1", - "normalize-package-data": "^5.0.0", - "parse-json": "^7.0.0", - "type-fest": "^3.8.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-10.0.0.tgz", - "integrity": "sha512-jgmKiS//w2Zs+YbX039CorlkOp8FIVbSAN8r8GJHDsGlmNPXo+VeHkqAwCiQVTTx5/LwLZTcEw59z3DvcLbr0g==", - "dependencies": { - "find-up": "^6.3.0", - "read-pkg": "^8.0.0", - "type-fest": "^3.12.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-pkg/node_modules/lines-and-columns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/read-pkg/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==", - "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-pkg/node_modules/parse-json": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.0.0.tgz", - "integrity": "sha512-kP+TQYAzAiVnzOlWOe0diD6L35s9bJh0SCn95PIbZFKrOYuIRQsQkeWEYxzVDuHTt9V9YqvYCJ2Qo4z9wdfZPw==", - "dependencies": { - "@babel/code-frame": "^7.21.4", - "error-ex": "^1.3.2", - "json-parse-even-better-errors": "^3.0.0", - "lines-and-columns": "^2.0.3", - "type-fest": "^3.8.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "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==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/redent/node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/redeyed": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", - "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==", - "dependencies": { - "esprima": "~4.0.0" - } - }, - "node_modules/reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", - "dev": true - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regextras": { - "version": "0.7.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.14" - } - }, - "node_modules/registry-auth-token": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", - "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", - "dependencies": { - "@pnpm/npm-conf": "^2.1.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": 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, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.1", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.9.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", - "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", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve.exports": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "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, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/restore-cursor/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "2.6.3", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/robust-predicates": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", - "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" - }, - "node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup-plugin-clear": { - "version": "2.0.7", - "dev": true, - "license": "ISC", - "dependencies": { - "rimraf": "^2.6.2" - } - }, - "node_modules/rollup-plugin-copy": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-copy/-/rollup-plugin-copy-3.4.0.tgz", - "integrity": "sha512-rGUmYYsYsceRJRqLVlE9FivJMxJ7X6jDlP79fmFkL8sJs7VVMSVyA2yfyL+PGyO/vJs4A87hwhgVfz61njI+uQ==", - "dev": true, - "dependencies": { - "@types/fs-extra": "^8.0.1", - "colorette": "^1.1.0", - "fs-extra": "^8.1.0", - "globby": "10.0.1", - "is-plain-object": "^3.0.0" - }, - "engines": { - "node": ">=8.3" - } - }, - "node_modules/rollup-plugin-copy/node_modules/globby": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", - "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", - "dev": true, - "dependencies": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/rollup-plugin-copy/node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/rollup-plugin-screeps-world": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/rollup-plugin-screeps-world/-/rollup-plugin-screeps-world-1.0.4.tgz", - "integrity": "sha512-+NB/KH8kuOjaenOySZVrPnRU5O/ny48otYYyI/Flg5tww59XIA95JZbmgnoN8J8GbjmDk+D5s+RV4YSK9r2ucw==", - "dev": true, - "dependencies": { - "git-rev-sync": "^3.0.2", - "screeps-api": "^1.11.0" - } - }, - "node_modules/rollup-plugin-screeps-world/node_modules/git-rev-sync": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/git-rev-sync/-/git-rev-sync-3.0.2.tgz", - "integrity": "sha512-Nd5RiYpyncjLv0j6IONy0lGzAqdRXUaBctuGBbrEA2m6Bn4iDrN/9MeQTXuiquw8AEKL9D2BW0nw5m/lQvxqnQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "1.0.5", - "graceful-fs": "4.1.15", - "shelljs": "0.8.5" - } - }, - "node_modules/rollup-plugin-screeps-world/node_modules/graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "node_modules/rollup-plugin-screeps-world/node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/rollup-plugin-terser": { - "version": "7.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "peerDependencies": { - "rollup": "^2.0.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/rollup-plugin-terser/node_modules/jest-worker": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { - "version": "4.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/rollup-plugin-typescript2": { - "version": "0.36.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.36.0.tgz", - "integrity": "sha512-NB2CSQDxSe9+Oe2ahZbf+B4bh7pHwjV5L+RSYpCu7Q5ROuN94F9b6ioWwKfz3ueL3KTtmX4o2MUH2cgHDIEUsw==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^4.1.2", - "find-cache-dir": "^3.3.2", - "fs-extra": "^10.0.0", - "semver": "^7.5.4", - "tslib": "^2.6.2" - }, - "peerDependencies": { - "rollup": ">=1.26.3", - "typescript": ">=2.4.0" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/@rollup/pluginutils": { - "version": "4.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/rollup-plugin-typescript2/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, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/rollup-plugin-typescript2/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, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/rollup-plugin-typescript2/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "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/rw": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" - }, - "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, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/rxjs/node_modules/tslib": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", - "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", - "dev": true - }, - "node_modules/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dependencies": { - "mri": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "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.4.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "node_modules/saxes": { - "version": "5.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/scope-analyzer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.2.tgz", - "integrity": "sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ==", - "dev": true, - "dependencies": { - "array-from": "^2.1.1", - "dash-ast": "^2.0.1", - "es6-map": "^0.1.5", - "es6-set": "^0.1.5", - "es6-symbol": "^3.1.1", - "estree-is-function": "^1.0.0", - "get-assigned-identifiers": "^1.1.0" - } - }, - "node_modules/screeps-api": { - "version": "1.16.0", - "dev": true, - "license": "ISC", - "dependencies": { - "axios": "^0.21.1", - "commander": "^7.2.0", - "debug": "^4.1.1", - "ws": "^7.4.4", - "yamljs": "^0.3.0" - }, - "bin": { - "screeps-api": "bin/screeps-api.js" - }, - "optionalDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - } - }, - "node_modules/screeps-api/node_modules/commander": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/screeps-api/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/screeps-api/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/screeps-db-importer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/screeps-db-importer/-/screeps-db-importer-1.1.0.tgz", - "integrity": "sha512-bbkO0n7DJpu9DzG2PGwEi4FZA64+iCbkYcBiqNYIx/l5vurldEF16UZLBir7tIpC1aJ2OCl6y7Mb1xaN2qDTMQ==", - "dev": true, - "dependencies": { - "node-fetch": "^3.3.1", - "winston": "^3.8.2" - } - }, - "node_modules/screeps-db-importer/node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "dev": true, - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, - "node_modules/screeps-grafana-go_carbon": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/screeps-grafana-go_carbon/-/screeps-grafana-go_carbon-1.0.5.tgz", - "integrity": "sha512-YLN87Jd9d1wrcWB38kTJLHMR7aoEgfXlNAexP6axBLDmBxpBPwcW6M7bb9/P0q1Q/m20GRtcPBrdFn1Sk4R39A==", - "dev": true, - "dependencies": { - "axios": "^0.27.2", - "dotenv": "^16.0.2", - "fs-extra": "^11.1.0", - "get-port-please": "^3.0.1", - "minimist": "^1.2.7", - "winston": "^3.8.1" - }, - "bin": { - "screeps-grafana-go_carbon": "bin/setup.js" - } - }, - "node_modules/screeps-grafana-go_carbon/node_modules/axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "dev": true, - "dependencies": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" - } - }, - "node_modules/screeps-grafana-go_carbon/node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/screeps-grafana-go_carbon/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/screeps-grafana-go_carbon/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/screeps-jest": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/screeps-jest/-/screeps-jest-2.0.2.tgz", - "integrity": "sha512-2jVH1fKX2U4SQBbbGe5rF5lUGtsE7AcsteV7+L4//WngXl5z16nv7DyHq0yNFrxuaRYZUUBLOaSE4gjr7h6H0A==", - "dev": true, - "peerDependencies": { - "jest": ">=27" - } - }, - "node_modules/screeps-performance-server": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.12.1.tgz", - "integrity": "sha512-alq0Ek6OQJnTLIwgO0b6TwjrinQB1nEviOTP+aNz8iuIq4rYAKLyi4+H9JzyoXjt1V2faLTSCp/VKzKk400VAQ==", - "dev": true, - "dependencies": { - "@octokit/core": "^4.2.0", - "discord.js": "^14.9.0", - "dotenv": "^16.0.3", - "get-port": "^6.1.2", - "json-beautify": "^1.1.1", - "lodash": "^4.17.21", - "minimist": "^1.2.7", - "ncp": "^2.0.0", - "node-fetch": "^2.6.7", - "node-powershell": "^5.0.1", - "pastebin-api": "^5.1.6", - "q": "^1.5.1", - "screeps-api": "1.16.0", - "screeps-db-importer": "latest", - "winston": "^3.8.2" - }, - "bin": { - "screeps-performance-server": "bin/setup.js" - } - }, - "node_modules/screeps-performance-server/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, - "engines": { - "node": ">= 14" - } - }, - "node_modules/screeps-performance-server/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, - "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/screeps-performance-server/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, - "dependencies": { - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/screeps-performance-server/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, - "dependencies": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^9.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/screeps-performance-server/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, - "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/screeps-performance-server/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, - "dependencies": { - "@octokit/types": "^9.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/screeps-performance-server/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, - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/screeps-performance-server/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/screeps-performance-server/node_modules/lodash": { - "version": "4.17.21", - "dev": true, - "license": "MIT" - }, - "node_modules/screeps-viz": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/screeps-viz/-/screeps-viz-2.1.3.tgz", - "integrity": "sha512-c96u2MTtrXzjv4O1K89J1EWgapbP0C9xqx2gCOZ5uLTBDr1RaAuIQZkOquqHA8ELhSNd9xr9X7Qt5vCOMMknSw==", - "dev": true - }, - "node_modules/semantic-release": { - "version": "21.0.7", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-21.0.7.tgz", - "integrity": "sha512-peRDSXN+hF8EFSKzze90ff/EnAmgITHQ/a3SZpRV3479ny0BIZWEJ33uX6/GlOSKdaSxo9hVRDyv2/u2MuF+Bw==", - "dependencies": { - "@semantic-release/commit-analyzer": "^10.0.0", - "@semantic-release/error": "^4.0.0", - "@semantic-release/github": "^9.0.0", - "@semantic-release/npm": "^10.0.2", - "@semantic-release/release-notes-generator": "^11.0.0", - "aggregate-error": "^4.0.1", - "cosmiconfig": "^8.0.0", - "debug": "^4.0.0", - "env-ci": "^9.0.0", - "execa": "^7.0.0", - "figures": "^5.0.0", - "find-versions": "^5.1.0", - "get-stream": "^6.0.0", - "git-log-parser": "^1.2.0", - "hook-std": "^3.0.0", - "hosted-git-info": "^6.0.0", - "lodash-es": "^4.17.21", - "marked": "^5.0.0", - "marked-terminal": "^5.1.1", - "micromatch": "^4.0.2", - "p-each-series": "^3.0.0", - "p-reduce": "^3.0.0", - "read-pkg-up": "^10.0.0", - "resolve-from": "^5.0.0", - "semver": "^7.3.2", - "semver-diff": "^4.0.0", - "signale": "^1.2.1", - "yargs": "^17.5.1" - }, - "bin": { - "semantic-release": "bin/semantic-release.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/semantic-release/node_modules/@semantic-release/commit-analyzer": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-10.0.1.tgz", - "integrity": "sha512-9ejHzTAijYs9z246sY/dKBatmOPcd0GQ7lH4MgLCkv1q4GCiDZRkjHJkaQZXZVaK7mJybS+sH3Ng6G8i3pYMGQ==", - "dependencies": { - "conventional-changelog-angular": "^6.0.0", - "conventional-commits-filter": "^3.0.0", - "conventional-commits-parser": "^4.0.0", - "debug": "^4.0.0", - "import-from": "^4.0.0", - "lodash-es": "^4.17.21", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "semantic-release": ">=20.1.0" - } - }, - "node_modules/semantic-release/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/semantic-release/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/semantic-release/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/semantic-release/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/semver-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", - "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semver-diff/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-regex": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", - "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/send/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 - }, - "node_modules/send/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/shallow-copy": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", - "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==", - "dev": true - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "license": "ISC" - }, - "node_modules/signale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", - "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", - "dependencies": { - "chalk": "^2.3.2", - "figures": "^2.0.0", - "pkg-conf": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/signale/node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "dev": true, - "license": "MIT" - }, - "node_modules/sinon": { - "version": "6.3.5", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^1.0.2", - "@sinonjs/formatio": "^3.0.0", - "@sinonjs/samsam": "^2.1.2", - "diff": "^3.5.0", - "lodash.get": "^4.4.2", - "lolex": "^2.7.5", - "nise": "^1.4.5", - "supports-color": "^5.5.0", - "type-detect": "^4.0.8" - } - }, - "node_modules/sinon-chai": { - "version": "3.7.0", - "dev": true, - "license": "(BSD-2-Clause OR WTFPL)", - "peerDependencies": { - "chai": "^4.0.0", - "sinon": ">=4.0.0" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/slash": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead", - "dev": true - }, - "node_modules/spawn-error-forwarder": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", - "integrity": "sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==" - }, - "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==", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.11", - "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==", - "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==", - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/stack-trace": { - "version": "0.0.10", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/stack-utils": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/static-eval": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz", - "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==", - "dev": true, - "dependencies": { - "escodegen": "^1.11.1" - } - }, - "node_modules/static-eval/node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/static-module": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/static-module/-/static-module-3.0.4.tgz", - "integrity": "sha512-gb0v0rrgpBkifXCa3yZXxqVmXDVE+ETXj6YlC/jt5VzOnGXR2C15+++eXuMDUYsePnbhf+lwW0pE1UXyOLtGCw==", - "dev": true, - "dependencies": { - "acorn-node": "^1.3.0", - "concat-stream": "~1.6.0", - "convert-source-map": "^1.5.1", - "duplexer2": "~0.1.4", - "escodegen": "^1.11.1", - "has": "^1.0.1", - "magic-string": "0.25.1", - "merge-source-map": "1.0.4", - "object-inspect": "^1.6.0", - "readable-stream": "~2.3.3", - "scope-analyzer": "^2.0.1", - "shallow-copy": "~0.0.1", - "static-eval": "^2.0.5", - "through2": "~2.0.3" - } - }, - "node_modules/static-module/node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/static-module/node_modules/magic-string": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz", - "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.1" - } - }, - "node_modules/static-module/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, - "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/static-module/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/static-module/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "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==", - "dev": true, - "dependencies": { - "duplexer": "~0.1.1", - "through": "~2.3.4" - } - }, - "node_modules/stream-combiner2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", - "dependencies": { - "duplexer2": "~0.1.0", - "readable-stream": "^2.0.2" - } - }, - "node_modules/stream-combiner2/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==", - "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/stream-combiner2/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==" - }, - "node_modules/stream-combiner2/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==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-template": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string-template/-/string-template-1.0.0.tgz", - "integrity": "sha512-SLqR3GBUXuoPP5MmYtD7ompvXiG87QjT6lzOszyXjTM86Uu7At7vNnt2xgyTLq5o9T4IxTYFyGxcULqpsmsfdg==", - "dev": true - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-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, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/stringz": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/stringz/-/stringz-2.1.0.tgz", - "integrity": "sha512-KlywLT+MZ+v0IRepfMxRtnSvDCMc3nR1qqCs3m/qIbSOWkNZYT8XHQA31rS3TnKp0c5xjZu3M4GY/2aRKSi/6A==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-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, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "dev": true, - "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==", - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "dev": true - }, - "node_modules/stylis": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", - "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" - }, - "node_modules/supports-color": { - "version": "5.5.0", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "dev": true, - "license": "MIT" - }, - "node_modules/temp-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", - "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", - "engines": { - "node": ">=14.16" - } - }, - "node_modules/tempy": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz", - "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==", - "dependencies": { - "is-stream": "^3.0.0", - "temp-dir": "^3.0.0", - "type-fest": "^2.12.2", - "unique-string": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tempy/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tempy/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link/node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link/node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "5.14.2", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/text-hex": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/throat": { - "version": "6.0.1", - "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==" - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "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==", - "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==" - }, - "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==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/tiny-inflate": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", - "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", - "dev": true - }, - "node_modules/tmpl": { - "version": "1.0.5", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/traverse": { - "version": "0.6.7", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", - "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/trim-buffer": { - "version": "5.0.0", - "dev": true, - "license": "MIT" - }, - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/triple-beam": { - "version": "1.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ts-dedent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", - "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", - "engines": { - "node": ">=6.10" - } + "node_modules/@aduh95/viz.js": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@aduh95/viz.js/-/viz.js-3.4.0.tgz", + "integrity": "sha512-KI2nVf9JdwWCXqK6RVf+9/096G7VWN4Z84mnynlyZKao2xQENW8WNEjLmvdlxS5X8PNWXFC1zqwm7tveOXw/4A==", + "dev": true + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.6.tgz", + "integrity": "sha512-3OjtrPWvsqVkMBwqPeE65ccCIw56FooNpVVAJ0XwhVQv5mA81pmbCzU7JsR6U449ZT7O4cQblzZMQvWvx74HCg==", + "dev": true, + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/core/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@angular-devkit/core/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/@angular-devkit/core/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.6.tgz", + "integrity": "sha512-KA8P78gaS76HMHGBOM8JHJXWLOxCIShYVB2Un/Cu6z3jVODvXq+ILZUc1Y0RsAce/vsl2wf8qpoh5Lku9KJHUQ==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.1.6", + "jsonc-parser": "3.2.0", + "magic-string": "0.30.0", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/magic-string": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "dependencies": { + "@babel/highlight": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", + "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.9", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helpers": "^7.22.6", + "@babel/parser": "^7.22.7", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.8", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/core/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/generator": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", + "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", + "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", + "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz", + "integrity": "sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", + "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", + "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", + "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", + "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", + "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.9.tgz", + "integrity": "sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", + "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.6", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", + "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.22.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz", + "integrity": "sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", + "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", + "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", + "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz", + "integrity": "sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", + "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", + "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.9.tgz", + "integrity": "sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.9", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.7", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.6", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.6", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.4", + "babel-plugin-polyfill-corejs3": "^0.8.2", + "babel-plugin-polyfill-regenerator": "^0.5.1", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", + "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", + "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.22.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", + "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.7", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.7", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/traverse/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/types": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@braintree/sanitize-url": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz", + "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==" + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@compodoc/compodoc": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/@compodoc/compodoc/-/compodoc-1.1.21.tgz", + "integrity": "sha512-/FDlwRgKzmkGuorDnURuCzoGY6rZ0KY7Mj5/PwnEjMs0y1CRRPHBJC9I0yVIjn8j8gxVy8PPc6dna0lY1MWwhg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@angular-devkit/schematics": "^16.0.1", + "@babel/core": "^7.21.8", + "@babel/preset-env": "^7.21.5", + "@compodoc/live-server": "^1.2.3", + "@compodoc/ngd-transformer": "^2.1.3", + "chalk": "4.1.2", + "cheerio": "^1.0.0-rc.12", + "chokidar": "^3.5.3", + "colors": "1.4.0", + "commander": "^10.0.1", + "cosmiconfig": "^8.1.3", + "decache": "^4.6.1", + "fancy-log": "^2.0.0", + "fast-glob": "^3.2.12", + "fs-extra": "^11.1.1", + "glob": "^10.2.4", + "handlebars": "^4.7.7", + "html-entities": "^2.3.3", + "i18next": "^22.4.15", + "inside": "^1.0.0", + "json5": "^2.2.3", + "lodash": "^4.17.21", + "loglevel": "^1.8.1", + "loglevel-plugin-prefix": "^0.8.4", + "lunr": "^2.3.9", + "marked": "4.3.0", + "minimist": "^1.2.8", + "opencollective-postinstall": "^2.0.3", + "os-name": "4.0.1", + "pdfjs-dist": "2.12.313", + "pdfmake": "^0.2.7", + "semver": "^7.5.1", + "traverse": "^0.6.7", + "ts-morph": "^18.0.0", + "uuid": "^9.0.0" + }, + "bin": { + "compodoc": "bin/index-cli.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@compodoc/compodoc/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@compodoc/compodoc/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@compodoc/compodoc/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@compodoc/compodoc/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@compodoc/compodoc/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@compodoc/compodoc/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@compodoc/compodoc/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@compodoc/compodoc/node_modules/glob": { + "version": "10.3.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", + "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@compodoc/compodoc/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@compodoc/compodoc/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@compodoc/compodoc/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/@compodoc/compodoc/node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true, + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@compodoc/compodoc/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, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@compodoc/compodoc/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, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@compodoc/compodoc/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@compodoc/compodoc/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@compodoc/live-server": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@compodoc/live-server/-/live-server-1.2.3.tgz", + "integrity": "sha512-hDmntVCyjjaxuJzPzBx68orNZ7TW4BtHWMnXlIVn5dqhK7vuFF/11hspO1cMmc+2QTYgqde1TBcb3127S7Zrow==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "colors": "1.4.0", + "connect": "^3.7.0", + "cors": "latest", + "event-stream": "4.0.1", + "faye-websocket": "0.11.x", + "http-auth": "4.1.9", + "http-auth-connect": "^1.0.5", + "morgan": "^1.10.0", + "object-assign": "latest", + "open": "8.4.0", + "proxy-middleware": "latest", + "send": "latest", + "serve-index": "^1.9.1" + }, + "bin": { + "live-server": "live-server.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@compodoc/ngd-core": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@compodoc/ngd-core/-/ngd-core-2.1.1.tgz", + "integrity": "sha512-Z+wE6wWZYVnudRYg6qunDlyh3Orw39Ib66Gvrz5kX5u7So+iu3tr6sQJdqH6yGS3hAjig5avlfhWLlgsb6/x1Q==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.3", + "fancy-log": "^2.0.0", + "typescript": "^5.0.4" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@compodoc/ngd-core/node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@compodoc/ngd-transformer": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@compodoc/ngd-transformer/-/ngd-transformer-2.1.3.tgz", + "integrity": "sha512-oWxJza7CpWR8/FeWYfE6j+jgncnGBsTWnZLt5rD2GUpsGSQTuGrsFPnmbbaVLgRS5QIVWBJYke7QFBr/7qVMWg==", + "dev": true, + "dependencies": { + "@aduh95/viz.js": "3.4.0", + "@compodoc/ngd-core": "~2.1.1", + "dot": "^2.0.0-beta.1", + "fs-extra": "^11.1.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@compodoc/ngd-transformer/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@compodoc/ngd-transformer/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@compodoc/ngd-transformer/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "node_modules/@discordjs/builders": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.5.tgz", + "integrity": "sha512-SdweyCs/+mHj+PNhGLLle7RrRFX9ZAhzynHahMCLqp5Zeq7np7XC6/mgzHc79QoVlQ1zZtOkTTiJpOZu5V8Ufg==", + "dev": true, + "dependencies": { + "@discordjs/formatters": "^0.3.2", + "@discordjs/util": "^1.0.1", + "@sapphire/shapeshift": "^3.9.2", + "discord-api-types": "0.37.50", + "fast-deep-equal": "^3.1.3", + "ts-mixer": "^6.0.3", + "tslib": "^2.6.1" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/builders/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/@discordjs/collection": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", + "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", + "dev": true, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/formatters": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.2.tgz", + "integrity": "sha512-lE++JZK8LSSDRM5nLjhuvWhGuKiXqu+JZ/DsOR89DVVia3z9fdCJVcHF2W/1Zxgq0re7kCzmAJlCMMX3tetKpA==", + "dev": true, + "dependencies": { + "discord-api-types": "0.37.50" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/rest": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.0.1.tgz", + "integrity": "sha512-/eWAdDRvwX/rIE2tuQUmKaxmWeHmGealttIzGzlYfI4+a7y9b6ZoMp8BG/jaohs8D8iEnCNYaZiOFLVFLQb8Zg==", + "dev": true, + "dependencies": { + "@discordjs/collection": "^1.5.3", + "@discordjs/util": "^1.0.1", + "@sapphire/async-queue": "^1.5.0", + "@sapphire/snowflake": "^3.5.1", + "@vladfrangu/async_event_emitter": "^2.2.2", + "discord-api-types": "0.37.50", + "magic-bytes.js": "^1.0.15", + "tslib": "^2.6.1", + "undici": "5.22.1" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/rest/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/@discordjs/util": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.0.1.tgz", + "integrity": "sha512-d0N2yCxB8r4bn00/hvFZwM7goDcUhtViC5un4hPj73Ba4yrChLSJD8fy7Ps5jpTLg1fE9n4K0xBLc1y9WGwSsA==", + "dev": true, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/ws": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.0.1.tgz", + "integrity": "sha512-avvAolBqN3yrSvdBPcJ/0j2g42ABzrv3PEL76e3YTp2WYMGH7cuspkjfSyNWaqYl1J+669dlLp+YFMxSVQyS5g==", + "dev": true, + "dependencies": { + "@discordjs/collection": "^1.5.3", + "@discordjs/rest": "^2.0.1", + "@discordjs/util": "^1.0.1", + "@sapphire/async-queue": "^1.5.0", + "@types/ws": "^8.5.5", + "@vladfrangu/async_event_emitter": "^2.2.2", + "discord-api-types": "0.37.50", + "tslib": "^2.6.1", + "ws": "^8.13.0" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/ws/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/@discordjs/ws/node_modules/ws": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", + "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/acorn": { + "version": "7.4.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@eslint/eslintrc/node_modules/espree": { + "version": "7.3.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@foliojs-fork/fontkit": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@foliojs-fork/fontkit/-/fontkit-1.9.1.tgz", + "integrity": "sha512-U589voc2/ROnvx1CyH9aNzOQWJp127JGU1QAylXGQ7LoEAF6hMmahZLQ4eqAcgHUw+uyW4PjtCItq9qudPkK3A==", + "dev": true, + "dependencies": { + "@foliojs-fork/restructure": "^2.0.2", + "brfs": "^2.0.0", + "brotli": "^1.2.0", + "browserify-optional": "^1.0.1", + "clone": "^1.0.4", + "deep-equal": "^1.0.0", + "dfa": "^1.2.0", + "tiny-inflate": "^1.0.2", + "unicode-properties": "^1.2.2", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/@foliojs-fork/linebreak": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@foliojs-fork/linebreak/-/linebreak-1.1.1.tgz", + "integrity": "sha512-pgY/+53GqGQI+mvDiyprvPWgkTlVBS8cxqee03ejm6gKAQNsR1tCYCIvN9FHy7otZajzMqCgPOgC4cHdt4JPig==", + "dev": true, + "dependencies": { + "base64-js": "1.3.1", + "brfs": "^2.0.2", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/@foliojs-fork/linebreak/node_modules/base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true + }, + "node_modules/@foliojs-fork/pdfkit": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@foliojs-fork/pdfkit/-/pdfkit-0.13.0.tgz", + "integrity": "sha512-YXeG1fml9k97YNC9K8e292Pj2JzGt9uOIiBFuQFxHsdQ45BlxW+JU3RQK6JAvXU7kjhjP8rCcYvpk36JLD33sQ==", + "dev": true, + "dependencies": { + "@foliojs-fork/fontkit": "^1.9.1", + "@foliojs-fork/linebreak": "^1.1.1", + "crypto-js": "^4.0.0", + "png-js": "^1.0.0" + } + }, + "node_modules/@foliojs-fork/restructure": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@foliojs-fork/restructure/-/restructure-2.0.2.tgz", + "integrity": "sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA==", + "dev": true + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "dev": true, + "license": "BSD-3-Clause" + }, + "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, + "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, + "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, + "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 + }, + "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, + "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, + "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, + "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/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-try": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@javascript-obfuscator/escodegen": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@javascript-obfuscator/escodegen/-/escodegen-2.3.0.tgz", + "integrity": "sha512-QVXwMIKqYMl3KwtTirYIA6gOCiJ0ZDtptXqAv/8KWLG9uQU2fZqTVy7a/A5RvcoZhbDoFfveTxuGxJ5ibzQtkw==", + "dev": true, + "dependencies": { + "@javascript-obfuscator/estraverse": "^5.3.0", + "esprima": "^4.0.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/@javascript-obfuscator/estraverse": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@javascript-obfuscator/estraverse/-/estraverse-5.4.0.tgz", + "integrity": "sha512-CZFX7UZVN9VopGbjTx4UXaXsi9ewoM1buL0kY7j1ftYdSs7p2spv9opxFjHlQ/QGTgh4UqufYqJJ0WKLml7b6w==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@jest/console": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "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/@jest/console/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/console/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/console/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/ansi-escapes": { + "version": "4.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "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/@jest/core/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/core/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/core/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@jest/core/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/type-fest": { + "version": "0.21.3", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@jest/environment": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "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/@jest/reporters/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/reporters/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/source-map": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "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/@jest/transform/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/transform/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/transform/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "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/@jest/types/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/types/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "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", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@octokit/auth-token": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", + "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/core": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.0.tgz", + "integrity": "sha512-YbAtMWIrbZ9FCXbLwT9wWB8TyLjq9mxpKdgB3dUNxQcIVTf9hJ70gRPwAcqGZdY6WdJPZ0I7jLaaNDCiloGN2A==", + "dependencies": { + "@octokit/auth-token": "^4.0.0", + "@octokit/graphql": "^7.0.0", + "@octokit/request": "^8.0.2", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^11.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/endpoint": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.0.tgz", + "integrity": "sha512-szrQhiqJ88gghWY2Htt8MqUDO6++E/EIXqJ2ZEp5ma3uGS46o7LZAzSLt49myB7rT+Hfw5Y6gO3LmOxGzHijAQ==", + "dependencies": { + "@octokit/types": "^11.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/endpoint/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@octokit/graphql": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.1.tgz", + "integrity": "sha512-T5S3oZ1JOE58gom6MIcrgwZXzTaxRnxBso58xhozxHpOqSTgDS6YNeEUvZ/kRvXgPrRz/KHnZhtb7jUMRi9E6w==", + "dependencies": { + "@octokit/request": "^8.0.1", + "@octokit/types": "^11.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", + "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-8.0.0.tgz", + "integrity": "sha512-2xZ+baZWUg+qudVXnnvXz7qfrTmDeYPCzangBVq/1gXxii/OiS//4shJp9dnCCvj1x+JAm9ji1Egwm1BA47lPQ==", + "dependencies": { + "@octokit/types": "^11.0.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": ">=5" + } + }, + "node_modules/@octokit/plugin-retry": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-6.0.0.tgz", + "integrity": "sha512-a1/A4A+PB1QoAHQfLJxGHhLfSAT03bR1jJz3GgQJZvty2ozawFWs93MiBQXO7SL2YbO7CIq0Goj4qLOBj8JeMQ==", + "dependencies": { + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^11.0.0", + "bottleneck": "^2.15.3" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": ">=5" + } + }, + "node_modules/@octokit/plugin-throttling": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-7.0.0.tgz", + "integrity": "sha512-KL2k/d0uANc8XqP5S64YcNFCudR3F5AaKO39XWdUtlJIjT9Ni79ekWJ6Kj5xvAw87udkOMEPcVf9xEge2+ahew==", + "dependencies": { + "@octokit/types": "^11.0.0", + "bottleneck": "^2.15.3" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "^5.0.0" + } + }, + "node_modules/@octokit/request": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.1.1.tgz", + "integrity": "sha512-8N+tdUz4aCqQmXl8FpHYfKG9GelDFd7XGVzyN8rc6WxVlYcfpHECnuRkgquzz+WzvHTK62co5di8gSXnzASZPQ==", + "dependencies": { + "@octokit/endpoint": "^9.0.0", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^11.1.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/request-error": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.0.tgz", + "integrity": "sha512-1ue0DH0Lif5iEqT52+Rf/hf0RmGO9NWFjrzmrkArpG9trFfDM/efx00BJHdLGuro4BR/gECxCU2Twf5OKrRFsQ==", + "dependencies": { + "@octokit/types": "^11.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/request/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@octokit/types": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-11.1.0.tgz", + "integrity": "sha512-Fz0+7GyLm/bHt8fwEqgvRBWwIV1S6wRRyq+V6exRKLVWaKGsuy6H9QFYeBVDV7rK6fO3XwHgQOPxv+cLj2zpXQ==", + "dependencies": { + "@octokit/openapi-types": "^18.0.0" + } + }, + "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, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/npm-conf": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", + "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-20.0.0.tgz", + "integrity": "sha512-5K0g5W2Ol8hAcTHqcTBHiA7M58tfmYi1o9KxeJuuRNpGaTa5iLjcyemBitCBcKXaHamOBBEH2dGom6v6Unmqjg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "commondir": "^1.0.1", + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^2.38.3" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "13.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^2.42.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@sapphire/async-queue": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", + "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==", + "dev": true, + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@sapphire/shapeshift": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.2.tgz", + "integrity": "sha512-YRbCXWy969oGIdqR/wha62eX8GNHsvyYi0Rfd4rNW6tSVVa8p0ELiMEuOH/k8rgtvRoM+EMV7Csqz77YdwiDpA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@sapphire/shapeshift/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/@sapphire/snowflake": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz", + "integrity": "sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==", + "dev": true, + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@semantic-release/changelog": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@semantic-release/changelog/-/changelog-6.0.3.tgz", + "integrity": "sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==", + "dev": true, + "dependencies": { + "@semantic-release/error": "^3.0.0", + "aggregate-error": "^3.0.0", + "fs-extra": "^11.0.0", + "lodash": "^4.17.4" + }, + "engines": { + "node": ">=14.17" + }, + "peerDependencies": { + "semantic-release": ">=18.0.0" + } + }, + "node_modules/@semantic-release/changelog/node_modules/@semantic-release/error": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", + "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", + "dev": true, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@semantic-release/changelog/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, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@semantic-release/changelog/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/@semantic-release/changelog/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@semantic-release/changelog/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/@semantic-release/changelog/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@semantic-release/changelog/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/@semantic-release/changelog/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@semantic-release/commit-analyzer": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz", + "integrity": "sha512-E+dr6L+xIHZkX4zNMe6Rnwg4YQrWNXK+rNsvwOPpdFppvZO1olE2fIgWhv89TkQErygevbjsZFSIxp+u6w2e5g==", + "dev": true, + "dependencies": { + "conventional-changelog-angular": "^5.0.0", + "conventional-commits-filter": "^2.0.0", + "conventional-commits-parser": "^3.2.3", + "debug": "^4.0.0", + "import-from": "^4.0.0", + "lodash": "^4.17.4", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=14.17" + }, + "peerDependencies": { + "semantic-release": ">=18.0.0-beta.1" + } + }, + "node_modules/@semantic-release/commit-analyzer/node_modules/conventional-changelog-angular": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@semantic-release/commit-analyzer/node_modules/conventional-commits-filter": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", + "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "dev": true, + "dependencies": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@semantic-release/commit-analyzer/node_modules/conventional-commits-parser": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", + "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", + "dev": true, + "dependencies": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@semantic-release/commit-analyzer/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@semantic-release/commit-analyzer/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/@semantic-release/commit-analyzer/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@semantic-release/commit-analyzer/node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/@semantic-release/error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", + "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==", + "engines": { + "node": ">=18" + } + }, + "node_modules/@semantic-release/git": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@semantic-release/git/-/git-10.0.1.tgz", + "integrity": "sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==", + "dev": true, + "dependencies": { + "@semantic-release/error": "^3.0.0", + "aggregate-error": "^3.0.0", + "debug": "^4.0.0", + "dir-glob": "^3.0.0", + "execa": "^5.0.0", + "lodash": "^4.17.4", + "micromatch": "^4.0.0", + "p-reduce": "^2.0.0" + }, + "engines": { + "node": ">=14.17" + }, + "peerDependencies": { + "semantic-release": ">=18.0.0" + } + }, + "node_modules/@semantic-release/git/node_modules/@semantic-release/error": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", + "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", + "dev": true, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@semantic-release/git/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, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@semantic-release/git/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/@semantic-release/git/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@semantic-release/git/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "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/@semantic-release/git/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/@semantic-release/git/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/@semantic-release/git/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@semantic-release/git/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@semantic-release/git/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@semantic-release/git/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/git/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/@semantic-release/github": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-9.0.4.tgz", + "integrity": "sha512-kQCGFAsBErvCR6hzNuzu63cj4erQN2krm9zQlg8vl4j5X0mL0d/Ras0wmL5Gkr1TuSS2lweME7M4J5zvtDDDSA==", + "dependencies": { + "@octokit/core": "^5.0.0", + "@octokit/plugin-paginate-rest": "^8.0.0", + "@octokit/plugin-retry": "^6.0.0", + "@octokit/plugin-throttling": "^7.0.0", + "@semantic-release/error": "^4.0.0", + "aggregate-error": "^4.0.1", + "debug": "^4.3.4", + "dir-glob": "^3.0.1", + "globby": "^13.1.4", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "issue-parser": "^6.0.0", + "lodash-es": "^4.17.21", + "mime": "^3.0.0", + "p-filter": "^3.0.0", + "url-join": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "semantic-release": ">=20.1.0" + } + }, + "node_modules/@semantic-release/github/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@semantic-release/github/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@semantic-release/github/node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "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/@semantic-release/github/node_modules/http-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@semantic-release/github/node_modules/https-proxy-agent": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz", + "integrity": "sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@semantic-release/github/node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@semantic-release/github/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/@semantic-release/github/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/npm": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-10.0.4.tgz", + "integrity": "sha512-6R3timIQ7VoL2QWRkc9DG8v74RQtRp7UOe/2KbNaqwJ815qOibAv65bH3RtTEhs4axEaHoZf7HDgFs5opaZ9Jw==", + "dependencies": { + "@semantic-release/error": "^4.0.0", + "aggregate-error": "^4.0.1", + "execa": "^7.0.0", + "fs-extra": "^11.0.0", + "lodash-es": "^4.17.21", + "nerf-dart": "^1.0.0", + "normalize-url": "^8.0.0", + "npm": "^9.5.0", + "rc": "^1.2.8", + "read-pkg": "^8.0.0", + "registry-auth-token": "^5.0.0", + "semver": "^7.1.2", + "tempy": "^3.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "semantic-release": ">=20.1.0" + } + }, + "node_modules/@semantic-release/npm/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@semantic-release/npm/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@semantic-release/npm/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@semantic-release/npm/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@semantic-release/release-notes-generator": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-11.0.4.tgz", + "integrity": "sha512-j0Znnwq9IdWTCGzqSlkLv4MpALTsVDZxcVESzJCNN8pK2BYQlYaKsdZ1Ea/+7RlppI3vjhEi33ZKmjSGY1FLKw==", + "dependencies": { + "conventional-changelog-angular": "^6.0.0", + "conventional-changelog-writer": "^6.0.0", + "conventional-commits-filter": "^3.0.0", + "conventional-commits-parser": "^4.0.0", + "debug": "^4.0.0", + "get-stream": "^7.0.0", + "import-from": "^4.0.0", + "into-stream": "^7.0.0", + "lodash-es": "^4.17.21", + "read-pkg-up": "^10.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "semantic-release": ">=20.1.0" + } + }, + "node_modules/@semantic-release/release-notes-generator/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@semantic-release/release-notes-generator/node_modules/get-stream": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-7.0.1.tgz", + "integrity": "sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/release-notes-generator/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@sinonjs/formatio": { + "version": "3.2.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1", + "@sinonjs/samsam": "^3.1.0" + } + }, + "node_modules/@sinonjs/formatio/node_modules/@sinonjs/samsam": { + "version": "3.3.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.3.0", + "array-from": "^2.1.1", + "lodash": "^4.17.15" + } + }, + "node_modules/@sinonjs/formatio/node_modules/lodash": { + "version": "4.17.21", + "dev": true, + "license": "MIT" + }, + "node_modules/@sinonjs/samsam": { + "version": "2.1.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@sinonjs/text-encoding": { + "version": "0.7.1", + "dev": true, + "license": "(Unlicense OR Apache-2.0)" + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@ts-morph/common": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.19.0.tgz", + "integrity": "sha512-Unz/WHmd4pGax91rdIKWi51wnVUW11QttMEPpBiBgIewnc9UQIX7UDLxr5vRlqeByXCwhkF6VabSsI0raWcyAQ==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.12", + "minimatch": "^7.4.3", + "mkdirp": "^2.1.6", + "path-browserify": "^1.0.1" + } + }, + "node_modules/@ts-morph/common/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@ts-morph/common/node_modules/minimatch": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", + "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@ts-morph/common/node_modules/mkdirp": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz", + "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==", + "dev": true, + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/babel__core": { + "version": "7.1.19", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.17.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.3.0" + } + }, + "node_modules/@types/chai": { + "version": "4.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.3.tgz", + "integrity": "sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-scale-chromatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", + "integrity": "sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw==" + }, + "node_modules/@types/d3-time": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz", + "integrity": "sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==" + }, + "node_modules/@types/debug": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", + "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.39", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/fs-extra": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.2.tgz", + "integrity": "sha512-SvSrYXfWSc7R4eqnOzbQF4TZmfpNSM9FrSWLU3EUnWBuyZqNBOrv1B1JA3byUDPUl9z4Ab3jeZG2eDdySlgNMg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.1.tgz", + "integrity": "sha512-HTLpVXHrY69556ozYkcq47TtQJXpcWAWfkoqz+ZGz2JnmZhzlRjprCIyFnetSy8gpDWwTTGBcRVv1J1I1vBrHw==", + "dev": true, + "dependencies": { + "jest-diff": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "3.10.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.12.tgz", + "integrity": "sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==", + "dependencies": { + "@types/unist": "^2" + } + }, + "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 + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" + }, + "node_modules/@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" + }, + "node_modules/@types/node": { + "version": "13.13.52", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" + }, + "node_modules/@types/prettier": { + "version": "2.6.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/screeps": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@types/screeps/-/screeps-3.3.3.tgz", + "integrity": "sha512-r+ru4iNv8wNaNBWvk2gMXYpG8Ok1GJ8NVV9WBIHa5I+hz2QGttnAus+1whDMIzES8x3yK83Usz+gHqm8ehIW7w==", + "dev": true + }, + "node_modules/@types/sinon": { + "version": "5.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/sinon-chai": { + "version": "3.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "*", + "@types/sinon": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.7.tgz", + "integrity": "sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==" + }, + "node_modules/@types/validator": { + "version": "13.7.17", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.17.tgz", + "integrity": "sha512-aqayTNmeWrZcvnG2MG9eGYI6b7S5fl+yKgPs6bAjOTwPS316R5SxBGKvtSExfyoJU7pIeHJfsHI0Ji41RVMkvQ==", + "dev": true + }, + "node_modules/@types/ws": { + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "16.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "4.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^4.0.0", + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/regexpp": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "4.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-scope": { + "version": "5.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-utils": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "4.33.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "debug": "^4.3.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "4.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "4.33.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "4.33.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "4.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/@vladfrangu/async_event_emitter": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz", + "integrity": "sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==", + "dev": true, + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/abab": { + "version": "2.0.6", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accumulate-stream": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "^3.1.0", + "ms": "^2.1.3" + } + }, + "node_modules/accumulate-stream/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-node/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "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==", + "dependencies": { + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "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/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "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 + }, + "node_modules/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.4.2" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", + "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", + "dependencies": { + "type-fest": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansicolors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==" + }, + "node_modules/anymatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/apache-crypt": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.6.tgz", + "integrity": "sha512-072WetlM4blL8PREJVeY+WHiUh1R5VNt2HfceGS8aKqttPHcmqE5pkKuXPz/ULmJOFkc8Hw3kfKl6vy7Qka6DA==", + "dev": true, + "dependencies": { + "unix-crypt-td-js": "^1.1.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/apache-md5": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.8.tgz", + "integrity": "sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/argv-formatter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", + "integrity": "sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==" + }, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-from": { + "version": "2.1.1", + "dev": true, + "license": "MIT" + }, + "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==" + }, + "node_modules/array-includes": { + "version": "3.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/assert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", + "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", + "dev": true, + "dependencies": { + "es6-object-assign": "^1.1.0", + "is-nan": "^1.2.1", + "object-is": "^1.0.1", + "util": "^0.12.0" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/ast-transform": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/ast-transform/-/ast-transform-0.0.0.tgz", + "integrity": "sha512-e/JfLiSoakfmL4wmTGPjv0HpTICVmxwXgYOB8x+mzozHL8v+dSfCbrJ8J8hJ0YBP0XcYu1aLZ6b/3TnxNK3P2A==", + "dev": true, + "dependencies": { + "escodegen": "~1.2.0", + "esprima": "~1.0.4", + "through": "~2.3.4" + } + }, + "node_modules/ast-transform/node_modules/escodegen": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.2.0.tgz", + "integrity": "sha512-yLy3Cc+zAC0WSmoT2fig3J87TpQ8UaZGx8ahCAs9FL8qNbyV7CVyPKS74DG4bsHiL5ew9sxdYx131OkBQMFnvA==", + "dev": true, + "dependencies": { + "esprima": "~1.0.4", + "estraverse": "~1.5.0", + "esutils": "~1.0.0" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=0.4.0" + }, + "optionalDependencies": { + "source-map": "~0.1.30" + } + }, + "node_modules/ast-transform/node_modules/esprima": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ast-transform/node_modules/estraverse": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz", + "integrity": "sha512-FpCjJDfmo3vsc/1zKSeqR5k42tcIhxFIlvq+h9j0fO2q/h2uLKyweq7rYJ+0CoVvrGQOxIS5wyBrW/+vF58BUQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ast-transform/node_modules/esutils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz", + "integrity": "sha512-x/iYH53X3quDwfHRz4y8rn4XcEwwCJeWsul9pF1zldMbGtgOtMNBEOuYWwB1EQlK2LRa1fev3YAgym/RElp5Cg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ast-transform/node_modules/source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", + "dev": true, + "optional": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ast-types": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.7.8.tgz", + "integrity": "sha512-RIOpVnVlltB6PcBJ5BMLx+H+6JJ/zjDGU0t7f0L6c2M1dqcK92VQopLBlPQ9R80AVXelfqYgjcPLtHtDbNFg0Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/async": { + "version": "3.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "0.21.4", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/babel-jest": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "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/babel-jest/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/babel-jest/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-jest/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-jest/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", + "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", + "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.2", + "core-js-compat": "^3.31.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", + "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/base32768": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base32768/-/base32768-3.0.1.tgz", + "integrity": "sha512-dNGY49X0IKN1kDl9y/6sii1Vced+f+4uAqOeRz/PshjNdPwSD+ntnHOg/YgDbLSZetp94d/XxGdpfbXDKv8BVQ==" + }, + "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" + } + ] + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dev": true, + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", + "dev": true + }, + "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==" + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/bottleneck": { + "version": "2.19.5", + "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", + "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brfs": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brfs/-/brfs-2.0.2.tgz", + "integrity": "sha512-IrFjVtwu4eTJZyu8w/V2gxU7iLTtcHih67sgEdzrhjLBMHp2uYefUBfdM4k2UvcuWMgV7PQDZHSLeNWnLFKWVQ==", + "dev": true, + "dependencies": { + "quote-stream": "^1.0.1", + "resolve": "^1.1.5", + "static-module": "^3.0.2", + "through2": "^2.0.0" + }, + "bin": { + "brfs": "bin/cmd.js" + } + }, + "node_modules/brotli": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", + "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", + "dev": true, + "dependencies": { + "base64-js": "^1.1.2" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "dependencies": { + "resolve": "1.1.7" + } + }, + "node_modules/browser-resolve/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", + "dev": true + }, + "node_modules/browserify-optional": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-optional/-/browserify-optional-1.0.1.tgz", + "integrity": "sha512-VrhjbZ+Ba5mDiSYEuPelekQMfTbhcA2DhLk2VQWqdcCROWeFqlTcXZ7yfRkXCIl8E+g4gINJYJiRB7WEtfomAQ==", + "dev": true, + "dependencies": { + "ast-transform": "0.0.0", + "ast-types": "^0.7.0", + "browser-resolve": "^1.8.1" + } + }, + "node_modules/browserslist": { + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "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" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "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" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/bufferutil": { + "version": "4.0.6", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dev": true, + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "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==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/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==", + "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/caniuse-lite": { + "version": "1.0.30001517", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz", + "integrity": "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==", + "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" + } + ] + }, + "node_modules/cardinal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", + "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==", + "dependencies": { + "ansicolors": "~0.3.2", + "redeyed": "~2.1.0" + }, + "bin": { + "cdl": "bin/cdl.js" + } + }, + "node_modules/chai": { + "version": "4.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chance": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/chance/-/chance-1.1.9.tgz", + "integrity": "sha512-TfxnA/DcZXRTA4OekA2zL9GH8qscbbl6X0ZqU4tXhGveVY/mXWvEQLt5GwZcYXTEyEFflVtj+pG8nc8EwSm1RQ==", + "dev": true + }, + "node_modules/char-regex": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/check-error": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "dev": true, + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cheerio/node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/child-shell": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "accumulate-stream": "^5.0.0", + "debug": "^4.3.2", + "kind-of": "^6.0.3", + "nanoid": "^3.1.30", + "p-queue": "6.6.2", + "p-timeout": "4.1.0", + "trim-buffer": "^5.0.0" + } + }, + "node_modules/child-shell/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/child-shell/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/ci-info": { + "version": "3.3.2", + "dev": true, + "license": "MIT" + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.2", + "dev": true, + "license": "MIT" + }, + "node_modules/class-validator": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.0.tgz", + "integrity": "sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==", + "dev": true, + "dependencies": { + "@types/validator": "^13.7.10", + "libphonenumber-js": "^1.10.14", + "validator": "^13.7.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==", + "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==", + "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, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", + "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/co": { + "version": "4.6.0", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/code-block-writer": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-12.0.0.tgz", + "integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==", + "dev": true + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/color": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "dev": true, + "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, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/colorspace": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "dev": true, + "license": "MIT" + }, + "node_modules/comment-parser": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "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==", + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/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, + "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/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/conventional-changelog-angular": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz", + "integrity": "sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==", + "dependencies": { + "compare-func": "^2.0.0" + }, + "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==", + "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/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/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==", + "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==", + "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/convert-source-map": { + "version": "1.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/convert-source-map/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/core-js-compat": { + "version": "3.31.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.1.tgz", + "integrity": "sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.9" + }, + "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==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cose-base": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", + "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", + "dependencies": { + "layout-base": "^1.0.0" + } + }, + "node_modules/cosmiconfig": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==", + "dev": true + }, + "node_modules/crypto-random-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + "dependencies": { + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/crypto-random-string/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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "dev": true, + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "dev": true, + "license": "MIT" + }, + "node_modules/cytoscape": { + "version": "3.25.0", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.25.0.tgz", + "integrity": "sha512-7MW3Iz57mCUo6JQCho6CmPBCbTlJr7LzyEtIkutG255HLVd4XuBg2I9BkTZLI/e4HoaOB/BiAzXuQybQ95+r9Q==", + "dependencies": { + "heap": "^0.2.6", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/cytoscape-cose-bilkent": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", + "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", + "dependencies": { + "cose-base": "^1.0.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", + "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", + "dependencies": { + "cose-base": "^2.2.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/cose-base": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", + "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", + "dependencies": { + "layout-base": "^2.0.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/layout-base": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", + "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==" + }, + "node_modules/cytoscape/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/d3": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", + "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==", + "dependencies": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "dependencies": { + "d3-path": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "dependencies": { + "d3-array": "^3.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "dependencies": { + "delaunator": "5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "dependencies": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/d3-dsv/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "dependencies": { + "d3-dsv": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", + "dependencies": { + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-sankey": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", + "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", + "dependencies": { + "d3-array": "1 - 2", + "d3-shape": "^1.2.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "dependencies": { + "internmap": "^1.0.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" + }, + "node_modules/d3-sankey/node_modules/d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/d3-sankey/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale-chromatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", + "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dagre-d3-es": { + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.10.tgz", + "integrity": "sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==", + "dependencies": { + "d3": "^7.8.2", + "lodash-es": "^4.17.21" + } + }, + "node_modules/dash-ast": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", + "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==", + "dev": true + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/data-urls": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "engines": { + "node": "*" + } + }, + "node_modules/dayjs": { + "version": "1.11.9", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", + "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==" + }, + "node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decache": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.2.tgz", + "integrity": "sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==", + "dev": true, + "dependencies": { + "callsite": "^1.0.0" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "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/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-eql": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delaunator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", + "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", + "dependencies": { + "robust-predicates": "^3.0.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/dfa": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", + "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", + "dev": true + }, + "node_modules/diff": { + "version": "3.5.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/discord-api-types": { + "version": "0.37.50", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.50.tgz", + "integrity": "sha512-X4CDiMnDbA3s3RaUXWXmgAIbY1uxab3fqe3qwzg5XutR3wjqi7M3IkgQbsIBzpqBN2YWr/Qdv7JrFRqSgb4TFg==", + "dev": true + }, + "node_modules/discord.js": { + "version": "14.13.0", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.13.0.tgz", + "integrity": "sha512-Kufdvg7fpyTEwANGy9x7i4od4yu5c6gVddGi5CKm4Y5a6sF0VBODObI3o0Bh7TGCj0LfNT8Qp8z04wnLFzgnbA==", + "dev": true, + "dependencies": { + "@discordjs/builders": "^1.6.5", + "@discordjs/collection": "^1.5.3", + "@discordjs/formatters": "^0.3.2", + "@discordjs/rest": "^2.0.1", + "@discordjs/util": "^1.0.1", + "@discordjs/ws": "^1.0.1", + "@sapphire/snowflake": "^3.5.1", + "@types/ws": "^8.5.5", + "discord-api-types": "0.37.50", + "fast-deep-equal": "^3.1.3", + "lodash.snakecase": "^4.1.1", + "tslib": "^2.6.1", + "undici": "5.22.1", + "ws": "^8.13.0" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/discord.js/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/discord.js/node_modules/ws": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", + "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domexception": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/dompurify": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.5.tgz", + "integrity": "sha512-F9e6wPGtY+8KNMRAVfxeCOHU0/NPWMSENNq4pQctuXRqqdEPW7q3CrLbR5Nse044WwacyjHGOMlvNsBe1y6z9A==" + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot": { + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/dot/-/dot-2.0.0-beta.1.tgz", + "integrity": "sha512-kxM7fSnNQTXOmaeGuBSXM8O3fEsBb7XSDBllkGbRwa0lJSJTxxDE/4eSNGLKZUmlFw0f1vJ5qSV2BljrgQtgIA==", + "dev": true + }, + "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==", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/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==", + "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/duplexer2/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==" + }, + "node_modules/duplexer2/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==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "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 + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.473", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.473.tgz", + "integrity": "sha512-aVfC8+440vGfl06l8HKKn8/PD5jRfSnLkTTD65EFvU46igbpQRri1gxSzW9/+TeUlwYzrXk1sw867T96zlyECA==", + "dev": true + }, + "node_modules/elkjs": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.8.2.tgz", + "integrity": "sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==" + }, + "node_modules/emittery": { + "version": "0.8.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/enabled": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-ci": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-9.1.1.tgz", + "integrity": "sha512-Im2yEWeF4b2RAMAaWvGioXk6m0UNaIjD8hj28j2ij5ldnIFrDQT0+pzDvpbRkcjurhXhf/AsBKv8P2rtmGi9Aw==", + "dependencies": { + "execa": "^7.0.0", + "java-properties": "^1.0.2" + }, + "engines": { + "node": "^16.14 || >=18" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.20.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "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/es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "node_modules/es6-object-assign": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", + "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", + "dev": true + }, + "node_modules/es6-set": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", + "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "es6-iterator": "~2.0.3", + "es6-symbol": "^3.1.3", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/es6-set/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "2.0.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint": { + "version": "7.32.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-module-utils": { + "version": "2.7.3", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-import": { + "version": "2.26.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-jest": { + "version": "24.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/experimental-utils": "^4.0.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": ">= 4", + "eslint": ">=5" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-jsdoc": { + "version": "31.6.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "comment-parser": "1.1.2", + "debug": "^4.3.1", + "jsdoctypeparser": "^9.0.0", + "lodash": "^4.17.20", + "regextras": "^0.7.1", + "semver": "^7.3.4", + "spdx-expression-parse": "^3.0.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0" + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/lodash": { + "version": "4.17.21", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-jsdoc/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-jsdoc/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "3.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "eslint": ">=5.0.0", + "prettier": ">=1.13.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-screeps": { + "version": "2.1.0", + "dev": true, + "license": "GPL-3.0", + "peerDependencies": { + "eslint": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/@babel/code-frame": { + "version": "7.12.11", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/eslint/node_modules/acorn": { + "version": "7.4.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/astral-regex": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "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/eslint/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "5.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint/node_modules/eslint-utils": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/espree": { + "version": "7.3.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/eslint/node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/file-entry-cache": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/eslint/node_modules/flat-cache": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/eslint/node_modules/flatted": { + "version": "3.2.5", + "dev": true, + "license": "ISC" + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/levn": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/optionator": { + "version": "0.9.1", + "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.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/prelude-ls": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/regexpp": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/eslint/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/slice-ansi": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/eslint/node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/table": { + "version": "6.8.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/eslint/node_modules/table/node_modules/ajv": { + "version": "8.11.0", + "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/eslint/node_modules/type-check": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-is-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz", + "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==", + "dev": true + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "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==", + "dev": true, + "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", + "dev": true, + "license": "MIT" + }, + "node_modules/execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/execa/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/fancy-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-2.0.0.tgz", + "integrity": "sha512-9CzxZbACXMUXW13tS0tI8XsGGmxWzO2DmYrGuBJOJ8k8q2K7hwfJA5qHjuPPe8wtsco33YR9wc+Rlr5wYFvhSA==", + "dev": true, + "dependencies": { + "color-support": "^1.1.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.2.0", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "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-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-xml-parser": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.7.tgz", + "integrity": "sha512-J8r6BriSLO1uj2miOk1NW0YVm8AGOOu3Si2HQp/cSmo6EA4m3fcwu2WKjJ4RK9wMLBtg69y1kS8baDiQBR41Ig==", + "dev": true, + "funding": [ + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fastestsmallesttextencoderdecoder-encodeinto": { + "version": "1.0.22", + "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder-encodeinto/-/fastestsmallesttextencoderdecoder-encodeinto-1.0.22.tgz", + "integrity": "sha512-csOz3cwJjZY75QcPHnY+v6cKWeofYCmhtLVYaurjcRn5vaNXoYe1Leo1ZkiZIxZp796+J5Z+TtmeMbbfYBfiiQ==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fecha": { + "version": "4.2.3", + "dev": true, + "license": "MIT" + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/figures": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", + "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", + "dependencies": { + "escape-string-regexp": "^5.0.0", + "is-unicode-supported": "^1.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/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==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/find-versions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz", + "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==", + "dependencies": { + "semver-regex": "^4.0.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fn.name": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/follow-redirects": { + "version": "1.15.1", + "dev": true, + "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, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "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.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.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==", + "dev": true + }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/from2/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==", + "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/from2/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==" + }, + "node_modules/from2/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==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "dev": 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.1", + "license": "MIT" + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-assigned-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", + "dev": true + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-port": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-6.1.2.tgz", + "integrity": "sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-port-please": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.1.1.tgz", + "integrity": "sha512-3UBAyM3u4ZBVYDsxOQfJDxEa6XTbpBDrOjp4mf7ExFRt5BKs/QywQQiJsh2B+hxcZLSapWqCRvElUe8DnKcFHA==", + "dev": true + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/git-log-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.0.tgz", + "integrity": "sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA==", + "dependencies": { + "argv-formatter": "~1.0.0", + "spawn-error-forwarder": "~1.0.0", + "split2": "~1.0.0", + "stream-combiner2": "~1.1.1", + "through2": "~2.0.0", + "traverse": "~0.6.6" + } + }, + "node_modules/git-log-parser/node_modules/split2": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", + "integrity": "sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==", + "dependencies": { + "through2": "~2.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "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/glob-parent": { + "version": "5.1.2", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "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/globby/node_modules/ignore": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "license": "ISC" + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "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==", + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" + }, + "node_modules/hook-std": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-3.0.0.tgz", + "integrity": "sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/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==", + "engines": { + "node": ">=12" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-auth": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-4.1.9.tgz", + "integrity": "sha512-kvPYxNGc9EKGTXvOMnTBQw2RZfuiSihK/mLw/a4pbtRueTE45S55Lw/3k5CktIf7Ak0veMKEIteDj4YkNmCzmQ==", + "dev": true, + "dependencies": { + "apache-crypt": "^1.1.2", + "apache-md5": "^1.0.6", + "bcryptjs": "^2.4.3", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/http-auth-connect": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/http-auth-connect/-/http-auth-connect-1.0.6.tgz", + "integrity": "sha512-yaO0QSCPqGCjPrl3qEEHjJP+lwZ6gMpXLuCBE06eWwcXomkI5TARtu0kxf9teFuBj6iaV3Ybr15jaWUvbzNzHw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/http-auth/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/http-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/human-signals": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/i18next": { + "version": "22.5.1", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.5.1.tgz", + "integrity": "sha512-8TGPgM3pAD+VRsMtUMNknRz3kzqwp/gPALrWMsDnmC1mKqJwpWyooQRLMcbTwq8z8YwSmuj+ZYvc+xCuEpkssA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://locize.com" + }, + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + } + ], + "dependencies": { + "@babel/runtime": "^7.20.6" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "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" + } + ] + }, + "node_modules/ignore": { + "version": "4.0.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "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-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz", + "integrity": "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==", + "engines": { + "node": ">=12.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "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", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "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==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "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==" + }, + "node_modules/inside": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/inside/-/inside-1.0.0.tgz", + "integrity": "sha512-tvFwvS4g7q6iDot/4FjtWFHwwpv6TVvEumbTdLQilk1F07ojakbXPQcvf3kMAlyNDpzKRzn+d33O3RuXODuxZQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/interpret": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/into-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-7.0.0.tgz", + "integrity": "sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==", + "dependencies": { + "from2": "^2.3.0", + "p-is-promise": "^3.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inversify": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/inversify/-/inversify-6.0.1.tgz", + "integrity": "sha512-B3ex30927698TJENHR++8FfEaJGqoWOgI6ZY5Ht/nLUsFCwHn6akbwtnUAPCgUepAnTpe2qHxhDNjoKLyz6rgQ==", + "dev": true + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": 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-arrayish": { + "version": "0.2.1", + "license": "MIT" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "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-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-builtin-module": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "builtin-modules": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-callable": { + "version": "1.2.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.9.0", + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "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", + "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", + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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, + "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", + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "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==", + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", + "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "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-shared-array-buffer": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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==", + "dependencies": { + "text-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "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==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/issue-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-6.0.0.tgz", + "integrity": "sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==", + "dependencies": { + "lodash.capitalize": "^4.2.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.uniqby": "^4.7.0" + }, + "engines": { + "node": ">=10.13" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/istanbul-reports": { + "version": "3.1.4", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.2.tgz", + "integrity": "sha512-mgNtVv4vUuaKA97yxUHoA3+FkuhtxkjdXEWOyB/N76fjy0FjezEt34oy3epBtvCvS+7DyKwqCFWx/oJLV5+kCg==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/java-properties": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", + "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/javascript-obfuscator": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/javascript-obfuscator/-/javascript-obfuscator-4.0.2.tgz", + "integrity": "sha512-MRBQREvjEwqEGdwNGG7yp0te5uZBFzrPZdxEs4rDYkPpHhhOQu+E0IhSXP7bO9dIUWXZU0Kkdohsuws525aVGQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@javascript-obfuscator/escodegen": "2.3.0", + "@javascript-obfuscator/estraverse": "5.4.0", + "acorn": "8.8.2", + "assert": "2.0.0", + "chalk": "4.1.2", + "chance": "1.1.9", + "class-validator": "0.14.0", + "commander": "10.0.0", + "eslint-scope": "7.1.1", + "eslint-visitor-keys": "3.3.0", + "fast-deep-equal": "3.1.3", + "inversify": "6.0.1", + "js-string-escape": "1.0.1", + "md5": "2.3.0", + "mkdirp": "2.1.3", + "multimatch": "5.0.0", + "opencollective-postinstall": "2.0.3", + "process": "0.11.10", + "reflect-metadata": "0.1.13", + "source-map-support": "0.5.21", + "string-template": "1.0.0", + "stringz": "2.1.0", + "tslib": "2.5.0" + }, + "bin": { + "javascript-obfuscator": "bin/javascript-obfuscator" + }, + "engines": { + "node": "^12.22.0 || ^14.0.0 || ^16.0.0 || ^17.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/javascript-obfuscator" + } + }, + "node_modules/javascript-obfuscator/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/javascript-obfuscator/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/javascript-obfuscator/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/javascript-obfuscator/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/javascript-obfuscator/node_modules/commander": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", + "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/javascript-obfuscator/node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/javascript-obfuscator/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/javascript-obfuscator/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/javascript-obfuscator/node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "dev": true + }, + "node_modules/jest": { + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.1.0.tgz", + "integrity": "sha512-pSQDVwRSwb109Ss13lcMtdfS9r8/w2Zz8+mTUA9VORD66GflCdl8nUFCqM96geOD2EBwWCNURrNAfQsLIDNBdg==", + "dev": true, + "dependencies": { + "@jest/core": "^27.1.0", + "import-local": "^3.0.2", + "jest-cli": "^27.1.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/execa": { + "version": "5.1.1", + "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/jest-changed-files/node_modules/mimic-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-changed-files/node_modules/npm-run-path": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/onetime": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-circus": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "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/jest-circus/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-circus/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-circus/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "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/jest-config/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-config/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-config/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-config/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "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/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-docblock": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "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/jest-each/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-each/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-each/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-jasmine2/node_modules/chalk": { + "version": "4.1.2", + "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/jest-jasmine2/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-jasmine2/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-leak-detector": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "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/jest-matcher-utils/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-matcher-utils/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "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/jest-message-util/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-message-util/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "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/jest-resolve/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-resolve/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-resolve/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "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/jest-runner/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runner/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-runner/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "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/jest-runtime/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runtime/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-runtime/node_modules/execa": { + "version": "5.1.1", + "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/jest-runtime/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/mimic-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-runtime/node_modules/npm-run-path": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/onetime": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-runtime/node_modules/strip-bom": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-serializer": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "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/jest-snapshot/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-snapshot/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "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/jest-util/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-util/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "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/jest-validate/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-validate/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/node_modules/ansi-escapes": { + "version": "4.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "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/jest-watcher/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watcher/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-watcher/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/type-fest": { + "version": "0.21.3", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "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/jest/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest/node_modules/chalk": { + "version": "4.1.2", + "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/jest/node_modules/cliui": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/jest/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/jest-cli": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/yargs": { + "version": "16.2.0", + "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/js-string-escape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", + "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdoctypeparser": { + "version": "9.0.0", + "dev": true, + "license": "MIT", + "bin": { + "jsdoctypeparser": "bin/jsdoctypeparser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsdom": { + "version": "16.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/form-data": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsdom/node_modules/tough-cookie": { + "version": "4.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-beautify": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/json-beautify/-/json-beautify-1.1.1.tgz", + "integrity": "sha512-17j+Hk2lado0xqKtUcyAjK0AtoHnPSIgktWRsEXgdFQFG9UnaGw6CHa0J7xsvulxRpFl6CrkDFHght1p5ZJc4A==", + "dev": true, + "bin": { + "json-beautify": "bin/json-beautify" + } + }, + "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==" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "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==" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "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==", + "engines": [ + "node >= 0.2.0" + ] + }, + "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==", + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/just-extend": { + "version": "4.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/khroma": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz", + "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==" + }, + "node_modules/kind-of": { + "version": "6.0.3", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/kuler": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/layout-base": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==" + }, + "node_modules/leven": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/libphonenumber-js": { + "version": "1.10.37", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.37.tgz", + "integrity": "sha512-Z10PCaOCiAxbUxLyR31DNeeNugSVP6iv/m7UrSKS5JHziEMApJtgku4e9Q69pzzSC9LnQiM09sqsGf2ticZnMw==", + "dev": true + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "license": "MIT" + }, + "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==", + "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/load-json-file/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==", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/locate-path": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lodash": { + "version": "3.10.1", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash.capitalize": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", + "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==" + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "dev": true, + "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==" + }, + "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==" + }, + "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==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.uniqby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", + "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==" + }, + "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, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logform": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@colors/colors": "1.5.0", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + } + }, + "node_modules/logform/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/loglevel": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", + "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" + } + }, + "node_modules/loglevel-plugin-prefix": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", + "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", + "dev": true + }, + "node_modules/lolex": { + "version": "2.7.5", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/loupe": { + "version": "2.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "node_modules/macos-release": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.1.tgz", + "integrity": "sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/magic-bytes.js": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.0.17.tgz", + "integrity": "sha512-PEDpPzHpKe5AxkVmQrNPHFRvPN2ELkkj3eIg4IZO9JdhBiAY3aU53lgYXs9j8B7lpza+QiW0UA4QHCH7EskSeg==", + "dev": true + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "dev": true, + "license": "ISC" + }, + "node_modules/makeerror": { + "version": "1.0.12", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "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==", + "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==", + "dev": true + }, + "node_modules/marked": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-5.1.2.tgz", + "integrity": "sha512-ahRPGXJpjMjwSOlBoTMZAK7ATXkli5qCPxZ21TG44rx1KEo44bii4ekgTDQPNRQ4Kh7JMb9Ub1PVk1NxRSsorg==", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 16" + } + }, + "node_modules/marked-terminal": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-5.2.0.tgz", + "integrity": "sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA==", + "dependencies": { + "ansi-escapes": "^6.2.0", + "cardinal": "^2.1.1", + "chalk": "^5.2.0", + "cli-table3": "^0.6.3", + "node-emoji": "^1.11.0", + "supports-hyperlinks": "^2.3.0" + }, + "engines": { + "node": ">=14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "marked": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/marked-terminal/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dev": true, + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", + "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", + "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "dependencies": { + "@types/mdast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "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/meow/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/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==" + }, + "node_modules/meow/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/meow/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/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==", + "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/meow/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==", + "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/meow/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/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==", + "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/meow/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/meow/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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-source-map": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", + "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", + "dev": true, + "dependencies": { + "source-map": "^0.5.6" + } + }, + "node_modules/merge-source-map/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/mermaid": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.3.0.tgz", + "integrity": "sha512-H5quxuQjwXC8M1WuuzhAp2TdqGg74t5skfDBrNKJ7dt3z8Wprl5S6h9VJsRhoBUTSs1TMtHEdplLhCqXleZZLw==", + "dependencies": { + "@braintree/sanitize-url": "^6.0.2", + "@types/d3-scale": "^4.0.3", + "@types/d3-scale-chromatic": "^3.0.0", + "cytoscape": "^3.23.0", + "cytoscape-cose-bilkent": "^4.1.0", + "cytoscape-fcose": "^2.1.0", + "d3": "^7.4.0", + "d3-sankey": "^0.12.3", + "dagre-d3-es": "7.0.10", + "dayjs": "^1.11.7", + "dompurify": "3.0.5", + "elkjs": "^0.8.2", + "khroma": "^2.0.0", + "lodash-es": "^4.17.21", + "mdast-util-from-markdown": "^1.3.0", + "non-layered-tidy-tree-layout": "^2.0.2", + "stylis": "^4.1.3", + "ts-dedent": "^2.2.0", + "uuid": "^9.0.0", + "web-worker": "^1.2.0" + } + }, + "node_modules/micromark": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", + "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", + "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-factory-destination": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", + "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", + "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", + "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", + "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", + "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", + "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", + "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", + "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", + "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", + "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", + "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", + "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-html-tag-name": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", + "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", + "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", + "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", + "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", + "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", + "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/micromark/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "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==", + "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==", + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/minipass": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz", + "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.3.tgz", + "integrity": "sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw==", + "dev": true, + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dev": true, + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "dev": true, + "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, + "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/nanoid": { + "version": "3.3.4", + "dev": true, + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/ncp": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "bin": { + "ncp": "bin/ncp" + } + }, + "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, + "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==" + }, + "node_modules/nerf-dart": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", + "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==" + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, + "node_modules/nise": { + "version": "1.5.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/formatio": "^3.2.1", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "lolex": "^5.0.1", + "path-to-regexp": "^1.7.0" + } + }, + "node_modules/nise/node_modules/isarray": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/nise/node_modules/lolex": { + "version": "5.1.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/nise/node_modules/path-to-regexp": { + "version": "1.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "isarray": "0.0.1" + } + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/node-emoji/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "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-fetch/node_modules/tr46": { + "version": "0.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.4.0", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/node-powershell": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "child-shell": "^5.0.0", + "is-wsl": "^2.2.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, + "node_modules/non-layered-tidy-tree-layout": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", + "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" + }, + "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==", + "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-package-data/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==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", + "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm": { + "version": "9.8.1", + "resolved": "https://registry.npmjs.org/npm/-/npm-9.8.1.tgz", + "integrity": "sha512-AfDvThQzsIXhYgk9zhbk5R+lh811lKkLAeQMMhSypf1BM7zUafeIIBzMzespeuVEJ0+LvY36oRQYf7IKLzU3rw==", + "bundleDependencies": [ + "@isaacs/string-locale-compare", + "@npmcli/arborist", + "@npmcli/config", + "@npmcli/fs", + "@npmcli/map-workspaces", + "@npmcli/package-json", + "@npmcli/promise-spawn", + "@npmcli/run-script", + "abbrev", + "archy", + "cacache", + "chalk", + "ci-info", + "cli-columns", + "cli-table3", + "columnify", + "fastest-levenshtein", + "fs-minipass", + "glob", + "graceful-fs", + "hosted-git-info", + "ini", + "init-package-json", + "is-cidr", + "json-parse-even-better-errors", + "libnpmaccess", + "libnpmdiff", + "libnpmexec", + "libnpmfund", + "libnpmhook", + "libnpmorg", + "libnpmpack", + "libnpmpublish", + "libnpmsearch", + "libnpmteam", + "libnpmversion", + "make-fetch-happen", + "minimatch", + "minipass", + "minipass-pipeline", + "ms", + "node-gyp", + "nopt", + "npm-audit-report", + "npm-install-checks", + "npm-package-arg", + "npm-pick-manifest", + "npm-profile", + "npm-registry-fetch", + "npm-user-validate", + "npmlog", + "p-map", + "pacote", + "parse-conflict-json", + "proc-log", + "qrcode-terminal", + "read", + "semver", + "sigstore", + "ssri", + "supports-color", + "tar", + "text-table", + "tiny-relative-date", + "treeverse", + "validate-npm-package-name", + "which", + "write-file-atomic" + ], + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^6.3.0", + "@npmcli/config": "^6.2.1", + "@npmcli/fs": "^3.1.0", + "@npmcli/map-workspaces": "^3.0.4", + "@npmcli/package-json": "^4.0.1", + "@npmcli/promise-spawn": "^6.0.2", + "@npmcli/run-script": "^6.0.2", + "abbrev": "^2.0.0", + "archy": "~1.0.0", + "cacache": "^17.1.3", + "chalk": "^5.3.0", + "ci-info": "^3.8.0", + "cli-columns": "^4.0.0", + "cli-table3": "^0.6.3", + "columnify": "^1.6.0", + "fastest-levenshtein": "^1.0.16", + "fs-minipass": "^3.0.2", + "glob": "^10.2.7", + "graceful-fs": "^4.2.11", + "hosted-git-info": "^6.1.1", + "ini": "^4.1.1", + "init-package-json": "^5.0.0", + "is-cidr": "^4.0.2", + "json-parse-even-better-errors": "^3.0.0", + "libnpmaccess": "^7.0.2", + "libnpmdiff": "^5.0.19", + "libnpmexec": "^6.0.3", + "libnpmfund": "^4.0.19", + "libnpmhook": "^9.0.3", + "libnpmorg": "^5.0.4", + "libnpmpack": "^5.0.19", + "libnpmpublish": "^7.5.0", + "libnpmsearch": "^6.0.2", + "libnpmteam": "^5.0.3", + "libnpmversion": "^4.0.2", + "make-fetch-happen": "^11.1.1", + "minimatch": "^9.0.3", + "minipass": "^5.0.0", + "minipass-pipeline": "^1.2.4", + "ms": "^2.1.2", + "node-gyp": "^9.4.0", + "nopt": "^7.2.0", + "npm-audit-report": "^5.0.0", + "npm-install-checks": "^6.1.1", + "npm-package-arg": "^10.1.0", + "npm-pick-manifest": "^8.0.1", + "npm-profile": "^7.0.1", + "npm-registry-fetch": "^14.0.5", + "npm-user-validate": "^2.0.0", + "npmlog": "^7.0.1", + "p-map": "^4.0.0", + "pacote": "^15.2.0", + "parse-conflict-json": "^3.0.1", + "proc-log": "^3.0.0", + "qrcode-terminal": "^0.12.0", + "read": "^2.1.0", + "semver": "^7.5.4", + "sigstore": "^1.7.0", + "ssri": "^10.0.4", + "supports-color": "^9.4.0", + "tar": "^6.1.15", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "treeverse": "^3.0.0", + "validate-npm-package-name": "^5.0.0", + "which": "^3.0.1", + "write-file-atomic": "^5.0.1" + }, + "bin": { + "npm": "bin/npm-cli.js", + "npx": "bin/npx-cli.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/@colors/colors": { + "version": "1.5.0", + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui": { + "version": "8.0.2", + "inBundle": 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/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "inBundle": 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/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/@npmcli/arborist": { + "version": "6.3.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^3.1.0", + "@npmcli/installed-package-contents": "^2.0.2", + "@npmcli/map-workspaces": "^3.0.2", + "@npmcli/metavuln-calculator": "^5.0.0", + "@npmcli/name-from-folder": "^2.0.0", + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^4.0.0", + "@npmcli/query": "^3.0.0", + "@npmcli/run-script": "^6.0.0", + "bin-links": "^4.0.1", + "cacache": "^17.0.4", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^6.1.1", + "json-parse-even-better-errors": "^3.0.0", + "json-stringify-nice": "^1.1.4", + "minimatch": "^9.0.0", + "nopt": "^7.0.0", + "npm-install-checks": "^6.0.0", + "npm-package-arg": "^10.1.0", + "npm-pick-manifest": "^8.0.1", + "npm-registry-fetch": "^14.0.3", + "npmlog": "^7.0.1", + "pacote": "^15.0.8", + "parse-conflict-json": "^3.0.0", + "proc-log": "^3.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.2", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^10.0.1", + "treeverse": "^3.0.0", + "walk-up-path": "^3.0.1" + }, + "bin": { + "arborist": "bin/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/config": { + "version": "6.2.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/map-workspaces": "^3.0.2", + "ci-info": "^3.8.0", + "ini": "^4.1.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.5", + "walk-up-path": "^3.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/disparity-colors": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "ansi-styles": "^4.3.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/fs": { + "version": "3.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/git": { + "version": "4.1.0", + "inBundle": 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/npm/node_modules/@npmcli/installed-package-contents": { + "version": "2.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "lib/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/map-workspaces": { + "version": "3.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/name-from-folder": "^2.0.0", + "glob": "^10.2.2", + "minimatch": "^9.0.0", + "read-package-json-fast": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { + "version": "5.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cacache": "^17.0.0", + "json-parse-even-better-errors": "^3.0.0", + "pacote": "^15.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/name-from-folder": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/package-json": { + "version": "4.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^4.1.0", + "glob": "^10.2.2", + "hosted-git-info": "^6.1.1", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "proc-log": "^3.0.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/promise-spawn": { + "version": "6.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/query": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/run-script": { + "version": "6.0.2", + "inBundle": 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/npm/node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/npm/node_modules/@sigstore/protobuf-specs": { + "version": "0.1.0", + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@sigstore/tuf": { + "version": "1.0.2", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.1.0", + "tuf-js": "^1.1.7" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@tootallnate/once": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm/node_modules/@tufjs/canonical-json": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@tufjs/models": { + "version": "1.0.4", + "inBundle": 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/npm/node_modules/abbrev": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/abort-controller": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/npm/node_modules/agent-base": { + "version": "6.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/npm/node_modules/agentkeepalive": { + "version": "4.3.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/npm/node_modules/aggregate-error": { + "version": "3.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/ansi-regex": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/ansi-styles": { + "version": "4.3.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm/node_modules/aproba": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/archy": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/are-we-there-yet": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^4.1.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/balanced-match": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/bin-links": { + "version": "4.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cmd-shim": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "read-cmd-shim": "^4.0.0", + "write-file-atomic": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/binary-extensions": { + "version": "2.2.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/brace-expansion": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/npm/node_modules/buffer": { + "version": "6.0.3", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/npm/node_modules/builtins": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/npm/node_modules/cacache": { + "version": "17.1.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "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/node_modules/chalk": { + "version": "5.3.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/npm/node_modules/chownr": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/ci-info": { + "version": "3.8.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/cidr-regex": { + "version": "3.1.1", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "ip-regex": "^4.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/clean-stack": { + "version": "2.2.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/npm/node_modules/cli-columns": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm/node_modules/cli-table3": { + "version": "0.6.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/npm/node_modules/clone": { + "version": "1.0.4", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/npm/node_modules/cmd-shim": { + "version": "6.0.1", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/color-convert": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/npm/node_modules/color-name": { + "version": "1.1.4", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/color-support": { + "version": "1.1.3", + "inBundle": true, + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/npm/node_modules/columnify": { + "version": "1.6.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/npm/node_modules/common-ancestor-path": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/concat-map": { + "version": "0.0.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/console-control-strings": { + "version": "1.1.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/cross-spawn": { + "version": "7.0.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/cssesc": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm/node_modules/debug": { + "version": "4.3.4", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/npm/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/defaults": { + "version": "1.0.4", + "inBundle": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/delegates": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/depd": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/npm/node_modules/diff": { + "version": "5.1.0", + "inBundle": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/npm/node_modules/eastasianwidth": { + "version": "0.2.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/emoji-regex": { + "version": "8.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/encoding": { + "version": "0.1.13", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/npm/node_modules/env-paths": { + "version": "2.2.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/npm/node_modules/err-code": { + "version": "2.0.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/event-target-shim": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/npm/node_modules/events": { + "version": "3.3.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/npm/node_modules/exponential-backoff": { + "version": "3.1.1", + "inBundle": true, + "license": "Apache-2.0" + }, + "node_modules/npm/node_modules/fastest-levenshtein": { + "version": "1.0.16", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/npm/node_modules/foreground-child": { + "version": "3.1.1", + "inBundle": 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/npm/node_modules/fs-minipass": { + "version": "3.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/fs.realpath": { + "version": "1.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/function-bind": { + "version": "1.1.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/gauge": { + "version": "5.0.1", + "inBundle": 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": "^4.0.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/glob": { + "version": "10.2.7", + "inBundle": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/graceful-fs": { + "version": "4.2.11", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/has": { + "version": "1.0.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/npm/node_modules/has-unicode": { + "version": "2.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/hosted-git-info": { + "version": "6.1.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/http-cache-semantics": { + "version": "4.1.1", + "inBundle": true, + "license": "BSD-2-Clause" + }, + "node_modules/npm/node_modules/http-proxy-agent": { + "version": "5.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/npm/node_modules/https-proxy-agent": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/npm/node_modules/humanize-ms": { + "version": "1.2.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/npm/node_modules/iconv-lite": { + "version": "0.6.3", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/ieee754": { + "version": "1.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "BSD-3-Clause" + }, + "node_modules/npm/node_modules/ignore-walk": { + "version": "6.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/imurmurhash": { + "version": "0.1.4", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/npm/node_modules/indent-string": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/inflight": { + "version": "1.0.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/npm/node_modules/inherits": { + "version": "2.0.4", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/ini": { + "version": "4.1.1", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/init-package-json": { + "version": "5.0.0", + "inBundle": 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/npm/node_modules/ip": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/ip-regex": { + "version": "4.3.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/is-cidr": { + "version": "4.0.2", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "cidr-regex": "^3.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/is-core-module": { + "version": "2.12.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/npm/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/is-lambda": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/isexe": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/jackspeak": { + "version": "2.2.1", + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/npm/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/json-stringify-nice": { + "version": "1.1.4", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/jsonparse": { + "version": "1.3.1", + "engines": [ + "node >= 0.2.0" + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff": { + "version": "6.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff-apply": { + "version": "5.5.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/libnpmaccess": { + "version": "7.0.2", + "inBundle": 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/npm/node_modules/libnpmdiff": { + "version": "5.0.19", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^6.3.0", + "@npmcli/disparity-colors": "^3.0.0", + "@npmcli/installed-package-contents": "^2.0.2", + "binary-extensions": "^2.2.0", + "diff": "^5.1.0", + "minimatch": "^9.0.0", + "npm-package-arg": "^10.1.0", + "pacote": "^15.0.8", + "tar": "^6.1.13" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmexec": { + "version": "6.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^6.3.0", + "@npmcli/run-script": "^6.0.0", + "ci-info": "^3.7.1", + "npm-package-arg": "^10.1.0", + "npmlog": "^7.0.1", + "pacote": "^15.0.8", + "proc-log": "^3.0.0", + "read": "^2.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "walk-up-path": "^3.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmfund": { + "version": "4.0.19", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^6.3.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmhook": { + "version": "9.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmorg": { + "version": "5.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmpack": { + "version": "5.0.19", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^6.3.0", + "@npmcli/run-script": "^6.0.0", + "npm-package-arg": "^10.1.0", + "pacote": "^15.0.8" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmpublish": { + "version": "7.5.0", + "inBundle": 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/npm/node_modules/libnpmsearch": { + "version": "6.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^14.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmteam": { + "version": "5.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmversion": { + "version": "4.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^4.0.1", + "@npmcli/run-script": "^6.0.0", + "json-parse-even-better-errors": "^3.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/lru-cache": { + "version": "7.18.3", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/npm/node_modules/make-fetch-happen": { + "version": "11.1.1", + "inBundle": 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/node_modules/minimatch": { + "version": "9.0.3", + "inBundle": 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/node_modules/minipass": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-collect": { + "version": "1.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-fetch": { + "version": "3.0.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^5.0.0", + "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/node_modules/minipass-flush": { + "version": "1.0.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-json-stream": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/npm/node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-pipeline": { + "version": "1.2.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-sized": { + "version": "1.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minizlib": { + "version": "2.1.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/mkdirp": { + "version": "1.0.4", + "inBundle": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/ms": { + "version": "2.1.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/mute-stream": { + "version": "1.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/negotiator": { + "version": "0.6.3", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/npm/node_modules/node-gyp": { + "version": "9.4.0", + "inBundle": 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": "^11.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/npm/node_modules/node-gyp/node_modules/abbrev": { + "version": "1.1.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/node-gyp/node_modules/are-we-there-yet": { + "version": "3.0.1", + "inBundle": 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/npm/node_modules/node-gyp/node_modules/brace-expansion": { + "version": "1.1.11", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/gauge": { + "version": "4.0.4", + "inBundle": 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/npm/node_modules/node-gyp/node_modules/glob": { + "version": "7.2.3", + "inBundle": 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/npm/node_modules/node-gyp/node_modules/minimatch": { + "version": "3.1.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/nopt": { + "version": "6.0.0", + "inBundle": 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/npm/node_modules/node-gyp/node_modules/npmlog": { + "version": "6.0.2", + "inBundle": 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/npm/node_modules/node-gyp/node_modules/readable-stream": { + "version": "3.6.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/signal-exit": { + "version": "3.0.7", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/node-gyp/node_modules/which": { + "version": "2.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/nopt": { + "version": "7.2.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/normalize-package-data": { + "version": "5.0.0", + "inBundle": 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/npm/node_modules/npm-audit-report": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-bundled": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-install-checks": { + "version": "6.1.1", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-package-arg": { + "version": "10.1.0", + "inBundle": 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/node_modules/npm-packlist": { + "version": "7.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^6.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-pick-manifest": { + "version": "8.0.1", + "inBundle": 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/node_modules/npm-profile": { + "version": "7.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-registry-fetch": { + "version": "14.0.5", + "inBundle": 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/node_modules/npm-user-validate": { + "version": "2.0.0", + "inBundle": true, + "license": "BSD-2-Clause", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npmlog": { + "version": "7.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^4.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^5.0.0", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/once": { + "version": "1.4.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/npm/node_modules/p-map": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/pacote": { + "version": "15.2.0", + "inBundle": 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/npm/node_modules/parse-conflict-json": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/path-is-absolute": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/path-key": { + "version": "3.1.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/path-scurry": { + "version": "1.9.2", + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^9.1.1", + "minipass": "^5.0.0 || ^6.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/path-scurry/node_modules/lru-cache": { + "version": "9.1.1", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/npm/node_modules/postcss-selector-parser": { + "version": "6.0.13", + "inBundle": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm/node_modules/proc-log": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/process": { + "version": "0.11.10", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/npm/node_modules/promise-all-reject-late": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/promise-call-limit": { + "version": "1.0.2", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/promise-inflight": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/promise-retry": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/promzard": { + "version": "1.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "read": "^2.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/qrcode-terminal": { + "version": "0.12.0", + "inBundle": true, + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/npm/node_modules/read": { + "version": "2.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "mute-stream": "~1.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/read-cmd-shim": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/read-package-json": { + "version": "6.0.4", + "inBundle": 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/npm/node_modules/read-package-json-fast": { + "version": "3.0.2", + "inBundle": 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/npm/node_modules/readable-stream": { + "version": "4.4.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/retry": { + "version": "0.12.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm/node_modules/rimraf": { + "version": "3.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/npm/node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "inBundle": 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/npm/node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/npm/node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/safer-buffer": { + "version": "2.1.2", + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/npm/node_modules/semver": { + "version": "7.5.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/set-blocking": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/shebang-command": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/shebang-regex": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/signal-exit": { + "version": "4.0.2", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/sigstore": { + "version": "1.7.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.1.0", + "@sigstore/tuf": "^1.0.1", + "make-fetch-happen": "^11.0.1" + }, + "bin": { + "sigstore": "bin/sigstore.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/smart-buffer": { + "version": "4.2.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/npm/node_modules/socks": { + "version": "2.7.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/npm/node_modules/socks-proxy-agent": { + "version": "7.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm/node_modules/spdx-correct": { + "version": "3.2.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-exceptions": { + "version": "2.3.0", + "inBundle": true, + "license": "CC-BY-3.0" + }, + "node_modules/npm/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-license-ids": { + "version": "3.0.13", + "inBundle": true, + "license": "CC0-1.0" + }, + "node_modules/npm/node_modules/ssri": { + "version": "10.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/string_decoder": { + "version": "1.3.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/npm/node_modules/string-width": { + "version": "4.2.3", + "inBundle": 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/npm/node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "inBundle": 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/npm/node_modules/strip-ansi": { + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/supports-color": { + "version": "9.4.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/npm/node_modules/tar": { + "version": "6.1.15", + "inBundle": true, + "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" + } + }, + "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/text-table": { + "version": "0.2.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/tiny-relative-date": { + "version": "1.3.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/treeverse": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/tuf-js": { + "version": "1.1.7", + "inBundle": 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/npm/node_modules/unique-filename": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/unique-slug": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/util-deprecate": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/validate-npm-package-license": { + "version": "3.0.4", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/npm/node_modules/validate-npm-package-name": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/walk-up-path": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/wcwidth": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/npm/node_modules/which": { + "version": "3.0.1", + "inBundle": 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/npm/node_modules/wide-align": { + "version": "1.1.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/npm/node_modules/wrap-ansi": { + "version": "8.1.0", + "inBundle": 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/npm/node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "inBundle": 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/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "inBundle": 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/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrappy": { + "version": "1.0.2", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/write-file-atomic": { + "version": "5.0.1", + "inBundle": 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/npm/node_modules/yallist": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "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/opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", + "dev": true, + "bin": { + "opencollective-postinstall": "index.js" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "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, + "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/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-name": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz", + "integrity": "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==", + "dev": true, + "dependencies": { + "macos-release": "^2.5.0", + "windows-release": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-each-series": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz", + "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==", + "engines": { + "node": ">=12" + }, + "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==", + "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", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-is-promise": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", + "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-limit": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-locate": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "dependencies": { + "aggregate-error": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "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-queue/node_modules/p-timeout": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-reduce": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", + "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/p-try": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "dev": true + }, + "node_modules/parent-module": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dev": true, + "dependencies": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pastebin-api": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/pastebin-api/-/pastebin-api-5.1.6.tgz", + "integrity": "sha512-FI2ZeXLxroI2tuRVd5LI7eNmiANFxDOdlhXxSMqtOXTJn1KSt2UC8kglhndUOOPt6p9XPVnuS7XGW/KbiBbbzw==", + "dev": true, + "dependencies": { + "fast-xml-parser": "^4.1.3", + "undici": "^5.21.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "node_modules/path-exists": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", + "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "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==", + "dev": true, + "dependencies": { + "through": "~2.3" + } + }, + "node_modules/pdfjs-dist": { + "version": "2.12.313", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.12.313.tgz", + "integrity": "sha512-1x6iXO4Qnv6Eb+YFdN5JdUzt4pAkxSp3aLAYPX93eQCyg/m7QFzXVWJHJVtoW48CI8HCXju4dSkhQZwoheL5mA==", + "dev": true, + "peerDependencies": { + "worker-loader": "^3.0.8" + }, + "peerDependenciesMeta": { + "worker-loader": { + "optional": true + } + } + }, + "node_modules/pdfmake": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/pdfmake/-/pdfmake-0.2.7.tgz", + "integrity": "sha512-ClLpgx30H5G3EDvRW1MrA1Xih6YxEaSgIVFrOyBMgAAt62V+hxsyWAi6JNP7u1Fc5JKYAbpb4RRVw8Rhvmz5cQ==", + "dev": true, + "dependencies": { + "@foliojs-fork/linebreak": "^1.1.1", + "@foliojs-fork/pdfkit": "^0.13.0", + "iconv-lite": "^0.6.3", + "xmldoc": "^1.1.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/pdfmake/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, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/pirates": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-conf": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", + "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", + "dependencies": { + "find-up": "^2.0.0", + "load-json-file": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "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", + "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", + "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", + "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", + "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", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/png-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz", + "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==", + "dev": true + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.7.1", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.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==" + }, + "node_modules/progress": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" + }, + "node_modules/proxy-middleware": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", + "integrity": "sha512-EGCG8SeoIRVMhsqHQUdDigB2i7qU7fCsWASwn54+nPutYO8n4q6EiwMzyfWlC+dzRFExP+kvcnDFdBDHoZBU7Q==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/psl": { + "version": "1.8.0", + "dev": true, + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "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": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "engines": { + "node": ">=8" + } + }, + "node_modules/quote-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", + "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==", + "dev": true, + "dependencies": { + "buffer-equal": "0.0.1", + "minimist": "^1.1.3", + "through2": "^2.0.0" + }, + "bin": { + "quote-stream": "bin/cmd.js" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/read-pkg": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-8.0.0.tgz", + "integrity": "sha512-Ajb9oSjxXBw0YyOiwtQ2dKbAA/vMnUPnY63XcCk+mXo0BwIdQEMgZLZiMWGttQHcUhUgbK0mH85ethMPKXxziw==", + "dependencies": { + "@types/normalize-package-data": "^2.4.1", + "normalize-package-data": "^5.0.0", + "parse-json": "^7.0.0", + "type-fest": "^3.8.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-10.0.0.tgz", + "integrity": "sha512-jgmKiS//w2Zs+YbX039CorlkOp8FIVbSAN8r8GJHDsGlmNPXo+VeHkqAwCiQVTTx5/LwLZTcEw59z3DvcLbr0g==", + "dependencies": { + "find-up": "^6.3.0", + "read-pkg": "^8.0.0", + "type-fest": "^3.12.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-pkg/node_modules/lines-and-columns": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/read-pkg/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==", + "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-pkg/node_modules/parse-json": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.0.0.tgz", + "integrity": "sha512-kP+TQYAzAiVnzOlWOe0diD6L35s9bJh0SCn95PIbZFKrOYuIRQsQkeWEYxzVDuHTt9V9YqvYCJ2Qo4z9wdfZPw==", + "dependencies": { + "@babel/code-frame": "^7.21.4", + "error-ex": "^1.3.2", + "json-parse-even-better-errors": "^3.0.0", + "lines-and-columns": "^2.0.3", + "type-fest": "^3.8.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "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==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/redent/node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/redeyed": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", + "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==", + "dependencies": { + "esprima": "~4.0.0" + } + }, + "node_modules/reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "dev": true + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regextras": { + "version": "0.7.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.1.14" + } + }, + "node_modules/registry-auth-token": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", + "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", + "dependencies": { + "@pnpm/npm-conf": "^2.1.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": 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, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.9.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", + "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", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "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, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "2.6.3", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" + }, + "node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-clear": { + "version": "2.0.7", + "dev": true, + "license": "ISC", + "dependencies": { + "rimraf": "^2.6.2" + } + }, + "node_modules/rollup-plugin-copy": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-copy/-/rollup-plugin-copy-3.4.0.tgz", + "integrity": "sha512-rGUmYYsYsceRJRqLVlE9FivJMxJ7X6jDlP79fmFkL8sJs7VVMSVyA2yfyL+PGyO/vJs4A87hwhgVfz61njI+uQ==", + "dev": true, + "dependencies": { + "@types/fs-extra": "^8.0.1", + "colorette": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "10.0.1", + "is-plain-object": "^3.0.0" + }, + "engines": { + "node": ">=8.3" + } + }, + "node_modules/rollup-plugin-copy/node_modules/globby": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", + "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/rollup-plugin-copy/node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/rollup-plugin-screeps-world": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/rollup-plugin-screeps-world/-/rollup-plugin-screeps-world-1.0.4.tgz", + "integrity": "sha512-+NB/KH8kuOjaenOySZVrPnRU5O/ny48otYYyI/Flg5tww59XIA95JZbmgnoN8J8GbjmDk+D5s+RV4YSK9r2ucw==", + "dev": true, + "dependencies": { + "git-rev-sync": "^3.0.2", + "screeps-api": "^1.11.0" + } + }, + "node_modules/rollup-plugin-screeps-world/node_modules/git-rev-sync": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/git-rev-sync/-/git-rev-sync-3.0.2.tgz", + "integrity": "sha512-Nd5RiYpyncjLv0j6IONy0lGzAqdRXUaBctuGBbrEA2m6Bn4iDrN/9MeQTXuiquw8AEKL9D2BW0nw5m/lQvxqnQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "1.0.5", + "graceful-fs": "4.1.15", + "shelljs": "0.8.5" + } + }, + "node_modules/rollup-plugin-screeps-world/node_modules/graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true + }, + "node_modules/rollup-plugin-screeps-world/node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/rollup-plugin-terser/node_modules/jest-worker": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { + "version": "4.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/rollup-plugin-typescript2": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.36.0.tgz", + "integrity": "sha512-NB2CSQDxSe9+Oe2ahZbf+B4bh7pHwjV5L+RSYpCu7Q5ROuN94F9b6ioWwKfz3ueL3KTtmX4o2MUH2cgHDIEUsw==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^4.1.2", + "find-cache-dir": "^3.3.2", + "fs-extra": "^10.0.0", + "semver": "^7.5.4", + "tslib": "^2.6.2" + }, + "peerDependencies": { + "rollup": ">=1.26.3", + "typescript": ">=2.4.0" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/rollup-plugin-typescript2/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, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/rollup-plugin-typescript2/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, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/rollup-plugin-typescript2/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "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/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" + }, + "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, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", + "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", + "dev": true + }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "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.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "node_modules/saxes": { + "version": "5.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/scope-analyzer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.2.tgz", + "integrity": "sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ==", + "dev": true, + "dependencies": { + "array-from": "^2.1.1", + "dash-ast": "^2.0.1", + "es6-map": "^0.1.5", + "es6-set": "^0.1.5", + "es6-symbol": "^3.1.1", + "estree-is-function": "^1.0.0", + "get-assigned-identifiers": "^1.1.0" + } + }, + "node_modules/screeps-api": { + "version": "1.16.0", + "dev": true, + "license": "ISC", + "dependencies": { + "axios": "^0.21.1", + "commander": "^7.2.0", + "debug": "^4.1.1", + "ws": "^7.4.4", + "yamljs": "^0.3.0" + }, + "bin": { + "screeps-api": "bin/screeps-api.js" + }, + "optionalDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + } + }, + "node_modules/screeps-api/node_modules/commander": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/screeps-api/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/screeps-api/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/screeps-db-importer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/screeps-db-importer/-/screeps-db-importer-1.1.0.tgz", + "integrity": "sha512-bbkO0n7DJpu9DzG2PGwEi4FZA64+iCbkYcBiqNYIx/l5vurldEF16UZLBir7tIpC1aJ2OCl6y7Mb1xaN2qDTMQ==", + "dev": true, + "dependencies": { + "node-fetch": "^3.3.1", + "winston": "^3.8.2" + } + }, + "node_modules/screeps-db-importer/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dev": true, + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/screeps-grafana-go_carbon": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/screeps-grafana-go_carbon/-/screeps-grafana-go_carbon-1.0.5.tgz", + "integrity": "sha512-YLN87Jd9d1wrcWB38kTJLHMR7aoEgfXlNAexP6axBLDmBxpBPwcW6M7bb9/P0q1Q/m20GRtcPBrdFn1Sk4R39A==", + "dev": true, + "dependencies": { + "axios": "^0.27.2", + "dotenv": "^16.0.2", + "fs-extra": "^11.1.0", + "get-port-please": "^3.0.1", + "minimist": "^1.2.7", + "winston": "^3.8.1" + }, + "bin": { + "screeps-grafana-go_carbon": "bin/setup.js" + } + }, + "node_modules/screeps-grafana-go_carbon/node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/screeps-grafana-go_carbon/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/screeps-grafana-go_carbon/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/screeps-grafana-go_carbon/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/screeps-jest": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/screeps-jest/-/screeps-jest-2.0.2.tgz", + "integrity": "sha512-2jVH1fKX2U4SQBbbGe5rF5lUGtsE7AcsteV7+L4//WngXl5z16nv7DyHq0yNFrxuaRYZUUBLOaSE4gjr7h6H0A==", + "dev": true, + "peerDependencies": { + "jest": ">=27" + } + }, + "node_modules/screeps-performance-server": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.12.2.tgz", + "integrity": "sha512-Q1JBbLmObzLOyfu1e3QI4fwfGXszH8FcciTXxHJ0q02cvBeCXQHYH9SLefRiz59q9vNTp9rAYnIBMeT7u0bP0g==", + "dev": true, + "dependencies": { + "@octokit/core": "^4.2.0", + "discord.js": "^14.9.0", + "dotenv": "^16.0.3", + "get-port": "^6.1.2", + "json-beautify": "^1.1.1", + "lodash": "^4.17.21", + "minimist": "^1.2.7", + "ncp": "^2.0.0", + "node-fetch": "^2.6.7", + "node-powershell": "^5.0.1", + "pastebin-api": "^5.1.6", + "q": "^1.5.1", + "screeps-api": "1.16.0", + "screeps-db-importer": "latest", + "winston": "^3.8.2" + }, + "bin": { + "screeps-performance-server": "bin/setup.js" + } + }, + "node_modules/screeps-performance-server/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, + "engines": { + "node": ">= 14" + } + }, + "node_modules/screeps-performance-server/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, + "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/screeps-performance-server/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, + "dependencies": { + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/screeps-performance-server/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, + "dependencies": { + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/screeps-performance-server/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, + "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/screeps-performance-server/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, + "dependencies": { + "@octokit/types": "^9.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/screeps-performance-server/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, + "dependencies": { + "@octokit/openapi-types": "^18.0.0" + } + }, + "node_modules/screeps-performance-server/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/screeps-performance-server/node_modules/lodash": { + "version": "4.17.21", + "dev": true, + "license": "MIT" + }, + "node_modules/screeps-viz": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/screeps-viz/-/screeps-viz-2.1.3.tgz", + "integrity": "sha512-c96u2MTtrXzjv4O1K89J1EWgapbP0C9xqx2gCOZ5uLTBDr1RaAuIQZkOquqHA8ELhSNd9xr9X7Qt5vCOMMknSw==", + "dev": true + }, + "node_modules/semantic-release": { + "version": "21.0.7", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-21.0.7.tgz", + "integrity": "sha512-peRDSXN+hF8EFSKzze90ff/EnAmgITHQ/a3SZpRV3479ny0BIZWEJ33uX6/GlOSKdaSxo9hVRDyv2/u2MuF+Bw==", + "dependencies": { + "@semantic-release/commit-analyzer": "^10.0.0", + "@semantic-release/error": "^4.0.0", + "@semantic-release/github": "^9.0.0", + "@semantic-release/npm": "^10.0.2", + "@semantic-release/release-notes-generator": "^11.0.0", + "aggregate-error": "^4.0.1", + "cosmiconfig": "^8.0.0", + "debug": "^4.0.0", + "env-ci": "^9.0.0", + "execa": "^7.0.0", + "figures": "^5.0.0", + "find-versions": "^5.1.0", + "get-stream": "^6.0.0", + "git-log-parser": "^1.2.0", + "hook-std": "^3.0.0", + "hosted-git-info": "^6.0.0", + "lodash-es": "^4.17.21", + "marked": "^5.0.0", + "marked-terminal": "^5.1.1", + "micromatch": "^4.0.2", + "p-each-series": "^3.0.0", + "p-reduce": "^3.0.0", + "read-pkg-up": "^10.0.0", + "resolve-from": "^5.0.0", + "semver": "^7.3.2", + "semver-diff": "^4.0.0", + "signale": "^1.2.1", + "yargs": "^17.5.1" + }, + "bin": { + "semantic-release": "bin/semantic-release.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/semantic-release/node_modules/@semantic-release/commit-analyzer": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-10.0.1.tgz", + "integrity": "sha512-9ejHzTAijYs9z246sY/dKBatmOPcd0GQ7lH4MgLCkv1q4GCiDZRkjHJkaQZXZVaK7mJybS+sH3Ng6G8i3pYMGQ==", + "dependencies": { + "conventional-changelog-angular": "^6.0.0", + "conventional-commits-filter": "^3.0.0", + "conventional-commits-parser": "^4.0.0", + "debug": "^4.0.0", + "import-from": "^4.0.0", + "lodash-es": "^4.17.21", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "semantic-release": ">=20.1.0" + } + }, + "node_modules/semantic-release/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/semantic-release/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/semantic-release/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/semantic-release/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/semver-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", + "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-regex": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", + "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/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 + }, + "node_modules/send/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/shallow-copy": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", + "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==", + "dev": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "license": "ISC" + }, + "node_modules/signale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", + "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", + "dependencies": { + "chalk": "^2.3.2", + "figures": "^2.0.0", + "pkg-conf": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/signale/node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "dev": true, + "license": "MIT" + }, + "node_modules/sinon": { + "version": "6.3.5", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.0.2", + "@sinonjs/formatio": "^3.0.0", + "@sinonjs/samsam": "^2.1.2", + "diff": "^3.5.0", + "lodash.get": "^4.4.2", + "lolex": "^2.7.5", + "nise": "^1.4.5", + "supports-color": "^5.5.0", + "type-detect": "^4.0.8" + } + }, + "node_modules/sinon-chai": { + "version": "3.7.0", + "dev": true, + "license": "(BSD-2-Clause OR WTFPL)", + "peerDependencies": { + "chai": "^4.0.0", + "sinon": ">=4.0.0" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true + }, + "node_modules/spawn-error-forwarder": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", + "integrity": "sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==" + }, + "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==", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.11", + "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==", + "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==", + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/stack-utils": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/static-eval": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz", + "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==", + "dev": true, + "dependencies": { + "escodegen": "^1.11.1" + } + }, + "node_modules/static-eval/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/static-module": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/static-module/-/static-module-3.0.4.tgz", + "integrity": "sha512-gb0v0rrgpBkifXCa3yZXxqVmXDVE+ETXj6YlC/jt5VzOnGXR2C15+++eXuMDUYsePnbhf+lwW0pE1UXyOLtGCw==", + "dev": true, + "dependencies": { + "acorn-node": "^1.3.0", + "concat-stream": "~1.6.0", + "convert-source-map": "^1.5.1", + "duplexer2": "~0.1.4", + "escodegen": "^1.11.1", + "has": "^1.0.1", + "magic-string": "0.25.1", + "merge-source-map": "1.0.4", + "object-inspect": "^1.6.0", + "readable-stream": "~2.3.3", + "scope-analyzer": "^2.0.1", + "shallow-copy": "~0.0.1", + "static-eval": "^2.0.5", + "through2": "~2.0.3" + } + }, + "node_modules/static-module/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/static-module/node_modules/magic-string": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz", + "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.1" + } + }, + "node_modules/static-module/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, + "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/static-module/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/static-module/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "dev": true, + "dependencies": { + "duplexer": "~0.1.1", + "through": "~2.3.4" + } + }, + "node_modules/stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", + "dependencies": { + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-combiner2/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==", + "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/stream-combiner2/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==" + }, + "node_modules/stream-combiner2/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==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-template": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-1.0.0.tgz", + "integrity": "sha512-SLqR3GBUXuoPP5MmYtD7ompvXiG87QjT6lzOszyXjTM86Uu7At7vNnt2xgyTLq5o9T4IxTYFyGxcULqpsmsfdg==", + "dev": true + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-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, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringz": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/stringz/-/stringz-2.1.0.tgz", + "integrity": "sha512-KlywLT+MZ+v0IRepfMxRtnSvDCMc3nR1qqCs3m/qIbSOWkNZYT8XHQA31rS3TnKp0c5xjZu3M4GY/2aRKSi/6A==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-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, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "dev": true, + "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==", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "dev": true + }, + "node_modules/stylis": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", + "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" + }, + "node_modules/supports-color": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/temp-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", + "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", + "engines": { + "node": ">=14.16" + } + }, + "node_modules/tempy": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz", + "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==", + "dependencies": { + "is-stream": "^3.0.0", + "temp-dir": "^3.0.0", + "type-fest": "^2.12.2", + "unique-string": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-link/node_modules/ansi-escapes": { + "version": "4.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-link/node_modules/type-fest": { + "version": "0.21.3", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.14.2", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/text-hex": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/throat": { + "version": "6.0.1", + "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==" + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "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==", + "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==" + }, + "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==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "dev": true + }, + "node_modules/tmpl": { + "version": "1.0.5", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/traverse": { + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", + "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/trim-buffer": { + "version": "5.0.0", + "dev": true, + "license": "MIT" + }, + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/triple-beam": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "engines": { + "node": ">=6.10" + } + }, + "node_modules/ts-jest": { + "version": "27.0.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.5.tgz", + "integrity": "sha512-lIJApzfTaSSbtlksfFNHkWOzLJuuSm4faFAfo5kvzOiRAuoN4/eKxVJ2zEAho8aecE04qX6K1pAzfH5QHL1/8w==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^27.0.0", + "json5": "2.x", + "lodash": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@types/jest": "^27.0.0", + "babel-jest": ">=27.0.0 <28", + "jest": "^27.0.0", + "typescript": ">=3.8 <5.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@types/jest": { + "optional": true + }, + "babel-jest": { + "optional": true + } + } + }, + "node_modules/ts-jest/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/ts-jest/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-mixer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz", + "integrity": "sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==", + "dev": true + }, + "node_modules/ts-morph": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-18.0.0.tgz", + "integrity": "sha512-Kg5u0mk19PIIe4islUI/HWRvm9bC1lHejK4S0oh1zaZ77TMZAEmQC0sHQYiu2RgCQFZKXz1fMVi/7nOOeirznA==", + "dev": true, + "dependencies": { + "@ts-morph/common": "~0.19.0", + "code-block-writer": "^12.0.0" + } + }, + "node_modules/ts-node": { + "version": "10.8.1", + "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/acorn-walk": { + "version": "8.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "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 + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", + "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "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": { + "version": "5.22.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz", + "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==", + "dev": true, + "dependencies": { + "busboy": "^1.6.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-properties": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", + "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", + "dev": true, + "dependencies": { + "base64-js": "^1.3.0", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "dev": true, + "dependencies": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } + }, + "node_modules/unique-string": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", + "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", + "dependencies": { + "crypto-random-string": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" + }, + "node_modules/universalify": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unix-crypt-td-js": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz", + "integrity": "sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw==", + "dev": true + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "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" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-join": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", + "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/utf-8-validate": { + "version": "5.0.9", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/uvu": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", + "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", + "dependencies": { + "dequal": "^2.0.0", + "diff": "^5.0.0", + "kleur": "^4.0.3", + "sade": "^1.7.3" + }, + "bin": { + "uvu": "bin.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/uvu/node_modules/diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/uvu/node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-to-istanbul": { + "version": "8.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.4", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "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==", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validator": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", + "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "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, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/web-worker": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", + "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=10.4" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/whatwg-url/node_modules/lodash": { + "version": "4.17.21", + "dev": true, + "license": "MIT" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/windows-release": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", + "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==", + "dev": true, + "dependencies": { + "execa": "^4.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/windows-release/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/windows-release/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/windows-release/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/windows-release/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/windows-release/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/windows-release/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/winston": { + "version": "3.8.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@colors/colors": "1.5.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.4.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.5.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport": { + "version": "4.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 6.4.0" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "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==" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-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, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.8", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/xmldoc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.3.0.tgz", + "integrity": "sha512-y7IRWW6PvEnYQZNZFMRLNJw+p3pezM4nKYPfr15g4OOW9i8VpeydycFuipE2297OvZnh3jSb2pxOt9QpkZUVng==", + "dev": true, + "dependencies": { + "sax": "^1.2.4" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yamljs": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "glob": "^7.0.5" + }, + "bin": { + "json2yaml": "bin/json2yaml", + "yaml2json": "bin/yaml2json" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } + }, + "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==", + "engines": { + "node": ">=12" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } }, - "node_modules/ts-jest": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.5.tgz", - "integrity": "sha512-lIJApzfTaSSbtlksfFNHkWOzLJuuSm4faFAfo5kvzOiRAuoN4/eKxVJ2zEAho8aecE04qX6K1pAzfH5QHL1/8w==", - "dev": true, - "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", - "json5": "2.x", - "lodash": "4.x", - "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@types/jest": "^27.0.0", - "babel-jest": ">=27.0.0 <28", - "jest": "^27.0.0", - "typescript": ">=3.8 <5.0" - }, - "peerDependenciesMeta": { + "dependencies": { + "@aduh95/viz.js": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@aduh95/viz.js/-/viz.js-3.4.0.tgz", + "integrity": "sha512-KI2nVf9JdwWCXqK6RVf+9/096G7VWN4Z84mnynlyZKao2xQENW8WNEjLmvdlxS5X8PNWXFC1zqwm7tveOXw/4A==", + "dev": true + }, + "@ampproject/remapping": { + "version": "2.2.0", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@angular-devkit/core": { + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.6.tgz", + "integrity": "sha512-3OjtrPWvsqVkMBwqPeE65ccCIw56FooNpVVAJ0XwhVQv5mA81pmbCzU7JsR6U449ZT7O4cQblzZMQvWvx74HCg==", + "dev": true, + "requires": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "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 + }, + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + } + } + }, + "@angular-devkit/schematics": { + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.6.tgz", + "integrity": "sha512-KA8P78gaS76HMHGBOM8JHJXWLOxCIShYVB2Un/Cu6z3jVODvXq+ILZUc1Y0RsAce/vsl2wf8qpoh5Lku9KJHUQ==", + "dev": true, + "requires": { + "@angular-devkit/core": "16.1.6", + "jsonc-parser": "3.2.0", + "magic-string": "0.30.0", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "dependencies": { + "magic-string": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + } + } + }, + "@babel/code-frame": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "requires": { + "@babel/highlight": "^7.22.5" + } + }, + "@babel/compat-data": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "dev": true + }, "@babel/core": { - "optional": true + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", + "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.9", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helpers": "^7.22.6", + "@babel/parser": "^7.22.7", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.8", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", + "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", + "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", + "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz", + "integrity": "sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", + "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", + "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dev": true, + "requires": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", + "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.5" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", + "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.9" + } + }, + "@babel/helper-replace-supers": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", + "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==" + }, + "@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.9.tgz", + "integrity": "sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helpers": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", + "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", + "dev": true, + "requires": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.6", + "@babel/types": "^7.22.5" + } + }, + "@babel/highlight": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "requires": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.22.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", + "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", + "dev": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "requires": {} + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-async-generator-functions": { + "version": "7.22.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz", + "integrity": "sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", + "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", + "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", + "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-transform-numeric-separator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-transform-object-rest-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + } + }, + "@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-transform-optional-chaining": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz", + "integrity": "sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", + "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.1" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", + "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/preset-env": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.9.tgz", + "integrity": "sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.9", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.7", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.6", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.6", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.4", + "babel-plugin-polyfill-corejs3": "^0.8.2", + "babel-plugin-polyfill-regenerator": "^0.5.1", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + } + }, + "@babel/preset-modules": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", + "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "@babel/runtime": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", + "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.11" + } + }, + "@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/traverse": { + "version": "7.22.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", + "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.7", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.7", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "dev": true + }, + "@braintree/sanitize-url": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz", + "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==" + }, + "@colors/colors": { + "version": "1.5.0", + "devOptional": true + }, + "@compodoc/compodoc": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/@compodoc/compodoc/-/compodoc-1.1.21.tgz", + "integrity": "sha512-/FDlwRgKzmkGuorDnURuCzoGY6rZ0KY7Mj5/PwnEjMs0y1CRRPHBJC9I0yVIjn8j8gxVy8PPc6dna0lY1MWwhg==", + "dev": true, + "requires": { + "@angular-devkit/schematics": "^16.0.1", + "@babel/core": "^7.21.8", + "@babel/preset-env": "^7.21.5", + "@compodoc/live-server": "^1.2.3", + "@compodoc/ngd-transformer": "^2.1.3", + "chalk": "4.1.2", + "cheerio": "^1.0.0-rc.12", + "chokidar": "^3.5.3", + "colors": "1.4.0", + "commander": "^10.0.1", + "cosmiconfig": "^8.1.3", + "decache": "^4.6.1", + "fancy-log": "^2.0.0", + "fast-glob": "^3.2.12", + "fs-extra": "^11.1.1", + "glob": "^10.2.4", + "handlebars": "^4.7.7", + "html-entities": "^2.3.3", + "i18next": "^22.4.15", + "inside": "^1.0.0", + "json5": "^2.2.3", + "lodash": "^4.17.21", + "loglevel": "^1.8.1", + "loglevel-plugin-prefix": "^0.8.4", + "lunr": "^2.3.9", + "marked": "4.3.0", + "minimist": "^1.2.8", + "opencollective-postinstall": "^2.0.3", + "os-name": "4.0.1", + "pdfjs-dist": "2.12.313", + "pdfmake": "^0.2.7", + "semver": "^7.5.1", + "traverse": "^0.6.7", + "ts-morph": "^18.0.0", + "uuid": "^9.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true + }, + "fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "glob": { + "version": "10.3.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", + "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + } + }, + "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 + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "@compodoc/live-server": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@compodoc/live-server/-/live-server-1.2.3.tgz", + "integrity": "sha512-hDmntVCyjjaxuJzPzBx68orNZ7TW4BtHWMnXlIVn5dqhK7vuFF/11hspO1cMmc+2QTYgqde1TBcb3127S7Zrow==", + "dev": true, + "requires": { + "chokidar": "^3.5.2", + "colors": "1.4.0", + "connect": "^3.7.0", + "cors": "latest", + "event-stream": "4.0.1", + "faye-websocket": "0.11.x", + "http-auth": "4.1.9", + "http-auth-connect": "^1.0.5", + "morgan": "^1.10.0", + "object-assign": "latest", + "open": "8.4.0", + "proxy-middleware": "latest", + "send": "latest", + "serve-index": "^1.9.1" + } + }, + "@compodoc/ngd-core": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@compodoc/ngd-core/-/ngd-core-2.1.1.tgz", + "integrity": "sha512-Z+wE6wWZYVnudRYg6qunDlyh3Orw39Ib66Gvrz5kX5u7So+iu3tr6sQJdqH6yGS3hAjig5avlfhWLlgsb6/x1Q==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.3", + "fancy-log": "^2.0.0", + "typescript": "^5.0.4" + }, + "dependencies": { + "typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true + } + } + }, + "@compodoc/ngd-transformer": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@compodoc/ngd-transformer/-/ngd-transformer-2.1.3.tgz", + "integrity": "sha512-oWxJza7CpWR8/FeWYfE6j+jgncnGBsTWnZLt5rD2GUpsGSQTuGrsFPnmbbaVLgRS5QIVWBJYke7QFBr/7qVMWg==", + "dev": true, + "requires": { + "@aduh95/viz.js": "3.4.0", + "@compodoc/ngd-core": "~2.1.1", + "dot": "^2.0.0-beta.1", + "fs-extra": "^11.1.1" + }, + "dependencies": { + "fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } + } + }, + "@dabh/diagnostics": { + "version": "2.0.3", + "dev": true, + "requires": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "@discordjs/builders": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.5.tgz", + "integrity": "sha512-SdweyCs/+mHj+PNhGLLle7RrRFX9ZAhzynHahMCLqp5Zeq7np7XC6/mgzHc79QoVlQ1zZtOkTTiJpOZu5V8Ufg==", + "dev": true, + "requires": { + "@discordjs/formatters": "^0.3.2", + "@discordjs/util": "^1.0.1", + "@sapphire/shapeshift": "^3.9.2", + "discord-api-types": "0.37.50", + "fast-deep-equal": "^3.1.3", + "ts-mixer": "^6.0.3", + "tslib": "^2.6.1" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + } + } + }, + "@discordjs/collection": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", + "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", + "dev": true + }, + "@discordjs/formatters": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.2.tgz", + "integrity": "sha512-lE++JZK8LSSDRM5nLjhuvWhGuKiXqu+JZ/DsOR89DVVia3z9fdCJVcHF2W/1Zxgq0re7kCzmAJlCMMX3tetKpA==", + "dev": true, + "requires": { + "discord-api-types": "0.37.50" + } + }, + "@discordjs/rest": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.0.1.tgz", + "integrity": "sha512-/eWAdDRvwX/rIE2tuQUmKaxmWeHmGealttIzGzlYfI4+a7y9b6ZoMp8BG/jaohs8D8iEnCNYaZiOFLVFLQb8Zg==", + "dev": true, + "requires": { + "@discordjs/collection": "^1.5.3", + "@discordjs/util": "^1.0.1", + "@sapphire/async-queue": "^1.5.0", + "@sapphire/snowflake": "^3.5.1", + "@vladfrangu/async_event_emitter": "^2.2.2", + "discord-api-types": "0.37.50", + "magic-bytes.js": "^1.0.15", + "tslib": "^2.6.1", + "undici": "5.22.1" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + } + } + }, + "@discordjs/util": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.0.1.tgz", + "integrity": "sha512-d0N2yCxB8r4bn00/hvFZwM7goDcUhtViC5un4hPj73Ba4yrChLSJD8fy7Ps5jpTLg1fE9n4K0xBLc1y9WGwSsA==", + "dev": true + }, + "@discordjs/ws": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.0.1.tgz", + "integrity": "sha512-avvAolBqN3yrSvdBPcJ/0j2g42ABzrv3PEL76e3YTp2WYMGH7cuspkjfSyNWaqYl1J+669dlLp+YFMxSVQyS5g==", + "dev": true, + "requires": { + "@discordjs/collection": "^1.5.3", + "@discordjs/rest": "^2.0.1", + "@discordjs/util": "^1.0.1", + "@sapphire/async-queue": "^1.5.0", + "@types/ws": "^8.5.5", + "@vladfrangu/async_event_emitter": "^2.2.2", + "discord-api-types": "0.37.50", + "tslib": "^2.6.1", + "ws": "^8.13.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "ws": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", + "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", + "dev": true, + "requires": {} + } + } + }, + "@eslint/eslintrc": { + "version": "0.4.3", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "dev": true + }, + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "espree": { + "version": "7.3.1", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + } + }, + "globals": { + "version": "13.15.0", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "ms": { + "version": "2.1.2", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "dev": true + } + } + }, + "@foliojs-fork/fontkit": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@foliojs-fork/fontkit/-/fontkit-1.9.1.tgz", + "integrity": "sha512-U589voc2/ROnvx1CyH9aNzOQWJp127JGU1QAylXGQ7LoEAF6hMmahZLQ4eqAcgHUw+uyW4PjtCItq9qudPkK3A==", + "dev": true, + "requires": { + "@foliojs-fork/restructure": "^2.0.2", + "brfs": "^2.0.0", + "brotli": "^1.2.0", + "browserify-optional": "^1.0.1", + "clone": "^1.0.4", + "deep-equal": "^1.0.0", + "dfa": "^1.2.0", + "tiny-inflate": "^1.0.2", + "unicode-properties": "^1.2.2", + "unicode-trie": "^2.0.0" + } + }, + "@foliojs-fork/linebreak": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@foliojs-fork/linebreak/-/linebreak-1.1.1.tgz", + "integrity": "sha512-pgY/+53GqGQI+mvDiyprvPWgkTlVBS8cxqee03ejm6gKAQNsR1tCYCIvN9FHy7otZajzMqCgPOgC4cHdt4JPig==", + "dev": true, + "requires": { + "base64-js": "1.3.1", + "brfs": "^2.0.2", + "unicode-trie": "^2.0.0" + }, + "dependencies": { + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true + } + } + }, + "@foliojs-fork/pdfkit": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@foliojs-fork/pdfkit/-/pdfkit-0.13.0.tgz", + "integrity": "sha512-YXeG1fml9k97YNC9K8e292Pj2JzGt9uOIiBFuQFxHsdQ45BlxW+JU3RQK6JAvXU7kjhjP8rCcYvpk36JLD33sQ==", + "dev": true, + "requires": { + "@foliojs-fork/fontkit": "^1.9.1", + "@foliojs-fork/linebreak": "^1.1.1", + "crypto-js": "^4.0.0", + "png-js": "^1.0.0" + } + }, + "@foliojs-fork/restructure": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@foliojs-fork/restructure/-/restructure-2.0.2.tgz", + "integrity": "sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA==", + "dev": true + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "dev": true + } + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "dev": true + }, + "@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, + "requires": { + "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" + }, + "dependencies": { + "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 + }, + "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 + }, + "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 + }, + "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, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "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, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "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, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "dev": true + }, + "resolve-from": { + "version": "5.0.0", + "dev": true + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "dev": true + }, + "@javascript-obfuscator/escodegen": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@javascript-obfuscator/escodegen/-/escodegen-2.3.0.tgz", + "integrity": "sha512-QVXwMIKqYMl3KwtTirYIA6gOCiJ0ZDtptXqAv/8KWLG9uQU2fZqTVy7a/A5RvcoZhbDoFfveTxuGxJ5ibzQtkw==", + "dev": true, + "requires": { + "@javascript-obfuscator/estraverse": "^5.3.0", + "esprima": "^4.0.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "@javascript-obfuscator/estraverse": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@javascript-obfuscator/estraverse/-/estraverse-5.4.0.tgz", + "integrity": "sha512-CZFX7UZVN9VopGbjTx4UXaXsi9ewoM1buL0kY7j1ftYdSs7p2spv9opxFjHlQ/QGTgh4UqufYqJJ0WKLml7b6w==", + "dev": true + }, + "@jest/console": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/core": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.2", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-fest": { + "version": "0.21.3", + "dev": true + } + } + }, + "@jest/environment": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + } + }, + "@jest/fake-timers": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "@jest/globals": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + } + }, + "@jest/reporters": { + "version": "27.5.1", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/source-map": { + "version": "27.5.1", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + } + }, + "@jest/test-result": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + } + }, + "@jest/transform": { + "version": "27.5.1", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/types": { + "version": "27.5.1", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.1", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5" + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@octokit/auth-token": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", + "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==" + }, + "@octokit/core": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.0.tgz", + "integrity": "sha512-YbAtMWIrbZ9FCXbLwT9wWB8TyLjq9mxpKdgB3dUNxQcIVTf9hJ70gRPwAcqGZdY6WdJPZ0I7jLaaNDCiloGN2A==", + "requires": { + "@octokit/auth-token": "^4.0.0", + "@octokit/graphql": "^7.0.0", + "@octokit/request": "^8.0.2", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^11.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/endpoint": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.0.tgz", + "integrity": "sha512-szrQhiqJ88gghWY2Htt8MqUDO6++E/EIXqJ2ZEp5ma3uGS46o7LZAzSLt49myB7rT+Hfw5Y6gO3LmOxGzHijAQ==", + "requires": { + "@octokit/types": "^11.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "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==" + } + } + }, + "@octokit/graphql": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.1.tgz", + "integrity": "sha512-T5S3oZ1JOE58gom6MIcrgwZXzTaxRnxBso58xhozxHpOqSTgDS6YNeEUvZ/kRvXgPrRz/KHnZhtb7jUMRi9E6w==", + "requires": { + "@octokit/request": "^8.0.1", + "@octokit/types": "^11.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/openapi-types": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", + "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" + }, + "@octokit/plugin-paginate-rest": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-8.0.0.tgz", + "integrity": "sha512-2xZ+baZWUg+qudVXnnvXz7qfrTmDeYPCzangBVq/1gXxii/OiS//4shJp9dnCCvj1x+JAm9ji1Egwm1BA47lPQ==", + "requires": { + "@octokit/types": "^11.0.0" + } + }, + "@octokit/plugin-retry": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-6.0.0.tgz", + "integrity": "sha512-a1/A4A+PB1QoAHQfLJxGHhLfSAT03bR1jJz3GgQJZvty2ozawFWs93MiBQXO7SL2YbO7CIq0Goj4qLOBj8JeMQ==", + "requires": { + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^11.0.0", + "bottleneck": "^2.15.3" + } + }, + "@octokit/plugin-throttling": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-7.0.0.tgz", + "integrity": "sha512-KL2k/d0uANc8XqP5S64YcNFCudR3F5AaKO39XWdUtlJIjT9Ni79ekWJ6Kj5xvAw87udkOMEPcVf9xEge2+ahew==", + "requires": { + "@octokit/types": "^11.0.0", + "bottleneck": "^2.15.3" + } + }, + "@octokit/request": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.1.1.tgz", + "integrity": "sha512-8N+tdUz4aCqQmXl8FpHYfKG9GelDFd7XGVzyN8rc6WxVlYcfpHECnuRkgquzz+WzvHTK62co5di8gSXnzASZPQ==", + "requires": { + "@octokit/endpoint": "^9.0.0", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^11.1.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "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==" + } + } + }, + "@octokit/request-error": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.0.tgz", + "integrity": "sha512-1ue0DH0Lif5iEqT52+Rf/hf0RmGO9NWFjrzmrkArpG9trFfDM/efx00BJHdLGuro4BR/gECxCU2Twf5OKrRFsQ==", + "requires": { + "@octokit/types": "^11.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "@octokit/types": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-11.1.0.tgz", + "integrity": "sha512-Fz0+7GyLm/bHt8fwEqgvRBWwIV1S6wRRyq+V6exRKLVWaKGsuy6H9QFYeBVDV7rK6fO3XwHgQOPxv+cLj2zpXQ==", + "requires": { + "@octokit/openapi-types": "^18.0.0" + } + }, + "@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, + "optional": true + }, + "@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==" + }, + "@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "requires": { + "graceful-fs": "4.2.10" + } + }, + "@pnpm/npm-conf": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", + "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", + "requires": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + } + }, + "@rollup/plugin-commonjs": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-20.0.0.tgz", + "integrity": "sha512-5K0g5W2Ol8hAcTHqcTBHiA7M58tfmYi1o9KxeJuuRNpGaTa5iLjcyemBitCBcKXaHamOBBEH2dGom6v6Unmqjg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "commondir": "^1.0.1", + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" + } + }, + "@rollup/plugin-node-resolve": { + "version": "13.3.0", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "dependencies": { + "estree-walker": { + "version": "1.0.1", + "dev": true + } + } + }, + "@sapphire/async-queue": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", + "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==", + "dev": true + }, + "@sapphire/shapeshift": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.2.tgz", + "integrity": "sha512-YRbCXWy969oGIdqR/wha62eX8GNHsvyYi0Rfd4rNW6tSVVa8p0ELiMEuOH/k8rgtvRoM+EMV7Csqz77YdwiDpA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "lodash": "^4.17.21" + }, + "dependencies": { + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + } + } + }, + "@sapphire/snowflake": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz", + "integrity": "sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==", + "dev": true + }, + "@semantic-release/changelog": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@semantic-release/changelog/-/changelog-6.0.3.tgz", + "integrity": "sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==", + "dev": true, + "requires": { + "@semantic-release/error": "^3.0.0", + "aggregate-error": "^3.0.0", + "fs-extra": "^11.0.0", + "lodash": "^4.17.4" + }, + "dependencies": { + "@semantic-release/error": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", + "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", + "dev": true + }, + "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, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "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 + }, + "fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "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 + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "@semantic-release/commit-analyzer": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz", + "integrity": "sha512-E+dr6L+xIHZkX4zNMe6Rnwg4YQrWNXK+rNsvwOPpdFppvZO1olE2fIgWhv89TkQErygevbjsZFSIxp+u6w2e5g==", + "dev": true, + "requires": { + "conventional-changelog-angular": "^5.0.0", + "conventional-commits-filter": "^2.0.0", + "conventional-commits-parser": "^3.2.3", + "debug": "^4.0.0", + "import-from": "^4.0.0", + "lodash": "^4.17.4", + "micromatch": "^4.0.2" + }, + "dependencies": { + "conventional-changelog-angular": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", + "dev": true, + "requires": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + } + }, + "conventional-commits-filter": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", + "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "dev": true, + "requires": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + } + }, + "conventional-commits-parser": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", + "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", + "dev": true, + "requires": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "requires": { + "readable-stream": "3" + } + } + } + }, + "@semantic-release/error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", + "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==" + }, + "@semantic-release/git": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@semantic-release/git/-/git-10.0.1.tgz", + "integrity": "sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==", + "dev": true, + "requires": { + "@semantic-release/error": "^3.0.0", + "aggregate-error": "^3.0.0", + "debug": "^4.0.0", + "dir-glob": "^3.0.0", + "execa": "^5.0.0", + "lodash": "^4.17.4", + "micromatch": "^4.0.0", + "p-reduce": "^2.0.0" + }, + "dependencies": { + "@semantic-release/error": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", + "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", + "dev": true + }, + "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, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "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 + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "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 + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "p-reduce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", + "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", + "dev": true + } + } + }, + "@semantic-release/github": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-9.0.4.tgz", + "integrity": "sha512-kQCGFAsBErvCR6hzNuzu63cj4erQN2krm9zQlg8vl4j5X0mL0d/Ras0wmL5Gkr1TuSS2lweME7M4J5zvtDDDSA==", + "requires": { + "@octokit/core": "^5.0.0", + "@octokit/plugin-paginate-rest": "^8.0.0", + "@octokit/plugin-retry": "^6.0.0", + "@octokit/plugin-throttling": "^7.0.0", + "@semantic-release/error": "^4.0.0", + "aggregate-error": "^4.0.1", + "debug": "^4.3.4", + "dir-glob": "^3.0.1", + "globby": "^13.1.4", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "issue-parser": "^6.0.0", + "lodash-es": "^4.17.21", + "mime": "^3.0.0", + "p-filter": "^3.0.0", + "url-join": "^5.0.0" + }, + "dependencies": { + "agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "requires": { + "debug": "^4.3.4" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } + }, + "http-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "requires": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + } + }, + "https-proxy-agent": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz", + "integrity": "sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==", + "requires": { + "agent-base": "^7.0.2", + "debug": "4" + } + }, + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" + } + } + }, + "@semantic-release/npm": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-10.0.4.tgz", + "integrity": "sha512-6R3timIQ7VoL2QWRkc9DG8v74RQtRp7UOe/2KbNaqwJ815qOibAv65bH3RtTEhs4axEaHoZf7HDgFs5opaZ9Jw==", + "requires": { + "@semantic-release/error": "^4.0.0", + "aggregate-error": "^4.0.1", + "execa": "^7.0.0", + "fs-extra": "^11.0.0", + "lodash-es": "^4.17.21", + "nerf-dart": "^1.0.0", + "normalize-url": "^8.0.0", + "npm": "^9.5.0", + "rc": "^1.2.8", + "read-pkg": "^8.0.0", + "registry-auth-token": "^5.0.0", + "semver": "^7.1.2", + "tempy": "^3.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "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==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } + } + }, + "@semantic-release/release-notes-generator": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-11.0.4.tgz", + "integrity": "sha512-j0Znnwq9IdWTCGzqSlkLv4MpALTsVDZxcVESzJCNN8pK2BYQlYaKsdZ1Ea/+7RlppI3vjhEi33ZKmjSGY1FLKw==", + "requires": { + "conventional-changelog-angular": "^6.0.0", + "conventional-changelog-writer": "^6.0.0", + "conventional-commits-filter": "^3.0.0", + "conventional-commits-parser": "^4.0.0", + "debug": "^4.0.0", + "get-stream": "^7.0.0", + "import-from": "^4.0.0", + "into-stream": "^7.0.0", + "lodash-es": "^4.17.21", + "read-pkg-up": "^10.0.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "get-stream": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-7.0.1.tgz", + "integrity": "sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "@sinonjs/commons": { + "version": "1.8.3", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "8.1.0", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@sinonjs/formatio": { + "version": "3.2.2", + "dev": true, + "requires": { + "@sinonjs/commons": "^1", + "@sinonjs/samsam": "^3.1.0" + }, + "dependencies": { + "@sinonjs/samsam": { + "version": "3.3.3", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.3.0", + "array-from": "^2.1.1", + "lodash": "^4.17.15" + } + }, + "lodash": { + "version": "4.17.21", + "dev": true + } + } + }, + "@sinonjs/samsam": { + "version": "2.1.3", + "dev": true + }, + "@sinonjs/text-encoding": { + "version": "0.7.1", + "dev": true + }, + "@tootallnate/once": { + "version": "1.1.2", + "dev": true + }, + "@ts-morph/common": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.19.0.tgz", + "integrity": "sha512-Unz/WHmd4pGax91rdIKWi51wnVUW11QttMEPpBiBgIewnc9UQIX7UDLxr5vRlqeByXCwhkF6VabSsI0raWcyAQ==", + "dev": true, + "requires": { + "fast-glob": "^3.2.12", + "minimatch": "^7.4.3", + "mkdirp": "^2.1.6", + "path-browserify": "^1.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", + "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "mkdirp": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz", + "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==", + "dev": true + } + } + }, + "@tsconfig/node10": { + "version": "1.0.9", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.3", + "dev": true + }, + "@types/babel__core": { + "version": "7.1.19", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.4", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.1", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.17.1", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/chai": { + "version": "4.3.1", + "dev": true + }, + "@types/d3-scale": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.3.tgz", + "integrity": "sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==", + "requires": { + "@types/d3-time": "*" + } + }, + "@types/d3-scale-chromatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", + "integrity": "sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw==" + }, + "@types/d3-time": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz", + "integrity": "sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==" + }, + "@types/debug": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", + "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", + "requires": { + "@types/ms": "*" + } + }, + "@types/estree": { + "version": "0.0.39", + "dev": true + }, + "@types/fs-extra": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.2.tgz", + "integrity": "sha512-SvSrYXfWSc7R4eqnOzbQF4TZmfpNSM9FrSWLU3EUnWBuyZqNBOrv1B1JA3byUDPUl9z4Ab3jeZG2eDdySlgNMg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/graceful-fs": { + "version": "4.1.5", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.1.tgz", + "integrity": "sha512-HTLpVXHrY69556ozYkcq47TtQJXpcWAWfkoqz+ZGz2JnmZhzlRjprCIyFnetSy8gpDWwTTGBcRVv1J1I1vBrHw==", + "dev": true, + "requires": { + "jest-diff": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, + "@types/json-schema": { + "version": "7.0.11", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "dev": true + }, + "@types/lodash": { + "version": "3.10.2", + "dev": true + }, + "@types/mdast": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.12.tgz", + "integrity": "sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==", + "requires": { + "@types/unist": "^2" + } + }, + "@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 + }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" + }, + "@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" + }, + "@types/node": { + "version": "13.13.52", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" + }, + "@types/prettier": { + "version": "2.6.3", + "dev": true + }, + "@types/resolve": { + "version": "1.17.1", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/screeps": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@types/screeps/-/screeps-3.3.3.tgz", + "integrity": "sha512-r+ru4iNv8wNaNBWvk2gMXYpG8Ok1GJ8NVV9WBIHa5I+hz2QGttnAus+1whDMIzES8x3yK83Usz+gHqm8ehIW7w==", + "dev": true + }, + "@types/sinon": { + "version": "5.0.7", + "dev": true + }, + "@types/sinon-chai": { + "version": "3.2.8", + "dev": true, + "requires": { + "@types/chai": "*", + "@types/sinon": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.1", + "dev": true + }, + "@types/unist": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.7.tgz", + "integrity": "sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==" + }, + "@types/validator": { + "version": "13.7.17", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.17.tgz", + "integrity": "sha512-aqayTNmeWrZcvnG2MG9eGYI6b7S5fl+yKgPs6bAjOTwPS316R5SxBGKvtSExfyoJU7pIeHJfsHI0Ji41RVMkvQ==", + "dev": true + }, + "@types/ws": { + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/yargs": { + "version": "16.0.4", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.0", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "4.33.0", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ignore": { + "version": "5.2.0", + "dev": true + }, + "ms": { + "version": "2.1.2", + "dev": true + }, + "regexpp": { + "version": "3.2.0", + "dev": true + }, + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/experimental-utils": { + "version": "4.33.0", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "dev": true + } + } + }, + "@typescript-eslint/parser": { + "version": "4.33.0", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "debug": "^4.3.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "dev": true + } + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.33.0", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" + } + }, + "@typescript-eslint/types": { + "version": "4.33.0", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "4.33.0", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "dev": true + }, + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.33.0", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.33.0", + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "dev": true + } + } + }, + "@vladfrangu/async_event_emitter": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz", + "integrity": "sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==", + "dev": true + }, + "abab": { + "version": "2.0.6", + "dev": true + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "accumulate-stream": { + "version": "5.0.0", + "dev": true, + "requires": { + "bytes": "^3.1.0", + "ms": "^2.1.3" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "dev": true + } + } + }, + "acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true + }, + "acorn-globals": { + "version": "6.0.0", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "dev": true + } + } + }, + "acorn-jsx": { + "version": "5.3.2", + "dev": true, + "requires": {} + }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + } + } + }, + "acorn-walk": { + "version": "7.2.0", + "dev": true }, - "@types/jest": { - "optional": true + "agent-base": { + "version": "6.0.2", + "dev": true, + "requires": { + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "dev": true + } + } }, - "babel-jest": { - "optional": true - } - } - }, - "node_modules/ts-jest/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/ts-jest/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-mixer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz", - "integrity": "sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==", - "dev": true - }, - "node_modules/ts-morph": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-18.0.0.tgz", - "integrity": "sha512-Kg5u0mk19PIIe4islUI/HWRvm9bC1lHejK4S0oh1zaZ77TMZAEmQC0sHQYiu2RgCQFZKXz1fMVi/7nOOeirznA==", - "dev": true, - "dependencies": { - "@ts-morph/common": "~0.19.0", - "code-block-writer": "^12.0.0" - } - }, - "node_modules/ts-node": { - "version": "10.8.1", - "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/acorn-walk": { - "version": "8.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "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 - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", - "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "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": { - "version": "5.22.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz", - "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==", - "dev": true, - "dependencies": { - "busboy": "^1.6.0" - }, - "engines": { - "node": ">=14.0" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-properties": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", - "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", - "dev": true, - "dependencies": { - "base64-js": "^1.3.0", - "unicode-trie": "^2.0.0" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-trie": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", - "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", - "dev": true, - "dependencies": { - "pako": "^0.2.5", - "tiny-inflate": "^1.0.0" - } - }, - "node_modules/unique-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", - "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", - "dependencies": { - "crypto-random-string": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" - }, - "node_modules/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unix-crypt-td-js": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz", - "integrity": "sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw==", - "dev": true - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "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" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-join": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", - "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/utf-8-validate": { - "version": "5.0.9", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/uvu": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", - "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", - "dependencies": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3" - }, - "bin": { - "uvu": "bin.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/uvu/node_modules/diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/uvu/node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/v8-to-istanbul": { - "version": "8.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.4", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "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==", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "makeerror": "1.0.12" - } - }, - "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, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/web-worker": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", - "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=10.4" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/whatwg-url/node_modules/lodash": { - "version": "4.17.21", - "dev": true, - "license": "MIT" - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/windows-release": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", - "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==", - "dev": true, - "dependencies": { - "execa": "^4.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/windows-release/node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/windows-release/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/windows-release/node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/windows-release/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/windows-release/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/windows-release/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/winston": { - "version": "3.8.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@colors/colors": "1.5.0", - "@dabh/diagnostics": "^2.0.2", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.4.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.5.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/winston-transport": { - "version": "4.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "logform": "^2.3.2", - "readable-stream": "^3.6.0", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 6.4.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "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==" - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-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, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.8", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true + "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==", + "requires": { + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" + } }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/xmldoc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.3.0.tgz", - "integrity": "sha512-y7IRWW6PvEnYQZNZFMRLNJw+p3pezM4nKYPfr15g4OOW9i8VpeydycFuipE2297OvZnh3jSb2pxOt9QpkZUVng==", - "dev": true, - "dependencies": { - "sax": "^1.2.4" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/yamljs": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "glob": "^7.0.5" - }, - "bin": { - "json2yaml": "bin/json2yaml", - "yaml2json": "bin/yaml2json" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "engines": { - "node": ">=10" - } - }, - "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==", - "engines": { - "node": ">=12" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@aduh95/viz.js": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@aduh95/viz.js/-/viz.js-3.4.0.tgz", - "integrity": "sha512-KI2nVf9JdwWCXqK6RVf+9/096G7VWN4Z84mnynlyZKao2xQENW8WNEjLmvdlxS5X8PNWXFC1zqwm7tveOXw/4A==", - "dev": true - }, - "@ampproject/remapping": { - "version": "2.2.0", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@angular-devkit/core": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.6.tgz", - "integrity": "sha512-3OjtrPWvsqVkMBwqPeE65ccCIw56FooNpVVAJ0XwhVQv5mA81pmbCzU7JsR6U449ZT7O4cQblzZMQvWvx74HCg==", - "dev": true, - "requires": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "dependencies": { "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } + "version": "6.12.6", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } }, - "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 + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "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 + } + } }, - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - } - } - }, - "@angular-devkit/schematics": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.6.tgz", - "integrity": "sha512-KA8P78gaS76HMHGBOM8JHJXWLOxCIShYVB2Un/Cu6z3jVODvXq+ILZUc1Y0RsAce/vsl2wf8qpoh5Lku9KJHUQ==", - "dev": true, - "requires": { - "@angular-devkit/core": "16.1.6", - "jsonc-parser": "3.2.0", - "magic-string": "0.30.0", - "ora": "5.4.1", - "rxjs": "7.8.1" - }, - "dependencies": { - "magic-string": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", - "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", - "dev": true, - "requires": { - "@jridgewell/sourcemap-codec": "^1.4.13" - } - } - } - }, - "@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", - "requires": { - "@babel/highlight": "^7.22.5" - } - }, - "@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", - "dev": true - }, - "@babel/core": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", - "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.8", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true, + "optional": true }, - "ms": { - "version": "2.1.2", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", - "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", - "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", - "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } + "ansi-colors": { + "version": "4.1.3", + "dev": true }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz", - "integrity": "sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", - "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", - "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } + "ansi-escapes": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", + "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", + "requires": { + "type-fest": "^3.0.0" + }, + "dependencies": { + "type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==" + } + } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", - "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.9" - } - }, - "@babel/helper-replace-supers": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", - "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5" - } - }, - "@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==" - }, - "@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.9.tgz", - "integrity": "sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helpers": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", - "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", - "dev": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5" - } - }, - "@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", - "requires": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", - "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", - "dev": true - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "requires": {} - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.17.12", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-async-generator-functions": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz", - "integrity": "sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", - "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-class-static-block": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", - "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", - "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", - "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-dynamic-import": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", - "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-export-namespace-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", - "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-json-strings": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", - "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", - "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", - "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", - "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", - "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-transform-numeric-separator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", - "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-transform-object-rest-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", - "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - } - }, - "@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", - "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-transform-optional-chaining": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz", - "integrity": "sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-private-property-in-object": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", - "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", - "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.1" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", - "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/preset-env": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.9.tgz", - "integrity": "sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.7", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.5", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.6", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.5", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.6", - "@babel/plugin-transform-parameters": "^7.22.5", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.5", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.5", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.4", - "babel-plugin-polyfill-corejs3": "^0.8.2", - "babel-plugin-polyfill-regenerator": "^0.5.1", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - } - }, - "@babel/preset-modules": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", - "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "@babel/runtime": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", - "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.11" - } - }, - "@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/traverse": { - "version": "7.22.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", - "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.7", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, - "ms": { - "version": "2.1.2", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "dev": true - }, - "@braintree/sanitize-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz", - "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==" - }, - "@colors/colors": { - "version": "1.5.0", - "devOptional": true - }, - "@compodoc/compodoc": { - "version": "1.1.21", - "resolved": "https://registry.npmjs.org/@compodoc/compodoc/-/compodoc-1.1.21.tgz", - "integrity": "sha512-/FDlwRgKzmkGuorDnURuCzoGY6rZ0KY7Mj5/PwnEjMs0y1CRRPHBJC9I0yVIjn8j8gxVy8PPc6dna0lY1MWwhg==", - "dev": true, - "requires": { - "@angular-devkit/schematics": "^16.0.1", - "@babel/core": "^7.21.8", - "@babel/preset-env": "^7.21.5", - "@compodoc/live-server": "^1.2.3", - "@compodoc/ngd-transformer": "^2.1.3", - "chalk": "4.1.2", - "cheerio": "^1.0.0-rc.12", - "chokidar": "^3.5.3", - "colors": "1.4.0", - "commander": "^10.0.1", - "cosmiconfig": "^8.1.3", - "decache": "^4.6.1", - "fancy-log": "^2.0.0", - "fast-glob": "^3.2.12", - "fs-extra": "^11.1.1", - "glob": "^10.2.4", - "handlebars": "^4.7.7", - "html-entities": "^2.3.3", - "i18next": "^22.4.15", - "inside": "^1.0.0", - "json5": "^2.2.3", - "lodash": "^4.17.21", - "loglevel": "^1.8.1", - "loglevel-plugin-prefix": "^0.8.4", - "lunr": "^2.3.9", - "marked": "4.3.0", - "minimist": "^1.2.8", - "opencollective-postinstall": "^2.0.3", - "os-name": "4.0.1", - "pdfjs-dist": "2.12.313", - "pdfmake": "^0.2.7", - "semver": "^7.5.1", - "traverse": "^0.6.7", - "ts-morph": "^18.0.0", - "uuid": "^9.0.0" - }, - "dependencies": { "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "version": "3.2.1", + "requires": { + "color-convert": "^1.9.0" + } }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } + "ansicolors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==" + }, + "anymatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "apache-crypt": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.6.tgz", + "integrity": "sha512-072WetlM4blL8PREJVeY+WHiUh1R5VNt2HfceGS8aKqttPHcmqE5pkKuXPz/ULmJOFkc8Hw3kfKl6vy7Qka6DA==", + "dev": true, + "requires": { + "unix-crypt-td-js": "^1.1.4" + } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "apache-md5": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.8.tgz", + "integrity": "sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA==", + "dev": true }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "arg": { + "version": "4.1.3", + "dev": true }, - "commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true + "argparse": { + "version": "1.0.10", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } }, - "fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } + "argv-formatter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", + "integrity": "sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==" + }, + "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 + }, + "array-from": { + "version": "2.1.1", + "dev": true + }, + "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==" + }, + "array-includes": { + "version": "3.1.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + } }, - "glob": { - "version": "10.3.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", - "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", - "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - } + "array-union": { + "version": "2.1.0", + "dev": true + }, + "array.prototype.flat": { + "version": "1.3.0", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + } }, - "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 + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true + }, + "assert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", + "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", + "dev": true, + "requires": { + "es6-object-assign": "^1.1.0", + "is-nan": "^1.2.1", + "object-is": "^1.0.1", + "util": "^0.12.0" + } }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } + "assertion-error": { + "version": "1.1.0", + "dev": true + }, + "ast-transform": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/ast-transform/-/ast-transform-0.0.0.tgz", + "integrity": "sha512-e/JfLiSoakfmL4wmTGPjv0HpTICVmxwXgYOB8x+mzozHL8v+dSfCbrJ8J8hJ0YBP0XcYu1aLZ6b/3TnxNK3P2A==", + "dev": true, + "requires": { + "escodegen": "~1.2.0", + "esprima": "~1.0.4", + "through": "~2.3.4" + }, + "dependencies": { + "escodegen": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.2.0.tgz", + "integrity": "sha512-yLy3Cc+zAC0WSmoT2fig3J87TpQ8UaZGx8ahCAs9FL8qNbyV7CVyPKS74DG4bsHiL5ew9sxdYx131OkBQMFnvA==", + "dev": true, + "requires": { + "esprima": "~1.0.4", + "estraverse": "~1.5.0", + "esutils": "~1.0.0", + "source-map": "~0.1.30" + } + }, + "esprima": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA==", + "dev": true + }, + "estraverse": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz", + "integrity": "sha512-FpCjJDfmo3vsc/1zKSeqR5k42tcIhxFIlvq+h9j0fO2q/h2uLKyweq7rYJ+0CoVvrGQOxIS5wyBrW/+vF58BUQ==", + "dev": true + }, + "esutils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz", + "integrity": "sha512-x/iYH53X3quDwfHRz4y8rn4XcEwwCJeWsul9pF1zldMbGtgOtMNBEOuYWwB1EQlK2LRa1fev3YAgym/RElp5Cg==", + "dev": true + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", + "dev": true, + "optional": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "ast-types": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.7.8.tgz", + "integrity": "sha512-RIOpVnVlltB6PcBJ5BMLx+H+6JJ/zjDGU0t7f0L6c2M1dqcK92VQopLBlPQ9R80AVXelfqYgjcPLtHtDbNFg0Q==", + "dev": true }, - "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 + "async": { + "version": "3.2.4", + "dev": true }, - "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } + "asynckit": { + "version": "0.4.0", + "dev": true }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } + "axios": { + "version": "0.21.4", + "dev": true, + "requires": { + "follow-redirects": "^1.14.0" + } }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@compodoc/live-server": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@compodoc/live-server/-/live-server-1.2.3.tgz", - "integrity": "sha512-hDmntVCyjjaxuJzPzBx68orNZ7TW4BtHWMnXlIVn5dqhK7vuFF/11hspO1cMmc+2QTYgqde1TBcb3127S7Zrow==", - "dev": true, - "requires": { - "chokidar": "^3.5.2", - "colors": "1.4.0", - "connect": "^3.7.0", - "cors": "latest", - "event-stream": "4.0.1", - "faye-websocket": "0.11.x", - "http-auth": "4.1.9", - "http-auth-connect": "^1.0.5", - "morgan": "^1.10.0", - "object-assign": "latest", - "open": "8.4.0", - "proxy-middleware": "latest", - "send": "latest", - "serve-index": "^1.9.1" - } - }, - "@compodoc/ngd-core": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@compodoc/ngd-core/-/ngd-core-2.1.1.tgz", - "integrity": "sha512-Z+wE6wWZYVnudRYg6qunDlyh3Orw39Ib66Gvrz5kX5u7So+iu3tr6sQJdqH6yGS3hAjig5avlfhWLlgsb6/x1Q==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.3", - "fancy-log": "^2.0.0", - "typescript": "^5.0.4" - }, - "dependencies": { - "typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "dev": true - } - } - }, - "@compodoc/ngd-transformer": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@compodoc/ngd-transformer/-/ngd-transformer-2.1.3.tgz", - "integrity": "sha512-oWxJza7CpWR8/FeWYfE6j+jgncnGBsTWnZLt5rD2GUpsGSQTuGrsFPnmbbaVLgRS5QIVWBJYke7QFBr/7qVMWg==", - "dev": true, - "requires": { - "@aduh95/viz.js": "3.4.0", - "@compodoc/ngd-core": "~2.1.1", - "dot": "^2.0.0-beta.1", - "fs-extra": "^11.1.1" - }, - "dependencies": { - "fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } + "babel-jest": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } + "babel-plugin-istanbul": { + "version": "6.1.1", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } - } - }, - "@dabh/diagnostics": { - "version": "2.0.3", - "dev": true, - "requires": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, - "@discordjs/builders": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.5.tgz", - "integrity": "sha512-SdweyCs/+mHj+PNhGLLle7RrRFX9ZAhzynHahMCLqp5Zeq7np7XC6/mgzHc79QoVlQ1zZtOkTTiJpOZu5V8Ufg==", - "dev": true, - "requires": { - "@discordjs/formatters": "^0.3.2", - "@discordjs/util": "^1.0.1", - "@sapphire/shapeshift": "^3.9.2", - "discord-api-types": "0.37.50", - "fast-deep-equal": "^3.1.3", - "ts-mixer": "^6.0.3", - "tslib": "^2.6.1" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - } - } - }, - "@discordjs/collection": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", - "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", - "dev": true - }, - "@discordjs/formatters": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.2.tgz", - "integrity": "sha512-lE++JZK8LSSDRM5nLjhuvWhGuKiXqu+JZ/DsOR89DVVia3z9fdCJVcHF2W/1Zxgq0re7kCzmAJlCMMX3tetKpA==", - "dev": true, - "requires": { - "discord-api-types": "0.37.50" - } - }, - "@discordjs/rest": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.0.1.tgz", - "integrity": "sha512-/eWAdDRvwX/rIE2tuQUmKaxmWeHmGealttIzGzlYfI4+a7y9b6ZoMp8BG/jaohs8D8iEnCNYaZiOFLVFLQb8Zg==", - "dev": true, - "requires": { - "@discordjs/collection": "^1.5.3", - "@discordjs/util": "^1.0.1", - "@sapphire/async-queue": "^1.5.0", - "@sapphire/snowflake": "^3.5.1", - "@vladfrangu/async_event_emitter": "^2.2.2", - "discord-api-types": "0.37.50", - "magic-bytes.js": "^1.0.15", - "tslib": "^2.6.1", - "undici": "5.22.1" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - } - } - }, - "@discordjs/util": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.0.1.tgz", - "integrity": "sha512-d0N2yCxB8r4bn00/hvFZwM7goDcUhtViC5un4hPj73Ba4yrChLSJD8fy7Ps5jpTLg1fE9n4K0xBLc1y9WGwSsA==", - "dev": true - }, - "@discordjs/ws": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.0.1.tgz", - "integrity": "sha512-avvAolBqN3yrSvdBPcJ/0j2g42ABzrv3PEL76e3YTp2WYMGH7cuspkjfSyNWaqYl1J+669dlLp+YFMxSVQyS5g==", - "dev": true, - "requires": { - "@discordjs/collection": "^1.5.3", - "@discordjs/rest": "^2.0.1", - "@discordjs/util": "^1.0.1", - "@sapphire/async-queue": "^1.5.0", - "@types/ws": "^8.5.5", - "@vladfrangu/async_event_emitter": "^2.2.2", - "discord-api-types": "0.37.50", - "tslib": "^2.6.1", - "ws": "^8.13.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true + "babel-plugin-jest-hoist": { + "version": "27.5.1", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + } }, - "ws": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", - "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", - "dev": true, - "requires": {} - } - } - }, - "@eslint/eslintrc": { - "version": "0.4.3", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "dev": true + "babel-plugin-polyfill-corejs2": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", + "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.2", + "semver": "^6.3.1" + } }, - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "espree": { - "version": "7.3.1", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - } + "babel-plugin-polyfill-corejs3": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", + "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.4.2", + "core-js-compat": "^3.31.0" + } }, - "globals": { - "version": "13.15.0", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } + "babel-plugin-polyfill-regenerator": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", + "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.4.2" + } }, - "ms": { - "version": "2.1.2", - "dev": true + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "27.5.1", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "dev": true + }, + "base32768": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base32768/-/base32768-3.0.1.tgz", + "integrity": "sha512-dNGY49X0IKN1kDl9y/6sii1Vced+f+4uAqOeRz/PshjNdPwSD+ntnHOg/YgDbLSZetp94d/XxGdpfbXDKv8BVQ==" }, - "strip-json-comments": { - "version": "3.1.1", - "dev": true - } - } - }, - "@foliojs-fork/fontkit": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@foliojs-fork/fontkit/-/fontkit-1.9.1.tgz", - "integrity": "sha512-U589voc2/ROnvx1CyH9aNzOQWJp127JGU1QAylXGQ7LoEAF6hMmahZLQ4eqAcgHUw+uyW4PjtCItq9qudPkK3A==", - "dev": true, - "requires": { - "@foliojs-fork/restructure": "^2.0.2", - "brfs": "^2.0.0", - "brotli": "^1.2.0", - "browserify-optional": "^1.0.1", - "clone": "^1.0.4", - "deep-equal": "^1.0.0", - "dfa": "^1.2.0", - "tiny-inflate": "^1.0.2", - "unicode-properties": "^1.2.2", - "unicode-trie": "^2.0.0" - } - }, - "@foliojs-fork/linebreak": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@foliojs-fork/linebreak/-/linebreak-1.1.1.tgz", - "integrity": "sha512-pgY/+53GqGQI+mvDiyprvPWgkTlVBS8cxqee03ejm6gKAQNsR1tCYCIvN9FHy7otZajzMqCgPOgC4cHdt4JPig==", - "dev": true, - "requires": { - "base64-js": "1.3.1", - "brfs": "^2.0.2", - "unicode-trie": "^2.0.0" - }, - "dependencies": { "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", - "dev": true - } - } - }, - "@foliojs-fork/pdfkit": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@foliojs-fork/pdfkit/-/pdfkit-0.13.0.tgz", - "integrity": "sha512-YXeG1fml9k97YNC9K8e292Pj2JzGt9uOIiBFuQFxHsdQ45BlxW+JU3RQK6JAvXU7kjhjP8rCcYvpk36JLD33sQ==", - "dev": true, - "requires": { - "@foliojs-fork/fontkit": "^1.9.1", - "@foliojs-fork/linebreak": "^1.1.1", - "crypto-js": "^4.0.0", - "png-js": "^1.0.0" - } - }, - "@foliojs-fork/restructure": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@foliojs-fork/restructure/-/restructure-2.0.2.tgz", - "integrity": "sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA==", - "dev": true - }, - "@humanwhocodes/config-array": { - "version": "0.5.0", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } }, - "ms": { - "version": "2.1.2", - "dev": true - } - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "dev": true - }, - "@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, - "requires": { - "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" - }, - "dependencies": { - "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 + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true }, - "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 + "bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", + "dev": true }, - "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 + "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==" }, - "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, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } }, - "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, - "requires": { - "ansi-regex": "^6.0.1" - } + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true }, - "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, - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - } - } - } - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } + "bottleneck": { + "version": "2.19.5", + "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", + "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" }, - "locate-path": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } + "brace-expansion": { + "version": "1.1.11", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "p-limit": { - "version": "2.3.0", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } + "braces": { + "version": "3.0.2", + "requires": { + "fill-range": "^7.0.1" + } }, - "p-locate": { - "version": "4.1.0", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } + "brfs": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brfs/-/brfs-2.0.2.tgz", + "integrity": "sha512-IrFjVtwu4eTJZyu8w/V2gxU7iLTtcHih67sgEdzrhjLBMHp2uYefUBfdM4k2UvcuWMgV7PQDZHSLeNWnLFKWVQ==", + "dev": true, + "requires": { + "quote-stream": "^1.0.1", + "resolve": "^1.1.5", + "static-module": "^3.0.2", + "through2": "^2.0.0" + } }, - "p-try": { - "version": "2.2.0", - "dev": true + "brotli": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", + "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", + "dev": true, + "requires": { + "base64-js": "^1.1.2" + } }, - "path-exists": { - "version": "4.0.0", - "dev": true + "browser-process-hrtime": { + "version": "1.0.0", + "dev": true + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", + "dev": true + } + } }, - "resolve-from": { - "version": "5.0.0", - "dev": true - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "dev": true - }, - "@javascript-obfuscator/escodegen": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@javascript-obfuscator/escodegen/-/escodegen-2.3.0.tgz", - "integrity": "sha512-QVXwMIKqYMl3KwtTirYIA6gOCiJ0ZDtptXqAv/8KWLG9uQU2fZqTVy7a/A5RvcoZhbDoFfveTxuGxJ5ibzQtkw==", - "dev": true, - "requires": { - "@javascript-obfuscator/estraverse": "^5.3.0", - "esprima": "^4.0.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "@javascript-obfuscator/estraverse": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@javascript-obfuscator/estraverse/-/estraverse-5.4.0.tgz", - "integrity": "sha512-CZFX7UZVN9VopGbjTx4UXaXsi9ewoM1buL0kY7j1ftYdSs7p2spv9opxFjHlQ/QGTgh4UqufYqJJ0WKLml7b6w==", - "dev": true - }, - "@jest/console": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "browserify-optional": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-optional/-/browserify-optional-1.0.1.tgz", + "integrity": "sha512-VrhjbZ+Ba5mDiSYEuPelekQMfTbhcA2DhLk2VQWqdcCROWeFqlTcXZ7yfRkXCIl8E+g4gINJYJiRB7WEtfomAQ==", + "dev": true, + "requires": { + "ast-transform": "0.0.0", + "ast-types": "^0.7.0", + "browser-resolve": "^1.8.1" + } }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "browserslist": { + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + } }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "2.x" + } }, - "color-name": { - "version": "1.1.4", - "dev": true + "bser": { + "version": "2.1.1", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } }, - "has-flag": { - "version": "4.0.0", - "dev": true + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/core": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-escapes": { - "version": "4.3.2", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } + "buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", + "dev": true }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "buffer-from": { + "version": "1.1.2", + "dev": true + }, + "bufferutil": { + "version": "4.0.6", + "dev": true, + "optional": true, + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "builtin-modules": { + "version": "3.3.0", + "dev": true + }, + "busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dev": true, + "requires": { + "streamsearch": "^1.1.0" + } + }, + "bytes": { + "version": "3.1.2", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==", + "dev": true + }, + "callsites": { + "version": "3.1.0" + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "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==", + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, + "caniuse-lite": { + "version": "1.0.30001517", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz", + "integrity": "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==", + "dev": true + }, + "cardinal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", + "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==", + "requires": { + "ansicolors": "~0.3.2", + "redeyed": "~2.1.0" + } + }, + "chai": { + "version": "4.3.6", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + } }, "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "version": "2.4.2", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chance": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/chance/-/chance-1.1.9.tgz", + "integrity": "sha512-TfxnA/DcZXRTA4OekA2zL9GH8qscbbl6X0ZqU4tXhGveVY/mXWvEQLt5GwZcYXTEyEFflVtj+pG8nc8EwSm1RQ==", + "dev": true + }, + "char-regex": { + "version": "1.0.2", + "dev": true + }, + "character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==" + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "dev": true + }, + "check-error": { + "version": "1.0.2", + "dev": true + }, + "cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "dev": true, + "requires": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "dependencies": { + "parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "requires": { + "entities": "^4.4.0" + } + } + } + }, + "cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + } + }, + "child-shell": { + "version": "5.0.0", + "dev": true, + "requires": { + "accumulate-stream": "^5.0.0", + "debug": "^4.3.2", + "kind-of": "^6.0.3", + "nanoid": "^3.1.30", + "p-queue": "6.6.2", + "p-timeout": "4.1.0", + "trim-buffer": "^5.0.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "dev": true + } + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "ci-info": { + "version": "3.3.2", + "dev": true + }, + "cjs-module-lexer": { + "version": "1.2.2", + "dev": true + }, + "class-validator": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.0.tgz", + "integrity": "sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==", + "dev": true, + "requires": { + "@types/validator": "^13.7.10", + "libphonenumber-js": "^1.10.14", + "validator": "^13.7.0" + } + }, + "clean-stack": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", + "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", + "requires": { + "escape-string-regexp": "5.0.0" + }, + "dependencies": { + "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==" + } + } + }, + "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, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", + "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", + "dev": true + }, + "cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true + }, + "co": { + "version": "4.6.0", + "dev": true + }, + "code-block-writer": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-12.0.0.tgz", + "integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==", + "dev": true + }, + "collect-v8-coverage": { + "version": "1.0.1", + "dev": true + }, + "color": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } }, "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "version": "1.9.3", + "requires": { + "color-name": "1.1.3" + } }, "color-name": { - "version": "1.1.4", - "dev": true + "version": "1.1.3" + }, + "color-string": { + "version": "1.9.1", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "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 + }, + "colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true + }, + "colorspace": { + "version": "1.1.4", + "dev": true, + "requires": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, + "combined-stream": { + "version": "1.0.8", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "dev": true + }, + "comment-parser": { + "version": "1.1.2", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "dev": true + }, + "compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "requires": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "concat-map": { + "version": "0.0.1", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + } + }, + "conventional-changelog-angular": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz", + "integrity": "sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==", + "requires": { + "compare-func": "^2.0.0" + } + }, + "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==", + "requires": { + "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" + }, + "dependencies": { + "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==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "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==", + "requires": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.1" + } + }, + "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==", + "requires": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.3.5", + "meow": "^8.1.2", + "split2": "^3.2.2" + } + }, + "convert-source-map": { + "version": "1.8.0", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "dev": true + } + } + }, + "core-js-compat": { + "version": "3.31.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.1.tgz", + "integrity": "sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA==", + "dev": true, + "requires": { + "browserslist": "^4.21.9" + } + }, + "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==" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "cose-base": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", + "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", + "requires": { + "layout-base": "^1.0.0" + } + }, + "cosmiconfig": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "requires": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + } + } + }, + "create-require": { + "version": "1.1.1", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "dev": true + }, + "crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==", + "dev": true + }, + "crypto-random-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + "requires": { + "type-fest": "^1.0.1" + }, + "dependencies": { + "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==" + } + } }, - "has-flag": { - "version": "4.0.0", - "dev": true + "css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + } }, - "rimraf": { - "version": "3.0.2", - "dev": true, - "requires": { - "glob": "^7.1.3" - } + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } + "cssom": { + "version": "0.4.4", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "dev": true + } + } }, - "type-fest": { - "version": "0.21.3", - "dev": true - } - } - }, - "@jest/environment": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1" - } - }, - "@jest/fake-timers": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - } - }, - "@jest/globals": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" - } - }, - "@jest/reporters": { - "version": "27.5.1", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "cytoscape": { + "version": "3.25.0", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.25.0.tgz", + "integrity": "sha512-7MW3Iz57mCUo6JQCho6CmPBCbTlJr7LzyEtIkutG255HLVd4XuBg2I9BkTZLI/e4HoaOB/BiAzXuQybQ95+r9Q==", + "requires": { + "heap": "^0.2.6", + "lodash": "^4.17.21" + }, + "dependencies": { + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + } + } }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "cytoscape-cose-bilkent": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", + "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", + "requires": { + "cose-base": "^1.0.0" + } }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "cytoscape-fcose": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", + "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", + "requires": { + "cose-base": "^2.2.0" + }, + "dependencies": { + "cose-base": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", + "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", + "requires": { + "layout-base": "^2.0.0" + } + }, + "layout-base": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", + "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==" + } + } }, - "color-name": { - "version": "1.1.4", - "dev": true + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } }, - "has-flag": { - "version": "4.0.0", - "dev": true + "d3": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", + "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==", + "requires": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + } }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/source-map": { - "version": "27.5.1", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/test-result": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" - } - }, - "@jest/transform": { - "version": "27.5.1", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "requires": { + "internmap": "1 - 2" + } }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==" + }, + "d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "requires": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + } }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "requires": { + "d3-path": "1 - 3" + } }, - "color-name": { - "version": "1.1.4", - "dev": true + "d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==" + }, + "d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "requires": { + "d3-array": "^3.2.0" + } }, - "has-flag": { - "version": "4.0.0", - "dev": true + "d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "requires": { + "delaunator": "5" + } }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/types": { - "version": "27.5.1", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==" + }, + "d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "requires": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + } }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "requires": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + }, + "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==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==" + }, + "d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "requires": { + "d3-dsv": "1 - 3" + } }, - "color-name": { - "version": "1.1.4", - "dev": true + "d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "requires": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + } }, - "has-flag": { - "version": "4.0.0", - "dev": true + "d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==" + }, + "d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", + "requires": { + "d3-array": "2.5.0 - 3" + } }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.1", - "dev": true - }, - "@jridgewell/source-map": { - "version": "0.3.2", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@octokit/auth-token": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", - "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==" - }, - "@octokit/core": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.0.tgz", - "integrity": "sha512-YbAtMWIrbZ9FCXbLwT9wWB8TyLjq9mxpKdgB3dUNxQcIVTf9hJ70gRPwAcqGZdY6WdJPZ0I7jLaaNDCiloGN2A==", - "requires": { - "@octokit/auth-token": "^4.0.0", - "@octokit/graphql": "^7.0.0", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/endpoint": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.0.tgz", - "integrity": "sha512-szrQhiqJ88gghWY2Htt8MqUDO6++E/EIXqJ2ZEp5ma3uGS46o7LZAzSLt49myB7rT+Hfw5Y6gO3LmOxGzHijAQ==", - "requires": { - "@octokit/types": "^11.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "dependencies": { - "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==" - } - } - }, - "@octokit/graphql": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.1.tgz", - "integrity": "sha512-T5S3oZ1JOE58gom6MIcrgwZXzTaxRnxBso58xhozxHpOqSTgDS6YNeEUvZ/kRvXgPrRz/KHnZhtb7jUMRi9E6w==", - "requires": { - "@octokit/request": "^8.0.1", - "@octokit/types": "^11.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/openapi-types": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", - "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" - }, - "@octokit/plugin-paginate-rest": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-8.0.0.tgz", - "integrity": "sha512-2xZ+baZWUg+qudVXnnvXz7qfrTmDeYPCzangBVq/1gXxii/OiS//4shJp9dnCCvj1x+JAm9ji1Egwm1BA47lPQ==", - "requires": { - "@octokit/types": "^11.0.0" - } - }, - "@octokit/plugin-retry": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-6.0.0.tgz", - "integrity": "sha512-a1/A4A+PB1QoAHQfLJxGHhLfSAT03bR1jJz3GgQJZvty2ozawFWs93MiBQXO7SL2YbO7CIq0Goj4qLOBj8JeMQ==", - "requires": { - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0", - "bottleneck": "^2.15.3" - } - }, - "@octokit/plugin-throttling": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-7.0.0.tgz", - "integrity": "sha512-KL2k/d0uANc8XqP5S64YcNFCudR3F5AaKO39XWdUtlJIjT9Ni79ekWJ6Kj5xvAw87udkOMEPcVf9xEge2+ahew==", - "requires": { - "@octokit/types": "^11.0.0", - "bottleneck": "^2.15.3" - } - }, - "@octokit/request": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.1.1.tgz", - "integrity": "sha512-8N+tdUz4aCqQmXl8FpHYfKG9GelDFd7XGVzyN8rc6WxVlYcfpHECnuRkgquzz+WzvHTK62co5di8gSXnzASZPQ==", - "requires": { - "@octokit/endpoint": "^9.0.0", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.1.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "dependencies": { - "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==" - } - } - }, - "@octokit/request-error": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.0.tgz", - "integrity": "sha512-1ue0DH0Lif5iEqT52+Rf/hf0RmGO9NWFjrzmrkArpG9trFfDM/efx00BJHdLGuro4BR/gECxCU2Twf5OKrRFsQ==", - "requires": { - "@octokit/types": "^11.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "@octokit/types": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-11.1.0.tgz", - "integrity": "sha512-Fz0+7GyLm/bHt8fwEqgvRBWwIV1S6wRRyq+V6exRKLVWaKGsuy6H9QFYeBVDV7rK6fO3XwHgQOPxv+cLj2zpXQ==", - "requires": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "@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, - "optional": true - }, - "@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==" - }, - "@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "requires": { - "graceful-fs": "4.2.10" - } - }, - "@pnpm/npm-conf": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", - "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", - "requires": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - } - }, - "@rollup/plugin-commonjs": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-20.0.0.tgz", - "integrity": "sha512-5K0g5W2Ol8hAcTHqcTBHiA7M58tfmYi1o9KxeJuuRNpGaTa5iLjcyemBitCBcKXaHamOBBEH2dGom6v6Unmqjg==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" - } - }, - "@rollup/plugin-node-resolve": { - "version": "13.3.0", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.1.0", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - } - }, - "@rollup/pluginutils": { - "version": "3.1.0", - "dev": true, - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "dependencies": { - "estree-walker": { - "version": "1.0.1", - "dev": true - } - } - }, - "@sapphire/async-queue": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", - "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==", - "dev": true - }, - "@sapphire/shapeshift": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.2.tgz", - "integrity": "sha512-YRbCXWy969oGIdqR/wha62eX8GNHsvyYi0Rfd4rNW6tSVVa8p0ELiMEuOH/k8rgtvRoM+EMV7Csqz77YdwiDpA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3", - "lodash": "^4.17.21" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - } - } - }, - "@sapphire/snowflake": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz", - "integrity": "sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==", - "dev": true - }, - "@semantic-release/changelog": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@semantic-release/changelog/-/changelog-6.0.3.tgz", - "integrity": "sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==", - "dev": true, - "requires": { - "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", - "fs-extra": "^11.0.0", - "lodash": "^4.17.4" - }, - "dependencies": { - "@semantic-release/error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", - "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", - "dev": true + "d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==" + }, + "d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "requires": { + "d3-color": "1 - 3" + } }, - "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, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } + "d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==" + }, + "d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==" + }, + "d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==" + }, + "d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==" + }, + "d3-sankey": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", + "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", + "requires": { + "d3-array": "1 - 2", + "d3-shape": "^1.2.0" + }, + "dependencies": { + "d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "requires": { + "internmap": "^1.0.0" + } + }, + "d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" + }, + "d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "requires": { + "d3-path": "1" + } + }, + "internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + } + } }, - "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 + "d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "requires": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + } }, - "fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } + "d3-scale-chromatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", + "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", + "requires": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + } }, - "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 + "d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==" }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } + "d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "requires": { + "d3-path": "^3.1.0" + } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "requires": { + "d3-array": "2 - 3" + } }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@semantic-release/commit-analyzer": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz", - "integrity": "sha512-E+dr6L+xIHZkX4zNMe6Rnwg4YQrWNXK+rNsvwOPpdFppvZO1olE2fIgWhv89TkQErygevbjsZFSIxp+u6w2e5g==", - "dev": true, - "requires": { - "conventional-changelog-angular": "^5.0.0", - "conventional-commits-filter": "^2.0.0", - "conventional-commits-parser": "^3.2.3", - "debug": "^4.0.0", - "import-from": "^4.0.0", - "lodash": "^4.17.4", - "micromatch": "^4.0.2" - }, - "dependencies": { - "conventional-changelog-angular": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", - "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", - "dev": true, - "requires": { - "compare-func": "^2.0.0", - "q": "^1.5.1" - } + "d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "requires": { + "d3-time": "1 - 3" + } }, - "conventional-commits-filter": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", - "dev": true, - "requires": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" - } + "d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==" + }, + "d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "requires": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + } }, - "conventional-commits-parser": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", - "dev": true, - "requires": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - } + "d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "requires": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + } }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } + "dagre-d3-es": { + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.10.tgz", + "integrity": "sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==", + "requires": { + "d3": "^7.8.2", + "lodash-es": "^4.17.21" + } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "dash-ast": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", + "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==", + "dev": true + }, + "data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "dev": true + }, + "data-urls": { + "version": "2.0.0", + "dev": true, + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==" }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "requires": { - "readable-stream": "3" - } - } - } - }, - "@semantic-release/error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", - "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==" - }, - "@semantic-release/git": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@semantic-release/git/-/git-10.0.1.tgz", - "integrity": "sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==", - "dev": true, - "requires": { - "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", - "debug": "^4.0.0", - "dir-glob": "^3.0.0", - "execa": "^5.0.0", - "lodash": "^4.17.4", - "micromatch": "^4.0.0", - "p-reduce": "^2.0.0" - }, - "dependencies": { - "@semantic-release/error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", - "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", - "dev": true + "dayjs": { + "version": "1.11.9", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", + "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==" }, - "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, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } }, - "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 + "decache": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.2.tgz", + "integrity": "sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==", + "dev": true, + "requires": { + "callsite": "^1.0.0" + } }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" + }, + "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==", + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==" + } + } }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } + "decimal.js": { + "version": "10.3.1", + "dev": true }, - "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 + "decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "requires": { + "character-entities": "^2.0.0" + } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "dedent": { + "version": "0.7.0", + "dev": true }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true + "deep-eql": { + "version": "3.0.1", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } + "deep-is": { + "version": "0.1.4", + "dev": true }, - "p-reduce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", - "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", - "dev": true - } - } - }, - "@semantic-release/github": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-9.0.4.tgz", - "integrity": "sha512-kQCGFAsBErvCR6hzNuzu63cj4erQN2krm9zQlg8vl4j5X0mL0d/Ras0wmL5Gkr1TuSS2lweME7M4J5zvtDDDSA==", - "requires": { - "@octokit/core": "^5.0.0", - "@octokit/plugin-paginate-rest": "^8.0.0", - "@octokit/plugin-retry": "^6.0.0", - "@octokit/plugin-throttling": "^7.0.0", - "@semantic-release/error": "^4.0.0", - "aggregate-error": "^4.0.1", - "debug": "^4.3.4", - "dir-glob": "^3.0.1", - "globby": "^13.1.4", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "issue-parser": "^6.0.0", - "lodash-es": "^4.17.21", - "mime": "^3.0.0", - "p-filter": "^3.0.0", - "url-join": "^5.0.0" - }, - "dependencies": { - "agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "requires": { - "debug": "^4.3.4" - } + "deepmerge": { + "version": "4.2.2", + "dev": true }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } + "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, + "requires": { + "clone": "^1.0.2" + } }, - "globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "requires": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - } + "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 + }, + "define-properties": { + "version": "1.1.4", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } }, - "http-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", - "requires": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - } + "delaunator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", + "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", + "requires": { + "robust-predicates": "^3.0.0" + } }, - "https-proxy-agent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz", - "integrity": "sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==", - "requires": { - "agent-base": "^7.0.2", - "debug": "4" - } + "delayed-stream": { + "version": "1.0.0", + "dev": true }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" + }, + "dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "detect-newline": { + "version": "3.1.0", + "dev": true + }, + "dfa": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", + "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", + "dev": true }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "diff": { + "version": "3.5.0", + "dev": true }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" - } - } - }, - "@semantic-release/npm": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-10.0.4.tgz", - "integrity": "sha512-6R3timIQ7VoL2QWRkc9DG8v74RQtRp7UOe/2KbNaqwJ815qOibAv65bH3RtTEhs4axEaHoZf7HDgFs5opaZ9Jw==", - "requires": { - "@semantic-release/error": "^4.0.0", - "aggregate-error": "^4.0.1", - "execa": "^7.0.0", - "fs-extra": "^11.0.0", - "lodash-es": "^4.17.21", - "nerf-dart": "^1.0.0", - "normalize-url": "^8.0.0", - "npm": "^9.5.0", - "rc": "^1.2.8", - "read-pkg": "^8.0.0", - "registry-auth-token": "^5.0.0", - "semver": "^7.1.2", - "tempy": "^3.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } + "diff-sequences": { + "version": "27.5.1", + "dev": true }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } + "dir-glob": { + "version": "3.0.1", + "requires": { + "path-type": "^4.0.0" + } }, - "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==", - "requires": { - "lru-cache": "^6.0.0" - } + "discord-api-types": { + "version": "0.37.50", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.50.tgz", + "integrity": "sha512-X4CDiMnDbA3s3RaUXWXmgAIbY1uxab3fqe3qwzg5XutR3wjqi7M3IkgQbsIBzpqBN2YWr/Qdv7JrFRqSgb4TFg==", + "dev": true + }, + "discord.js": { + "version": "14.13.0", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.13.0.tgz", + "integrity": "sha512-Kufdvg7fpyTEwANGy9x7i4od4yu5c6gVddGi5CKm4Y5a6sF0VBODObI3o0Bh7TGCj0LfNT8Qp8z04wnLFzgnbA==", + "dev": true, + "requires": { + "@discordjs/builders": "^1.6.5", + "@discordjs/collection": "^1.5.3", + "@discordjs/formatters": "^0.3.2", + "@discordjs/rest": "^2.0.1", + "@discordjs/util": "^1.0.1", + "@discordjs/ws": "^1.0.1", + "@sapphire/snowflake": "^3.5.1", + "@types/ws": "^8.5.5", + "discord-api-types": "0.37.50", + "fast-deep-equal": "^3.1.3", + "lodash.snakecase": "^4.1.1", + "tslib": "^2.6.1", + "undici": "5.22.1", + "ws": "^8.13.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "ws": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", + "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", + "dev": true, + "requires": {} + } + } }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - } - } - }, - "@semantic-release/release-notes-generator": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-11.0.4.tgz", - "integrity": "sha512-j0Znnwq9IdWTCGzqSlkLv4MpALTsVDZxcVESzJCNN8pK2BYQlYaKsdZ1Ea/+7RlppI3vjhEi33ZKmjSGY1FLKw==", - "requires": { - "conventional-changelog-angular": "^6.0.0", - "conventional-changelog-writer": "^6.0.0", - "conventional-commits-filter": "^3.0.0", - "conventional-commits-parser": "^4.0.0", - "debug": "^4.0.0", - "get-stream": "^7.0.0", - "import-from": "^4.0.0", - "into-stream": "^7.0.0", - "lodash-es": "^4.17.21", - "read-pkg-up": "^10.0.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } + "doctrine": { + "version": "3.0.0", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } }, - "get-stream": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-7.0.1.tgz", - "integrity": "sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==" + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "@sinonjs/commons": { - "version": "1.8.3", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "8.1.0", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@sinonjs/formatio": { - "version": "3.2.2", - "dev": true, - "requires": { - "@sinonjs/commons": "^1", - "@sinonjs/samsam": "^3.1.0" - }, - "dependencies": { - "@sinonjs/samsam": { - "version": "3.3.3", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.3.0", - "array-from": "^2.1.1", - "lodash": "^4.17.15" - } + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domexception": { + "version": "2.0.1", + "dev": true, + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "dev": true + } + } }, - "lodash": { - "version": "4.17.21", - "dev": true - } - } - }, - "@sinonjs/samsam": { - "version": "2.1.3", - "dev": true - }, - "@sinonjs/text-encoding": { - "version": "0.7.1", - "dev": true - }, - "@tootallnate/once": { - "version": "1.1.2", - "dev": true - }, - "@ts-morph/common": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.19.0.tgz", - "integrity": "sha512-Unz/WHmd4pGax91rdIKWi51wnVUW11QttMEPpBiBgIewnc9UQIX7UDLxr5vRlqeByXCwhkF6VabSsI0raWcyAQ==", - "dev": true, - "requires": { - "fast-glob": "^3.2.12", - "minimatch": "^7.4.3", - "mkdirp": "^2.1.6", - "path-browserify": "^1.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0" + } }, - "minimatch": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", - "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } + "dompurify": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.5.tgz", + "integrity": "sha512-F9e6wPGtY+8KNMRAVfxeCOHU0/NPWMSENNq4pQctuXRqqdEPW7q3CrLbR5Nse044WwacyjHGOMlvNsBe1y6z9A==" + }, + "domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + } }, - "mkdirp": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz", - "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==", - "dev": true - } - } - }, - "@tsconfig/node10": { - "version": "1.0.9", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.3", - "dev": true - }, - "@types/babel__core": { - "version": "7.1.19", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.17.1", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/chai": { - "version": "4.3.1", - "dev": true - }, - "@types/d3-scale": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.3.tgz", - "integrity": "sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==", - "requires": { - "@types/d3-time": "*" - } - }, - "@types/d3-scale-chromatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", - "integrity": "sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw==" - }, - "@types/d3-time": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz", - "integrity": "sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==" - }, - "@types/debug": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", - "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", - "requires": { - "@types/ms": "*" - } - }, - "@types/estree": { - "version": "0.0.39", - "dev": true - }, - "@types/fs-extra": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.2.tgz", - "integrity": "sha512-SvSrYXfWSc7R4eqnOzbQF4TZmfpNSM9FrSWLU3EUnWBuyZqNBOrv1B1JA3byUDPUl9z4Ab3jeZG2eDdySlgNMg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/graceful-fs": { - "version": "4.1.5", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.1.tgz", - "integrity": "sha512-HTLpVXHrY69556ozYkcq47TtQJXpcWAWfkoqz+ZGz2JnmZhzlRjprCIyFnetSy8gpDWwTTGBcRVv1J1I1vBrHw==", - "dev": true, - "requires": { - "jest-diff": "^27.0.0", - "pretty-format": "^27.0.0" - } - }, - "@types/json-schema": { - "version": "7.0.11", - "dev": true - }, - "@types/json5": { - "version": "0.0.29", - "dev": true - }, - "@types/lodash": { - "version": "3.10.2", - "dev": true - }, - "@types/mdast": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.12.tgz", - "integrity": "sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==", - "requires": { - "@types/unist": "^2" - } - }, - "@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 - }, - "@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" - }, - "@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" - }, - "@types/node": { - "version": "13.13.52", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" - }, - "@types/prettier": { - "version": "2.6.3", - "dev": true - }, - "@types/resolve": { - "version": "1.17.1", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/screeps": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@types/screeps/-/screeps-3.3.3.tgz", - "integrity": "sha512-r+ru4iNv8wNaNBWvk2gMXYpG8Ok1GJ8NVV9WBIHa5I+hz2QGttnAus+1whDMIzES8x3yK83Usz+gHqm8ehIW7w==", - "dev": true - }, - "@types/sinon": { - "version": "5.0.7", - "dev": true - }, - "@types/sinon-chai": { - "version": "3.2.8", - "dev": true, - "requires": { - "@types/chai": "*", - "@types/sinon": "*" - } - }, - "@types/stack-utils": { - "version": "2.0.1", - "dev": true - }, - "@types/unist": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.7.tgz", - "integrity": "sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==" - }, - "@types/validator": { - "version": "13.7.17", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.17.tgz", - "integrity": "sha512-aqayTNmeWrZcvnG2MG9eGYI6b7S5fl+yKgPs6bAjOTwPS316R5SxBGKvtSExfyoJU7pIeHJfsHI0Ji41RVMkvQ==", - "dev": true - }, - "@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "4.33.0", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "4.33.0", - "@typescript-eslint/scope-manager": "4.33.0", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } + "dot": { + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/dot/-/dot-2.0.0-beta.1.tgz", + "integrity": "sha512-kxM7fSnNQTXOmaeGuBSXM8O3fEsBb7XSDBllkGbRwa0lJSJTxxDE/4eSNGLKZUmlFw0f1vJ5qSV2BljrgQtgIA==", + "dev": true + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "requires": { + "is-obj": "^2.0.0" + } }, - "ignore": { - "version": "5.2.0", - "dev": true + "dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "dev": true + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "requires": { + "readable-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "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==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } }, - "ms": { - "version": "2.1.2", - "dev": true + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.473", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.473.tgz", + "integrity": "sha512-aVfC8+440vGfl06l8HKKn8/PD5jRfSnLkTTD65EFvU46igbpQRri1gxSzW9/+TeUlwYzrXk1sw867T96zlyECA==", + "dev": true + }, + "elkjs": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.8.2.tgz", + "integrity": "sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==" + }, + "emittery": { + "version": "0.8.1", + "dev": true }, - "regexpp": { - "version": "3.2.0", - "dev": true + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "enabled": { + "version": "2.0.0", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } }, - "semver": { - "version": "7.3.7", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.33.0", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "dependencies": { - "eslint-scope": { - "version": "5.1.1", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - } + "enquirer": { + "version": "2.3.6", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } }, - "eslint-visitor-keys": { - "version": "2.1.0", - "dev": true - } - } - }, - "@typescript-eslint/parser": { - "version": "4.33.0", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true + }, + "env-ci": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-9.1.1.tgz", + "integrity": "sha512-Im2yEWeF4b2RAMAaWvGioXk6m0UNaIjD8hj28j2ij5ldnIFrDQT0+pzDvpbRkcjurhXhf/AsBKv8P2rtmGi9Aw==", + "requires": { + "execa": "^7.0.0", + "java-properties": "^1.0.2" + } }, - "ms": { - "version": "2.1.2", - "dev": true - } - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.33.0", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" - } - }, - "@typescript-eslint/types": { - "version": "4.33.0", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } + "error-ex": { + "version": "1.3.2", + "requires": { + "is-arrayish": "^0.2.1" + } }, - "ms": { - "version": "2.1.2", - "dev": true + "es-abstract": { + "version": "1.20.1", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } }, - "semver": { - "version": "7.3.7", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "dev": true - } - } - }, - "@vladfrangu/async_event_emitter": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz", - "integrity": "sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==", - "dev": true - }, - "abab": { - "version": "2.0.6", - "dev": true - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "accumulate-stream": { - "version": "5.0.0", - "dev": true, - "requires": { - "bytes": "^3.1.0", - "ms": "^2.1.3" - }, - "dependencies": { - "ms": { - "version": "2.1.3", - "dev": true - } - } - }, - "acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true - }, - "acorn-globals": { - "version": "6.0.0", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "dev": true - } - } - }, - "acorn-jsx": { - "version": "5.3.2", - "dev": true, - "requires": {} - }, - "acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dev": true, - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - } - } - }, - "acorn-walk": { - "version": "7.2.0", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "dev": true, - "requires": { - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } + "es-shim-unscopables": { + "version": "1.0.0", + "dev": true, + "requires": { + "has": "^1.0.3" + } }, - "ms": { - "version": "2.1.2", - "dev": true - } - } - }, - "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==", - "requires": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "requires": { - "ajv": "^8.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } + "es-to-primitive": { + "version": "1.2.1", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "dev": true, + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "es6-object-assign": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", + "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", + "dev": true + }, + "es6-set": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", + "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", + "dev": true, + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "es6-iterator": "~2.0.3", + "es6-symbol": "^3.1.3", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "dependencies": { + "type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + } + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "escalade": { + "version": "3.1.1" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5" }, - "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 - } - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "dev": true, - "optional": true - }, - "ansi-colors": { - "version": "4.1.3", - "dev": true - }, - "ansi-escapes": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", - "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", - "requires": { - "type-fest": "^3.0.0" - }, - "dependencies": { - "type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==" - } - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "3.2.1", - "requires": { - "color-convert": "^1.9.0" - } - }, - "ansicolors": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", - "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==" - }, - "anymatch": { - "version": "3.1.2", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "apache-crypt": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.6.tgz", - "integrity": "sha512-072WetlM4blL8PREJVeY+WHiUh1R5VNt2HfceGS8aKqttPHcmqE5pkKuXPz/ULmJOFkc8Hw3kfKl6vy7Qka6DA==", - "dev": true, - "requires": { - "unix-crypt-td-js": "^1.1.4" - } - }, - "apache-md5": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.8.tgz", - "integrity": "sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA==", - "dev": true - }, - "arg": { - "version": "4.1.3", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "argv-formatter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", - "integrity": "sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==" - }, - "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 - }, - "array-from": { - "version": "2.1.1", - "dev": true - }, - "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==" - }, - "array-includes": { - "version": "3.1.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - } - }, - "array-union": { - "version": "2.1.0", - "dev": true - }, - "array.prototype.flat": { - "version": "1.3.0", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" - } - }, - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true - }, - "assert": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", - "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", - "dev": true, - "requires": { - "es6-object-assign": "^1.1.0", - "is-nan": "^1.2.1", - "object-is": "^1.0.1", - "util": "^0.12.0" - } - }, - "assertion-error": { - "version": "1.1.0", - "dev": true - }, - "ast-transform": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/ast-transform/-/ast-transform-0.0.0.tgz", - "integrity": "sha512-e/JfLiSoakfmL4wmTGPjv0HpTICVmxwXgYOB8x+mzozHL8v+dSfCbrJ8J8hJ0YBP0XcYu1aLZ6b/3TnxNK3P2A==", - "dev": true, - "requires": { - "escodegen": "~1.2.0", - "esprima": "~1.0.4", - "through": "~2.3.4" - }, - "dependencies": { "escodegen": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.2.0.tgz", - "integrity": "sha512-yLy3Cc+zAC0WSmoT2fig3J87TpQ8UaZGx8ahCAs9FL8qNbyV7CVyPKS74DG4bsHiL5ew9sxdYx131OkBQMFnvA==", - "dev": true, - "requires": { - "esprima": "~1.0.4", - "estraverse": "~1.5.0", - "esutils": "~1.0.0", - "source-map": "~0.1.30" - } + "version": "2.0.0", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } }, - "esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", - "integrity": "sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA==", - "dev": true + "eslint": { + "version": "7.32.0", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "acorn": { + "version": "7.4.1", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "astral-regex": { + "version": "2.0.0", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "dev": true + }, + "espree": { + "version": "7.3.1", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "dev": true + } + } + }, + "file-entry-cache": { + "version": "6.0.1", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "flat-cache": { + "version": "3.0.4", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.5", + "dev": true + }, + "globals": { + "version": "13.15.0", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "dev": true + }, + "levn": { + "version": "0.4.1", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "ms": { + "version": "2.1.2", + "dev": true + }, + "optionator": { + "version": "0.9.1", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "prelude-ls": { + "version": "1.2.1", + "dev": true + }, + "regexpp": { + "version": "3.2.0", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "slice-ansi": { + "version": "4.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "table": { + "version": "6.8.0", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + } + } + }, + "type-check": { + "version": "0.4.0", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + } + } }, - "estraverse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz", - "integrity": "sha512-FpCjJDfmo3vsc/1zKSeqR5k42tcIhxFIlvq+h9j0fO2q/h2uLKyweq7rYJ+0CoVvrGQOxIS5wyBrW/+vF58BUQ==", - "dev": true + "eslint-config-prettier": { + "version": "7.2.0", + "dev": true, + "requires": {} + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "dev": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "dev": true + } + } }, - "esutils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz", - "integrity": "sha512-x/iYH53X3quDwfHRz4y8rn4XcEwwCJeWsul9pF1zldMbGtgOtMNBEOuYWwB1EQlK2LRa1fev3YAgym/RElp5Cg==", - "dev": true + "eslint-module-utils": { + "version": "2.7.3", + "dev": true, + "requires": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "dev": true + } + } }, - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", - "dev": true, - "optional": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "ast-types": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.7.8.tgz", - "integrity": "sha512-RIOpVnVlltB6PcBJ5BMLx+H+6JJ/zjDGU0t7f0L6c2M1dqcK92VQopLBlPQ9R80AVXelfqYgjcPLtHtDbNFg0Q==", - "dev": true - }, - "async": { - "version": "3.2.4", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "dev": true - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true - }, - "axios": { - "version": "0.21.4", - "dev": true, - "requires": { - "follow-redirects": "^1.14.0" - } - }, - "babel-jest": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "eslint-plugin-import": { + "version": "2.26.0", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + } + } }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "eslint-plugin-jest": { + "version": "24.7.0", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "^4.0.1" + } }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "eslint-plugin-jsdoc": { + "version": "31.6.1", + "dev": true, + "requires": { + "comment-parser": "1.1.2", + "debug": "^4.3.1", + "jsdoctypeparser": "^9.0.0", + "lodash": "^4.17.20", + "regextras": "^0.7.1", + "semver": "^7.3.4", + "spdx-expression-parse": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "lodash": { + "version": "4.17.21", + "dev": true + }, + "ms": { + "version": "2.1.2", + "dev": true + }, + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } }, - "color-name": { - "version": "1.1.4", - "dev": true + "eslint-plugin-prettier": { + "version": "3.4.1", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } }, - "has-flag": { - "version": "4.0.0", - "dev": true + "eslint-plugin-screeps": { + "version": "2.1.0", + "dev": true, + "requires": {} }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "27.5.1", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", - "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.2", - "semver": "^6.3.1" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", - "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.2", - "core-js-compat": "^3.31.0" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", - "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.2" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "27.5.1", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^27.5.1", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "dev": true - }, - "base32768": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base32768/-/base32768-3.0.1.tgz", - "integrity": "sha512-dNGY49X0IKN1kDl9y/6sii1Vced+f+4uAqOeRz/PshjNdPwSD+ntnHOg/YgDbLSZetp94d/XxGdpfbXDKv8BVQ==" - }, - "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 - }, - "basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "bcryptjs": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", - "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", - "dev": true - }, - "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==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "bottleneck": { - "version": "2.19.5", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" - }, - "brace-expansion": { - "version": "1.1.11", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "requires": { - "fill-range": "^7.0.1" - } - }, - "brfs": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brfs/-/brfs-2.0.2.tgz", - "integrity": "sha512-IrFjVtwu4eTJZyu8w/V2gxU7iLTtcHih67sgEdzrhjLBMHp2uYefUBfdM4k2UvcuWMgV7PQDZHSLeNWnLFKWVQ==", - "dev": true, - "requires": { - "quote-stream": "^1.0.1", - "resolve": "^1.1.5", - "static-module": "^3.0.2", - "through2": "^2.0.0" - } - }, - "brotli": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", - "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", - "dev": true, - "requires": { - "base64-js": "^1.1.2" - } - }, - "browser-process-hrtime": { - "version": "1.0.0", - "dev": true - }, - "browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dev": true, - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", - "dev": true - } - } - }, - "browserify-optional": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-optional/-/browserify-optional-1.0.1.tgz", - "integrity": "sha512-VrhjbZ+Ba5mDiSYEuPelekQMfTbhcA2DhLk2VQWqdcCROWeFqlTcXZ7yfRkXCIl8E+g4gINJYJiRB7WEtfomAQ==", - "dev": true, - "requires": { - "ast-transform": "0.0.0", - "ast-types": "^0.7.0", - "browser-resolve": "^1.8.1" - } - }, - "browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - } - }, - "bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "requires": { - "fast-json-stable-stringify": "2.x" - } - }, - "bser": { - "version": "2.1.1", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-equal": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", - "dev": true - }, - "buffer-from": { - "version": "1.1.2", - "dev": true - }, - "bufferutil": { - "version": "4.0.6", - "dev": true, - "optional": true, - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "builtin-modules": { - "version": "3.3.0", - "dev": true - }, - "busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "requires": { - "streamsearch": "^1.1.0" - } - }, - "bytes": { - "version": "3.1.2", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==", - "dev": true - }, - "callsites": { - "version": "3.1.0" - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "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==", - "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - } - }, - "caniuse-lite": { - "version": "1.0.30001517", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz", - "integrity": "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==", - "dev": true - }, - "cardinal": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", - "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==", - "requires": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" - } - }, - "chai": { - "version": "4.3.6", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - } - }, - "chalk": { - "version": "2.4.2", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chance": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/chance/-/chance-1.1.9.tgz", - "integrity": "sha512-TfxnA/DcZXRTA4OekA2zL9GH8qscbbl6X0ZqU4tXhGveVY/mXWvEQLt5GwZcYXTEyEFflVtj+pG8nc8EwSm1RQ==", - "dev": true - }, - "char-regex": { - "version": "1.0.2", - "dev": true - }, - "character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==" - }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "dev": true - }, - "check-error": { - "version": "1.0.2", - "dev": true - }, - "cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "dev": true, - "requires": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "dependencies": { - "parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, - "requires": { - "entities": "^4.4.0" - } - } - } - }, - "cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - } - }, - "child-shell": { - "version": "5.0.0", - "dev": true, - "requires": { - "accumulate-stream": "^5.0.0", - "debug": "^4.3.2", - "kind-of": "^6.0.3", - "nanoid": "^3.1.30", - "p-queue": "6.6.2", - "p-timeout": "4.1.0", - "trim-buffer": "^5.0.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } }, - "ms": { - "version": "2.1.2", - "dev": true - } - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "ci-info": { - "version": "3.3.2", - "dev": true - }, - "cjs-module-lexer": { - "version": "1.2.2", - "dev": true - }, - "class-validator": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.0.tgz", - "integrity": "sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==", - "dev": true, - "requires": { - "@types/validator": "^13.7.10", - "libphonenumber-js": "^1.10.14", - "validator": "^13.7.0" - } - }, - "clean-stack": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", - "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", - "requires": { - "escape-string-regexp": "5.0.0" - }, - "dependencies": { - "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==" - } - } - }, - "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, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", - "dev": true - }, - "cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - } - }, - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true - }, - "co": { - "version": "4.6.0", - "dev": true - }, - "code-block-writer": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-12.0.0.tgz", - "integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==", - "dev": true - }, - "collect-v8-coverage": { - "version": "1.0.1", - "dev": true - }, - "color": { - "version": "3.2.1", - "dev": true, - "requires": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - } - }, - "color-convert": { - "version": "1.9.3", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3" - }, - "color-string": { - "version": "1.9.1", - "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "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 - }, - "colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", - "dev": true - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, - "colorspace": { - "version": "1.1.4", - "dev": true, - "requires": { - "color": "^3.1.3", - "text-hex": "1.0.x" - } - }, - "combined-stream": { - "version": "1.0.8", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "dev": true - }, - "comment-parser": { - "version": "1.1.2", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "dev": true - }, - "compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", - "requires": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - } - }, - "concat-map": { - "version": "0.0.1", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } + "eslint-visitor-keys": { + "version": "1.3.0", + "dev": true + }, + "esprima": { + "version": "4.0.1" + }, + "esquery": { + "version": "1.4.0", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "dev": true + }, + "estree-is-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz", + "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "event-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz", + "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==", + "dev": true, + "requires": { + "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" + } }, - "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 + "eventemitter3": { + "version": "4.0.7", + "dev": true }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - } - }, - "conventional-changelog-angular": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz", - "integrity": "sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==", - "requires": { - "compare-func": "^2.0.0" - } - }, - "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==", - "requires": { - "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" - }, - "dependencies": { - "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==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "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==", - "requires": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.1" - } - }, - "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==", - "requires": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.3.5", - "meow": "^8.1.2", - "split2": "^3.2.2" - } - }, - "convert-source-map": { - "version": "1.8.0", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "dev": true - } - } - }, - "core-js-compat": { - "version": "3.31.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.1.tgz", - "integrity": "sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA==", - "dev": true, - "requires": { - "browserslist": "^4.21.9" - } - }, - "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==" - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "cose-base": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", - "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", - "requires": { - "layout-base": "^1.0.0" - } - }, - "cosmiconfig": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", - "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", - "requires": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "dependencies": { + "human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==" + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" + }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==" + } + } }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" - } - } - } - }, - "create-require": { - "version": "1.1.1", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "dev": true - }, - "crypto-js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", - "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==", - "dev": true - }, - "crypto-random-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", - "requires": { - "type-fest": "^1.0.1" - }, - "dependencies": { - "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==" - } - } - }, - "css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true - }, - "cssom": { - "version": "0.4.4", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "dev": true - } - } - }, - "cytoscape": { - "version": "3.25.0", - "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.25.0.tgz", - "integrity": "sha512-7MW3Iz57mCUo6JQCho6CmPBCbTlJr7LzyEtIkutG255HLVd4XuBg2I9BkTZLI/e4HoaOB/BiAzXuQybQ95+r9Q==", - "requires": { - "heap": "^0.2.6", - "lodash": "^4.17.21" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - } - } - }, - "cytoscape-cose-bilkent": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", - "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", - "requires": { - "cose-base": "^1.0.0" - } - }, - "cytoscape-fcose": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", - "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", - "requires": { - "cose-base": "^2.2.0" - }, - "dependencies": { - "cose-base": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", - "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", - "requires": { - "layout-base": "^2.0.0" - } + "exit": { + "version": "0.1.2", + "dev": true + }, + "expect": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + } }, - "layout-base": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", - "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==" - } - } - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "d3": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", - "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==", - "requires": { - "d3-array": "3", - "d3-axis": "3", - "d3-brush": "3", - "d3-chord": "3", - "d3-color": "3", - "d3-contour": "4", - "d3-delaunay": "6", - "d3-dispatch": "3", - "d3-drag": "3", - "d3-dsv": "3", - "d3-ease": "3", - "d3-fetch": "3", - "d3-force": "3", - "d3-format": "3", - "d3-geo": "3", - "d3-hierarchy": "3", - "d3-interpolate": "3", - "d3-path": "3", - "d3-polygon": "3", - "d3-quadtree": "3", - "d3-random": "3", - "d3-scale": "4", - "d3-scale-chromatic": "3", - "d3-selection": "3", - "d3-shape": "3", - "d3-time": "3", - "d3-time-format": "4", - "d3-timer": "3", - "d3-transition": "3", - "d3-zoom": "3" - } - }, - "d3-array": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", - "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", - "requires": { - "internmap": "1 - 2" - } - }, - "d3-axis": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", - "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==" - }, - "d3-brush": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", - "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "3", - "d3-transition": "3" - } - }, - "d3-chord": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", - "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", - "requires": { - "d3-path": "1 - 3" - } - }, - "d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==" - }, - "d3-contour": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", - "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", - "requires": { - "d3-array": "^3.2.0" - } - }, - "d3-delaunay": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", - "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", - "requires": { - "delaunator": "5" - } - }, - "d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==" - }, - "d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - } - }, - "d3-dsv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", - "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", - "requires": { - "commander": "7", - "iconv-lite": "0.6", - "rw": "1" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + "ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, + "requires": { + "type": "^2.7.2" + }, + "dependencies": { + "type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + } + } }, - "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==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==" - }, - "d3-fetch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", - "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", - "requires": { - "d3-dsv": "1 - 3" - } - }, - "d3-force": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", - "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-quadtree": "1 - 3", - "d3-timer": "1 - 3" - } - }, - "d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==" - }, - "d3-geo": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", - "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", - "requires": { - "d3-array": "2.5.0 - 3" - } - }, - "d3-hierarchy": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", - "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==" - }, - "d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "requires": { - "d3-color": "1 - 3" - } - }, - "d3-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", - "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==" - }, - "d3-polygon": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", - "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==" - }, - "d3-quadtree": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", - "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==" - }, - "d3-random": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", - "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==" - }, - "d3-sankey": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", - "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", - "requires": { - "d3-array": "1 - 2", - "d3-shape": "^1.2.0" - }, - "dependencies": { - "d3-array": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", - "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", - "requires": { - "internmap": "^1.0.0" - } + "fancy-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-2.0.0.tgz", + "integrity": "sha512-9CzxZbACXMUXW13tS0tI8XsGGmxWzO2DmYrGuBJOJ8k8q2K7hwfJA5qHjuPPe8wtsco33YR9wc+Rlr5wYFvhSA==", + "dev": true, + "requires": { + "color-support": "^1.1.3" + } }, - "d3-path": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", - "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" + "fast-deep-equal": { + "version": "3.1.3", + "dev": true + }, + "fast-diff": { + "version": "1.2.0", + "dev": true + }, + "fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } }, - "d3-shape": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", - "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", - "requires": { - "d3-path": "1" - } + "fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "dev": true + }, + "fast-xml-parser": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.7.tgz", + "integrity": "sha512-J8r6BriSLO1uj2miOk1NW0YVm8AGOOu3Si2HQp/cSmo6EA4m3fcwu2WKjJ4RK9wMLBtg69y1kS8baDiQBR41Ig==", + "dev": true, + "requires": { + "strnum": "^1.0.5" + } }, - "internmap": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", - "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" - } - } - }, - "d3-scale": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", - "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", - "requires": { - "d3-array": "2.10.0 - 3", - "d3-format": "1 - 3", - "d3-interpolate": "1.2.0 - 3", - "d3-time": "2.1.1 - 3", - "d3-time-format": "2 - 4" - } - }, - "d3-scale-chromatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", - "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", - "requires": { - "d3-color": "1 - 3", - "d3-interpolate": "1 - 3" - } - }, - "d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==" - }, - "d3-shape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", - "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", - "requires": { - "d3-path": "^3.1.0" - } - }, - "d3-time": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", - "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", - "requires": { - "d3-array": "2 - 3" - } - }, - "d3-time-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", - "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "requires": { - "d3-time": "1 - 3" - } - }, - "d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==" - }, - "d3-transition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "requires": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - } - }, - "d3-zoom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", - "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "2 - 3", - "d3-transition": "2 - 3" - } - }, - "dagre-d3-es": { - "version": "7.0.10", - "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.10.tgz", - "integrity": "sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==", - "requires": { - "d3": "^7.8.2", - "lodash-es": "^4.17.21" - } - }, - "dash-ast": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", - "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==", - "dev": true - }, - "data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "dev": true - }, - "data-urls": { - "version": "2.0.0", - "dev": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, - "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==" - }, - "dayjs": { - "version": "1.11.9", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", - "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==" - }, - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "decache": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.2.tgz", - "integrity": "sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==", - "dev": true, - "requires": { - "callsite": "^1.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" - }, - "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==", - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==" - } - } - }, - "decimal.js": { - "version": "10.3.1", - "dev": true - }, - "decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "requires": { - "character-entities": "^2.0.0" - } - }, - "dedent": { - "version": "0.7.0", - "dev": true - }, - "deep-eql": { - "version": "3.0.1", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, - "deep-is": { - "version": "0.1.4", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "dev": true - }, - "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, - "requires": { - "clone": "^1.0.2" - } - }, - "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 - }, - "define-properties": { - "version": "1.1.4", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "delaunator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", - "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", - "requires": { - "robust-predicates": "^3.0.0" - } - }, - "delayed-stream": { - "version": "1.0.0", - "dev": true - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, - "deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" - }, - "dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==" - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "dev": true - }, - "dfa": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", - "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", - "dev": true - }, - "diff": { - "version": "3.5.0", - "dev": true - }, - "diff-sequences": { - "version": "27.5.1", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "requires": { - "path-type": "^4.0.0" - } - }, - "discord-api-types": { - "version": "0.37.50", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.50.tgz", - "integrity": "sha512-X4CDiMnDbA3s3RaUXWXmgAIbY1uxab3fqe3qwzg5XutR3wjqi7M3IkgQbsIBzpqBN2YWr/Qdv7JrFRqSgb4TFg==", - "dev": true - }, - "discord.js": { - "version": "14.13.0", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.13.0.tgz", - "integrity": "sha512-Kufdvg7fpyTEwANGy9x7i4od4yu5c6gVddGi5CKm4Y5a6sF0VBODObI3o0Bh7TGCj0LfNT8Qp8z04wnLFzgnbA==", - "dev": true, - "requires": { - "@discordjs/builders": "^1.6.5", - "@discordjs/collection": "^1.5.3", - "@discordjs/formatters": "^0.3.2", - "@discordjs/rest": "^2.0.1", - "@discordjs/util": "^1.0.1", - "@discordjs/ws": "^1.0.1", - "@sapphire/snowflake": "^3.5.1", - "@types/ws": "^8.5.5", - "discord-api-types": "0.37.50", - "fast-deep-equal": "^3.1.3", - "lodash.snakecase": "^4.1.1", - "tslib": "^2.6.1", - "undici": "5.22.1", - "ws": "^8.13.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true + "fastestsmallesttextencoderdecoder-encodeinto": { + "version": "1.0.22", + "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder-encodeinto/-/fastestsmallesttextencoderdecoder-encodeinto-1.0.22.tgz", + "integrity": "sha512-csOz3cwJjZY75QcPHnY+v6cKWeofYCmhtLVYaurjcRn5vaNXoYe1Leo1ZkiZIxZp796+J5Z+TtmeMbbfYBfiiQ==", + "dev": true }, - "ws": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", - "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", - "dev": true, - "requires": {} - } - } - }, - "doctrine": { - "version": "3.0.0", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - } - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true - }, - "domexception": { - "version": "2.0.1", - "dev": true, - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "dev": true - } - } - }, - "domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "requires": { - "domelementtype": "^2.3.0" - } - }, - "dompurify": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.5.tgz", - "integrity": "sha512-F9e6wPGtY+8KNMRAVfxeCOHU0/NPWMSENNq4pQctuXRqqdEPW7q3CrLbR5Nse044WwacyjHGOMlvNsBe1y6z9A==" - }, - "domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dev": true, - "requires": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - } - }, - "dot": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/dot/-/dot-2.0.0-beta.1.tgz", - "integrity": "sha512-kxM7fSnNQTXOmaeGuBSXM8O3fEsBb7XSDBllkGbRwa0lJSJTxxDE/4eSNGLKZUmlFw0f1vJ5qSV2BljrgQtgIA==", - "dev": true - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "requires": { - "is-obj": "^2.0.0" - } - }, - "dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", - "dev": true - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", - "requires": { - "readable-stream": "^2.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } + "fastq": { + "version": "1.13.0", + "requires": { + "reusify": "^1.0.4" + } }, - "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==" + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } }, - "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==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.4.473", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.473.tgz", - "integrity": "sha512-aVfC8+440vGfl06l8HKKn8/PD5jRfSnLkTTD65EFvU46igbpQRri1gxSzW9/+TeUlwYzrXk1sw867T96zlyECA==", - "dev": true - }, - "elkjs": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.8.2.tgz", - "integrity": "sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==" - }, - "emittery": { - "version": "0.8.1", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "enabled": { - "version": "2.0.0", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enquirer": { - "version": "2.3.6", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true - }, - "env-ci": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-9.1.1.tgz", - "integrity": "sha512-Im2yEWeF4b2RAMAaWvGioXk6m0UNaIjD8hj28j2ij5ldnIFrDQT0+pzDvpbRkcjurhXhf/AsBKv8P2rtmGi9Aw==", - "requires": { - "execa": "^7.0.0", - "java-properties": "^1.0.2" - } - }, - "error-ex": { - "version": "1.3.2", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.20.1", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-shim-unscopables": { - "version": "1.0.0", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "dev": true, - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-set": "~0.1.5", - "es6-symbol": "~3.1.1", - "event-emitter": "~0.3.5" - } - }, - "es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", - "dev": true - }, - "es6-set": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", - "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", - "dev": true, - "requires": { - "d": "^1.0.1", - "es5-ext": "^0.10.62", - "es6-iterator": "~2.0.3", - "es6-symbol": "^3.1.3", - "event-emitter": "^0.3.5", - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - } - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escalade": { - "version": "3.1.1" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5" - }, - "escodegen": { - "version": "2.0.0", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "dev": true - } - } - }, - "eslint": { - "version": "7.32.0", - "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } + "fb-watchman": { + "version": "2.0.1", + "dev": true, + "requires": { + "bser": "2.1.1" + } }, - "acorn": { - "version": "7.4.1", - "dev": true + "fecha": { + "version": "4.2.3", + "dev": true + }, + "fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "dev": true, + "requires": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + } }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "figures": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", + "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", + "requires": { + "escape-string-regexp": "^5.0.0", + "is-unicode-supported": "^1.2.0" + }, + "dependencies": { + "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==" + } + } }, - "astral-regex": { - "version": "2.0.0", - "dev": true + "fill-range": { + "version": "7.0.1", + "requires": { + "to-regex-range": "^5.0.1" + } }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "find-cache-dir": { + "version": "3.3.2", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } }, - "color-name": { - "version": "1.1.4", - "dev": true + "find-up": { + "version": "2.1.0", + "requires": { + "locate-path": "^2.0.0" + } }, - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } + "find-versions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz", + "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==", + "requires": { + "semver-regex": "^4.0.5" + } }, - "escape-string-regexp": { - "version": "4.0.0", - "dev": true + "fn.name": { + "version": "1.1.0", + "dev": true + }, + "follow-redirects": { + "version": "1.15.1", + "dev": true + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } }, - "eslint-scope": { - "version": "5.1.1", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "dev": true - } - } + "foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "dependencies": { + "signal-exit": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "dev": true + } + } }, - "eslint-visitor-keys": { - "version": "2.1.0", - "dev": true - }, - "espree": { - "version": "7.3.1", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "dev": true - } - } - }, - "file-entry-cache": { - "version": "6.0.1", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "flat-cache": { - "version": "3.0.4", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.5", - "dev": true + "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==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } }, - "globals": { - "version": "13.15.0", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } + "formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, + "requires": { + "fetch-blob": "^3.1.2" + } }, - "has-flag": { - "version": "4.0.0", - "dev": true + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true + }, + "from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "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==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } }, - "json-schema-traverse": { - "version": "1.0.0", - "dev": true + "fs-extra": { + "version": "8.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } }, - "levn": { - "version": "0.4.1", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } + "fs.realpath": { + "version": "1.0.0", + "dev": true }, - "ms": { - "version": "2.1.2", - "dev": true + "fsevents": { + "version": "2.3.2", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1" + }, + "function.prototype.name": { + "version": "1.1.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "dev": true + }, + "get-assigned-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-func-name": { + "version": "2.0.0", + "dev": true + }, + "get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + } + }, + "get-package-type": { + "version": "0.1.0", + "dev": true + }, + "get-port": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-6.1.2.tgz", + "integrity": "sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw==", + "dev": true + }, + "get-port-please": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.1.1.tgz", + "integrity": "sha512-3UBAyM3u4ZBVYDsxOQfJDxEa6XTbpBDrOjp4mf7ExFRt5BKs/QywQQiJsh2B+hxcZLSapWqCRvElUe8DnKcFHA==", + "dev": true + }, + "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==" + }, + "get-symbol-description": { + "version": "1.0.0", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "git-log-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.0.tgz", + "integrity": "sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA==", + "requires": { + "argv-formatter": "~1.0.0", + "spawn-error-forwarder": "~1.0.0", + "split2": "~1.0.0", + "stream-combiner2": "~1.1.1", + "through2": "~2.0.0", + "traverse": "~0.6.6" + }, + "dependencies": { + "split2": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", + "integrity": "sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==", + "requires": { + "through2": "~2.0.0" + } + } + } + }, + "glob": { + "version": "7.2.3", + "dev": true, + "requires": { + "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" + } + }, + "glob-parent": { + "version": "5.1.2", + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "11.12.0", + "dev": true + }, + "globby": { + "version": "11.1.0", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "ignore": { + "version": "5.2.0", + "dev": true + } + } }, - "optionator": { - "version": "0.9.1", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } }, - "prelude-ls": { - "version": "1.2.1", - "dev": true + "graceful-fs": { + "version": "4.2.10" + }, + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } }, - "regexpp": { - "version": "3.2.0", - "dev": true + "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==" }, - "rimraf": { - "version": "3.0.2", - "dev": true, - "requires": { - "glob": "^7.1.3" - } + "has": { + "version": "1.0.3", + "requires": { + "function-bind": "^1.1.1" + } }, - "semver": { - "version": "7.3.7", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "slice-ansi": { - "version": "4.0.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } + "has-bigints": { + "version": "1.0.2", + "dev": true }, - "strip-json-comments": { - "version": "3.1.1", - "dev": true + "has-flag": { + "version": "3.0.0" }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "table": { - "version": "6.8.0", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "ajv": { - "version": "8.11.0", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } + "has-property-descriptors": { + "version": "1.0.0", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" } - } }, - "type-check": { - "version": "0.4.0", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - } - } - }, - "eslint-config-prettier": { - "version": "7.2.0", - "dev": true, - "requires": {} - }, - "eslint-import-resolver-node": { - "version": "0.3.6", - "dev": true, - "requires": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "dev": true, - "requires": { - "ms": "^2.1.1" - } + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } }, - "ms": { - "version": "2.1.3", - "dev": true - } - } - }, - "eslint-module-utils": { - "version": "2.7.3", - "dev": true, - "requires": { - "debug": "^3.2.7", - "find-up": "^2.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "dev": true, - "requires": { - "ms": "^2.1.1" - } + "heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" }, - "ms": { - "version": "2.1.3", - "dev": true - } - } - }, - "eslint-plugin-import": { - "version": "2.26.0", - "dev": true, - "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - } - } - }, - "eslint-plugin-jest": { - "version": "24.7.0", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "^4.0.1" - } - }, - "eslint-plugin-jsdoc": { - "version": "31.6.1", - "dev": true, - "requires": { - "comment-parser": "1.1.2", - "debug": "^4.3.1", - "jsdoctypeparser": "^9.0.0", - "lodash": "^4.17.20", - "regextras": "^0.7.1", - "semver": "^7.3.4", - "spdx-expression-parse": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } + "hook-std": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-3.0.0.tgz", + "integrity": "sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==" }, - "lodash": { - "version": "4.17.21", - "dev": true + "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==", + "requires": { + "lru-cache": "^7.5.1" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" + } + } }, - "ms": { - "version": "2.1.2", - "dev": true + "html-encoding-sniffer": { + "version": "2.0.1", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.5" + } }, - "semver": { - "version": "7.3.7", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "eslint-plugin-prettier": { - "version": "3.4.1", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-plugin-screeps": { - "version": "2.1.0", - "dev": true, - "requires": {} - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "dev": true - }, - "esprima": { - "version": "4.0.1" - }, - "esquery": { - "version": "1.4.0", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "dev": true - }, - "estree-is-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz", - "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==", - "dev": true - }, - "estree-walker": { - "version": "2.0.2", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "event-stream": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz", - "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==", - "dev": true, - "requires": { - "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" - } - }, - "eventemitter3": { - "version": "4.0.7", - "dev": true - }, - "execa": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", - "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "dependencies": { - "human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==" + "html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "dev": true + }, + "htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } }, - "is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" + "http-auth": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-4.1.9.tgz", + "integrity": "sha512-kvPYxNGc9EKGTXvOMnTBQw2RZfuiSihK/mLw/a4pbtRueTE45S55Lw/3k5CktIf7Ak0veMKEIteDj4YkNmCzmQ==", + "dev": true, + "requires": { + "apache-crypt": "^1.1.2", + "apache-md5": "^1.0.6", + "bcryptjs": "^2.4.3", + "uuid": "^8.3.2" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + } + } }, - "strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==" - } - } - }, - "exit": { - "version": "0.1.2", - "dev": true - }, - "expect": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - } - }, - "ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dev": true, - "requires": { - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - } - } - }, - "fancy-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-2.0.0.tgz", - "integrity": "sha512-9CzxZbACXMUXW13tS0tI8XsGGmxWzO2DmYrGuBJOJ8k8q2K7hwfJA5qHjuPPe8wtsco33YR9wc+Rlr5wYFvhSA==", - "dev": true, - "requires": { - "color-support": "^1.1.3" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "dev": true - }, - "fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "dev": true - }, - "fast-xml-parser": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.7.tgz", - "integrity": "sha512-J8r6BriSLO1uj2miOk1NW0YVm8AGOOu3Si2HQp/cSmo6EA4m3fcwu2WKjJ4RK9wMLBtg69y1kS8baDiQBR41Ig==", - "dev": true, - "requires": { - "strnum": "^1.0.5" - } - }, - "fastestsmallesttextencoderdecoder-encodeinto": { - "version": "1.0.22", - "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder-encodeinto/-/fastestsmallesttextencoderdecoder-encodeinto-1.0.22.tgz", - "integrity": "sha512-csOz3cwJjZY75QcPHnY+v6cKWeofYCmhtLVYaurjcRn5vaNXoYe1Leo1ZkiZIxZp796+J5Z+TtmeMbbfYBfiiQ==", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "requires": { - "reusify": "^1.0.4" - } - }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "fb-watchman": { - "version": "2.0.1", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "fecha": { - "version": "4.2.3", - "dev": true - }, - "fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "dev": true, - "requires": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - } - }, - "figures": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", - "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", - "requires": { - "escape-string-regexp": "^5.0.0", - "is-unicode-supported": "^1.2.0" - }, - "dependencies": { - "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==" - } - } - }, - "fill-range": { - "version": "7.0.1", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - } - }, - "find-cache-dir": { - "version": "3.3.2", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "2.1.0", - "requires": { - "locate-path": "^2.0.0" - } - }, - "find-versions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz", - "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==", - "requires": { - "semver-regex": "^4.0.5" - } - }, - "fn.name": { - "version": "1.1.0", - "dev": true - }, - "follow-redirects": { - "version": "1.15.1", - "dev": true - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "requires": { - "is-callable": "^1.1.3" - } - }, - "foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "dependencies": { - "signal-exit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", - "dev": true - } - } - }, - "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==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "dev": true, - "requires": { - "fetch-blob": "^3.1.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true - }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", - "dev": true - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } + "http-auth-connect": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/http-auth-connect/-/http-auth-connect-1.0.6.tgz", + "integrity": "sha512-yaO0QSCPqGCjPrl3qEEHjJP+lwZ6gMpXLuCBE06eWwcXomkI5TARtu0kxf9teFuBj6iaV3Ybr15jaWUvbzNzHw==", + "dev": true }, - "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==" + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "dependencies": { + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + } + } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "fs-extra": { - "version": "8.1.0", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1" - }, - "function.prototype.name": { - "version": "1.1.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "dev": true - }, - "functions-have-names": { - "version": "1.2.3", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "dev": true - }, - "get-assigned-identifiers": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", - "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "get-func-name": { - "version": "2.0.0", - "dev": true - }, - "get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - } - }, - "get-package-type": { - "version": "0.1.0", - "dev": true - }, - "get-port": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-6.1.2.tgz", - "integrity": "sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw==", - "dev": true - }, - "get-port-please": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.1.1.tgz", - "integrity": "sha512-3UBAyM3u4ZBVYDsxOQfJDxEa6XTbpBDrOjp4mf7ExFRt5BKs/QywQQiJsh2B+hxcZLSapWqCRvElUe8DnKcFHA==", - "dev": true - }, - "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==" - }, - "get-symbol-description": { - "version": "1.0.0", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "git-log-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.0.tgz", - "integrity": "sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA==", - "requires": { - "argv-formatter": "~1.0.0", - "spawn-error-forwarder": "~1.0.0", - "split2": "~1.0.0", - "stream-combiner2": "~1.1.1", - "through2": "~2.0.0", - "traverse": "~0.6.6" - }, - "dependencies": { - "split2": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", - "integrity": "sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==", - "requires": { - "through2": "~2.0.0" - } - } - } - }, - "glob": { - "version": "7.2.3", - "dev": true, - "requires": { - "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" - } - }, - "glob-parent": { - "version": "5.1.2", - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "11.12.0", - "dev": true - }, - "globby": { - "version": "11.1.0", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "ignore": { - "version": "5.2.0", - "dev": true - } - } - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "graceful-fs": { - "version": "4.2.10" - }, - "handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.0" - } - }, - "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==" - }, - "has": { - "version": "1.0.3", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "dev": true - }, - "has-flag": { - "version": "3.0.0" - }, - "has-property-descriptors": { - "version": "1.0.0", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true - }, - "has-symbols": { - "version": "1.0.3", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "heap": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", - "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" - }, - "hook-std": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-3.0.0.tgz", - "integrity": "sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==" - }, - "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==", - "requires": { - "lru-cache": "^7.5.1" - }, - "dependencies": { - "lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" - } - } - }, - "html-encoding-sniffer": { - "version": "2.0.1", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, - "html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", - "dev": true - }, - "html-escaper": { - "version": "2.0.2", - "dev": true - }, - "htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "http-auth": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-4.1.9.tgz", - "integrity": "sha512-kvPYxNGc9EKGTXvOMnTBQw2RZfuiSihK/mLw/a4pbtRueTE45S55Lw/3k5CktIf7Ak0veMKEIteDj4YkNmCzmQ==", - "dev": true, - "requires": { - "apache-crypt": "^1.1.2", - "apache-md5": "^1.0.6", - "bcryptjs": "^2.4.3", - "uuid": "^8.3.2" - }, - "dependencies": { - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - } - } - }, - "http-auth-connect": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/http-auth-connect/-/http-auth-connect-1.0.6.tgz", - "integrity": "sha512-yaO0QSCPqGCjPrl3qEEHjJP+lwZ6gMpXLuCBE06eWwcXomkI5TARtu0kxf9teFuBj6iaV3Ybr15jaWUvbzNzHw==", - "dev": true - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "dependencies": { - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - } - } - }, - "http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "http-proxy-agent": { - "version": "4.0.1", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } + "http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true }, - "ms": { - "version": "2.1.2", - "dev": true - } - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } + "http-proxy-agent": { + "version": "4.0.1", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "dev": true + } + } }, - "ms": { - "version": "2.1.2", - "dev": true - } - } - }, - "human-signals": { - "version": "2.1.0", - "dev": true - }, - "i18next": { - "version": "22.5.1", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.5.1.tgz", - "integrity": "sha512-8TGPgM3pAD+VRsMtUMNknRz3kzqwp/gPALrWMsDnmC1mKqJwpWyooQRLMcbTwq8z8YwSmuj+ZYvc+xCuEpkssA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.20.6" - } - }, - "iconv-lite": { - "version": "0.4.24", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz", - "integrity": "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==" - }, - "import-local": { - "version": "3.1.0", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "dev": true - }, - "indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==" - }, - "inflight": { - "version": "1.0.6", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4" - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "inside": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/inside/-/inside-1.0.0.tgz", - "integrity": "sha512-tvFwvS4g7q6iDot/4FjtWFHwwpv6TVvEumbTdLQilk1F07ojakbXPQcvf3kMAlyNDpzKRzn+d33O3RuXODuxZQ==", - "dev": true - }, - "internal-slot": { - "version": "1.0.3", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "internmap": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==" - }, - "interpret": { - "version": "1.4.0", - "dev": true - }, - "into-stream": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-7.0.0.tgz", - "integrity": "sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==", - "requires": { - "from2": "^2.3.0", - "p-is-promise": "^3.0.0" - } - }, - "inversify": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/inversify/-/inversify-6.0.1.tgz", - "integrity": "sha512-B3ex30927698TJENHR++8FfEaJGqoWOgI6ZY5Ht/nLUsFCwHn6akbwtnUAPCgUepAnTpe2qHxhDNjoKLyz6rgQ==", - "dev": true - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1" - }, - "is-bigint": { - "version": "1.0.4", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-builtin-module": { - "version": "3.1.0", - "dev": true, - "requires": { - "builtin-modules": "^3.0.0" - } - }, - "is-callable": { - "version": "1.2.4", - "dev": true - }, - "is-core-module": { - "version": "2.9.0", - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-docker": { - "version": "2.2.1", - "dev": true - }, - "is-extglob": { - "version": "2.1.1" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-generator-fn": { - "version": "2.1.0", - "dev": true - }, - "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, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.3", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "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 - }, - "is-module": { - "version": "1.0.0", - "dev": true - }, - "is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } - }, - "is-negative-zero": { - "version": "2.0.2", - "dev": true - }, - "is-number": { - "version": "7.0.0" - }, - "is-number-object": { - "version": "1.0.7", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - }, - "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==" - }, - "is-plain-object": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", - "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", - "dev": true - }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "dev": true - }, - "is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "requires": { - "@types/estree": "*" - } - }, - "is-regex": { - "version": "1.1.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "2.0.1", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "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==", - "requires": { - "text-extensions": "^1.0.0" - } - }, - "is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dev": true, - "requires": { - "which-typed-array": "^1.1.11" - } - }, - "is-typedarray": { - "version": "1.0.0", - "dev": true - }, - "is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==" - }, - "is-weakref": { - "version": "1.0.2", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-wsl": { - "version": "2.2.0", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "issue-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-6.0.0.tgz", - "integrity": "sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==", - "requires": { - "lodash.capitalize": "^4.2.1", - "lodash.escaperegexp": "^4.1.2", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.uniqby": "^4.7.0" - } - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.2.0", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "dev": true + "https-proxy-agent": { + "version": "5.0.1", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "dev": true + } + } }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } + "human-signals": { + "version": "2.1.0", + "dev": true + }, + "i18next": { + "version": "22.5.1", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.5.1.tgz", + "integrity": "sha512-8TGPgM3pAD+VRsMtUMNknRz3kzqwp/gPALrWMsDnmC1mKqJwpWyooQRLMcbTwq8z8YwSmuj+ZYvc+xCuEpkssA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.20.6" + } }, - "ms": { - "version": "2.1.2", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "3.1.4", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jackspeak": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.2.tgz", - "integrity": "sha512-mgNtVv4vUuaKA97yxUHoA3+FkuhtxkjdXEWOyB/N76fjy0FjezEt34oy3epBtvCvS+7DyKwqCFWx/oJLV5+kCg==", - "dev": true, - "requires": { - "@isaacs/cliui": "^8.0.2", - "@pkgjs/parseargs": "^0.11.0" - } - }, - "java-properties": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", - "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==" - }, - "javascript-obfuscator": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/javascript-obfuscator/-/javascript-obfuscator-4.0.2.tgz", - "integrity": "sha512-MRBQREvjEwqEGdwNGG7yp0te5uZBFzrPZdxEs4rDYkPpHhhOQu+E0IhSXP7bO9dIUWXZU0Kkdohsuws525aVGQ==", - "dev": true, - "requires": { - "@javascript-obfuscator/escodegen": "2.3.0", - "@javascript-obfuscator/estraverse": "5.4.0", - "acorn": "8.8.2", - "assert": "2.0.0", - "chalk": "4.1.2", - "chance": "1.1.9", - "class-validator": "0.14.0", - "commander": "10.0.0", - "eslint-scope": "7.1.1", - "eslint-visitor-keys": "3.3.0", - "fast-deep-equal": "3.1.3", - "inversify": "6.0.1", - "js-string-escape": "1.0.1", - "md5": "2.3.0", - "mkdirp": "2.1.3", - "multimatch": "5.0.0", - "opencollective-postinstall": "2.0.3", - "process": "0.11.10", - "reflect-metadata": "0.1.13", - "source-map-support": "0.5.21", - "string-template": "1.0.0", - "stringz": "2.1.0", - "tslib": "2.5.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "iconv-lite": { + "version": "0.4.24", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "ignore": { + "version": "4.0.6", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "import-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz", + "integrity": "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==" + }, + "import-local": { + "version": "3.1.0", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } }, - "commander": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", - "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", - "dev": true + "imurmurhash": { + "version": "0.1.4", + "dev": true }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true + "indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==" }, - "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 + "inflight": { + "version": "1.0.6", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } + "inherits": { + "version": "2.0.4" }, - "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - } - } - }, - "jest": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.1.0.tgz", - "integrity": "sha512-pSQDVwRSwb109Ss13lcMtdfS9r8/w2Zz8+mTUA9VORD66GflCdl8nUFCqM96geOD2EBwWCNURrNAfQsLIDNBdg==", - "dev": true, - "requires": { - "@jest/core": "^27.1.0", - "import-local": "^3.0.2", - "jest-cli": "^27.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "inside": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/inside/-/inside-1.0.0.tgz", + "integrity": "sha512-tvFwvS4g7q6iDot/4FjtWFHwwpv6TVvEumbTdLQilk1F07ojakbXPQcvf3kMAlyNDpzKRzn+d33O3RuXODuxZQ==", + "dev": true + }, + "internal-slot": { + "version": "1.0.3", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==" + }, + "interpret": { + "version": "1.4.0", + "dev": true + }, + "into-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-7.0.0.tgz", + "integrity": "sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==", + "requires": { + "from2": "^2.3.0", + "p-is-promise": "^3.0.0" + } }, - "cliui": { - "version": "7.0.4", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } + "inversify": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/inversify/-/inversify-6.0.1.tgz", + "integrity": "sha512-B3ex30927698TJENHR++8FfEaJGqoWOgI6ZY5Ht/nLUsFCwHn6akbwtnUAPCgUepAnTpe2qHxhDNjoKLyz6rgQ==", + "dev": true + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "is-arrayish": { + "version": "0.2.1" }, - "color-name": { - "version": "1.1.4", - "dev": true + "is-bigint": { + "version": "1.0.4", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "jest-cli": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - } + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } + "is-boolean-object": { + "version": "1.1.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } }, - "yargs": { - "version": "16.2.0", - "dev": true, - "requires": { - "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" - } - } - } - }, - "jest-changed-files": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "execa": "^5.0.0", - "throat": "^6.0.1" - }, - "dependencies": { - "execa": { - "version": "5.1.1", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-builtin-module": { + "version": "3.1.0", + "dev": true, + "requires": { + "builtin-modules": "^3.0.0" + } }, - "mimic-fn": { - "version": "2.1.0", - "dev": true + "is-callable": { + "version": "1.2.4", + "dev": true }, - "npm-run-path": { - "version": "4.0.1", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } + "is-core-module": { + "version": "2.9.0", + "requires": { + "has": "^1.0.3" + } }, - "onetime": { - "version": "5.1.2", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - } - } - }, - "jest-circus": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "is-date-object": { + "version": "1.0.5", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "is-docker": { + "version": "2.2.1", + "dev": true }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "is-extglob": { + "version": "2.1.1" }, - "color-name": { - "version": "1.1.4", - "dev": true + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-generator-fn": { + "version": "2.1.0", + "dev": true + }, + "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, + "requires": { + "has-tostringtag": "^1.0.0" + } }, - "has-flag": { - "version": "4.0.0", - "dev": true + "is-glob": { + "version": "4.0.3", + "requires": { + "is-extglob": "^2.1.1" + } }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-config": { - "version": "27.5.1", - "dev": true, - "requires": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "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 + }, + "is-module": { + "version": "1.0.0", + "dev": true + }, + "is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "is-negative-zero": { + "version": "2.0.2", + "dev": true }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "is-number": { + "version": "7.0.0" }, - "color-name": { - "version": "1.1.4", - "dev": true + "is-number-object": { + "version": "1.0.7", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } }, - "has-flag": { - "version": "4.0.0", - "dev": true + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" }, - "strip-json-comments": { - "version": "3.1.1", - "dev": true + "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==" }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-diff": { - "version": "27.5.1", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "is-plain-object": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", + "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", + "dev": true + }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "dev": true + }, + "is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "requires": { + "@types/estree": "*" + } }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "is-regex": { + "version": "1.1.4", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "is-shared-array-buffer": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } }, - "color-name": { - "version": "1.1.4", - "dev": true + "is-stream": { + "version": "2.0.1", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } }, - "has-flag": { - "version": "4.0.0", - "dev": true + "is-symbol": { + "version": "1.0.4", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-docblock": { - "version": "27.5.1", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "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==", + "requires": { + "text-extensions": "^1.0.0" + } }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "requires": { + "which-typed-array": "^1.1.11" + } }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "is-typedarray": { + "version": "1.0.0", + "dev": true }, - "color-name": { - "version": "1.1.4", - "dev": true + "is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==" + }, + "is-weakref": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } }, - "has-flag": { - "version": "4.0.0", - "dev": true + "is-wsl": { + "version": "2.2.0", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-environment-jsdom": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" - } - }, - "jest-environment-node": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - } - }, - "jest-get-type": { - "version": "27.5.1", - "dev": true - }, - "jest-haste-map": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "issue-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-6.0.0.tgz", + "integrity": "sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==", + "requires": { + "lodash.capitalize": "^4.2.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.uniqby": "^4.7.0" + } }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "5.2.0", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + } }, - "color-name": { - "version": "1.1.4", - "dev": true + "istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } }, - "has-flag": { - "version": "4.0.0", - "dev": true + "istanbul-lib-source-maps": { + "version": "4.0.1", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "dev": true + } + } }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-leak-detector": { - "version": "27.5.1", - "dev": true, - "requires": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-matcher-utils": { - "version": "27.5.1", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "istanbul-reports": { + "version": "3.1.4", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "jackspeak": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.2.tgz", + "integrity": "sha512-mgNtVv4vUuaKA97yxUHoA3+FkuhtxkjdXEWOyB/N76fjy0FjezEt34oy3epBtvCvS+7DyKwqCFWx/oJLV5+kCg==", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "java-properties": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", + "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==" + }, + "javascript-obfuscator": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/javascript-obfuscator/-/javascript-obfuscator-4.0.2.tgz", + "integrity": "sha512-MRBQREvjEwqEGdwNGG7yp0te5uZBFzrPZdxEs4rDYkPpHhhOQu+E0IhSXP7bO9dIUWXZU0Kkdohsuws525aVGQ==", + "dev": true, + "requires": { + "@javascript-obfuscator/escodegen": "2.3.0", + "@javascript-obfuscator/estraverse": "5.4.0", + "acorn": "8.8.2", + "assert": "2.0.0", + "chalk": "4.1.2", + "chance": "1.1.9", + "class-validator": "0.14.0", + "commander": "10.0.0", + "eslint-scope": "7.1.1", + "eslint-visitor-keys": "3.3.0", + "fast-deep-equal": "3.1.3", + "inversify": "6.0.1", + "js-string-escape": "1.0.1", + "md5": "2.3.0", + "mkdirp": "2.1.3", + "multimatch": "5.0.0", + "opencollective-postinstall": "2.0.3", + "process": "0.11.10", + "reflect-metadata": "0.1.13", + "source-map-support": "0.5.21", + "string-template": "1.0.0", + "stringz": "2.1.0", + "tslib": "2.5.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "commander": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", + "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "dev": true + } + } }, - "color-name": { - "version": "1.1.4", - "dev": true + "jest": { + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.1.0.tgz", + "integrity": "sha512-pSQDVwRSwb109Ss13lcMtdfS9r8/w2Zz8+mTUA9VORD66GflCdl8nUFCqM96geOD2EBwWCNURrNAfQsLIDNBdg==", + "dev": true, + "requires": { + "@jest/core": "^27.1.0", + "import-local": "^3.0.2", + "jest-cli": "^27.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cliui": { + "version": "7.0.4", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "jest-cli": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "yargs": { + "version": "16.2.0", + "dev": true, + "requires": { + "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" + } + } + } }, - "has-flag": { - "version": "4.0.0", - "dev": true + "jest-changed-files": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "dependencies": { + "execa": { + "version": "5.1.1", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "onetime": { + "version": "5.1.2", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + } + } }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-message-util": { - "version": "27.5.1", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "jest-circus": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "jest-config": { + "version": "27.5.1", + "dev": true, + "requires": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "jest-diff": { + "version": "27.5.1", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } }, - "color-name": { - "version": "1.1.4", - "dev": true + "jest-docblock": { + "version": "27.5.1", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } }, - "has-flag": { - "version": "4.0.0", - "dev": true + "jest-each": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-mock": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*" - } - }, - "jest-pnp-resolver": { - "version": "1.2.2", - "dev": true, - "requires": {} - }, - "jest-regex-util": { - "version": "27.5.1", - "dev": true - }, - "jest-resolve": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "jest-environment-jsdom": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + } + }, + "jest-environment-node": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "jest-get-type": { + "version": "27.5.1", + "dev": true + }, + "jest-haste-map": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + } + }, + "jest-jasmine2": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-leak-detector": { + "version": "27.5.1", + "dev": true, + "requires": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-matcher-utils": { + "version": "27.5.1", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-message-util": { + "version": "27.5.1", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-mock": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*" + } + }, + "jest-pnp-resolver": { + "version": "1.2.2", + "dev": true, + "requires": {} + }, + "jest-regex-util": { + "version": "27.5.1", + "dev": true + }, + "jest-resolve": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-resolve-dependencies": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + } + }, + "jest-runner": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-runtime": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "execa": { + "version": "5.1.1", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "onetime": { + "version": "5.1.2", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "strip-bom": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-serializer": { + "version": "27.5.1", + "dev": true, + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + } + }, + "jest-snapshot": { + "version": "27.5.1", + "dev": true, + "requires": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-util": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-validate": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "camelcase": { + "version": "6.3.0", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-watcher": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.2", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-fest": { + "version": "0.21.3", + "dev": true + } + } + }, + "jest-worker": { + "version": "27.5.1", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-string-escape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", + "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0" + }, + "js-yaml": { + "version": "3.14.1", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsdoctypeparser": { + "version": "9.0.0", + "dev": true + }, + "jsdom": { + "version": "16.7.0", + "dev": true, + "requires": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "form-data": { + "version": "3.0.1", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "tough-cookie": { + "version": "4.0.0", + "dev": true, + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + } + } + } + }, + "jsesc": { + "version": "2.5.2", + "dev": true + }, + "json-beautify": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/json-beautify/-/json-beautify-1.1.1.tgz", + "integrity": "sha512-17j+Hk2lado0xqKtUcyAjK0AtoHnPSIgktWRsEXgdFQFG9UnaGw6CHa0J7xsvulxRpFl6CrkDFHght1p5ZJc4A==", + "dev": true }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "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==" }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "json-parse-even-better-errors": { + "version": "2.3.1" }, - "color-name": { - "version": "1.1.4", - "dev": true + "json-schema-traverse": { + "version": "0.4.1", + "dev": true }, - "has-flag": { - "version": "4.0.0", - "dev": true + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-resolve-dependencies": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" - } - }, - "jest-runner": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "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==" }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "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 }, - "color-name": { - "version": "1.1.4", - "dev": true + "jsonfile": { + "version": "4.0.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } }, - "has-flag": { - "version": "4.0.0", - "dev": true + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==" + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-runtime": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "just-extend": { + "version": "4.2.1", + "dev": true }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "khroma": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz", + "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==" }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "kind-of": { + "version": "6.0.3" }, - "color-name": { - "version": "1.1.4", - "dev": true + "kleur": { + "version": "3.0.3", + "dev": true }, - "execa": { - "version": "5.1.1", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } + "kuler": { + "version": "2.0.0", + "dev": true }, - "has-flag": { - "version": "4.0.0", - "dev": true + "layout-base": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==" }, - "mimic-fn": { - "version": "2.1.0", - "dev": true + "leven": { + "version": "3.1.0", + "dev": true }, - "npm-run-path": { - "version": "4.0.1", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } + "levn": { + "version": "0.3.0", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } }, - "onetime": { - "version": "5.1.2", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } + "libphonenumber-js": { + "version": "1.10.37", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.37.tgz", + "integrity": "sha512-Z10PCaOCiAxbUxLyR31DNeeNugSVP6iv/m7UrSKS5JHziEMApJtgku4e9Q69pzzSC9LnQiM09sqsGf2ticZnMw==", + "dev": true }, - "strip-bom": { - "version": "4.0.0", - "dev": true + "lines-and-columns": { + "version": "1.2.4" + }, + "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==", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "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==", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + } + } }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-serializer": { - "version": "27.5.1", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } - }, - "jest-snapshot": { - "version": "27.5.1", - "dev": true, - "requires": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "locate-path": { + "version": "2.0.0", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "lodash": { + "version": "3.10.1", + "dev": true + }, + "lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "lodash.capitalize": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", + "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==" + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==" + }, + "lodash.get": { + "version": "4.4.2", + "dev": true + }, + "lodash.ismatch": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==" + }, + "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==" + }, + "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==" + }, + "lodash.merge": { + "version": "4.6.2", + "dev": true + }, + "lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", + "dev": true + }, + "lodash.truncate": { + "version": "4.4.2", + "dev": true + }, + "lodash.uniqby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", + "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==" + }, + "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, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "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 + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "logform": { + "version": "2.4.2", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "dev": true + } + } }, - "color-name": { - "version": "1.1.4", - "dev": true + "loglevel": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", + "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", + "dev": true }, - "has-flag": { - "version": "4.0.0", - "dev": true + "loglevel-plugin-prefix": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", + "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", + "dev": true }, - "semver": { - "version": "7.3.7", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "lolex": { + "version": "2.7.5", + "dev": true + }, + "loupe": { + "version": "2.3.4", + "dev": true, + "requires": { + "get-func-name": "^2.0.0" + } }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-util": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "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==", + "requires": { + "yallist": "^4.0.0" + } }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "macos-release": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.1.tgz", + "integrity": "sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A==", + "dev": true }, - "color-name": { - "version": "1.1.4", - "dev": true + "magic-bytes.js": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.0.17.tgz", + "integrity": "sha512-PEDpPzHpKe5AxkVmQrNPHFRvPN2ELkkj3eIg4IZO9JdhBiAY3aU53lgYXs9j8B7lpza+QiW0UA4QHCH7EskSeg==", + "dev": true }, - "has-flag": { - "version": "4.0.0", - "dev": true + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-validate": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "leven": "^3.1.0", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "make-dir": { + "version": "3.1.0", + "dev": true, + "requires": { + "semver": "^6.0.0" + } }, - "camelcase": { - "version": "6.3.0", - "dev": true + "make-error": { + "version": "1.3.6", + "dev": true }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "makeerror": { + "version": "1.0.12", + "dev": true, + "requires": { + "tmpl": "1.0.5" + } }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==" }, - "color-name": { - "version": "1.1.4", - "dev": true + "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==", + "dev": true }, - "has-flag": { - "version": "4.0.0", - "dev": true + "marked": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-5.1.2.tgz", + "integrity": "sha512-ahRPGXJpjMjwSOlBoTMZAK7ATXkli5qCPxZ21TG44rx1KEo44bii4ekgTDQPNRQ4Kh7JMb9Ub1PVk1NxRSsorg==" + }, + "marked-terminal": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-5.2.0.tgz", + "integrity": "sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA==", + "requires": { + "ansi-escapes": "^6.2.0", + "cardinal": "^2.1.1", + "chalk": "^5.2.0", + "cli-table3": "^0.6.3", + "node-emoji": "^1.11.0", + "supports-hyperlinks": "^2.3.0" + }, + "dependencies": { + "chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==" + } + } }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-watcher": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.5.1", - "string-length": "^4.0.1" - }, - "dependencies": { - "ansi-escapes": { - "version": "4.3.2", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } + "md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dev": true, + "requires": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "mdast-util-from-markdown": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", + "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" + } }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "mdast-util-to-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", + "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "requires": { + "@types/mdast": "^3.0.0" + } }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "requires": { + "@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" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "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==" + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "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==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "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==" + }, + "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==" + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "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==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "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==" + } + } + }, + "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==", + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + } + } + }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" + }, + "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==" + } + } }, - "color-name": { - "version": "1.1.4", - "dev": true + "merge-source-map": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", + "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", + "dev": true, + "requires": { + "source-map": "^0.5.6" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true + } + } }, - "has-flag": { - "version": "4.0.0", - "dev": true + "merge-stream": { + "version": "2.0.0" + }, + "merge2": { + "version": "1.4.1" + }, + "mermaid": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.3.0.tgz", + "integrity": "sha512-H5quxuQjwXC8M1WuuzhAp2TdqGg74t5skfDBrNKJ7dt3z8Wprl5S6h9VJsRhoBUTSs1TMtHEdplLhCqXleZZLw==", + "requires": { + "@braintree/sanitize-url": "^6.0.2", + "@types/d3-scale": "^4.0.3", + "@types/d3-scale-chromatic": "^3.0.0", + "cytoscape": "^3.23.0", + "cytoscape-cose-bilkent": "^4.1.0", + "cytoscape-fcose": "^2.1.0", + "d3": "^7.4.0", + "d3-sankey": "^0.12.3", + "dagre-d3-es": "7.0.10", + "dayjs": "^1.11.7", + "dompurify": "3.0.5", + "elkjs": "^0.8.2", + "khroma": "^2.0.0", + "lodash-es": "^4.17.21", + "mdast-util-from-markdown": "^1.3.0", + "non-layered-tidy-tree-layout": "^2.0.2", + "stylis": "^4.1.3", + "ts-dedent": "^2.2.0", + "uuid": "^9.0.0", + "web-worker": "^1.2.0" + } }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } + "micromark": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", + "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", + "requires": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } }, - "type-fest": { - "version": "0.21.3", - "dev": true - } - } - }, - "jest-worker": { - "version": "27.5.1", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "dev": true + "micromark-core-commonmark": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", + "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", + "requires": { + "decode-named-character-reference": "^1.0.0", + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } }, - "supports-color": { - "version": "8.1.1", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-string-escape": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", - "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0" - }, - "js-yaml": { - "version": "3.14.1", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsdoctypeparser": { - "version": "9.0.0", - "dev": true - }, - "jsdom": { - "version": "16.7.0", - "dev": true, - "requires": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "form-data": { - "version": "3.0.1", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "tough-cookie": { - "version": "4.0.0", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - } - } - } - }, - "jsesc": { - "version": "2.5.2", - "dev": true - }, - "json-beautify": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/json-beautify/-/json-beautify-1.1.1.tgz", - "integrity": "sha512-17j+Hk2lado0xqKtUcyAjK0AtoHnPSIgktWRsEXgdFQFG9UnaGw6CHa0J7xsvulxRpFl6CrkDFHght1p5ZJc4A==", - "dev": true - }, - "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==" - }, - "json-parse-even-better-errors": { - "version": "2.3.1" - }, - "json-schema-traverse": { - "version": "0.4.1", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true - }, - "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==" - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "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 - }, - "jsonfile": { - "version": "4.0.0", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==" - }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "just-extend": { - "version": "4.2.1", - "dev": true - }, - "khroma": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz", - "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==" - }, - "kind-of": { - "version": "6.0.3" - }, - "kleur": { - "version": "3.0.3", - "dev": true - }, - "kuler": { - "version": "2.0.0", - "dev": true - }, - "layout-base": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", - "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==" - }, - "leven": { - "version": "3.1.0", - "dev": true - }, - "levn": { - "version": "0.3.0", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "libphonenumber-js": { - "version": "1.10.37", - "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.37.tgz", - "integrity": "sha512-Z10PCaOCiAxbUxLyR31DNeeNugSVP6iv/m7UrSKS5JHziEMApJtgku4e9Q69pzzSC9LnQiM09sqsGf2ticZnMw==", - "dev": true - }, - "lines-and-columns": { - "version": "1.2.4" - }, - "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==", - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "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==", - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - } - } - }, - "locate-path": { - "version": "2.0.0", - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "3.10.1", - "dev": true - }, - "lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" - }, - "lodash.capitalize": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", - "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "lodash.escaperegexp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", - "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==" - }, - "lodash.get": { - "version": "4.4.2", - "dev": true - }, - "lodash.ismatch": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==" - }, - "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==" - }, - "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==" - }, - "lodash.merge": { - "version": "4.6.2", - "dev": true - }, - "lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", - "dev": true - }, - "lodash.truncate": { - "version": "4.4.2", - "dev": true - }, - "lodash.uniqby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", - "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==" - }, - "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, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "micromark-factory-destination": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", + "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "micromark-factory-label": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", + "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "micromark-factory-space": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", + "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" + } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "micromark-factory-title": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", + "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", + "requires": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } }, - "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 + "micromark-factory-whitespace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", + "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", + "requires": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } }, - "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 + "micromark-util-character": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", + "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", + "requires": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "logform": { - "version": "2.4.2", - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" - }, - "dependencies": { - "ms": { - "version": "2.1.3", - "dev": true - } - } - }, - "loglevel": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", - "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", - "dev": true - }, - "loglevel-plugin-prefix": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", - "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", - "dev": true - }, - "lolex": { - "version": "2.7.5", - "dev": true - }, - "loupe": { - "version": "2.3.4", - "dev": true, - "requires": { - "get-func-name": "^2.0.0" - } - }, - "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==", - "requires": { - "yallist": "^4.0.0" - } - }, - "lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true - }, - "macos-release": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.1.tgz", - "integrity": "sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A==", - "dev": true - }, - "magic-bytes.js": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.0.17.tgz", - "integrity": "sha512-PEDpPzHpKe5AxkVmQrNPHFRvPN2ELkkj3eIg4IZO9JdhBiAY3aU53lgYXs9j8B7lpza+QiW0UA4QHCH7EskSeg==", - "dev": true - }, - "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } - }, - "make-dir": { - "version": "3.1.0", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "make-error": { - "version": "1.3.6", - "dev": true - }, - "makeerror": { - "version": "1.0.12", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } - }, - "map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==" - }, - "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==", - "dev": true - }, - "marked": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-5.1.2.tgz", - "integrity": "sha512-ahRPGXJpjMjwSOlBoTMZAK7ATXkli5qCPxZ21TG44rx1KEo44bii4ekgTDQPNRQ4Kh7JMb9Ub1PVk1NxRSsorg==" - }, - "marked-terminal": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-5.2.0.tgz", - "integrity": "sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA==", - "requires": { - "ansi-escapes": "^6.2.0", - "cardinal": "^2.1.1", - "chalk": "^5.2.0", - "cli-table3": "^0.6.3", - "node-emoji": "^1.11.0", - "supports-hyperlinks": "^2.3.0" - }, - "dependencies": { - "chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==" - } - } - }, - "md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "dev": true, - "requires": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "mdast-util-from-markdown": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", - "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - } - }, - "mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", - "requires": { - "@types/mdast": "^3.0.0" - } - }, - "meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "requires": { - "@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" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } + "micromark-util-chunked": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", + "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", + "requires": { + "micromark-util-symbol": "^1.0.0" + } }, - "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==" + "micromark-util-classify-character": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", + "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } + "micromark-util-combine-extensions": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", + "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", + "requires": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" + } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } + "micromark-util-decode-numeric-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", + "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", + "requires": { + "micromark-util-symbol": "^1.0.0" + } }, - "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==", - "requires": { - "p-limit": "^2.2.0" - } + "micromark-util-decode-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", + "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", + "requires": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } }, - "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==" + "micromark-util-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", + "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==" + }, + "micromark-util-html-tag-name": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", + "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==" + }, + "micromark-util-normalize-identifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", + "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", + "requires": { + "micromark-util-symbol": "^1.0.0" + } }, - "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==" + "micromark-util-resolve-all": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", + "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", + "requires": { + "micromark-util-types": "^1.0.0" + } }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "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==", - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "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==" + "micromark-util-sanitize-uri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", + "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" } - } }, - "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==", - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" - } - } + "micromark-util-subtokenize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", + "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", + "requires": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" + "micromark-util-symbol": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", + "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==" + }, + "micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==" + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } }, - "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==" - } - } - }, - "merge-source-map": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", - "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", - "dev": true, - "requires": { - "source-map": "^0.5.6" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true - } - } - }, - "merge-stream": { - "version": "2.0.0" - }, - "merge2": { - "version": "1.4.1" - }, - "mermaid": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.3.0.tgz", - "integrity": "sha512-H5quxuQjwXC8M1WuuzhAp2TdqGg74t5skfDBrNKJ7dt3z8Wprl5S6h9VJsRhoBUTSs1TMtHEdplLhCqXleZZLw==", - "requires": { - "@braintree/sanitize-url": "^6.0.2", - "@types/d3-scale": "^4.0.3", - "@types/d3-scale-chromatic": "^3.0.0", - "cytoscape": "^3.23.0", - "cytoscape-cose-bilkent": "^4.1.0", - "cytoscape-fcose": "^2.1.0", - "d3": "^7.4.0", - "d3-sankey": "^0.12.3", - "dagre-d3-es": "7.0.10", - "dayjs": "^1.11.7", - "dompurify": "3.0.5", - "elkjs": "^0.8.2", - "khroma": "^2.0.0", - "lodash-es": "^4.17.21", - "mdast-util-from-markdown": "^1.3.0", - "non-layered-tidy-tree-layout": "^2.0.2", - "stylis": "^4.1.3", - "ts-dedent": "^2.2.0", - "uuid": "^9.0.0", - "web-worker": "^1.2.0" - } - }, - "micromark": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", - "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", - "requires": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } + "mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==" + }, + "mime-db": { + "version": "1.52.0", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==" + }, + "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==" + }, + "minimatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" + }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "dependencies": { + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" + } + } + }, + "minipass": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz", + "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==", + "dev": true + }, + "mkdirp": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.3.tgz", + "integrity": "sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw==", + "dev": true + }, + "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==" + }, + "morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dev": true, + "requires": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + } + }, + "mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==" }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "micromark-core-commonmark": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", - "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", - "requires": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "micromark-factory-destination": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", - "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-factory-label": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", - "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "micromark-factory-space": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", - "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-factory-title": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", - "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-factory-whitespace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", - "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-character": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", - "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", - "requires": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-chunked": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", - "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", - "requires": { - "micromark-util-symbol": "^1.0.0" - } - }, - "micromark-util-classify-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", - "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-combine-extensions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", - "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", - "requires": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-decode-numeric-character-reference": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", - "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", - "requires": { - "micromark-util-symbol": "^1.0.0" - } - }, - "micromark-util-decode-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", - "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", - "requires": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "micromark-util-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", - "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==" - }, - "micromark-util-html-tag-name": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", - "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==" - }, - "micromark-util-normalize-identifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", - "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", - "requires": { - "micromark-util-symbol": "^1.0.0" - } - }, - "micromark-util-resolve-all": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", - "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", - "requires": { - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-sanitize-uri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", - "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "micromark-util-subtokenize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", - "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", - "requires": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "micromark-util-symbol": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", - "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==" - }, - "micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==" - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==" - }, - "mime-db": { - "version": "1.52.0", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==" - }, - "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==" - }, - "minimatch": { - "version": "3.1.2", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" - }, - "minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "dependencies": { - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" - } - } - }, - "minipass": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz", - "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==", - "dev": true - }, - "mkdirp": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.3.tgz", - "integrity": "sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw==", - "dev": true - }, - "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==" - }, - "morgan": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", - "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", - "dev": true, - "requires": { - "basic-auth": "~2.0.1", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-finished": "~2.3.0", - "on-headers": "~1.0.2" - } - }, - "mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==" - }, - "ms": { - "version": "2.0.0", - "dev": true - }, - "multimatch": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", - "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", - "dev": true, - "requires": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" - } - }, - "nanoid": { - "version": "3.3.4", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "dev": true - }, - "ncp": { - "version": "2.0.0", - "dev": true - }, - "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 - }, - "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==" - }, - "nerf-dart": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", - "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==" - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true - }, - "nise": { - "version": "1.5.3", - "dev": true, - "requires": { - "@sinonjs/formatio": "^3.2.1", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "lolex": "^5.0.1", - "path-to-regexp": "^1.7.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "dev": true + "version": "2.0.0", + "dev": true + }, + "multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + } }, - "lolex": { - "version": "5.1.2", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "path-to-regexp": { - "version": "1.8.0", - "dev": true, - "requires": { - "isarray": "0.0.1" - } - } - } - }, - "node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "dev": true - }, - "node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "requires": { - "lodash": "^4.17.21" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - } - } - }, - "node-fetch": { - "version": "2.6.7", - "dev": true, - "requires": { - "whatwg-url": "^5.0.0" - }, - "dependencies": { - "tr46": { - "version": "0.0.3", - "dev": true + "nanoid": { + "version": "3.3.4", + "dev": true }, - "webidl-conversions": { - "version": "3.0.1", - "dev": true + "natural-compare": { + "version": "1.4.0", + "dev": true }, - "whatwg-url": { - "version": "5.0.0", - "dev": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - } - } - }, - "node-gyp-build": { - "version": "4.4.0", - "dev": true, - "optional": true - }, - "node-int64": { - "version": "0.4.0", - "dev": true - }, - "node-powershell": { - "version": "5.0.1", - "dev": true, - "requires": { - "child-shell": "^5.0.0", - "is-wsl": "^2.2.0" - } - }, - "node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true - }, - "non-layered-tidy-tree-layout": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", - "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" - }, - "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==", - "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "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==", - "requires": { - "lru-cache": "^6.0.0" - } + "ncp": { + "version": "2.0.0", + "dev": true }, - "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==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "normalize-path": { - "version": "3.0.0", - "dev": true - }, - "normalize-url": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", - "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==" - }, - "npm": { - "version": "9.8.1", - "resolved": "https://registry.npmjs.org/npm/-/npm-9.8.1.tgz", - "integrity": "sha512-AfDvThQzsIXhYgk9zhbk5R+lh811lKkLAeQMMhSypf1BM7zUafeIIBzMzespeuVEJ0+LvY36oRQYf7IKLzU3rw==", - "requires": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^6.3.0", - "@npmcli/config": "^6.2.1", - "@npmcli/fs": "^3.1.0", - "@npmcli/map-workspaces": "^3.0.4", - "@npmcli/package-json": "^4.0.1", - "@npmcli/promise-spawn": "^6.0.2", - "@npmcli/run-script": "^6.0.2", - "abbrev": "^2.0.0", - "archy": "~1.0.0", - "cacache": "^17.1.3", - "chalk": "^5.3.0", - "ci-info": "^3.8.0", - "cli-columns": "^4.0.0", - "cli-table3": "^0.6.3", - "columnify": "^1.6.0", - "fastest-levenshtein": "^1.0.16", - "fs-minipass": "^3.0.2", - "glob": "^10.2.7", - "graceful-fs": "^4.2.11", - "hosted-git-info": "^6.1.1", - "ini": "^4.1.1", - "init-package-json": "^5.0.0", - "is-cidr": "^4.0.2", - "json-parse-even-better-errors": "^3.0.0", - "libnpmaccess": "^7.0.2", - "libnpmdiff": "^5.0.19", - "libnpmexec": "^6.0.3", - "libnpmfund": "^4.0.19", - "libnpmhook": "^9.0.3", - "libnpmorg": "^5.0.4", - "libnpmpack": "^5.0.19", - "libnpmpublish": "^7.5.0", - "libnpmsearch": "^6.0.2", - "libnpmteam": "^5.0.3", - "libnpmversion": "^4.0.2", - "make-fetch-happen": "^11.1.1", - "minimatch": "^9.0.3", - "minipass": "^5.0.0", - "minipass-pipeline": "^1.2.4", - "ms": "^2.1.2", - "node-gyp": "^9.4.0", - "nopt": "^7.2.0", - "npm-audit-report": "^5.0.0", - "npm-install-checks": "^6.1.1", - "npm-package-arg": "^10.1.0", - "npm-pick-manifest": "^8.0.1", - "npm-profile": "^7.0.1", - "npm-registry-fetch": "^14.0.5", - "npm-user-validate": "^2.0.0", - "npmlog": "^7.0.1", - "p-map": "^4.0.0", - "pacote": "^15.2.0", - "parse-conflict-json": "^3.0.1", - "proc-log": "^3.0.0", - "qrcode-terminal": "^0.12.0", - "read": "^2.1.0", - "semver": "^7.5.4", - "sigstore": "^1.7.0", - "ssri": "^10.0.4", - "supports-color": "^9.4.0", - "tar": "^6.1.15", - "text-table": "~0.2.0", - "tiny-relative-date": "^1.3.0", - "treeverse": "^3.0.0", - "validate-npm-package-name": "^5.0.0", - "which": "^3.0.1", - "write-file-atomic": "^5.0.1" - }, - "dependencies": { - "@colors/colors": { - "version": "1.5.0", - "bundled": true, - "optional": true + "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 + }, + "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==" + }, + "nerf-dart": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", + "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==" + }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, + "nise": { + "version": "1.5.3", + "dev": true, + "requires": { + "@sinonjs/formatio": "^3.2.1", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "lolex": "^5.0.1", + "path-to-regexp": "^1.7.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "dev": true + }, + "lolex": { + "version": "5.1.2", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "path-to-regexp": { + "version": "1.8.0", + "dev": true, + "requires": { + "isarray": "0.0.1" + } + } + } }, - "@isaacs/cliui": { - "version": "8.0.2", - "bundled": true, - "requires": { - "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" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "bundled": true - }, - "emoji-regex": { - "version": "9.2.2", - "bundled": true - }, - "string-width": { - "version": "5.1.2", - "bundled": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } + "node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "dev": true + }, + "node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "requires": { + "lodash": "^4.17.21" }, - "strip-ansi": { - "version": "7.1.0", - "bundled": true, - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "@isaacs/string-locale-compare": { - "version": "1.1.0", - "bundled": true - }, - "@npmcli/arborist": { - "version": "6.3.0", - "bundled": true, - "requires": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^3.1.0", - "@npmcli/installed-package-contents": "^2.0.2", - "@npmcli/map-workspaces": "^3.0.2", - "@npmcli/metavuln-calculator": "^5.0.0", - "@npmcli/name-from-folder": "^2.0.0", - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^4.0.0", - "@npmcli/query": "^3.0.0", - "@npmcli/run-script": "^6.0.0", - "bin-links": "^4.0.1", - "cacache": "^17.0.4", - "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^6.1.1", - "json-parse-even-better-errors": "^3.0.0", - "json-stringify-nice": "^1.1.4", - "minimatch": "^9.0.0", - "nopt": "^7.0.0", - "npm-install-checks": "^6.0.0", - "npm-package-arg": "^10.1.0", - "npm-pick-manifest": "^8.0.1", - "npm-registry-fetch": "^14.0.3", - "npmlog": "^7.0.1", - "pacote": "^15.0.8", - "parse-conflict-json": "^3.0.0", - "proc-log": "^3.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.2", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^10.0.1", - "treeverse": "^3.0.0", - "walk-up-path": "^3.0.1" - } - }, - "@npmcli/config": { - "version": "6.2.1", - "bundled": true, - "requires": { - "@npmcli/map-workspaces": "^3.0.2", - "ci-info": "^3.8.0", - "ini": "^4.1.0", - "nopt": "^7.0.0", - "proc-log": "^3.0.0", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.5", - "walk-up-path": "^3.0.1" - } - }, - "@npmcli/disparity-colors": { - "version": "3.0.0", - "bundled": true, - "requires": { - "ansi-styles": "^4.3.0" - } - }, - "@npmcli/fs": { - "version": "3.1.0", - "bundled": true, - "requires": { - "semver": "^7.3.5" - } - }, - "@npmcli/git": { - "version": "4.1.0", - "bundled": true, - "requires": { - "@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" - } - }, - "@npmcli/installed-package-contents": { - "version": "2.0.2", - "bundled": true, - "requires": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - } - }, - "@npmcli/map-workspaces": { - "version": "3.0.4", - "bundled": true, - "requires": { - "@npmcli/name-from-folder": "^2.0.0", - "glob": "^10.2.2", - "minimatch": "^9.0.0", - "read-package-json-fast": "^3.0.0" - } - }, - "@npmcli/metavuln-calculator": { - "version": "5.0.1", - "bundled": true, - "requires": { - "cacache": "^17.0.0", - "json-parse-even-better-errors": "^3.0.0", - "pacote": "^15.0.0", - "semver": "^7.3.5" - } - }, - "@npmcli/name-from-folder": { - "version": "2.0.0", - "bundled": true - }, - "@npmcli/node-gyp": { - "version": "3.0.0", - "bundled": true - }, - "@npmcli/package-json": { - "version": "4.0.1", - "bundled": true, - "requires": { - "@npmcli/git": "^4.1.0", - "glob": "^10.2.2", - "hosted-git-info": "^6.1.1", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", - "proc-log": "^3.0.0", - "semver": "^7.5.3" - } - }, - "@npmcli/promise-spawn": { - "version": "6.0.2", - "bundled": true, - "requires": { - "which": "^3.0.0" - } - }, - "@npmcli/query": { - "version": "3.0.0", - "bundled": true, - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "@npmcli/run-script": { - "version": "6.0.2", - "bundled": true, - "requires": { - "@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" - } + "dependencies": { + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + } + } }, - "@pkgjs/parseargs": { - "version": "0.11.0", - "bundled": true, - "optional": true - }, - "@sigstore/protobuf-specs": { - "version": "0.1.0", - "bundled": true - }, - "@sigstore/tuf": { - "version": "1.0.2", - "bundled": true, - "requires": { - "@sigstore/protobuf-specs": "^0.1.0", - "tuf-js": "^1.1.7" - } + "node-fetch": { + "version": "2.6.7", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "0.0.3", + "dev": true + }, + "webidl-conversions": { + "version": "3.0.1", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } }, - "@tootallnate/once": { - "version": "2.0.0", - "bundled": true - }, - "@tufjs/canonical-json": { - "version": "1.0.0", - "bundled": true - }, - "@tufjs/models": { - "version": "1.0.4", - "bundled": true, - "requires": { - "@tufjs/canonical-json": "1.0.0", - "minimatch": "^9.0.0" - } - }, - "abbrev": { - "version": "2.0.0", - "bundled": true - }, - "abort-controller": { - "version": "3.0.0", - "bundled": true, - "requires": { - "event-target-shim": "^5.0.0" - } + "node-gyp-build": { + "version": "4.4.0", + "dev": true, + "optional": true + }, + "node-int64": { + "version": "0.4.0", + "dev": true + }, + "node-powershell": { + "version": "5.0.1", + "dev": true, + "requires": { + "child-shell": "^5.0.0", + "is-wsl": "^2.2.0" + } }, - "agent-base": { - "version": "6.0.2", - "bundled": true, - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.3.0", - "bundled": true, - "requires": { - "debug": "^4.1.0", - "depd": "^2.0.0", - "humanize-ms": "^1.2.1" - } + "node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true }, - "aggregate-error": { - "version": "3.1.0", - "bundled": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } + "non-layered-tidy-tree-layout": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", + "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" }, - "ansi-regex": { - "version": "5.0.1", - "bundled": true + "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==", + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "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==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "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==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } }, - "ansi-styles": { - "version": "4.3.0", - "bundled": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "aproba": { - "version": "2.0.0", - "bundled": true - }, - "archy": { - "version": "1.0.0", - "bundled": true - }, - "are-we-there-yet": { - "version": "4.0.0", - "bundled": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^4.1.0" - } + "normalize-path": { + "version": "3.0.0", + "dev": true + }, + "normalize-url": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", + "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==" + }, + "npm": { + "version": "9.8.1", + "resolved": "https://registry.npmjs.org/npm/-/npm-9.8.1.tgz", + "integrity": "sha512-AfDvThQzsIXhYgk9zhbk5R+lh811lKkLAeQMMhSypf1BM7zUafeIIBzMzespeuVEJ0+LvY36oRQYf7IKLzU3rw==", + "requires": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^6.3.0", + "@npmcli/config": "^6.2.1", + "@npmcli/fs": "^3.1.0", + "@npmcli/map-workspaces": "^3.0.4", + "@npmcli/package-json": "^4.0.1", + "@npmcli/promise-spawn": "^6.0.2", + "@npmcli/run-script": "^6.0.2", + "abbrev": "^2.0.0", + "archy": "~1.0.0", + "cacache": "^17.1.3", + "chalk": "^5.3.0", + "ci-info": "^3.8.0", + "cli-columns": "^4.0.0", + "cli-table3": "^0.6.3", + "columnify": "^1.6.0", + "fastest-levenshtein": "^1.0.16", + "fs-minipass": "^3.0.2", + "glob": "^10.2.7", + "graceful-fs": "^4.2.11", + "hosted-git-info": "^6.1.1", + "ini": "^4.1.1", + "init-package-json": "^5.0.0", + "is-cidr": "^4.0.2", + "json-parse-even-better-errors": "^3.0.0", + "libnpmaccess": "^7.0.2", + "libnpmdiff": "^5.0.19", + "libnpmexec": "^6.0.3", + "libnpmfund": "^4.0.19", + "libnpmhook": "^9.0.3", + "libnpmorg": "^5.0.4", + "libnpmpack": "^5.0.19", + "libnpmpublish": "^7.5.0", + "libnpmsearch": "^6.0.2", + "libnpmteam": "^5.0.3", + "libnpmversion": "^4.0.2", + "make-fetch-happen": "^11.1.1", + "minimatch": "^9.0.3", + "minipass": "^5.0.0", + "minipass-pipeline": "^1.2.4", + "ms": "^2.1.2", + "node-gyp": "^9.4.0", + "nopt": "^7.2.0", + "npm-audit-report": "^5.0.0", + "npm-install-checks": "^6.1.1", + "npm-package-arg": "^10.1.0", + "npm-pick-manifest": "^8.0.1", + "npm-profile": "^7.0.1", + "npm-registry-fetch": "^14.0.5", + "npm-user-validate": "^2.0.0", + "npmlog": "^7.0.1", + "p-map": "^4.0.0", + "pacote": "^15.2.0", + "parse-conflict-json": "^3.0.1", + "proc-log": "^3.0.0", + "qrcode-terminal": "^0.12.0", + "read": "^2.1.0", + "semver": "^7.5.4", + "sigstore": "^1.7.0", + "ssri": "^10.0.4", + "supports-color": "^9.4.0", + "tar": "^6.1.15", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "treeverse": "^3.0.0", + "validate-npm-package-name": "^5.0.0", + "which": "^3.0.1", + "write-file-atomic": "^5.0.1" + }, + "dependencies": { + "@colors/colors": { + "version": "1.5.0", + "bundled": true, + "optional": true + }, + "@isaacs/cliui": { + "version": "8.0.2", + "bundled": true, + "requires": { + "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" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "bundled": true + }, + "emoji-regex": { + "version": "9.2.2", + "bundled": true + }, + "string-width": { + "version": "5.1.2", + "bundled": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "bundled": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "@isaacs/string-locale-compare": { + "version": "1.1.0", + "bundled": true + }, + "@npmcli/arborist": { + "version": "6.3.0", + "bundled": true, + "requires": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^3.1.0", + "@npmcli/installed-package-contents": "^2.0.2", + "@npmcli/map-workspaces": "^3.0.2", + "@npmcli/metavuln-calculator": "^5.0.0", + "@npmcli/name-from-folder": "^2.0.0", + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^4.0.0", + "@npmcli/query": "^3.0.0", + "@npmcli/run-script": "^6.0.0", + "bin-links": "^4.0.1", + "cacache": "^17.0.4", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^6.1.1", + "json-parse-even-better-errors": "^3.0.0", + "json-stringify-nice": "^1.1.4", + "minimatch": "^9.0.0", + "nopt": "^7.0.0", + "npm-install-checks": "^6.0.0", + "npm-package-arg": "^10.1.0", + "npm-pick-manifest": "^8.0.1", + "npm-registry-fetch": "^14.0.3", + "npmlog": "^7.0.1", + "pacote": "^15.0.8", + "parse-conflict-json": "^3.0.0", + "proc-log": "^3.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.2", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^10.0.1", + "treeverse": "^3.0.0", + "walk-up-path": "^3.0.1" + } + }, + "@npmcli/config": { + "version": "6.2.1", + "bundled": true, + "requires": { + "@npmcli/map-workspaces": "^3.0.2", + "ci-info": "^3.8.0", + "ini": "^4.1.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.5", + "walk-up-path": "^3.0.1" + } + }, + "@npmcli/disparity-colors": { + "version": "3.0.0", + "bundled": true, + "requires": { + "ansi-styles": "^4.3.0" + } + }, + "@npmcli/fs": { + "version": "3.1.0", + "bundled": true, + "requires": { + "semver": "^7.3.5" + } + }, + "@npmcli/git": { + "version": "4.1.0", + "bundled": true, + "requires": { + "@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" + } + }, + "@npmcli/installed-package-contents": { + "version": "2.0.2", + "bundled": true, + "requires": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + } + }, + "@npmcli/map-workspaces": { + "version": "3.0.4", + "bundled": true, + "requires": { + "@npmcli/name-from-folder": "^2.0.0", + "glob": "^10.2.2", + "minimatch": "^9.0.0", + "read-package-json-fast": "^3.0.0" + } + }, + "@npmcli/metavuln-calculator": { + "version": "5.0.1", + "bundled": true, + "requires": { + "cacache": "^17.0.0", + "json-parse-even-better-errors": "^3.0.0", + "pacote": "^15.0.0", + "semver": "^7.3.5" + } + }, + "@npmcli/name-from-folder": { + "version": "2.0.0", + "bundled": true + }, + "@npmcli/node-gyp": { + "version": "3.0.0", + "bundled": true + }, + "@npmcli/package-json": { + "version": "4.0.1", + "bundled": true, + "requires": { + "@npmcli/git": "^4.1.0", + "glob": "^10.2.2", + "hosted-git-info": "^6.1.1", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "proc-log": "^3.0.0", + "semver": "^7.5.3" + } + }, + "@npmcli/promise-spawn": { + "version": "6.0.2", + "bundled": true, + "requires": { + "which": "^3.0.0" + } + }, + "@npmcli/query": { + "version": "3.0.0", + "bundled": true, + "requires": { + "postcss-selector-parser": "^6.0.10" + } + }, + "@npmcli/run-script": { + "version": "6.0.2", + "bundled": true, + "requires": { + "@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" + } + }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "bundled": true, + "optional": true + }, + "@sigstore/protobuf-specs": { + "version": "0.1.0", + "bundled": true + }, + "@sigstore/tuf": { + "version": "1.0.2", + "bundled": true, + "requires": { + "@sigstore/protobuf-specs": "^0.1.0", + "tuf-js": "^1.1.7" + } + }, + "@tootallnate/once": { + "version": "2.0.0", + "bundled": true + }, + "@tufjs/canonical-json": { + "version": "1.0.0", + "bundled": true + }, + "@tufjs/models": { + "version": "1.0.4", + "bundled": true, + "requires": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + } + }, + "abbrev": { + "version": "2.0.0", + "bundled": true + }, + "abort-controller": { + "version": "3.0.0", + "bundled": true, + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "agent-base": { + "version": "6.0.2", + "bundled": true, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.3.0", + "bundled": true, + "requires": { + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.1.0", + "bundled": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ansi-regex": { + "version": "5.0.1", + "bundled": true + }, + "ansi-styles": { + "version": "4.3.0", + "bundled": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "aproba": { + "version": "2.0.0", + "bundled": true + }, + "archy": { + "version": "1.0.0", + "bundled": true + }, + "are-we-there-yet": { + "version": "4.0.0", + "bundled": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^4.1.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "bundled": true + }, + "base64-js": { + "version": "1.5.1", + "bundled": true + }, + "bin-links": { + "version": "4.0.2", + "bundled": true, + "requires": { + "cmd-shim": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "read-cmd-shim": "^4.0.0", + "write-file-atomic": "^5.0.0" + } + }, + "binary-extensions": { + "version": "2.2.0", + "bundled": true + }, + "brace-expansion": { + "version": "2.0.1", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "buffer": { + "version": "6.0.3", + "bundled": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "builtins": { + "version": "5.0.1", + "bundled": true, + "requires": { + "semver": "^7.0.0" + } + }, + "cacache": { + "version": "17.1.3", + "bundled": true, + "requires": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "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" + } + }, + "chalk": { + "version": "5.3.0", + "bundled": true + }, + "chownr": { + "version": "2.0.0", + "bundled": true + }, + "ci-info": { + "version": "3.8.0", + "bundled": true + }, + "cidr-regex": { + "version": "3.1.1", + "bundled": true, + "requires": { + "ip-regex": "^4.1.0" + } + }, + "clean-stack": { + "version": "2.2.0", + "bundled": true + }, + "cli-columns": { + "version": "4.0.0", + "bundled": true, + "requires": { + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + } + }, + "cli-table3": { + "version": "0.6.3", + "bundled": true, + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "clone": { + "version": "1.0.4", + "bundled": true + }, + "cmd-shim": { + "version": "6.0.1", + "bundled": true + }, + "color-convert": { + "version": "2.0.1", + "bundled": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "bundled": true + }, + "color-support": { + "version": "1.1.3", + "bundled": true + }, + "columnify": { + "version": "1.6.0", + "bundled": true, + "requires": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + } + }, + "common-ancestor-path": { + "version": "1.0.1", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "cross-spawn": { + "version": "7.0.3", + "bundled": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "bundled": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "cssesc": { + "version": "3.0.0", + "bundled": true + }, + "debug": { + "version": "4.3.4", + "bundled": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "bundled": true + } + } + }, + "defaults": { + "version": "1.0.4", + "bundled": true, + "requires": { + "clone": "^1.0.2" + } + }, + "delegates": { + "version": "1.0.0", + "bundled": true + }, + "depd": { + "version": "2.0.0", + "bundled": true + }, + "diff": { + "version": "5.1.0", + "bundled": true + }, + "eastasianwidth": { + "version": "0.2.0", + "bundled": true + }, + "emoji-regex": { + "version": "8.0.0", + "bundled": true + }, + "encoding": { + "version": "0.1.13", + "bundled": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + } + }, + "env-paths": { + "version": "2.2.1", + "bundled": true + }, + "err-code": { + "version": "2.0.3", + "bundled": true + }, + "event-target-shim": { + "version": "5.0.1", + "bundled": true + }, + "events": { + "version": "3.3.0", + "bundled": true + }, + "exponential-backoff": { + "version": "3.1.1", + "bundled": true + }, + "fastest-levenshtein": { + "version": "1.0.16", + "bundled": true + }, + "foreground-child": { + "version": "3.1.1", + "bundled": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, + "fs-minipass": { + "version": "3.0.2", + "bundled": true, + "requires": { + "minipass": "^5.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "function-bind": { + "version": "1.1.1", + "bundled": true + }, + "gauge": { + "version": "5.0.1", + "bundled": true, + "requires": { + "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": "^4.0.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + } + }, + "glob": { + "version": "10.2.7", + "bundled": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + } + }, + "graceful-fs": { + "version": "4.2.11", + "bundled": true + }, + "has": { + "version": "1.0.3", + "bundled": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true + }, + "hosted-git-info": { + "version": "6.1.1", + "bundled": true, + "requires": { + "lru-cache": "^7.5.1" + } + }, + "http-cache-semantics": { + "version": "4.1.1", + "bundled": true + }, + "http-proxy-agent": { + "version": "5.0.0", + "bundled": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "bundled": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "humanize-ms": { + "version": "1.2.1", + "bundled": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.6.3", + "bundled": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "ieee754": { + "version": "1.2.1", + "bundled": true + }, + "ignore-walk": { + "version": "6.0.3", + "bundled": true, + "requires": { + "minimatch": "^9.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "bundled": true + }, + "indent-string": { + "version": "4.0.0", + "bundled": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true + }, + "ini": { + "version": "4.1.1", + "bundled": true + }, + "init-package-json": { + "version": "5.0.0", + "bundled": true, + "requires": { + "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" + } + }, + "ip": { + "version": "2.0.0", + "bundled": true + }, + "ip-regex": { + "version": "4.3.0", + "bundled": true + }, + "is-cidr": { + "version": "4.0.2", + "bundled": true, + "requires": { + "cidr-regex": "^3.1.1" + } + }, + "is-core-module": { + "version": "2.12.1", + "bundled": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "bundled": true + }, + "is-lambda": { + "version": "1.0.1", + "bundled": true + }, + "isexe": { + "version": "2.0.0", + "bundled": true + }, + "jackspeak": { + "version": "2.2.1", + "bundled": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, + "json-parse-even-better-errors": { + "version": "3.0.0", + "bundled": true + }, + "json-stringify-nice": { + "version": "1.1.4", + "bundled": true + }, + "jsonparse": { + "version": "1.3.1", + "bundled": true + }, + "just-diff": { + "version": "6.0.2", + "bundled": true + }, + "just-diff-apply": { + "version": "5.5.0", + "bundled": true + }, + "libnpmaccess": { + "version": "7.0.2", + "bundled": true, + "requires": { + "npm-package-arg": "^10.1.0", + "npm-registry-fetch": "^14.0.3" + } + }, + "libnpmdiff": { + "version": "5.0.19", + "bundled": true, + "requires": { + "@npmcli/arborist": "^6.3.0", + "@npmcli/disparity-colors": "^3.0.0", + "@npmcli/installed-package-contents": "^2.0.2", + "binary-extensions": "^2.2.0", + "diff": "^5.1.0", + "minimatch": "^9.0.0", + "npm-package-arg": "^10.1.0", + "pacote": "^15.0.8", + "tar": "^6.1.13" + } + }, + "libnpmexec": { + "version": "6.0.3", + "bundled": true, + "requires": { + "@npmcli/arborist": "^6.3.0", + "@npmcli/run-script": "^6.0.0", + "ci-info": "^3.7.1", + "npm-package-arg": "^10.1.0", + "npmlog": "^7.0.1", + "pacote": "^15.0.8", + "proc-log": "^3.0.0", + "read": "^2.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "walk-up-path": "^3.0.1" + } + }, + "libnpmfund": { + "version": "4.0.19", + "bundled": true, + "requires": { + "@npmcli/arborist": "^6.3.0" + } + }, + "libnpmhook": { + "version": "9.0.3", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + } + }, + "libnpmorg": { + "version": "5.0.4", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + } + }, + "libnpmpack": { + "version": "5.0.19", + "bundled": true, + "requires": { + "@npmcli/arborist": "^6.3.0", + "@npmcli/run-script": "^6.0.0", + "npm-package-arg": "^10.1.0", + "pacote": "^15.0.8" + } + }, + "libnpmpublish": { + "version": "7.5.0", + "bundled": true, + "requires": { + "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" + } + }, + "libnpmsearch": { + "version": "6.0.2", + "bundled": true, + "requires": { + "npm-registry-fetch": "^14.0.3" + } + }, + "libnpmteam": { + "version": "5.0.3", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + } + }, + "libnpmversion": { + "version": "4.0.2", + "bundled": true, + "requires": { + "@npmcli/git": "^4.0.1", + "@npmcli/run-script": "^6.0.0", + "json-parse-even-better-errors": "^3.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.7" + } + }, + "lru-cache": { + "version": "7.18.3", + "bundled": true + }, + "make-fetch-happen": { + "version": "11.1.1", + "bundled": true, + "requires": { + "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" + } + }, + "minimatch": { + "version": "9.0.3", + "bundled": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "5.0.0", + "bundled": true + }, + "minipass-collect": { + "version": "1.0.2", + "bundled": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-fetch": { + "version": "3.0.3", + "bundled": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^5.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + }, + "minipass-flush": { + "version": "1.0.5", + "bundled": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-json-stream": { + "version": "1.0.1", + "bundled": true, + "requires": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "bundled": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-sized": { + "version": "1.0.3", + "bundled": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minizlib": { + "version": "2.1.2", + "bundled": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "mkdirp": { + "version": "1.0.4", + "bundled": true + }, + "ms": { + "version": "2.1.3", + "bundled": true + }, + "mute-stream": { + "version": "1.0.0", + "bundled": true + }, + "negotiator": { + "version": "0.6.3", + "bundled": true + }, + "node-gyp": { + "version": "9.4.0", + "bundled": true, + "requires": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^11.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" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true + }, + "are-we-there-yet": { + "version": "3.0.1", + "bundled": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "gauge": { + "version": "4.0.4", + "bundled": true, + "requires": { + "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" + } + }, + "glob": { + "version": "7.2.3", + "bundled": true, + "requires": { + "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" + } + }, + "minimatch": { + "version": "3.1.2", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "nopt": { + "version": "6.0.0", + "bundled": true, + "requires": { + "abbrev": "^1.0.0" + } + }, + "npmlog": { + "version": "6.0.2", + "bundled": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + } + }, + "readable-stream": { + "version": "3.6.2", + "bundled": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "signal-exit": { + "version": "3.0.7", + "bundled": true + }, + "which": { + "version": "2.0.2", + "bundled": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "nopt": { + "version": "7.2.0", + "bundled": true, + "requires": { + "abbrev": "^2.0.0" + } + }, + "normalize-package-data": { + "version": "5.0.0", + "bundled": true, + "requires": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + } + }, + "npm-audit-report": { + "version": "5.0.0", + "bundled": true + }, + "npm-bundled": { + "version": "3.0.0", + "bundled": true, + "requires": { + "npm-normalize-package-bin": "^3.0.0" + } + }, + "npm-install-checks": { + "version": "6.1.1", + "bundled": true, + "requires": { + "semver": "^7.1.1" + } + }, + "npm-normalize-package-bin": { + "version": "3.0.1", + "bundled": true + }, + "npm-package-arg": { + "version": "10.1.0", + "bundled": true, + "requires": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + } + }, + "npm-packlist": { + "version": "7.0.4", + "bundled": true, + "requires": { + "ignore-walk": "^6.0.0" + } + }, + "npm-pick-manifest": { + "version": "8.0.1", + "bundled": true, + "requires": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + } + }, + "npm-profile": { + "version": "7.0.1", + "bundled": true, + "requires": { + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0" + } + }, + "npm-registry-fetch": { + "version": "14.0.5", + "bundled": true, + "requires": { + "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" + } + }, + "npm-user-validate": { + "version": "2.0.0", + "bundled": true + }, + "npmlog": { + "version": "7.0.1", + "bundled": true, + "requires": { + "are-we-there-yet": "^4.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^5.0.0", + "set-blocking": "^2.0.0" + } + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1" + } + }, + "p-map": { + "version": "4.0.0", + "bundled": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "pacote": { + "version": "15.2.0", + "bundled": true, + "requires": { + "@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" + } + }, + "parse-conflict-json": { + "version": "3.0.1", + "bundled": true, + "requires": { + "json-parse-even-better-errors": "^3.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + }, + "path-key": { + "version": "3.1.1", + "bundled": true + }, + "path-scurry": { + "version": "1.9.2", + "bundled": true, + "requires": { + "lru-cache": "^9.1.1", + "minipass": "^5.0.0 || ^6.0.2" + }, + "dependencies": { + "lru-cache": { + "version": "9.1.1", + "bundled": true + } + } + }, + "postcss-selector-parser": { + "version": "6.0.13", + "bundled": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "proc-log": { + "version": "3.0.0", + "bundled": true + }, + "process": { + "version": "0.11.10", + "bundled": true + }, + "promise-all-reject-late": { + "version": "1.0.1", + "bundled": true + }, + "promise-call-limit": { + "version": "1.0.2", + "bundled": true + }, + "promise-inflight": { + "version": "1.0.1", + "bundled": true + }, + "promise-retry": { + "version": "2.0.1", + "bundled": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "promzard": { + "version": "1.0.0", + "bundled": true, + "requires": { + "read": "^2.0.0" + } + }, + "qrcode-terminal": { + "version": "0.12.0", + "bundled": true + }, + "read": { + "version": "2.1.0", + "bundled": true, + "requires": { + "mute-stream": "~1.0.0" + } + }, + "read-cmd-shim": { + "version": "4.0.0", + "bundled": true + }, + "read-package-json": { + "version": "6.0.4", + "bundled": true, + "requires": { + "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" + } + }, + "read-package-json-fast": { + "version": "3.0.2", + "bundled": true, + "requires": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + } + }, + "readable-stream": { + "version": "4.4.0", + "bundled": true, + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10" + } + }, + "retry": { + "version": "0.12.0", + "bundled": true + }, + "rimraf": { + "version": "3.0.2", + "bundled": true, + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "glob": { + "version": "7.2.3", + "bundled": true, + "requires": { + "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" + } + }, + "minimatch": { + "version": "3.1.2", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "safe-buffer": { + "version": "5.2.1", + "bundled": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "optional": true + }, + "semver": { + "version": "7.5.4", + "bundled": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true + }, + "shebang-command": { + "version": "2.0.0", + "bundled": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "bundled": true + }, + "signal-exit": { + "version": "4.0.2", + "bundled": true + }, + "sigstore": { + "version": "1.7.0", + "bundled": true, + "requires": { + "@sigstore/protobuf-specs": "^0.1.0", + "@sigstore/tuf": "^1.0.1", + "make-fetch-happen": "^11.0.1" + } + }, + "smart-buffer": { + "version": "4.2.0", + "bundled": true + }, + "socks": { + "version": "2.7.1", + "bundled": true, + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "7.0.0", + "bundled": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + }, + "spdx-correct": { + "version": "3.2.0", + "bundled": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "bundled": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "bundled": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.13", + "bundled": true + }, + "ssri": { + "version": "10.0.4", + "bundled": true, + "requires": { + "minipass": "^5.0.0" + } + }, + "string_decoder": { + "version": "1.3.0", + "bundled": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-width": { + "version": "4.2.3", + "bundled": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "bundled": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "bundled": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "bundled": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "9.4.0", + "bundled": true + }, + "tar": { + "version": "6.1.15", + "bundled": true, + "requires": { + "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" + }, + "dependencies": { + "fs-minipass": { + "version": "2.1.0", + "bundled": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + } + } + }, + "text-table": { + "version": "0.2.0", + "bundled": true + }, + "tiny-relative-date": { + "version": "1.3.0", + "bundled": true + }, + "treeverse": { + "version": "3.0.0", + "bundled": true + }, + "tuf-js": { + "version": "1.1.7", + "bundled": true, + "requires": { + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.1" + } + }, + "unique-filename": { + "version": "3.0.0", + "bundled": true, + "requires": { + "unique-slug": "^4.0.0" + } + }, + "unique-slug": { + "version": "4.0.0", + "bundled": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "bundled": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "5.0.0", + "bundled": true, + "requires": { + "builtins": "^5.0.0" + } + }, + "walk-up-path": { + "version": "3.0.1", + "bundled": true + }, + "wcwidth": { + "version": "1.0.1", + "bundled": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "which": { + "version": "3.0.1", + "bundled": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.5", + "bundled": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "bundled": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "bundled": true + }, + "ansi-styles": { + "version": "6.2.1", + "bundled": true + }, + "emoji-regex": { + "version": "9.2.2", + "bundled": true + }, + "string-width": { + "version": "5.1.2", + "bundled": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "bundled": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "bundled": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + }, + "write-file-atomic": { + "version": "5.0.1", + "bundled": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + } + }, + "yallist": { + "version": "4.0.0", + "bundled": true + } + } }, - "balanced-match": { - "version": "1.0.2", - "bundled": true + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "requires": { + "path-key": "^4.0.0" + }, + "dependencies": { + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==" + } + } }, - "base64-js": { - "version": "1.5.1", - "bundled": true - }, - "bin-links": { - "version": "4.0.2", - "bundled": true, - "requires": { - "cmd-shim": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "read-cmd-shim": "^4.0.0", - "write-file-atomic": "^5.0.0" - } + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } }, - "binary-extensions": { - "version": "2.2.0", - "bundled": true + "nwsapi": { + "version": "2.2.0", + "dev": true + }, + "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 + }, + "object-inspect": { + "version": "1.12.2", + "dev": true + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } }, - "brace-expansion": { - "version": "2.0.1", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0" - } + "object-keys": { + "version": "1.1.1", + "dev": true + }, + "object.assign": { + "version": "4.1.4", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } }, - "buffer": { - "version": "6.0.3", - "bundled": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "builtins": { - "version": "5.0.1", - "bundled": true, - "requires": { - "semver": "^7.0.0" - } - }, - "cacache": { - "version": "17.1.3", - "bundled": true, - "requires": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "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" - } + "object.values": { + "version": "1.1.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } }, - "chalk": { - "version": "5.3.0", - "bundled": true + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } }, - "chownr": { - "version": "2.0.0", - "bundled": true + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true }, - "ci-info": { - "version": "3.8.0", - "bundled": true + "once": { + "version": "1.4.0", + "requires": { + "wrappy": "1" + } }, - "cidr-regex": { - "version": "3.1.1", - "bundled": true, - "requires": { - "ip-regex": "^4.1.0" - } + "one-time": { + "version": "1.0.0", + "dev": true, + "requires": { + "fn.name": "1.x.x" + } }, - "clean-stack": { - "version": "2.2.0", - "bundled": true + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "requires": { + "mimic-fn": "^4.0.0" + } }, - "cli-columns": { - "version": "4.0.0", - "bundled": true, - "requires": { - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - } + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } }, - "cli-table3": { - "version": "0.6.3", - "bundled": true, - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - } + "opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", + "dev": true }, - "clone": { - "version": "1.0.4", - "bundled": true + "optionator": { + "version": "0.8.3", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } }, - "cmd-shim": { - "version": "6.0.1", - "bundled": true + "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, + "requires": { + "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" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "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 + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } }, - "color-convert": { - "version": "2.0.1", - "bundled": true, - "requires": { - "color-name": "~1.1.4" - } + "os-name": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz", + "integrity": "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==", + "dev": true, + "requires": { + "macos-release": "^2.5.0", + "windows-release": "^4.0.0" + } }, - "color-name": { - "version": "1.1.4", - "bundled": true + "p-each-series": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz", + "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==" + }, + "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==", + "requires": { + "p-map": "^5.1.0" + } }, - "color-support": { - "version": "1.1.3", - "bundled": true + "p-finally": { + "version": "1.0.0", + "dev": true }, - "columnify": { - "version": "1.6.0", - "bundled": true, - "requires": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - } + "p-is-promise": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", + "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==" }, - "common-ancestor-path": { - "version": "1.0.1", - "bundled": true + "p-limit": { + "version": "1.3.0", + "requires": { + "p-try": "^1.0.0" + } }, - "concat-map": { - "version": "0.0.1", - "bundled": true + "p-locate": { + "version": "2.0.0", + "requires": { + "p-limit": "^1.1.0" + } }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true + "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==", + "requires": { + "aggregate-error": "^4.0.0" + } }, - "cross-spawn": { - "version": "7.0.3", - "bundled": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "dependencies": { - "which": { - "version": "2.0.2", - "bundled": true, - "requires": { - "isexe": "^2.0.0" - } + "p-queue": { + "version": "6.6.2", + "dev": true, + "requires": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "dependencies": { + "p-timeout": { + "version": "3.2.0", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + } } - } }, - "cssesc": { - "version": "3.0.0", - "bundled": true + "p-reduce": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", + "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==" }, - "debug": { - "version": "4.3.4", - "bundled": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "bundled": true - } - } + "p-timeout": { + "version": "4.1.0", + "dev": true }, - "defaults": { - "version": "1.0.4", - "bundled": true, - "requires": { - "clone": "^1.0.2" - } + "p-try": { + "version": "1.0.0" + }, + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "requires": { + "callsites": "^3.0.0" + } }, - "delegates": { - "version": "1.0.0", - "bundled": true + "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==", + "requires": { + "@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" + } }, - "depd": { - "version": "2.0.0", - "bundled": true + "parse5": { + "version": "6.0.1", + "dev": true + }, + "parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dev": true, + "requires": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "dependencies": { + "parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "requires": { + "entities": "^4.4.0" + } + } + } }, - "diff": { - "version": "5.1.0", - "bundled": true + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pastebin-api": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/pastebin-api/-/pastebin-api-5.1.6.tgz", + "integrity": "sha512-FI2ZeXLxroI2tuRVd5LI7eNmiANFxDOdlhXxSMqtOXTJn1KSt2UC8kglhndUOOPt6p9XPVnuS7XGW/KbiBbbzw==", + "dev": true, + "requires": { + "fast-xml-parser": "^4.1.3", + "undici": "^5.21.0" + } }, - "eastasianwidth": { - "version": "0.2.0", - "bundled": true + "path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true }, - "emoji-regex": { - "version": "8.0.0", - "bundled": true + "path-exists": { + "version": "3.0.0" }, - "encoding": { - "version": "0.1.13", - "bundled": true, - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - } + "path-is-absolute": { + "version": "1.0.1", + "dev": true }, - "env-paths": { - "version": "2.2.1", - "bundled": true + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, - "err-code": { - "version": "2.0.3", - "bundled": true + "path-parse": { + "version": "1.0.7" }, - "event-target-shim": { - "version": "5.0.1", - "bundled": true + "path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "requires": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", + "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", + "dev": true + } + } }, - "events": { - "version": "3.3.0", - "bundled": true + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "pathval": { + "version": "1.1.1", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "through": "~2.3" + } }, - "exponential-backoff": { - "version": "3.1.1", - "bundled": true + "pdfjs-dist": { + "version": "2.12.313", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.12.313.tgz", + "integrity": "sha512-1x6iXO4Qnv6Eb+YFdN5JdUzt4pAkxSp3aLAYPX93eQCyg/m7QFzXVWJHJVtoW48CI8HCXju4dSkhQZwoheL5mA==", + "dev": true, + "requires": {} + }, + "pdfmake": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/pdfmake/-/pdfmake-0.2.7.tgz", + "integrity": "sha512-ClLpgx30H5G3EDvRW1MrA1Xih6YxEaSgIVFrOyBMgAAt62V+hxsyWAi6JNP7u1Fc5JKYAbpb4RRVw8Rhvmz5cQ==", + "dev": true, + "requires": { + "@foliojs-fork/linebreak": "^1.1.1", + "@foliojs-fork/pdfkit": "^0.13.0", + "iconv-lite": "^0.6.3", + "xmldoc": "^1.1.2" + }, + "dependencies": { + "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, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } }, - "fastest-levenshtein": { - "version": "1.0.16", - "bundled": true + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" + }, + "pirates": { + "version": "4.0.5", + "dev": true + }, + "pkg-conf": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", + "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", + "requires": { + "find-up": "^2.0.0", + "load-json-file": "^4.0.0" + } }, - "foreground-child": { - "version": "3.1.1", - "bundled": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - } - }, - "fs-minipass": { - "version": "3.0.2", - "bundled": true, - "requires": { - "minipass": "^5.0.0" - } + "pkg-dir": { + "version": "4.2.0", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "dev": true + } + } }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true + "png-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz", + "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==", + "dev": true }, - "function-bind": { - "version": "1.1.1", - "bundled": true - }, - "gauge": { - "version": "5.0.1", - "bundled": true, - "requires": { - "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": "^4.0.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - } + "prelude-ls": { + "version": "1.1.2", + "dev": true + }, + "prettier": { + "version": "2.7.1", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } }, - "glob": { - "version": "10.2.7", - "bundled": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - } + "pretty-format": { + "version": "27.5.1", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "dev": true + } + } }, - "graceful-fs": { - "version": "4.2.11", - "bundled": true + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true + }, + "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==" + }, + "progress": { + "version": "2.0.3", + "dev": true + }, + "prompts": { + "version": "2.4.2", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } }, - "has": { - "version": "1.0.3", - "bundled": true, - "requires": { - "function-bind": "^1.1.1" - } + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" + }, + "proxy-middleware": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", + "integrity": "sha512-EGCG8SeoIRVMhsqHQUdDigB2i7qU7fCsWASwn54+nPutYO8n4q6EiwMzyfWlC+dzRFExP+kvcnDFdBDHoZBU7Q==", + "dev": true + }, + "psl": { + "version": "1.8.0", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } }, - "has-unicode": { - "version": "2.0.1", - "bundled": true + "punycode": { + "version": "2.1.1", + "dev": true + }, + "q": { + "version": "1.5.1", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3" + }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==" + }, + "quote-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", + "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==", + "dev": true, + "requires": { + "buffer-equal": "0.0.1", + "minimist": "^1.1.3", + "through2": "^2.0.0" + } }, - "hosted-git-info": { - "version": "6.1.1", - "bundled": true, - "requires": { - "lru-cache": "^7.5.1" - } + "randombytes": { + "version": "2.1.0", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } }, - "http-cache-semantics": { - "version": "4.1.1", - "bundled": true + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } }, - "http-proxy-agent": { - "version": "5.0.0", - "bundled": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } + "react-is": { + "version": "17.0.2", + "dev": true }, - "https-proxy-agent": { - "version": "5.0.1", - "bundled": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "humanize-ms": { - "version": "1.2.1", - "bundled": true, - "requires": { - "ms": "^2.0.0" - } + "read-pkg": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-8.0.0.tgz", + "integrity": "sha512-Ajb9oSjxXBw0YyOiwtQ2dKbAA/vMnUPnY63XcCk+mXo0BwIdQEMgZLZiMWGttQHcUhUgbK0mH85ethMPKXxziw==", + "requires": { + "@types/normalize-package-data": "^2.4.1", + "normalize-package-data": "^5.0.0", + "parse-json": "^7.0.0", + "type-fest": "^3.8.0" + }, + "dependencies": { + "json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==" + }, + "lines-and-columns": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==" + }, + "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==", + "requires": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + } + }, + "parse-json": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.0.0.tgz", + "integrity": "sha512-kP+TQYAzAiVnzOlWOe0diD6L35s9bJh0SCn95PIbZFKrOYuIRQsQkeWEYxzVDuHTt9V9YqvYCJ2Qo4z9wdfZPw==", + "requires": { + "@babel/code-frame": "^7.21.4", + "error-ex": "^1.3.2", + "json-parse-even-better-errors": "^3.0.0", + "lines-and-columns": "^2.0.3", + "type-fest": "^3.8.0" + } + }, + "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==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==" + } + } }, - "iconv-lite": { - "version": "0.6.3", - "bundled": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } + "read-pkg-up": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-10.0.0.tgz", + "integrity": "sha512-jgmKiS//w2Zs+YbX039CorlkOp8FIVbSAN8r8GJHDsGlmNPXo+VeHkqAwCiQVTTx5/LwLZTcEw59z3DvcLbr0g==", + "requires": { + "find-up": "^6.3.0", + "read-pkg": "^8.0.0", + "type-fest": "^3.12.0" + }, + "dependencies": { + "find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "requires": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + } + }, + "locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "requires": { + "p-locate": "^6.0.0" + } + }, + "p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "requires": { + "yocto-queue": "^1.0.0" + } + }, + "p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "requires": { + "p-limit": "^4.0.0" + } + }, + "path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==" + }, + "type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==" + } + } }, - "ieee754": { - "version": "1.2.1", - "bundled": true + "readable-stream": { + "version": "3.6.0", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } }, - "ignore-walk": { - "version": "6.0.3", - "bundled": true, - "requires": { - "minimatch": "^9.0.0" - } + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } }, - "imurmurhash": { - "version": "0.1.4", - "bundled": true + "rechoir": { + "version": "0.6.2", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } }, - "indent-string": { - "version": "4.0.0", - "bundled": true + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "dependencies": { + "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==" + } + } }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } + "redeyed": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", + "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==", + "requires": { + "esprima": "~4.0.0" + } }, - "inherits": { - "version": "2.0.4", - "bundled": true + "reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "dev": true + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } }, - "ini": { - "version": "4.1.1", - "bundled": true - }, - "init-package-json": { - "version": "5.0.0", - "bundled": true, - "requires": { - "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" - } - }, - "ip": { - "version": "2.0.0", - "bundled": true - }, - "ip-regex": { - "version": "4.3.0", - "bundled": true - }, - "is-cidr": { - "version": "4.0.2", - "bundled": true, - "requires": { - "cidr-regex": "^3.1.1" - } + "regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } }, - "is-core-module": { - "version": "2.12.1", - "bundled": true, - "requires": { - "has": "^1.0.3" - } + "regexp.prototype.flags": { + "version": "1.4.3", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "bundled": true + "regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "requires": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + } }, - "is-lambda": { - "version": "1.0.1", - "bundled": true + "regextras": { + "version": "0.7.1", + "dev": true }, - "isexe": { - "version": "2.0.0", - "bundled": true + "registry-auth-token": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", + "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", + "requires": { + "@pnpm/npm-conf": "^2.1.0" + } }, - "jackspeak": { - "version": "2.2.1", - "bundled": true, - "requires": { - "@isaacs/cliui": "^8.0.2", - "@pkgjs/parseargs": "^0.11.0" - } + "regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + } + } }, - "json-parse-even-better-errors": { - "version": "3.0.0", - "bundled": true + "require-directory": { + "version": "2.1.1" }, - "json-stringify-nice": { - "version": "1.1.4", - "bundled": true + "require-from-string": { + "version": "2.0.2", + "dev": true }, - "jsonparse": { - "version": "1.3.1", - "bundled": true - }, - "just-diff": { - "version": "6.0.2", - "bundled": true - }, - "just-diff-apply": { - "version": "5.5.0", - "bundled": true - }, - "libnpmaccess": { - "version": "7.0.2", - "bundled": true, - "requires": { - "npm-package-arg": "^10.1.0", - "npm-registry-fetch": "^14.0.3" - } - }, - "libnpmdiff": { - "version": "5.0.19", - "bundled": true, - "requires": { - "@npmcli/arborist": "^6.3.0", - "@npmcli/disparity-colors": "^3.0.0", - "@npmcli/installed-package-contents": "^2.0.2", - "binary-extensions": "^2.2.0", - "diff": "^5.1.0", - "minimatch": "^9.0.0", - "npm-package-arg": "^10.1.0", - "pacote": "^15.0.8", - "tar": "^6.1.13" - } - }, - "libnpmexec": { - "version": "6.0.3", - "bundled": true, - "requires": { - "@npmcli/arborist": "^6.3.0", - "@npmcli/run-script": "^6.0.0", - "ci-info": "^3.7.1", - "npm-package-arg": "^10.1.0", - "npmlog": "^7.0.1", - "pacote": "^15.0.8", - "proc-log": "^3.0.0", - "read": "^2.0.0", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.7", - "walk-up-path": "^3.0.1" - } - }, - "libnpmfund": { - "version": "4.0.19", - "bundled": true, - "requires": { - "@npmcli/arborist": "^6.3.0" - } - }, - "libnpmhook": { - "version": "9.0.3", - "bundled": true, - "requires": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^14.0.3" - } - }, - "libnpmorg": { - "version": "5.0.4", - "bundled": true, - "requires": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^14.0.3" - } - }, - "libnpmpack": { - "version": "5.0.19", - "bundled": true, - "requires": { - "@npmcli/arborist": "^6.3.0", - "@npmcli/run-script": "^6.0.0", - "npm-package-arg": "^10.1.0", - "pacote": "^15.0.8" - } - }, - "libnpmpublish": { - "version": "7.5.0", - "bundled": true, - "requires": { - "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" - } - }, - "libnpmsearch": { - "version": "6.0.2", - "bundled": true, - "requires": { - "npm-registry-fetch": "^14.0.3" - } - }, - "libnpmteam": { - "version": "5.0.3", - "bundled": true, - "requires": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^14.0.3" - } - }, - "libnpmversion": { - "version": "4.0.2", - "bundled": true, - "requires": { - "@npmcli/git": "^4.0.1", - "@npmcli/run-script": "^6.0.0", - "json-parse-even-better-errors": "^3.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.7" - } + "resolve": { + "version": "1.22.1", + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } }, - "lru-cache": { - "version": "7.18.3", - "bundled": true - }, - "make-fetch-happen": { - "version": "11.1.1", - "bundled": true, - "requires": { - "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" - } + "resolve-cwd": { + "version": "3.0.0", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "dev": true + } + } + }, + "resolve-from": { + "version": "4.0.0" + }, + "resolve.exports": { + "version": "1.1.0", + "dev": true + }, + "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, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + } + } }, - "minimatch": { - "version": "9.0.3", - "bundled": true, - "requires": { - "brace-expansion": "^2.0.1" - } + "reusify": { + "version": "1.0.4" }, - "minipass": { - "version": "5.0.0", - "bundled": true - }, - "minipass-collect": { - "version": "1.0.2", - "bundled": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minipass-fetch": { - "version": "3.0.3", - "bundled": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^5.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - } - }, - "minipass-flush": { - "version": "1.0.5", - "bundled": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minipass-json-stream": { - "version": "1.0.1", - "bundled": true, - "requires": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "bundled": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minipass-sized": { - "version": "1.0.3", - "bundled": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minizlib": { - "version": "2.1.2", - "bundled": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "requires": { - "yallist": "^4.0.0" - } + "rimraf": { + "version": "2.6.3", + "dev": true, + "requires": { + "glob": "^7.1.3" } - } - }, - "mkdirp": { - "version": "1.0.4", - "bundled": true }, - "ms": { - "version": "2.1.3", - "bundled": true + "robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" + }, + "rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } }, - "mute-stream": { - "version": "1.0.0", - "bundled": true + "rollup-plugin-clear": { + "version": "2.0.7", + "dev": true, + "requires": { + "rimraf": "^2.6.2" + } }, - "negotiator": { - "version": "0.6.3", - "bundled": true - }, - "node-gyp": { - "version": "9.4.0", - "bundled": true, - "requires": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^11.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" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true - }, - "are-we-there-yet": { - "version": "3.0.1", - "bundled": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "gauge": { - "version": "4.0.4", - "bundled": true, - "requires": { - "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" - } - }, - "glob": { - "version": "7.2.3", - "bundled": true, - "requires": { - "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" - } - }, - "minimatch": { - "version": "3.1.2", - "bundled": true, - "requires": { - "brace-expansion": "^1.1.7" - } + "rollup-plugin-copy": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-copy/-/rollup-plugin-copy-3.4.0.tgz", + "integrity": "sha512-rGUmYYsYsceRJRqLVlE9FivJMxJ7X6jDlP79fmFkL8sJs7VVMSVyA2yfyL+PGyO/vJs4A87hwhgVfz61njI+uQ==", + "dev": true, + "requires": { + "@types/fs-extra": "^8.0.1", + "colorette": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "10.0.1", + "is-plain-object": "^3.0.0" }, - "nopt": { - "version": "6.0.0", - "bundled": true, - "requires": { - "abbrev": "^1.0.0" - } - }, - "npmlog": { - "version": "6.0.2", - "bundled": true, - "requires": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - } - }, - "readable-stream": { - "version": "3.6.2", - "bundled": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } + "dependencies": { + "globby": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", + "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + } + }, + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true + } + } + }, + "rollup-plugin-screeps-world": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/rollup-plugin-screeps-world/-/rollup-plugin-screeps-world-1.0.4.tgz", + "integrity": "sha512-+NB/KH8kuOjaenOySZVrPnRU5O/ny48otYYyI/Flg5tww59XIA95JZbmgnoN8J8GbjmDk+D5s+RV4YSK9r2ucw==", + "dev": true, + "requires": { + "git-rev-sync": "^3.0.2", + "screeps-api": "^1.11.0" }, - "signal-exit": { - "version": "3.0.7", - "bundled": true + "dependencies": { + "git-rev-sync": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/git-rev-sync/-/git-rev-sync-3.0.2.tgz", + "integrity": "sha512-Nd5RiYpyncjLv0j6IONy0lGzAqdRXUaBctuGBbrEA2m6Bn4iDrN/9MeQTXuiquw8AEKL9D2BW0nw5m/lQvxqnQ==", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "graceful-fs": "4.1.15", + "shelljs": "0.8.5" + } + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true + }, + "shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + } + } + }, + "rollup-plugin-terser": { + "version": "7.0.2", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" }, - "which": { - "version": "2.0.2", - "bundled": true, - "requires": { - "isexe": "^2.0.0" - } + "dependencies": { + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "jest-worker": { + "version": "26.6.2", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "serialize-javascript": { + "version": "4.0.0", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } - } }, - "nopt": { - "version": "7.2.0", - "bundled": true, - "requires": { - "abbrev": "^2.0.0" - } + "rollup-plugin-typescript2": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.36.0.tgz", + "integrity": "sha512-NB2CSQDxSe9+Oe2ahZbf+B4bh7pHwjV5L+RSYpCu7Q5ROuN94F9b6ioWwKfz3ueL3KTtmX4o2MUH2cgHDIEUsw==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^4.1.2", + "find-cache-dir": "^3.3.2", + "fs-extra": "^10.0.0", + "semver": "^7.5.4", + "tslib": "^2.6.2" + }, + "dependencies": { + "@rollup/pluginutils": { + "version": "4.2.1", + "dev": true, + "requires": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + } + }, + "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, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } }, - "normalize-package-data": { - "version": "5.0.0", - "bundled": true, - "requires": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - } - }, - "npm-audit-report": { - "version": "5.0.0", - "bundled": true - }, - "npm-bundled": { - "version": "3.0.0", - "bundled": true, - "requires": { - "npm-normalize-package-bin": "^3.0.0" - } - }, - "npm-install-checks": { - "version": "6.1.1", - "bundled": true, - "requires": { - "semver": "^7.1.1" - } - }, - "npm-normalize-package-bin": { - "version": "3.0.1", - "bundled": true - }, - "npm-package-arg": { - "version": "10.1.0", - "bundled": true, - "requires": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - } - }, - "npm-packlist": { - "version": "7.0.4", - "bundled": true, - "requires": { - "ignore-walk": "^6.0.0" - } - }, - "npm-pick-manifest": { - "version": "8.0.1", - "bundled": true, - "requires": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^10.0.0", - "semver": "^7.3.5" - } - }, - "npm-profile": { - "version": "7.0.1", - "bundled": true, - "requires": { - "npm-registry-fetch": "^14.0.0", - "proc-log": "^3.0.0" - } - }, - "npm-registry-fetch": { - "version": "14.0.5", - "bundled": true, - "requires": { - "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" - } - }, - "npm-user-validate": { - "version": "2.0.0", - "bundled": true - }, - "npmlog": { - "version": "7.0.1", - "bundled": true, - "requires": { - "are-we-there-yet": "^4.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^5.0.0", - "set-blocking": "^2.0.0" - } + "run-parallel": { + "version": "1.2.0", + "requires": { + "queue-microtask": "^1.2.2" + } }, - "once": { - "version": "1.4.0", - "bundled": true, - "requires": { - "wrappy": "1" - } + "rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" + }, + "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, + "requires": { + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", + "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", + "dev": true + } + } }, - "p-map": { - "version": "4.0.0", - "bundled": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "pacote": { - "version": "15.2.0", - "bundled": true, - "requires": { - "@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" - } - }, - "parse-conflict-json": { - "version": "3.0.1", - "bundled": true, - "requires": { - "json-parse-even-better-errors": "^3.0.0", - "just-diff": "^6.0.0", - "just-diff-apply": "^5.2.0" - } + "sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "requires": { + "mri": "^1.1.0" + } }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true + "safe-buffer": { + "version": "5.2.1" }, - "path-key": { - "version": "3.1.1", - "bundled": true + "safe-stable-stringify": { + "version": "2.4.0", + "dev": true }, - "path-scurry": { - "version": "1.9.2", - "bundled": true, - "requires": { - "lru-cache": "^9.1.1", - "minipass": "^5.0.0 || ^6.0.2" - }, - "dependencies": { - "lru-cache": { - "version": "9.1.1", - "bundled": true - } - } - }, - "postcss-selector-parser": { - "version": "6.0.13", - "bundled": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "proc-log": { - "version": "3.0.0", - "bundled": true + "safer-buffer": { + "version": "2.1.2" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "saxes": { + "version": "5.0.1", + "dev": true, + "requires": { + "xmlchars": "^2.2.0" + } }, - "process": { - "version": "0.11.10", - "bundled": true - }, - "promise-all-reject-late": { - "version": "1.0.1", - "bundled": true - }, - "promise-call-limit": { - "version": "1.0.2", - "bundled": true - }, - "promise-inflight": { - "version": "1.0.1", - "bundled": true - }, - "promise-retry": { - "version": "2.0.1", - "bundled": true, - "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - } - }, - "promzard": { - "version": "1.0.0", - "bundled": true, - "requires": { - "read": "^2.0.0" - } - }, - "qrcode-terminal": { - "version": "0.12.0", - "bundled": true - }, - "read": { - "version": "2.1.0", - "bundled": true, - "requires": { - "mute-stream": "~1.0.0" - } - }, - "read-cmd-shim": { - "version": "4.0.0", - "bundled": true - }, - "read-package-json": { - "version": "6.0.4", - "bundled": true, - "requires": { - "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" - } - }, - "read-package-json-fast": { - "version": "3.0.2", - "bundled": true, - "requires": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - } + "scope-analyzer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.2.tgz", + "integrity": "sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ==", + "dev": true, + "requires": { + "array-from": "^2.1.1", + "dash-ast": "^2.0.1", + "es6-map": "^0.1.5", + "es6-set": "^0.1.5", + "es6-symbol": "^3.1.1", + "estree-is-function": "^1.0.0", + "get-assigned-identifiers": "^1.1.0" + } }, - "readable-stream": { - "version": "4.4.0", - "bundled": true, - "requires": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10" - } - }, - "retry": { - "version": "0.12.0", - "bundled": true + "screeps-api": { + "version": "1.16.0", + "dev": true, + "requires": { + "axios": "^0.21.1", + "bufferutil": "^4.0.1", + "commander": "^7.2.0", + "debug": "^4.1.1", + "utf-8-validate": "^5.0.2", + "ws": "^7.4.4", + "yamljs": "^0.3.0" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "dev": true + }, + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "dev": true + } + } }, - "rimraf": { - "version": "3.0.2", - "bundled": true, - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } + "screeps-db-importer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/screeps-db-importer/-/screeps-db-importer-1.1.0.tgz", + "integrity": "sha512-bbkO0n7DJpu9DzG2PGwEi4FZA64+iCbkYcBiqNYIx/l5vurldEF16UZLBir7tIpC1aJ2OCl6y7Mb1xaN2qDTMQ==", + "dev": true, + "requires": { + "node-fetch": "^3.3.1", + "winston": "^3.8.2" }, - "glob": { - "version": "7.2.3", - "bundled": true, - "requires": { - "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" - } + "dependencies": { + "node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dev": true, + "requires": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + } + } + } + }, + "screeps-grafana-go_carbon": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/screeps-grafana-go_carbon/-/screeps-grafana-go_carbon-1.0.5.tgz", + "integrity": "sha512-YLN87Jd9d1wrcWB38kTJLHMR7aoEgfXlNAexP6axBLDmBxpBPwcW6M7bb9/P0q1Q/m20GRtcPBrdFn1Sk4R39A==", + "dev": true, + "requires": { + "axios": "^0.27.2", + "dotenv": "^16.0.2", + "fs-extra": "^11.1.0", + "get-port-please": "^3.0.1", + "minimist": "^1.2.7", + "winston": "^3.8.1" }, - "minimatch": { - "version": "3.1.2", - "bundled": true, - "requires": { - "brace-expansion": "^1.1.7" - } + "dependencies": { + "axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dev": true, + "requires": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } - } }, - "safe-buffer": { - "version": "5.2.1", - "bundled": true + "screeps-jest": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/screeps-jest/-/screeps-jest-2.0.2.tgz", + "integrity": "sha512-2jVH1fKX2U4SQBbbGe5rF5lUGtsE7AcsteV7+L4//WngXl5z16nv7DyHq0yNFrxuaRYZUUBLOaSE4gjr7h6H0A==", + "dev": true, + "requires": {} + }, + "screeps-performance-server": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.12.2.tgz", + "integrity": "sha512-Q1JBbLmObzLOyfu1e3QI4fwfGXszH8FcciTXxHJ0q02cvBeCXQHYH9SLefRiz59q9vNTp9rAYnIBMeT7u0bP0g==", + "dev": true, + "requires": { + "@octokit/core": "^4.2.0", + "discord.js": "^14.9.0", + "dotenv": "^16.0.3", + "get-port": "^6.1.2", + "json-beautify": "^1.1.1", + "lodash": "^4.17.21", + "minimist": "^1.2.7", + "ncp": "^2.0.0", + "node-fetch": "^2.6.7", + "node-powershell": "^5.0.1", + "pastebin-api": "^5.1.6", + "q": "^1.5.1", + "screeps-api": "1.16.0", + "screeps-db-importer": "latest", + "winston": "^3.8.2" + }, + "dependencies": { + "@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 + }, + "@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, + "requires": { + "@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" + } + }, + "@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, + "requires": { + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "@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, + "requires": { + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "@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, + "requires": { + "@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" + } + }, + "@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, + "requires": { + "@octokit/types": "^9.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "@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, + "requires": { + "@octokit/openapi-types": "^18.0.0" + } + }, + "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 + }, + "lodash": { + "version": "4.17.21", + "dev": true + } + } }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "optional": true + "screeps-viz": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/screeps-viz/-/screeps-viz-2.1.3.tgz", + "integrity": "sha512-c96u2MTtrXzjv4O1K89J1EWgapbP0C9xqx2gCOZ5uLTBDr1RaAuIQZkOquqHA8ELhSNd9xr9X7Qt5vCOMMknSw==", + "dev": true + }, + "semantic-release": { + "version": "21.0.7", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-21.0.7.tgz", + "integrity": "sha512-peRDSXN+hF8EFSKzze90ff/EnAmgITHQ/a3SZpRV3479ny0BIZWEJ33uX6/GlOSKdaSxo9hVRDyv2/u2MuF+Bw==", + "requires": { + "@semantic-release/commit-analyzer": "^10.0.0", + "@semantic-release/error": "^4.0.0", + "@semantic-release/github": "^9.0.0", + "@semantic-release/npm": "^10.0.2", + "@semantic-release/release-notes-generator": "^11.0.0", + "aggregate-error": "^4.0.1", + "cosmiconfig": "^8.0.0", + "debug": "^4.0.0", + "env-ci": "^9.0.0", + "execa": "^7.0.0", + "figures": "^5.0.0", + "find-versions": "^5.1.0", + "get-stream": "^6.0.0", + "git-log-parser": "^1.2.0", + "hook-std": "^3.0.0", + "hosted-git-info": "^6.0.0", + "lodash-es": "^4.17.21", + "marked": "^5.0.0", + "marked-terminal": "^5.1.1", + "micromatch": "^4.0.2", + "p-each-series": "^3.0.0", + "p-reduce": "^3.0.0", + "read-pkg-up": "^10.0.0", + "resolve-from": "^5.0.0", + "semver": "^7.3.2", + "semver-diff": "^4.0.0", + "signale": "^1.2.1", + "yargs": "^17.5.1" + }, + "dependencies": { + "@semantic-release/commit-analyzer": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-10.0.1.tgz", + "integrity": "sha512-9ejHzTAijYs9z246sY/dKBatmOPcd0GQ7lH4MgLCkv1q4GCiDZRkjHJkaQZXZVaK7mJybS+sH3Ng6G8i3pYMGQ==", + "requires": { + "conventional-changelog-angular": "^6.0.0", + "conventional-commits-filter": "^3.0.0", + "conventional-commits-parser": "^4.0.0", + "debug": "^4.0.0", + "import-from": "^4.0.0", + "lodash-es": "^4.17.21", + "micromatch": "^4.0.2" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + }, + "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==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } }, "semver": { - "version": "7.5.4", - "bundled": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "bundled": true, - "requires": { - "yallist": "^4.0.0" - } + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + }, + "semver-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", + "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", + "requires": { + "semver": "^7.3.5" + }, + "dependencies": { + "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==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "semver-regex": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", + "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==" + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "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 + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + } + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } } - } }, - "set-blocking": { - "version": "2.0.0", - "bundled": true + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "shallow-copy": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", + "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==", + "dev": true }, "shebang-command": { - "version": "2.0.0", - "bundled": true, - "requires": { - "shebang-regex": "^3.0.0" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } }, "shebang-regex": { - "version": "3.0.0", - "bundled": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "side-channel": { + "version": "1.0.4", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } }, "signal-exit": { - "version": "4.0.2", - "bundled": true - }, - "sigstore": { - "version": "1.7.0", - "bundled": true, - "requires": { - "@sigstore/protobuf-specs": "^0.1.0", - "@sigstore/tuf": "^1.0.1", - "make-fetch-happen": "^11.0.1" - } - }, - "smart-buffer": { - "version": "4.2.0", - "bundled": true - }, - "socks": { - "version": "2.7.1", - "bundled": true, - "requires": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - } - }, - "socks-proxy-agent": { - "version": "7.0.0", - "bundled": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - } + "version": "3.0.7" + }, + "signale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", + "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", + "requires": { + "chalk": "^2.3.2", + "figures": "^2.0.0", + "pkg-conf": "^2.1.0" + }, + "dependencies": { + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "requires": { + "escape-string-regexp": "^1.0.5" + } + } + } }, - "spdx-correct": { - "version": "3.2.0", - "bundled": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } + "simple-swizzle": { + "version": "0.2.2", + "dev": true, + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "dev": true + } + } }, - "spdx-exceptions": { - "version": "2.3.0", - "bundled": true + "sinon": { + "version": "6.3.5", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.0.2", + "@sinonjs/formatio": "^3.0.0", + "@sinonjs/samsam": "^2.1.2", + "diff": "^3.5.0", + "lodash.get": "^4.4.2", + "lolex": "^2.7.5", + "nise": "^1.4.5", + "supports-color": "^5.5.0", + "type-detect": "^4.0.8" + } }, - "spdx-expression-parse": { - "version": "3.0.1", - "bundled": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } + "sinon-chai": { + "version": "3.7.0", + "dev": true, + "requires": {} }, - "spdx-license-ids": { - "version": "3.0.13", - "bundled": true + "sisteransi": { + "version": "1.0.5", + "dev": true }, - "ssri": { - "version": "10.0.4", - "bundled": true, - "requires": { - "minipass": "^5.0.0" - } + "slash": { + "version": "3.0.0", + "dev": true }, - "string_decoder": { - "version": "1.3.0", - "bundled": true, - "requires": { - "safe-buffer": "~5.2.0" - } + "source-map": { + "version": "0.6.1" + }, + "source-map-support": { + "version": "0.5.21", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } }, - "string-width": { - "version": "4.2.3", - "bundled": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true }, - "string-width-cjs": { - "version": "npm:string-width@4.2.3", - "bundled": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } + "spawn-error-forwarder": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", + "integrity": "sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==" }, - "strip-ansi": { - "version": "6.0.1", - "bundled": true, - "requires": { - "ansi-regex": "^5.0.1" - } + "spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } }, - "strip-ansi-cjs": { - "version": "npm:strip-ansi@6.0.1", - "bundled": true, - "requires": { - "ansi-regex": "^5.0.1" - } + "spdx-exceptions": { + "version": "2.3.0" }, - "supports-color": { - "version": "9.4.0", - "bundled": true - }, - "tar": { - "version": "6.1.15", - "bundled": true, - "requires": { - "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" - }, - "dependencies": { - "fs-minipass": { - "version": "2.1.0", - "bundled": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "requires": { - "yallist": "^4.0.0" - } - } - } + "spdx-expression-parse": { + "version": "3.0.1", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } - } - }, - "text-table": { - "version": "0.2.0", - "bundled": true - }, - "tiny-relative-date": { - "version": "1.3.0", - "bundled": true - }, - "treeverse": { - "version": "3.0.0", - "bundled": true - }, - "tuf-js": { - "version": "1.1.7", - "bundled": true, - "requires": { - "@tufjs/models": "1.0.4", - "debug": "^4.3.4", - "make-fetch-happen": "^11.1.1" - } - }, - "unique-filename": { - "version": "3.0.0", - "bundled": true, - "requires": { - "unique-slug": "^4.0.0" - } - }, - "unique-slug": { - "version": "4.0.0", - "bundled": true, - "requires": { - "imurmurhash": "^0.1.4" - } }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true + "spdx-license-ids": { + "version": "3.0.11" + }, + "split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "requires": { + "through": "2" + } }, - "validate-npm-package-license": { - "version": "3.0.4", - "bundled": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validate-npm-package-name": { - "version": "5.0.0", - "bundled": true, - "requires": { - "builtins": "^5.0.0" - } - }, - "walk-up-path": { - "version": "3.0.1", - "bundled": true + "split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "requires": { + "readable-stream": "^3.0.0" + } }, - "wcwidth": { - "version": "1.0.1", - "bundled": true, - "requires": { - "defaults": "^1.0.3" - } + "sprintf-js": { + "version": "1.0.3", + "dev": true }, - "which": { - "version": "3.0.1", - "bundled": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wide-align": { - "version": "1.1.5", - "bundled": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } + "stack-trace": { + "version": "0.0.10", + "dev": true }, - "wrap-ansi": { - "version": "8.1.0", - "bundled": true, - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "bundled": true - }, - "ansi-styles": { - "version": "6.2.1", - "bundled": true - }, - "emoji-regex": { - "version": "9.2.2", - "bundled": true - }, - "string-width": { - "version": "5.1.2", - "bundled": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } + "stack-utils": { + "version": "2.0.5", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" }, - "strip-ansi": { - "version": "7.1.0", - "bundled": true, - "requires": { - "ansi-regex": "^6.0.1" - } + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "dev": true + } } - } - }, - "wrap-ansi-cjs": { - "version": "npm:wrap-ansi@7.0.0", - "bundled": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } }, - "wrappy": { - "version": "1.0.2", - "bundled": true + "static-eval": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz", + "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==", + "dev": true, + "requires": { + "escodegen": "^1.11.1" + }, + "dependencies": { + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + } + } }, - "write-file-atomic": { - "version": "5.0.1", - "bundled": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - } + "static-module": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/static-module/-/static-module-3.0.4.tgz", + "integrity": "sha512-gb0v0rrgpBkifXCa3yZXxqVmXDVE+ETXj6YlC/jt5VzOnGXR2C15+++eXuMDUYsePnbhf+lwW0pE1UXyOLtGCw==", + "dev": true, + "requires": { + "acorn-node": "^1.3.0", + "concat-stream": "~1.6.0", + "convert-source-map": "^1.5.1", + "duplexer2": "~0.1.4", + "escodegen": "^1.11.1", + "has": "^1.0.1", + "magic-string": "0.25.1", + "merge-source-map": "1.0.4", + "object-inspect": "^1.6.0", + "readable-stream": "~2.3.3", + "scope-analyzer": "^2.0.1", + "shallow-copy": "~0.0.1", + "static-eval": "^2.0.5", + "through2": "~2.0.3" + }, + "dependencies": { + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "magic-string": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz", + "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.1" + } + }, + "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, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } }, - "yallist": { - "version": "4.0.0", - "bundled": true - } - } - }, - "npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "requires": { - "path-key": "^4.0.0" - }, - "dependencies": { - "path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==" - } - } - }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "nwsapi": { - "version": "2.2.0", - "dev": true - }, - "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 - }, - "object-inspect": { - "version": "1.12.2", - "dev": true - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "dev": true - }, - "object.assign": { - "version": "4.1.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "object.values": { - "version": "1.1.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true - }, - "once": { - "version": "1.4.0", - "requires": { - "wrappy": "1" - } - }, - "one-time": { - "version": "1.0.0", - "dev": true, - "requires": { - "fn.name": "1.x.x" - } - }, - "onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "requires": { - "mimic-fn": "^4.0.0" - } - }, - "open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "opencollective-postinstall": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", - "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", - "dev": true - }, - "optionator": { - "version": "0.8.3", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "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, - "requires": { - "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" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true + }, + "stream-combiner": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", + "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", + "dev": true, + "requires": { + "duplexer": "~0.1.1", + "through": "~2.3.4" + } }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", + "requires": { + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "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==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "dev": true }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "string_decoder": { + "version": "1.3.0", + "requires": { + "safe-buffer": "~5.2.0" + } }, - "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 + "string-length": { + "version": "4.0.2", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } }, - "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 + "string-template": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-1.0.0.tgz", + "integrity": "sha512-SLqR3GBUXuoPP5MmYtD7ompvXiG87QjT6lzOszyXjTM86Uu7At7vNnt2xgyTLq5o9T4IxTYFyGxcULqpsmsfdg==", + "dev": true }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "os-name": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz", - "integrity": "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==", - "dev": true, - "requires": { - "macos-release": "^2.5.0", - "windows-release": "^4.0.0" - } - }, - "p-each-series": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz", - "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==" - }, - "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==", - "requires": { - "p-map": "^5.1.0" - } - }, - "p-finally": { - "version": "1.0.0", - "dev": true - }, - "p-is-promise": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", - "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==" - }, - "p-limit": { - "version": "1.3.0", - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "requires": { - "p-limit": "^1.1.0" - } - }, - "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==", - "requires": { - "aggregate-error": "^4.0.0" - } - }, - "p-queue": { - "version": "6.6.2", - "dev": true, - "requires": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" - }, - "dependencies": { - "p-timeout": { - "version": "3.2.0", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - } - } - }, - "p-reduce": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", - "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==" - }, - "p-timeout": { - "version": "4.1.0", - "dev": true - }, - "p-try": { - "version": "1.0.0" - }, - "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "requires": { - "callsites": "^3.0.0" - } - }, - "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==", - "requires": { - "@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" - } - }, - "parse5": { - "version": "6.0.1", - "dev": true - }, - "parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "dev": true, - "requires": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - }, - "dependencies": { - "parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, - "requires": { - "entities": "^4.4.0" - } - } - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pastebin-api": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/pastebin-api/-/pastebin-api-5.1.6.tgz", - "integrity": "sha512-FI2ZeXLxroI2tuRVd5LI7eNmiANFxDOdlhXxSMqtOXTJn1KSt2UC8kglhndUOOPt6p9XPVnuS7XGW/KbiBbbzw==", - "dev": true, - "requires": { - "fast-xml-parser": "^4.1.3", - "undici": "^5.21.0" - } - }, - "path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true - }, - "path-exists": { - "version": "3.0.0" - }, - "path-is-absolute": { - "version": "1.0.1", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "path-parse": { - "version": "1.0.7" - }, - "path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "dev": true, - "requires": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", - "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", - "dev": true - } - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "pathval": { - "version": "1.1.1", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "through": "~2.3" - } - }, - "pdfjs-dist": { - "version": "2.12.313", - "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.12.313.tgz", - "integrity": "sha512-1x6iXO4Qnv6Eb+YFdN5JdUzt4pAkxSp3aLAYPX93eQCyg/m7QFzXVWJHJVtoW48CI8HCXju4dSkhQZwoheL5mA==", - "dev": true, - "requires": {} - }, - "pdfmake": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/pdfmake/-/pdfmake-0.2.7.tgz", - "integrity": "sha512-ClLpgx30H5G3EDvRW1MrA1Xih6YxEaSgIVFrOyBMgAAt62V+hxsyWAi6JNP7u1Fc5JKYAbpb4RRVw8Rhvmz5cQ==", - "dev": true, - "requires": { - "@foliojs-fork/linebreak": "^1.1.1", - "@foliojs-fork/pdfkit": "^0.13.0", - "iconv-lite": "^0.6.3", - "xmldoc": "^1.1.2" - }, - "dependencies": { - "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, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1" - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" - }, - "pirates": { - "version": "4.0.5", - "dev": true - }, - "pkg-conf": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", - "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", - "requires": { - "find-up": "^2.0.0", - "load-json-file": "^4.0.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "dev": true, - "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } }, - "locate-path": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } + "string-width-cjs": { + "version": "npm:string-width@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, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } }, - "p-limit": { - "version": "2.3.0", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } + "string.prototype.trimend": { + "version": "1.0.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } }, - "p-locate": { - "version": "4.1.0", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } + "string.prototype.trimstart": { + "version": "1.0.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } }, - "p-try": { - "version": "2.2.0", - "dev": true + "stringz": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/stringz/-/stringz-2.1.0.tgz", + "integrity": "sha512-KlywLT+MZ+v0IRepfMxRtnSvDCMc3nR1qqCs3m/qIbSOWkNZYT8XHQA31rS3TnKp0c5xjZu3M4GY/2aRKSi/6A==", + "dev": true, + "requires": { + "char-regex": "^1.0.2" + } }, - "path-exists": { - "version": "4.0.0", - "dev": true - } - } - }, - "png-js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz", - "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "dev": true - }, - "prettier": { - "version": "2.7.1", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "pretty-format": { - "version": "27.5.1", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "dev": true - } - } - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true - }, - "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==" - }, - "progress": { - "version": "2.0.3", - "dev": true - }, - "prompts": { - "version": "2.4.2", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" - }, - "proxy-middleware": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", - "integrity": "sha512-EGCG8SeoIRVMhsqHQUdDigB2i7qU7fCsWASwn54+nPutYO8n4q6EiwMzyfWlC+dzRFExP+kvcnDFdBDHoZBU7Q==", - "dev": true - }, - "psl": { - "version": "1.8.0", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "dev": true - }, - "q": { - "version": "1.5.1", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3" - }, - "quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==" - }, - "quote-stream": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", - "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==", - "dev": true, - "requires": { - "buffer-equal": "0.0.1", - "minimist": "^1.1.3", - "through2": "^2.0.0" - } - }, - "randombytes": { - "version": "2.1.0", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "react-is": { - "version": "17.0.2", - "dev": true - }, - "read-pkg": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-8.0.0.tgz", - "integrity": "sha512-Ajb9oSjxXBw0YyOiwtQ2dKbAA/vMnUPnY63XcCk+mXo0BwIdQEMgZLZiMWGttQHcUhUgbK0mH85ethMPKXxziw==", - "requires": { - "@types/normalize-package-data": "^2.4.1", - "normalize-package-data": "^5.0.0", - "parse-json": "^7.0.0", - "type-fest": "^3.8.0" - }, - "dependencies": { - "json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==" + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } }, - "lines-and-columns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==" + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } }, - "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==", - "requires": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - } + "strip-bom": { + "version": "3.0.0" }, - "parse-json": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.0.0.tgz", - "integrity": "sha512-kP+TQYAzAiVnzOlWOe0diD6L35s9bJh0SCn95PIbZFKrOYuIRQsQkeWEYxzVDuHTt9V9YqvYCJ2Qo4z9wdfZPw==", - "requires": { - "@babel/code-frame": "^7.21.4", - "error-ex": "^1.3.2", - "json-parse-even-better-errors": "^3.0.0", - "lines-and-columns": "^2.0.3", - "type-fest": "^3.8.0" - } + "strip-final-newline": { + "version": "2.0.0", + "dev": true + }, + "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==", + "requires": { + "min-indent": "^1.0.0" + } }, - "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==", - "requires": { - "lru-cache": "^6.0.0" - } + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" }, - "type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==" - } - } - }, - "read-pkg-up": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-10.0.0.tgz", - "integrity": "sha512-jgmKiS//w2Zs+YbX039CorlkOp8FIVbSAN8r8GJHDsGlmNPXo+VeHkqAwCiQVTTx5/LwLZTcEw59z3DvcLbr0g==", - "requires": { - "find-up": "^6.3.0", - "read-pkg": "^8.0.0", - "type-fest": "^3.12.0" - }, - "dependencies": { - "find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "requires": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - } + "strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "dev": true }, - "locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "requires": { - "p-locate": "^6.0.0" - } + "stylis": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", + "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" }, - "p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "requires": { - "yocto-queue": "^1.0.0" - } + "supports-color": { + "version": "5.5.0", + "requires": { + "has-flag": "^3.0.0" + } }, - "p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "requires": { - "p-limit": "^4.0.0" - } + "supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0" + }, + "supports-color": { + "version": "7.2.0", + "requires": { + "has-flag": "^4.0.0" + } + } + } }, - "path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==" + "supports-preserve-symlinks-flag": { + "version": "1.0.0" + }, + "symbol-tree": { + "version": "3.2.4", + "dev": true + }, + "temp-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", + "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==" + }, + "tempy": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz", + "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==", + "requires": { + "is-stream": "^3.0.0", + "temp-dir": "^3.0.0", + "type-fest": "^2.12.2", + "unique-string": "^3.0.0" + }, + "dependencies": { + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" + }, + "type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==" + } + } }, - "type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==" - } - } - }, - "readable-stream": { - "version": "3.6.0", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "rechoir": { - "version": "0.6.2", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, - "redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "dependencies": { - "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==" - } - } - }, - "redeyed": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", - "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==", - "requires": { - "esprima": "~4.0.0" - } - }, - "reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", - "dev": true - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "requires": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - } - }, - "regextras": { - "version": "0.7.1", - "dev": true - }, - "registry-auth-token": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", - "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", - "requires": { - "@pnpm/npm-conf": "^2.1.0" - } - }, - "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true - } - } - }, - "require-directory": { - "version": "2.1.1" - }, - "require-from-string": { - "version": "2.0.2", - "dev": true - }, - "resolve": { - "version": "1.22.1", - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "dev": true - } - } - }, - "resolve-from": { - "version": "4.0.0" - }, - "resolve.exports": { - "version": "1.1.0", - "dev": true - }, - "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, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "dependencies": { - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true + "terminal-link": { + "version": "2.1.1", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.2", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "type-fest": { + "version": "0.21.3", + "dev": true + } + } }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - } - } - }, - "reusify": { - "version": "1.0.4" - }, - "rimraf": { - "version": "2.6.3", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "robust-predicates": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", - "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" - }, - "rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "rollup-plugin-clear": { - "version": "2.0.7", - "dev": true, - "requires": { - "rimraf": "^2.6.2" - } - }, - "rollup-plugin-copy": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-copy/-/rollup-plugin-copy-3.4.0.tgz", - "integrity": "sha512-rGUmYYsYsceRJRqLVlE9FivJMxJ7X6jDlP79fmFkL8sJs7VVMSVyA2yfyL+PGyO/vJs4A87hwhgVfz61njI+uQ==", - "dev": true, - "requires": { - "@types/fs-extra": "^8.0.1", - "colorette": "^1.1.0", - "fs-extra": "^8.1.0", - "globby": "10.0.1", - "is-plain-object": "^3.0.0" - }, - "dependencies": { - "globby": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", - "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - } + "terser": { + "version": "5.14.2", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true - } - } - }, - "rollup-plugin-screeps-world": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/rollup-plugin-screeps-world/-/rollup-plugin-screeps-world-1.0.4.tgz", - "integrity": "sha512-+NB/KH8kuOjaenOySZVrPnRU5O/ny48otYYyI/Flg5tww59XIA95JZbmgnoN8J8GbjmDk+D5s+RV4YSK9r2ucw==", - "dev": true, - "requires": { - "git-rev-sync": "^3.0.2", - "screeps-api": "^1.11.0" - }, - "dependencies": { - "git-rev-sync": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/git-rev-sync/-/git-rev-sync-3.0.2.tgz", - "integrity": "sha512-Nd5RiYpyncjLv0j6IONy0lGzAqdRXUaBctuGBbrEA2m6Bn4iDrN/9MeQTXuiquw8AEKL9D2BW0nw5m/lQvxqnQ==", - "dev": true, - "requires": { - "escape-string-regexp": "1.0.5", - "graceful-fs": "4.1.15", - "shelljs": "0.8.5" - } + "test-exclude": { + "version": "6.0.0", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - } - } - }, - "rollup-plugin-terser": { - "version": "7.0.2", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "dev": true + "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==" }, - "jest-worker": { - "version": "26.6.2", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "serialize-javascript": { - "version": "4.0.0", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } + "text-hex": { + "version": "1.0.0", + "dev": true }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "rollup-plugin-typescript2": { - "version": "0.36.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.36.0.tgz", - "integrity": "sha512-NB2CSQDxSe9+Oe2ahZbf+B4bh7pHwjV5L+RSYpCu7Q5ROuN94F9b6ioWwKfz3ueL3KTtmX4o2MUH2cgHDIEUsw==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^4.1.2", - "find-cache-dir": "^3.3.2", - "fs-extra": "^10.0.0", - "semver": "^7.5.4", - "tslib": "^2.6.2" - }, - "dependencies": { - "@rollup/pluginutils": { - "version": "4.2.1", - "dev": true, - "requires": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - } + "text-table": { + "version": "0.2.0", + "dev": true }, - "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, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } + "throat": { + "version": "6.0.1", + "dev": true }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "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==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true + "tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "dev": true + }, + "tmpl": { + "version": "1.0.5", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "tr46": { + "version": "2.1.0", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "traverse": { + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", + "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==" + }, + "trim-buffer": { + "version": "5.0.0", + "dev": true + }, + "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==" + }, + "triple-beam": { + "version": "1.3.0", + "dev": true + }, + "ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==" + }, + "ts-jest": { + "version": "27.0.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.5.tgz", + "integrity": "sha512-lIJApzfTaSSbtlksfFNHkWOzLJuuSm4faFAfo5kvzOiRAuoN4/eKxVJ2zEAho8aecE04qX6K1pAzfH5QHL1/8w==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^27.0.0", + "json5": "2.x", + "lodash": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + }, + "dependencies": { + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "ts-mixer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz", + "integrity": "sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==", + "dev": true + }, + "ts-morph": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-18.0.0.tgz", + "integrity": "sha512-Kg5u0mk19PIIe4islUI/HWRvm9bC1lHejK4S0oh1zaZ77TMZAEmQC0sHQYiu2RgCQFZKXz1fMVi/7nOOeirznA==", + "dev": true, + "requires": { + "@ts-morph/common": "~0.19.0", + "code-block-writer": "^12.0.0" + } + }, + "ts-node": { + "version": "10.8.1", + "dev": true, + "requires": { + "@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" + }, + "dependencies": { + "acorn-walk": { + "version": "8.2.0", + "dev": true + }, + "diff": { + "version": "4.0.2", + "dev": true + } + } + }, + "tsconfig-paths": { + "version": "3.14.1", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "run-parallel": { - "version": "1.2.0", - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rw": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" - }, - "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, - "requires": { - "tslib": "^2.1.0" - }, - "dependencies": { "tslib": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", - "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", - "dev": true - } - } - }, - "sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "requires": { - "mri": "^1.1.0" - } - }, - "safe-buffer": { - "version": "5.2.1" - }, - "safe-stable-stringify": { - "version": "2.4.0", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2" - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "saxes": { - "version": "5.0.1", - "dev": true, - "requires": { - "xmlchars": "^2.2.0" - } - }, - "scope-analyzer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.2.tgz", - "integrity": "sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ==", - "dev": true, - "requires": { - "array-from": "^2.1.1", - "dash-ast": "^2.0.1", - "es6-map": "^0.1.5", - "es6-set": "^0.1.5", - "es6-symbol": "^3.1.1", - "estree-is-function": "^1.0.0", - "get-assigned-identifiers": "^1.1.0" - } - }, - "screeps-api": { - "version": "1.16.0", - "dev": true, - "requires": { - "axios": "^0.21.1", - "bufferutil": "^4.0.1", - "commander": "^7.2.0", - "debug": "^4.1.1", - "utf-8-validate": "^5.0.2", - "ws": "^7.4.4", - "yamljs": "^0.3.0" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "dev": true + "version": "1.14.1", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } }, - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true }, - "ms": { - "version": "2.1.2", - "dev": true - } - } - }, - "screeps-db-importer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/screeps-db-importer/-/screeps-db-importer-1.1.0.tgz", - "integrity": "sha512-bbkO0n7DJpu9DzG2PGwEi4FZA64+iCbkYcBiqNYIx/l5vurldEF16UZLBir7tIpC1aJ2OCl6y7Mb1xaN2qDTMQ==", - "dev": true, - "requires": { - "node-fetch": "^3.3.1", - "winston": "^3.8.2" - }, - "dependencies": { - "node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "dev": true, - "requires": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - } - } - } - }, - "screeps-grafana-go_carbon": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/screeps-grafana-go_carbon/-/screeps-grafana-go_carbon-1.0.5.tgz", - "integrity": "sha512-YLN87Jd9d1wrcWB38kTJLHMR7aoEgfXlNAexP6axBLDmBxpBPwcW6M7bb9/P0q1Q/m20GRtcPBrdFn1Sk4R39A==", - "dev": true, - "requires": { - "axios": "^0.27.2", - "dotenv": "^16.0.2", - "fs-extra": "^11.1.0", - "get-port-please": "^3.0.1", - "minimist": "^1.2.7", - "winston": "^3.8.1" - }, - "dependencies": { - "axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "dev": true, - "requires": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" - } + "type-check": { + "version": "0.3.2", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } }, - "fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } + "type-detect": { + "version": "4.0.8", + "dev": true }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } + "type-fest": { + "version": "0.20.2", + "dev": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "screeps-jest": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/screeps-jest/-/screeps-jest-2.0.2.tgz", - "integrity": "sha512-2jVH1fKX2U4SQBbbGe5rF5lUGtsE7AcsteV7+L4//WngXl5z16nv7DyHq0yNFrxuaRYZUUBLOaSE4gjr7h6H0A==", - "dev": true, - "requires": {} - }, - "screeps-performance-server": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.12.1.tgz", - "integrity": "sha512-alq0Ek6OQJnTLIwgO0b6TwjrinQB1nEviOTP+aNz8iuIq4rYAKLyi4+H9JzyoXjt1V2faLTSCp/VKzKk400VAQ==", - "dev": true, - "requires": { - "@octokit/core": "^4.2.0", - "discord.js": "^14.9.0", - "dotenv": "^16.0.3", - "get-port": "^6.1.2", - "json-beautify": "^1.1.1", - "lodash": "^4.17.21", - "minimist": "^1.2.7", - "ncp": "^2.0.0", - "node-fetch": "^2.6.7", - "node-powershell": "^5.0.1", - "pastebin-api": "^5.1.6", - "q": "^1.5.1", - "screeps-api": "1.16.0", - "screeps-db-importer": "latest", - "winston": "^3.8.2" - }, - "dependencies": { - "@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 + "typescript": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", + "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", + "dev": true + }, + "uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "optional": true + }, + "unbox-primitive": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } }, - "@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, - "requires": { - "@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" - } + "undici": { + "version": "5.22.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz", + "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==", + "dev": true, + "requires": { + "busboy": "^1.6.0" + } }, - "@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, - "requires": { - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - } + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } }, - "@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, - "requires": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^9.0.0", - "universal-user-agent": "^6.0.0" - } + "unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true + }, + "unicode-properties": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", + "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", + "dev": true, + "requires": { + "base64-js": "^1.3.0", + "unicode-trie": "^2.0.0" + } }, - "@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, - "requires": { - "@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" - } + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true + }, + "unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "dev": true, + "requires": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } }, - "@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, - "requires": { - "@octokit/types": "^9.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } + "unique-string": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", + "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", + "requires": { + "crypto-random-string": "^4.0.0" + } }, - "@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, - "requires": { - "@octokit/openapi-types": "^18.0.0" - } + "unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "requires": { + "@types/unist": "^2.0.0" + } }, - "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 + "universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" }, - "lodash": { - "version": "4.17.21", - "dev": true - } - } - }, - "screeps-viz": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/screeps-viz/-/screeps-viz-2.1.3.tgz", - "integrity": "sha512-c96u2MTtrXzjv4O1K89J1EWgapbP0C9xqx2gCOZ5uLTBDr1RaAuIQZkOquqHA8ELhSNd9xr9X7Qt5vCOMMknSw==", - "dev": true - }, - "semantic-release": { - "version": "21.0.7", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-21.0.7.tgz", - "integrity": "sha512-peRDSXN+hF8EFSKzze90ff/EnAmgITHQ/a3SZpRV3479ny0BIZWEJ33uX6/GlOSKdaSxo9hVRDyv2/u2MuF+Bw==", - "requires": { - "@semantic-release/commit-analyzer": "^10.0.0", - "@semantic-release/error": "^4.0.0", - "@semantic-release/github": "^9.0.0", - "@semantic-release/npm": "^10.0.2", - "@semantic-release/release-notes-generator": "^11.0.0", - "aggregate-error": "^4.0.1", - "cosmiconfig": "^8.0.0", - "debug": "^4.0.0", - "env-ci": "^9.0.0", - "execa": "^7.0.0", - "figures": "^5.0.0", - "find-versions": "^5.1.0", - "get-stream": "^6.0.0", - "git-log-parser": "^1.2.0", - "hook-std": "^3.0.0", - "hosted-git-info": "^6.0.0", - "lodash-es": "^4.17.21", - "marked": "^5.0.0", - "marked-terminal": "^5.1.1", - "micromatch": "^4.0.2", - "p-each-series": "^3.0.0", - "p-reduce": "^3.0.0", - "read-pkg-up": "^10.0.0", - "resolve-from": "^5.0.0", - "semver": "^7.3.2", - "semver-diff": "^4.0.0", - "signale": "^1.2.1", - "yargs": "^17.5.1" - }, - "dependencies": { - "@semantic-release/commit-analyzer": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-10.0.1.tgz", - "integrity": "sha512-9ejHzTAijYs9z246sY/dKBatmOPcd0GQ7lH4MgLCkv1q4GCiDZRkjHJkaQZXZVaK7mJybS+sH3Ng6G8i3pYMGQ==", - "requires": { - "conventional-changelog-angular": "^6.0.0", - "conventional-commits-filter": "^3.0.0", - "conventional-commits-parser": "^4.0.0", - "debug": "^4.0.0", - "import-from": "^4.0.0", - "lodash-es": "^4.17.21", - "micromatch": "^4.0.2" - } + "universalify": { + "version": "0.1.2", + "dev": true + }, + "unix-crypt-td-js": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz", + "integrity": "sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } + "uri-js": { + "version": "4.4.1", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "url-join": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", + "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==" }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + "utf-8-validate": { + "version": "5.0.9", + "dev": true, + "optional": true, + "requires": { + "node-gyp-build": "^4.3.0" + } }, - "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==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - }, - "semver-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", - "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", - "requires": { - "semver": "^7.3.5" - }, - "dependencies": { - "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==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "semver-regex": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", - "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==" - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true + "util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } }, - "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 + "util-deprecate": { + "version": "1.0.2" }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - } - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true + "uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" + }, + "uvu": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", + "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", + "requires": { + "dequal": "^2.0.0", + "diff": "^5.0.0", + "kleur": "^4.0.3", + "sade": "^1.7.3" + }, + "dependencies": { + "diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==" + }, + "kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==" + } + } }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } + "v8-compile-cache": { + "version": "2.3.0", + "dev": true + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "dev": true + }, + "v8-to-istanbul": { + "version": "8.1.1", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.4", + "dev": true + } + } }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true + "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==", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validator": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", + "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true + }, + "w3c-hr-time": { + "version": "1.0.2", + "dev": true, + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "2.0.0", + "dev": true, + "requires": { + "xml-name-validator": "^3.0.0" + } + }, + "walker": { + "version": "1.0.8", + "dev": true, + "requires": { + "makeerror": "1.0.12" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - } - } - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "shallow-copy": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", - "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==", - "dev": true - }, - "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==", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "side-channel": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7" - }, - "signale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", - "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", - "requires": { - "chalk": "^2.3.2", - "figures": "^2.0.0", - "pkg-conf": "^2.1.0" - }, - "dependencies": { - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", - "requires": { - "escape-string-regexp": "^1.0.5" - } - } - } - }, - "simple-swizzle": { - "version": "0.2.2", - "dev": true, - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "dev": true - } - } - }, - "sinon": { - "version": "6.3.5", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.0.2", - "@sinonjs/formatio": "^3.0.0", - "@sinonjs/samsam": "^2.1.2", - "diff": "^3.5.0", - "lodash.get": "^4.4.2", - "lolex": "^2.7.5", - "nise": "^1.4.5", - "supports-color": "^5.5.0", - "type-detect": "^4.0.8" - } - }, - "sinon-chai": { - "version": "3.7.0", - "dev": true, - "requires": {} - }, - "sisteransi": { - "version": "1.0.5", - "dev": true - }, - "slash": { - "version": "3.0.0", - "dev": true - }, - "source-map": { - "version": "0.6.1" - }, - "source-map-support": { - "version": "0.5.21", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "spawn-error-forwarder": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", - "integrity": "sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==" - }, - "spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0" - }, - "spdx-expression-parse": { - "version": "3.0.1", - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.11" - }, - "split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "requires": { - "through": "2" - } - }, - "split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "requires": { - "readable-stream": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "dev": true - }, - "stack-trace": { - "version": "0.0.10", - "dev": true - }, - "stack-utils": { - "version": "2.0.5", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "dev": true - } - } - }, - "static-eval": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz", - "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==", - "dev": true, - "requires": { - "escodegen": "^1.11.1" - }, - "dependencies": { - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - } - } - }, - "static-module": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/static-module/-/static-module-3.0.4.tgz", - "integrity": "sha512-gb0v0rrgpBkifXCa3yZXxqVmXDVE+ETXj6YlC/jt5VzOnGXR2C15+++eXuMDUYsePnbhf+lwW0pE1UXyOLtGCw==", - "dev": true, - "requires": { - "acorn-node": "^1.3.0", - "concat-stream": "~1.6.0", - "convert-source-map": "^1.5.1", - "duplexer2": "~0.1.4", - "escodegen": "^1.11.1", - "has": "^1.0.1", - "magic-string": "0.25.1", - "merge-source-map": "1.0.4", - "object-inspect": "^1.6.0", - "readable-stream": "~2.3.3", - "scope-analyzer": "^2.0.1", - "shallow-copy": "~0.0.1", - "static-eval": "^2.0.5", - "through2": "~2.0.3" - }, - "dependencies": { - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } + "web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "dev": true }, - "magic-string": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz", - "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.1" - } + "web-worker": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", + "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" }, - "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, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } + "webidl-conversions": { + "version": "6.1.0", + "dev": true + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.5", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true - }, - "stream-combiner": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", - "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", - "dev": true, - "requires": { - "duplexer": "~0.1.1", - "through": "~2.3.4" - } - }, - "stream-combiner2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", - "requires": { - "duplexer2": "~0.1.0", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } + "whatwg-mimetype": { + "version": "2.3.0", + "dev": true }, - "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==" + "whatwg-url": { + "version": "8.7.0", + "dev": true, + "requires": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "dependencies": { + "lodash": { + "version": "4.17.21", + "dev": true + } + } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-length": { - "version": "4.0.2", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "string-template": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string-template/-/string-template-1.0.0.tgz", - "integrity": "sha512-SLqR3GBUXuoPP5MmYtD7ompvXiG87QjT6lzOszyXjTM86Uu7At7vNnt2xgyTLq5o9T4IxTYFyGxcULqpsmsfdg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string-width-cjs": { - "version": "npm:string-width@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, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "stringz": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/stringz/-/stringz-2.1.0.tgz", - "integrity": "sha512-KlywLT+MZ+v0IRepfMxRtnSvDCMc3nR1qqCs3m/qIbSOWkNZYT8XHQA31rS3TnKp0c5xjZu3M4GY/2aRKSi/6A==", - "dev": true, - "requires": { - "char-regex": "^1.0.2" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-ansi-cjs": { - "version": "npm:strip-ansi@6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "3.0.0" - }, - "strip-final-newline": { - "version": "2.0.0", - "dev": true - }, - "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==", - "requires": { - "min-indent": "^1.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" - }, - "strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "dev": true - }, - "stylis": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", - "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" - }, - "supports-color": { - "version": "5.5.0", - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0" + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } }, - "supports-color": { - "version": "7.2.0", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0" - }, - "symbol-tree": { - "version": "3.2.4", - "dev": true - }, - "temp-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", - "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==" - }, - "tempy": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz", - "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==", - "requires": { - "is-stream": "^3.0.0", - "temp-dir": "^3.0.0", - "type-fest": "^2.12.2", - "unique-string": "^3.0.0" - }, - "dependencies": { - "is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" + "which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "requires": { + "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" + } }, - "type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==" - } - } - }, - "terminal-link": { - "version": "2.1.1", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "dependencies": { - "ansi-escapes": { - "version": "4.3.2", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } + "which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } }, - "type-fest": { - "version": "0.21.3", - "dev": true - } - } - }, - "terser": { - "version": "5.14.2", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - } - }, - "test-exclude": { - "version": "6.0.0", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "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==" - }, - "text-hex": { - "version": "1.0.0", - "dev": true - }, - "text-table": { - "version": "0.2.0", - "dev": true - }, - "throat": { - "version": "6.0.1", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } + "windows-release": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", + "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==", + "dev": true, + "requires": { + "execa": "^4.0.2" + }, + "dependencies": { + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + } + } }, - "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==" + "winston": { + "version": "3.8.2", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.4.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.5.0" + } }, - "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==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "tiny-inflate": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", - "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", - "dev": true - }, - "tmpl": { - "version": "1.0.5", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true - }, - "tr46": { - "version": "2.1.0", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "traverse": { - "version": "0.6.7", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", - "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==" - }, - "trim-buffer": { - "version": "5.0.0", - "dev": true - }, - "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==" - }, - "triple-beam": { - "version": "1.3.0", - "dev": true - }, - "ts-dedent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", - "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==" - }, - "ts-jest": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.5.tgz", - "integrity": "sha512-lIJApzfTaSSbtlksfFNHkWOzLJuuSm4faFAfo5kvzOiRAuoN4/eKxVJ2zEAho8aecE04qX6K1pAzfH5QHL1/8w==", - "dev": true, - "requires": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", - "json5": "2.x", - "lodash": "4.x", - "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "winston-transport": { + "version": "4.5.0", + "dev": true, + "requires": { + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" + } }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "ts-mixer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz", - "integrity": "sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==", - "dev": true - }, - "ts-morph": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-18.0.0.tgz", - "integrity": "sha512-Kg5u0mk19PIIe4islUI/HWRvm9bC1lHejK4S0oh1zaZ77TMZAEmQC0sHQYiu2RgCQFZKXz1fMVi/7nOOeirznA==", - "dev": true, - "requires": { - "@ts-morph/common": "~0.19.0", - "code-block-writer": "^12.0.0" - } - }, - "ts-node": { - "version": "10.8.1", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "acorn-walk": { - "version": "8.2.0", - "dev": true + "word-wrap": { + "version": "1.2.3", + "dev": true }, - "diff": { - "version": "4.0.2", - "dev": true - } - } - }, - "tsconfig-paths": { - "version": "3.14.1", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - } - } - }, - "tslib": { - "version": "1.14.1", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-detect": { - "version": "4.0.8", - "dev": true - }, - "type-fest": { - "version": "0.20.2", - "dev": true - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", - "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", - "dev": true - }, - "uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", - "optional": true - }, - "unbox-primitive": { - "version": "1.0.2", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "undici": { - "version": "5.22.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz", - "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==", - "dev": true, - "requires": { - "busboy": "^1.6.0" - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true - }, - "unicode-properties": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", - "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", - "dev": true, - "requires": { - "base64-js": "^1.3.0", - "unicode-trie": "^2.0.0" - } - }, - "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true - }, - "unicode-trie": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", - "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", - "dev": true, - "requires": { - "pako": "^0.2.5", - "tiny-inflate": "^1.0.0" - } - }, - "unique-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", - "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", - "requires": { - "crypto-random-string": "^4.0.0" - } - }, - "unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "requires": { - "@types/unist": "^2.0.0" - } - }, - "universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" - }, - "universalify": { - "version": "0.1.2", - "dev": true - }, - "unix-crypt-td-js": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz", - "integrity": "sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true - }, - "update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "url-join": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", - "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==" - }, - "utf-8-validate": { - "version": "5.0.9", - "dev": true, - "optional": true, - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "util-deprecate": { - "version": "1.0.2" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true - }, - "uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" - }, - "uvu": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", - "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", - "requires": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3" - }, - "dependencies": { - "diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==" + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" }, - "kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==" - } - } - }, - "v8-compile-cache": { - "version": "2.3.0", - "dev": true - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "dev": true - }, - "v8-to-istanbul": { - "version": "8.1.1", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "dev": true - } - } - }, - "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==", - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", - "dev": true - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true - }, - "w3c-hr-time": { - "version": "1.0.2", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "2.0.0", - "dev": true, - "requires": { - "xml-name-validator": "^3.0.0" - } - }, - "walker": { - "version": "1.0.8", - "dev": true, - "requires": { - "makeerror": "1.0.12" - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", - "dev": true - }, - "web-worker": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", - "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" - }, - "webidl-conversions": { - "version": "6.1.0", - "dev": true - }, - "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "requires": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "dev": true - }, - "whatwg-url": { - "version": "8.7.0", - "dev": true, - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "dev": true - } - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "dev": true, - "requires": { - "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" - } - }, - "which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } - }, - "windows-release": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", - "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==", - "dev": true, - "requires": { - "execa": "^4.0.2" - }, - "dependencies": { - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + } + } }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true + "wrappy": { + "version": "1.0.2" }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true + "write-file-atomic": { + "version": "3.0.3", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } + "ws": { + "version": "7.5.8", + "dev": true, + "requires": {} + }, + "xml-name-validator": { + "version": "3.0.0", + "dev": true + }, + "xmlchars": { + "version": "2.2.0", + "dev": true + }, + "xmldoc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.3.0.tgz", + "integrity": "sha512-y7IRWW6PvEnYQZNZFMRLNJw+p3pezM4nKYPfr15g4OOW9i8VpeydycFuipE2297OvZnh3jSb2pxOt9QpkZUVng==", + "dev": true, + "requires": { + "sax": "^1.2.4" + } }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - } - } - }, - "winston": { - "version": "3.8.2", - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "@dabh/diagnostics": "^2.0.2", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.4.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.5.0" - } - }, - "winston-transport": { - "version": "4.5.0", - "dev": true, - "requires": { - "logform": "^2.3.2", - "readable-stream": "^3.6.0", - "triple-beam": "^1.3.0" - } - }, - "word-wrap": { - "version": "1.2.3", - "dev": true - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, - "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==" - } - } - }, - "wrap-ansi-cjs": { - "version": "npm:wrap-ansi@7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yamljs": { + "version": "0.3.0", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "glob": "^7.0.5" + } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "dependencies": { + "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==" + } + } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "wrappy": { - "version": "1.0.2" - }, - "write-file-atomic": { - "version": "3.0.3", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "ws": { - "version": "7.5.8", - "dev": true, - "requires": {} - }, - "xml-name-validator": { - "version": "3.0.0", - "dev": true - }, - "xmlchars": { - "version": "2.2.0", - "dev": true - }, - "xmldoc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.3.0.tgz", - "integrity": "sha512-y7IRWW6PvEnYQZNZFMRLNJw+p3pezM4nKYPfr15g4OOW9i8VpeydycFuipE2297OvZnh3jSb2pxOt9QpkZUVng==", - "dev": true, - "requires": { - "sax": "^1.2.4" - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - }, - "yamljs": { - "version": "0.3.0", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "glob": "^7.0.5" - } - }, - "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "dependencies": { "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==" + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" + }, + "yn": { + "version": "3.1.1", + "dev": true + }, + "yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==" } - } - }, - "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==" - }, - "yn": { - "version": "3.1.1", - "dev": true - }, - "yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==" } - } } diff --git a/package.json b/package.json index 44a75544a..7beb7a926 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "rollup-plugin-typescript2": "^0.36.0", "screeps-grafana-go_carbon": "^1.0.5", "screeps-jest": "^2.0.2", - "screeps-performance-server": "^1.12.1", + "screeps-performance-server": "^1.12.2", "screeps-viz": "^2.1.3", "sinon": "^6.3.5", "sinon-chai": "^3.2.0", From d087603512899d37ea9f4a000ed15d7c9b785923 Mon Sep 17 00:00:00 2001 From: Pieter Date: Mon, 25 Dec 2023 12:03:35 +0100 Subject: [PATCH 019/190] Updated screesp-performance package --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5d01b8a2c..9f11931ce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -53,7 +53,7 @@ "rollup-plugin-typescript2": "^0.36.0", "screeps-grafana-go_carbon": "^1.0.5", "screeps-jest": "^2.0.2", - "screeps-performance-server": "^1.12.2", + "screeps-performance-server": "^1.12.3", "screeps-viz": "^2.1.3", "sinon": "^6.3.5", "sinon-chai": "^3.2.0", @@ -19387,9 +19387,9 @@ } }, "node_modules/screeps-performance-server": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.12.2.tgz", - "integrity": "sha512-Q1JBbLmObzLOyfu1e3QI4fwfGXszH8FcciTXxHJ0q02cvBeCXQHYH9SLefRiz59q9vNTp9rAYnIBMeT7u0bP0g==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.12.3.tgz", + "integrity": "sha512-WIiOIggaiRN+jpRo7jFiMKSKmujkPS2dgV/srxvqTgEpaCw8GmpkXVsmPAA4zVbQL+8skIHQF0TvEr8z1/UYnQ==", "dev": true, "dependencies": { "@octokit/core": "^4.2.0", @@ -34945,9 +34945,9 @@ "requires": {} }, "screeps-performance-server": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.12.2.tgz", - "integrity": "sha512-Q1JBbLmObzLOyfu1e3QI4fwfGXszH8FcciTXxHJ0q02cvBeCXQHYH9SLefRiz59q9vNTp9rAYnIBMeT7u0bP0g==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.12.3.tgz", + "integrity": "sha512-WIiOIggaiRN+jpRo7jFiMKSKmujkPS2dgV/srxvqTgEpaCw8GmpkXVsmPAA4zVbQL+8skIHQF0TvEr8z1/UYnQ==", "dev": true, "requires": { "@octokit/core": "^4.2.0", diff --git a/package.json b/package.json index 7beb7a926..e1da5e688 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "rollup-plugin-typescript2": "^0.36.0", "screeps-grafana-go_carbon": "^1.0.5", "screeps-jest": "^2.0.2", - "screeps-performance-server": "^1.12.2", + "screeps-performance-server": "^1.12.3", "screeps-viz": "^2.1.3", "sinon": "^6.3.5", "sinon-chai": "^3.2.0", From 619bd52229293bf7b74b591de2bb06a58b192055 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 26 Dec 2023 23:09:07 -0800 Subject: [PATCH 020/190] batteries stored stat, general improvements --- src/international/customPathFinder.ts | 9 ++ src/international/mapVisuals.ts | 6 +- src/international/requests.ts | 8 +- src/international/statsManager.ts | 7 +- src/international/tickInit.ts | 1 - src/room/commune/combatRequest.ts | 2 - src/room/commune/commune.ts | 1 - src/room/commune/haulRequestManager.ts | 4 +- src/room/commune/observer.ts | 7 +- src/room/commune/remotesManager.ts | 5 +- src/room/commune/workRequest.ts | 2 +- .../creepPrototypes/creepMoveFunctions.ts | 2 +- src/room/room.ts | 4 - src/room/roomFunctions.ts | 3 +- src/room/roomNameUtils.ts | 97 +++++++++++++++---- src/utils/utils.ts | 72 -------------- 16 files changed, 108 insertions(+), 122 deletions(-) diff --git a/src/international/customPathFinder.ts b/src/international/customPathFinder.ts index 4911c0405..b73c82106 100644 --- a/src/international/customPathFinder.ts +++ b/src/international/customPathFinder.ts @@ -609,3 +609,12 @@ function generatePath(args: CustomPathFinderArgs, allowedRoomNames: Set) return pathFinderResult.path } + +export class CustomPathFinder { + findPath(args: CustomPathFinderArgs) { + + + } +} + +export const customPathFinder = new CustomPathFinder() diff --git a/src/international/mapVisuals.ts b/src/international/mapVisuals.ts index d7236eb91..b6cede11e 100644 --- a/src/international/mapVisuals.ts +++ b/src/international/mapVisuals.ts @@ -7,10 +7,6 @@ import { roomDimensions, packedPosLength, } from './constants' -import { customLog } from 'utils/logging' -import { makeRoomCoord, roomNameFromRoomCoord } from '../utils/utils' -import { CollectiveManager } from './collective' -import { statsManager } from './statsManager' /** * Adds colours and annotations to the map if mapVisuals are enabled @@ -233,7 +229,7 @@ export class MapVisualsManager { }) */ /* - const roomCoord = makeRoomCoord(roomName) + const roomCoord = roomNameUtils.pack(roomName) Game.map.visual.text(('x: ' + roomCoord.x + ', y: ' + roomCoord.y).toString(), new RoomPosition(2, 40, roomName), { align: 'left', fontSize: 5, diff --git a/src/international/requests.ts b/src/international/requests.ts index 7109810ba..d3453b074 100644 --- a/src/international/requests.ts +++ b/src/international/requests.ts @@ -1,4 +1,4 @@ -import { advancedFindDistance, findClosestRoomName, randomIntRange, randomRange } from 'utils/utils' +import { findClosestRoomName, randomIntRange, randomRange } from 'utils/utils' import { collectiveManager } from './collective' import { roomNameUtils } from 'room/roomNameUtils' import { @@ -180,7 +180,7 @@ export class RequestsManager extends Sleepable { if ( Game.map.getRoomLinearDistance(communeName, roomName) > maxWorkRequestDistance || - advancedFindDistance(communeName, roomName, { + roomNameUtils.advancedFindDistance(communeName, roomName, { typeWeights: { keeper: Infinity, enemy: Infinity, @@ -271,7 +271,7 @@ export class RequestsManager extends Sleepable { if ( Game.map.getRoomLinearDistance(communeName, requestName) > maxCombatDistance || - advancedFindDistance(communeName, requestName, { + roomNameUtils.advancedFindDistance(communeName, requestName, { typeWeights: { keeper: Infinity, enemy: Infinity, @@ -337,7 +337,7 @@ export class RequestsManager extends Sleepable { if ( Game.map.getRoomLinearDistance(communeName, requestName) > maxHaulDistance || - advancedFindDistance(communeName, requestName, { + roomNameUtils.advancedFindDistance(communeName, requestName, { typeWeights: { keeper: Infinity, enemy: Infinity, diff --git a/src/international/statsManager.ts b/src/international/statsManager.ts index 8045ab828..10430f684 100644 --- a/src/international/statsManager.ts +++ b/src/international/statsManager.ts @@ -108,6 +108,7 @@ export interface CommuneStats extends RoomStats { [RoomStatsKeys.EnergyTerminalSentDomestic]: number [RoomStatsKeys.EnergyTerminalSentOther]: number + [RoomStatsKeys.BatteriesStoredTimes10]: number } const remoteStatNames: Set> = new Set([ @@ -158,6 +159,7 @@ export class StatsManager { [RoomStatsKeys.PowerCreepCount]: 0, [RoomStatsKeys.ControllerLevel]: 0, [RoomStatsKeys.EnergyStored]: 0, + [RoomStatsKeys.BatteriesStoredTimes10]: 0, [RoomStatsKeys.MineralsHarvested]: 0, [RoomStatsKeys.EnergyInputBought]: 0, [RoomStatsKeys.EnergyOutputSold]: 0, @@ -261,8 +263,9 @@ export class StatsManager { } */ const resourcesInStoringStructures = room.roomManager.resourcesInStoringStructures roomStats[RoomStatsKeys.EnergyStored] = - (resourcesInStoringStructures.energy || 0) + - (resourcesInStoringStructures.battery || 0) * 10 + (resourcesInStoringStructures.energy || 0) + roomStats[RoomStatsKeys.BatteriesStoredTimes10] = + (resourcesInStoringStructures.battery * 10 || 0) // delete legacy stat key value pairs diff --git a/src/international/tickInit.ts b/src/international/tickInit.ts index 92b3bdc2e..d84e7bd17 100644 --- a/src/international/tickInit.ts +++ b/src/international/tickInit.ts @@ -17,7 +17,6 @@ import { RoomTypes, } from './constants' import { - advancedFindDistance, createPosMap, findCarryPartsRequired, findClosestRoomName, diff --git a/src/room/commune/combatRequest.ts b/src/room/commune/combatRequest.ts index be19ad9de..35138da80 100644 --- a/src/room/commune/combatRequest.ts +++ b/src/room/commune/combatRequest.ts @@ -1,6 +1,4 @@ import { CombatRequestKeys, RoomMemoryKeys, customColors } from 'international/constants' -import { advancedFindDistance } from 'utils/utils' -import { collectiveManager } from 'international/collective' import { CommuneManager } from './commune' import { statsManager } from 'international/statsManager' diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index 3d156d52d..f4ae6b88c 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -13,7 +13,6 @@ import { isXYExit, isXYInBorder, isXYInRoom, - makeRoomCoord, packAsNum, packXYAsNum, randomIntRange, diff --git a/src/room/commune/haulRequestManager.ts b/src/room/commune/haulRequestManager.ts index c7342bf05..c126339eb 100644 --- a/src/room/commune/haulRequestManager.ts +++ b/src/room/commune/haulRequestManager.ts @@ -4,10 +4,8 @@ import { CombatRequestKeys, RoomMemoryKeys, } from 'international/constants' -import { advancedFindDistance, randomTick } from 'utils/utils' -import { collectiveManager } from 'international/collective' +import { randomTick } from 'utils/utils' import { CommuneManager } from './commune' -import { statsManager } from 'international/statsManager' export class HaulRequestManager { communeManager: CommuneManager diff --git a/src/room/commune/observer.ts b/src/room/commune/observer.ts index fe00f9e01..f7c12966c 100644 --- a/src/room/commune/observer.ts +++ b/src/room/commune/observer.ts @@ -1,7 +1,8 @@ import { customLog } from 'utils/logging' -import { makeRoomCoord, randomTick, roomNameFromRoomXY } from 'utils/utils' +import { randomTick } from 'utils/utils' import { CommuneManager } from './commune' import { RoomMemoryKeys } from 'international/constants' +import { roomNameUtils } from 'room/roomNameUtils' export class ObserverManager { communeManager: CommuneManager @@ -27,7 +28,7 @@ export class ObserverManager { } findScoutTarget() { - const roomCoord = makeRoomCoord(this.communeManager.room.name) + const roomCoord = roomNameUtils.pack(this.communeManager.room.name) let highestScore = 0 @@ -38,7 +39,7 @@ export class ObserverManager { for (let x = x1; x <= x2; x += 1) { for (let y = y1; y <= y2; y += 1) { - const roomName = roomNameFromRoomXY(x, y) + const roomName = roomNameUtils.unpackXY(x, y) // Ensure the statuses are the same diff --git a/src/room/commune/remotesManager.ts b/src/room/commune/remotesManager.ts index 2305d4144..62e532aa3 100644 --- a/src/room/commune/remotesManager.ts +++ b/src/room/commune/remotesManager.ts @@ -9,7 +9,6 @@ import { maxRemotePathDistance, } from 'international/constants' import { - advancedFindDistance, findCarryPartsRequired, findLowestScore, getRange, @@ -380,13 +379,13 @@ export class RemotesManager { } private isRemoteBlocked(remoteName: string) { - const safeDistance = advancedFindDistance(this.communeManager.room.name, remoteName, { + const safeDistance = roomNameUtils.advancedFindDistance(this.communeManager.room.name, remoteName, { typeWeights: remoteTypeWeights, avoidDanger: true, }) if (safeDistance > maxRemoteRoomDistance) return true - const distance = advancedFindDistance(this.communeManager.room.name, remoteName, { + const distance = roomNameUtils.advancedFindDistance(this.communeManager.room.name, remoteName, { typeWeights: remoteTypeWeights, }) if (Math.round(safeDistance * 0.75) > distance) return true diff --git a/src/room/commune/workRequest.ts b/src/room/commune/workRequest.ts index f1be8a94d..960e2464e 100644 --- a/src/room/commune/workRequest.ts +++ b/src/room/commune/workRequest.ts @@ -5,7 +5,7 @@ import { RoomTypes, customColors, } from 'international/constants' -import { advancedFindDistance, randomTick } from 'utils/utils' +import { randomTick } from 'utils/utils' import { collectiveManager } from 'international/collective' import { CommuneManager } from './commune' import { statsManager } from 'international/statsManager' diff --git a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts index 6613a591e..1808a46dd 100644 --- a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts @@ -410,7 +410,7 @@ PowerCreep.prototype.createMoveRequest = Creep.prototype.createMoveRequest = fun if (this.spawning) { const spawn = findObjectWithID(this.spawnID) - if (!spawn) throw Error('Could not find spawn with ID ' + this.spawnID) + if (!spawn) throw Error('Could not find spawn with ID ' + this.spawnID + ', ' + this.name + ', ' + this.ticksToLive) // Ensure we aren't using the default direction diff --git a/src/room/room.ts b/src/room/room.ts index 27bff2cc0..bda3dab4d 100644 --- a/src/room/room.ts +++ b/src/room/room.ts @@ -26,7 +26,6 @@ import { roomTypesUsedForStats, } from 'international/constants' import { - advancedFindDistance, findClosestObject, findHighestScore, findObjectWithID, @@ -36,12 +35,9 @@ import { getRange, getRangeXY, isAlly, - makeRoomCoord, packAsNum, packXYAsNum, randomTick, - roomNameFromRoomCoord, - roomNameFromRoomXY, sortBy, } from 'utils/utils' import { CommuneManager } from './commune/commune' diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index f24706236..8c7a6dd1d 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -28,7 +28,6 @@ import { RemoteResourcePathTypes, } from 'international/constants' import { - advancedFindDistance, areCoordsEqual, createPosMap, findAdjacentCoordsToCoord, @@ -251,7 +250,7 @@ Room.prototype.scoutMyRemote = function (scoutingRoom) { // Find distance from scoutingRoom if (distance <= maxRemoteRoomDistance) - distance = advancedFindDistance(scoutingRoom.name, this.name, { + distance = roomNameUtils.advancedFindDistance(scoutingRoom.name, this.name, { typeWeights: { keeper: Infinity, enemy: Infinity, diff --git a/src/room/roomNameUtils.ts b/src/room/roomNameUtils.ts index 2c8881dc0..49627422a 100644 --- a/src/room/roomNameUtils.ts +++ b/src/room/roomNameUtils.ts @@ -13,15 +13,12 @@ import { } from 'international/constants' import { collectiveManager } from 'international/collective' import { - advancedFindDistance, findAdjacentCoordsToCoord, forAdjacentCoords, forRoomNamesAroundRangeXY, getRange, - makeRoomCoord, packAsNum, packXYAsNum, - roomNameFromRoomXY, } from 'utils/utils' import { unpackPosAt } from 'other/codec' import { CommuneManager } from './commune/commune' @@ -37,7 +34,7 @@ type FloodForCoordCheck = ( generation?: number, ) => boolean | Result.stop -export const roomNameUtils = { +export class RoomNameUtils { abandonRemote(roomName: string, time: number) { const roomMemory = Memory.rooms[roomName] @@ -45,7 +42,7 @@ export const roomNameUtils = { roomMemory[RoomMemoryKeys.abandonRemote] = time delete roomMemory[RoomMemoryKeys.recursedAbandonment] - }, + } findDynamicScore(roomName: string) { let dynamicScore = 0 @@ -53,14 +50,14 @@ export const roomNameUtils = { let communeScore = 0 let allyScore = 0 - const roomCoord = makeRoomCoord(roomName) + const roomCoord = this.pack(roomName) forRoomNamesAroundRangeXY(roomCoord.x, roomCoord.y, dynamicScoreRoomRange, (x, y) => { - const searchRoomName = roomNameFromRoomXY(x, y) + const searchRoomName = this.unpackXY(x, y) const searchRoomMemory = Memory.rooms[searchRoomName] if (!searchRoomMemory) return if (searchRoomMemory[RoomMemoryKeys.type] === RoomTypes.enemy) { - const score = advancedFindDistance(roomName, searchRoomName) + const score = this.advancedFindDistance(roomName, searchRoomName) if (score <= closestEnemy) return closestEnemy = score @@ -74,7 +71,7 @@ export const roomNameUtils = { const score = Math.pow( Math.abs( - advancedFindDistance(roomName, searchRoomName) - preferredCommuneRange, + this.advancedFindDistance(roomName, searchRoomName) - preferredCommuneRange, ), 1.8, ) + @@ -89,7 +86,7 @@ export const roomNameUtils = { const score = Math.pow( Math.abs( - advancedFindDistance(roomName, searchRoomName) - preferredCommuneRange, + this.advancedFindDistance(roomName, searchRoomName) - preferredCommuneRange, ), 1.5, ) + @@ -117,7 +114,7 @@ export const roomNameUtils = { roomMemory[RoomMemoryKeys.dynamicScoreUpdate] = Game.time return dynamicScore - }, + } floodFillFor(roomName: string, seeds: Coord[], coordCheck: FloodForCoordCheck) { const visitedCoords = new Uint8Array(2500) @@ -156,8 +153,8 @@ export const roomNameUtils = { } return false - }, - floodFillCardinalFor() {}, + } + floodFillCardinalFor() {} isSourceSpawningStructure(roomName: string, structure: StructureExtension | StructureSpawn) { const packedSourceHarvestPositions = Memory.rooms[roomName][RoomMemoryKeys.communeSourceHarvestPositions] @@ -168,7 +165,7 @@ export const roomNameUtils = { } return false - }, + } /** * Removes roomType-based values in the room's memory that don't match its type */ @@ -184,7 +181,7 @@ export const roomNameUtils = { delete roomMemory[key as unknown as keyof RoomMemory] } - }, + } /** * Finds the name of the closest commune, exluding the specified roomName */ @@ -202,14 +199,14 @@ export const roomNameUtils = { Game.map.getRoomLinearDistance(roomName, a) - Game.map.getRoomLinearDistance(roomName, b), )[0] - }, + } findClosestClaimType(roomName: string) { return Array.from(collectiveManager.communes).sort( (a, b) => Game.map.getRoomLinearDistance(roomName, a) - Game.map.getRoomLinearDistance(roomName, b), )[0] - }, + } updateCreepsOfRemoteName(remoteName: string, communeManager: CommuneManager) { const remoteMemory = Memory.rooms[remoteName] @@ -223,7 +220,7 @@ export const roomNameUtils = { for (const index in remoteMemory[RoomMemoryKeys.remoteSources]) { communeManager.remoteSourceHarvesters[remoteName].push([]) } - }, + } diagonalCoords(roomName: string, commune: Room) { const anchor = commune.roomManager.anchor @@ -257,4 +254,68 @@ export const roomNameUtils = { return diagonalCoords } + pack(roomName: string) { + // Find the numbers in the room's name + + let [name, cx, x, cy, y] = roomName.match(/^([WE])([0-9]+)([NS])([0-9]+)$/) + + return { + x: cx === 'W' ? ~x : parseInt(x), + y: cy === 'S' ? ~y : parseInt(y), + } + } + + unpackXY(x: number, y: number) { + return ( + (x < 0 ? 'W' + String(~x) : 'E' + String(x)) + (y < 0 ? 'S' + String(~y) : 'N' + String(y)) + ) + } + + unpack(roomCoord: RoomCoord) { + return this.unpackXY(roomCoord.x, roomCoord.y) + } + /** + * Finds the distance between two rooms based on walkable exits while avoiding rooms with specified types + */ + advancedFindDistance( + originRoomName: string, + goalRoomName: string, + opts: { + typeWeights?: { [key: string]: number } + avoidDanger?: boolean + } = {}, + ) { + // Try to find a route from the origin room to the goal room + + const findRouteResult = Game.map.findRoute(originRoomName, goalRoomName, { + routeCallback(roomName) { + + // If the goal is in the room + if (roomName === goalRoomName) return 1 + + const roomMemory = Memory.rooms[roomName] + if (!roomMemory) return 10 + + if (opts.avoidDanger && roomMemory[RoomMemoryKeys.type] === RoomTypes.remote) { + if (roomMemory[RoomMemoryKeys.abandonRemote]) { + return 10 + } + } + + // If the type is in typeWeights, inform the weight for the type + if (opts.typeWeights && opts.typeWeights[roomMemory[RoomMemoryKeys.type]]) + return opts.typeWeights[roomMemory[RoomMemoryKeys.type]] + + return 1 + }, + }) + + // If findRouteResult didn't work, inform a path length of Infinity + + if (findRouteResult === ERR_NO_PATH) return Infinity + + return findRouteResult.length + } } + +export const roomNameUtils = new RoomNameUtils() diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 9560fe848..2d18bb3f6 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -137,57 +137,6 @@ export function newID() { return (Memory.ID += 1).toString() } -interface AdvancedFindDistanceOpts { - typeWeights?: { [key: string]: number } - avoidDanger?: boolean -} - -/** - * Finds the distance between two rooms based on walkable exits while avoiding rooms with specified types - */ -export function advancedFindDistance( - originRoomName: string, - goalRoomName: string, - opts: AdvancedFindDistanceOpts = {}, -) { - // Try to find a route from the origin room to the goal room - - const findRouteResult = Game.map.findRoute(originRoomName, goalRoomName, { - routeCallback(roomName) { - const roomMemory = Memory.rooms[roomName] - if (!roomMemory) { - if (roomName === goalRoomName) return 1 - return 50 - } - - if (opts.avoidDanger && roomMemory[RoomMemoryKeys.type] === RoomTypes.remote) { - if (roomMemory[RoomMemoryKeys.abandonRemote]) { - return 30 - } - } - - // If the goal is in the room - - if (roomName === goalRoomName) return 1 - - // If the type is in typeWeights, inform the weight for the type - - if (opts.typeWeights && opts.typeWeights[roomMemory[RoomMemoryKeys.type]]) - return opts.typeWeights[roomMemory[RoomMemoryKeys.type]] - - return 1 - }, - }) - - // If findRouteResult didn't work, inform a path length of Infinity - - if (findRouteResult === ERR_NO_PATH) return Infinity - - // inform the path's length - - return findRouteResult.length -} - /** * * @param distance The number of tiles between the hauling target and source @@ -557,27 +506,6 @@ export function scalePriority( return (amount / capacity) * multiplier } -export function makeRoomCoord(roomName: string) { - // Find the numbers in the room's name - - let [name, cx, x, cy, y] = roomName.match(/^([WE])([0-9]+)([NS])([0-9]+)$/) - - return { - x: cx === 'W' ? ~x : parseInt(x), - y: cy === 'S' ? ~y : parseInt(y), - } -} - -export function roomNameFromRoomXY(x: number, y: number) { - return ( - (x < 0 ? 'W' + String(~x) : 'E' + String(x)) + (y < 0 ? 'S' + String(~y) : 'N' + String(y)) - ) -} - -export function roomNameFromRoomCoord(roomCoord: RoomCoord) { - return roomNameFromRoomXY(roomCoord.x, roomCoord.y) -} - export function forRoomNamesInRangeXY( startX: number, startY: number, From c21fc4583180d52db77079a9fd4933f1ecaf0a4a Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 26 Dec 2023 23:35:57 -0800 Subject: [PATCH 021/190] optimize customPathFinder --- src/international/customPathFinder.ts | 729 ++++++++++++++------------ 1 file changed, 394 insertions(+), 335 deletions(-) diff --git a/src/international/customPathFinder.ts b/src/international/customPathFinder.ts index b73c82106..7cfcd2c62 100644 --- a/src/international/customPathFinder.ts +++ b/src/international/customPathFinder.ts @@ -22,6 +22,11 @@ export interface PathGoal { range: number } +export type RoomRoute = { + exit: ExitConstant + room: string +}[] + export interface CustomPathFinderArgs { /** * Not required when pathing for creeps @@ -99,65 +104,100 @@ export interface CustomPathFinderArgs { minReservedCoordType?: ReservedCoordTypes } -export function customFindPath(args: CustomPathFinderArgs) { - const allowedRoomNames = new Set([args.origin.roomName]) +export class CustomPathFinder { - if (generateRoute(args, allowedRoomNames) === Result.fail) return [] - weightStructurePlans(args, allowedRoomNames) - return generatePath(args, allowedRoomNames) -} + findPath(args: CustomPathFinderArgs) { -function generateRoute(args: CustomPathFinderArgs, allowedRoomNames: Set) { - /** - * Room names for goals that have already been searched and thus don't require another one - */ - const searchedGoalRoomNames: Set = new Set() + const allowedRoomNames = this.findAllowedRooms(args) + if (allowedRoomNames === Result.fail) return [] - for (const goal of args.goals) { - // If the goal is in the same room as the origin + this.weightStructurePlans(args, allowedRoomNames) - if (args.origin.roomName === goal.pos.roomName) continue + const result = this.generatePath(args, allowedRoomNames) + return result + } - if (searchedGoalRoomNames.has(goal.pos.roomName)) continue - searchedGoalRoomNames.add(goal.pos.roomName) + private findAllowedRooms(args: CustomPathFinderArgs) { - function weightRoom(roomName: string) { - const roomMemory = Memory.rooms[roomName] - if (!roomMemory) { - if (roomName === goal.pos.roomName) return 1 - return Infinity - } + const allowedRoomNames = new Set([args.origin.roomName]) - // Avoid dangerous rooms if we are told to and the danger is persistent - if ( - args.avoidDanger && - roomMemory[RoomMemoryKeys.danger] && - roomMemory[RoomMemoryKeys.danger] >= Game.time - ) - return Infinity + // If there is one goal + if (args.goals.length === 1) { + return this.singleGoalRoute(args, allowedRoomNames) + } - // If the goal is in the room - if (roomName === goal.pos.roomName) return 1 + // There are multiple goals - // If the type is in typeWeights, inform the weight for the type - if (args.typeWeights && args.typeWeights[roomMemory[RoomMemoryKeys.type] as 0]) - return args.typeWeights[roomMemory[RoomMemoryKeys.type] as 0] + return this.multiGoalRoute(args, allowedRoomNames) + } - return 1 - } + private singleGoalRoute(args: CustomPathFinderArgs, allowedRoomNames: Set) { + + const goal = args.goals[0] + // If the goal is in the same room as the origin + if (args.origin.roomName === goal.pos.roomName) return allowedRoomNames // Construct route by searching through rooms const route = Game.map.findRoute(args.origin.roomName, goal.pos.roomName, { // Essentially a costMatrix for the rooms, priority is for the lower values. Infinity is impassible - routeCallback: weightRoom, + routeCallback: () => this.weightRoom(args.origin.roomName, args, goal), }) // If a route can't be found - if (route === ERR_NO_PATH) return Result.fail + // A viable route was found + + this.recordRoutesAllowedRooms(route, allowedRoomNames, args, goal) + return allowedRoomNames + } + + private multiGoalRoute(args: CustomPathFinderArgs, allowedRoomNames: Set) { + + /** + * Room names for goals that have already been searched and thus don't require another one + */ + const searchedGoalRoomNames: Set = new Set() + let shortestRoute = Infinity + + for (const goal of args.goals) { + // If the goal is in the same room as the origin + if (args.origin.roomName === goal.pos.roomName) continue + + if (searchedGoalRoomNames.has(goal.pos.roomName)) continue + searchedGoalRoomNames.add(goal.pos.roomName) + + const minDistance = Game.map.getRoomLinearDistance(args.origin.roomName, goal.pos.roomName) + if (minDistance >= shortestRoute) continue + + // Construct route by searching through rooms + + const route = Game.map.findRoute(args.origin.roomName, goal.pos.roomName, { + // Essentially a costMatrix for the rooms, priority is for the lower values. Infinity is impassible + + routeCallback: () => this.weightRoom(args.origin.roomName, args, goal), + }) + + // If a route can't be found + if (route === ERR_NO_PATH) continue + + this.recordRoutesAllowedRooms(route, allowedRoomNames, args, goal) + + shortestRoute = route.length + } + + // If no viable routes were found + if (shortestRoute === Infinity) { + return Result.fail + } + // Otherwise, viable routes were found + return allowedRoomNames + } + + private recordRoutesAllowedRooms(route: RoomRoute, allowedRoomNames: Set, args: CustomPathFinderArgs, goal: PathGoal) { + for (const roomRoute of route) { allowedRoomNames.add(roomRoute.room) @@ -166,454 +206,473 @@ function generateRoute(args: CustomPathFinderArgs, allowedRoomNames: Set const roomName = exits[exit as ExitKey] if (allowedRoomNames.has(roomName)) continue - if (weightRoom(roomName) === Infinity) continue + + const weight = this.weightRoom(roomName, args, goal) + if (weight === Infinity) continue allowedRoomNames.add(roomName) } } } - return Result.success -} + private weightRoom(roomName: string, args: CustomPathFinderArgs, goal: PathGoal) { + const roomMemory = Memory.rooms[roomName] + if (!roomMemory) { + if (roomName === goal.pos.roomName) return 1 + return Infinity + } + + // Avoid dangerous rooms if we are told to and the danger is persistent + if ( + args.avoidDanger && + roomMemory[RoomMemoryKeys.danger] && + roomMemory[RoomMemoryKeys.danger] >= Game.time + ) + return Infinity -function weightStructurePlans(args: CustomPathFinderArgs, allowedRoomNames: Set) { - if (!args.weightCommuneStructurePlans) return + // If the goal is in the room + if (roomName === goal.pos.roomName) return 1 - if (!args.weightCoords) args.weightCoords = {} + // If the type is in typeWeights, inform the weight for the type + if (args.typeWeights && args.typeWeights[roomMemory[RoomMemoryKeys.type] as 0]) + return args.typeWeights[roomMemory[RoomMemoryKeys.type] as 0] - for (const roomName of allowedRoomNames) { - if (!args.weightCoords[roomName]) args.weightCoords[roomName] = {} + return 1 } - for (const roomName of allowedRoomNames) { - if (weightCommuneStructurePlans(args, roomName)) continue - if (weightRemoteStructurePlans(args, roomName)) continue + + private weightStructurePlans(args: CustomPathFinderArgs, allowedRoomNames: Set) { + if (!args.weightCommuneStructurePlans) return + + if (!args.weightCoords) args.weightCoords = {} + + for (const roomName of allowedRoomNames) { + if (!args.weightCoords[roomName]) args.weightCoords[roomName] = {} + } + + for (const roomName of allowedRoomNames) { + if (this.weightCommuneStructurePlans(args, roomName)) continue + if (this.weightRemoteStructurePlans(args, roomName)) continue + } } -} -function weightCommuneStructurePlans(args: CustomPathFinderArgs, roomName: string) { - if (!args.weightCommuneStructurePlans) return false + private weightCommuneStructurePlans(args: CustomPathFinderArgs, roomName: string) { + if (!args.weightCommuneStructurePlans) return false - const roomMemory = Memory.rooms[roomName] - if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.commune) return false + const roomMemory = Memory.rooms[roomName] + if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.commune) return false - const room = Game.rooms[roomName] - if (!room) return false + const room = Game.rooms[roomName] + if (!room) return false - // Weight structures + // Weight structures - const basePlans = room.roomManager.basePlans + const basePlans = room.roomManager.basePlans - for (const packedCoord in basePlans.map) { - const coordData = basePlans.map[packedCoord] + for (const packedCoord in basePlans.map) { + const coordData = basePlans.map[packedCoord] - for (const data of coordData) { - const weight = impassibleStructureTypesSet.has(data.structureType) ? 255 : 1 + for (const data of coordData) { + const weight = impassibleStructureTypesSet.has(data.structureType) ? 255 : 1 - const currentWeight = args.weightCoords[roomName][packedCoord] || 0 - args.weightCoords[roomName][packedCoord] = Math.max(weight, currentWeight) + const currentWeight = args.weightCoords[roomName][packedCoord] || 0 + args.weightCoords[roomName][packedCoord] = Math.max(weight, currentWeight) + } } - } - // Weight potential and actual stationary positions + // Weight potential and actual stationary positions - for (const index in room.find(FIND_SOURCES)) { - // Loop through each position of harvestPositions, have creeps prefer to avoid + for (const index in room.find(FIND_SOURCES)) { + // Loop through each position of harvestPositions, have creeps prefer to avoid - for (const pos of room.roomManager.sourceHarvestPositions[index]) { - const packedCoord = packCoord(pos) + for (const pos of room.roomManager.sourceHarvestPositions[index]) { + const packedCoord = packCoord(pos) - const currentWeight = args.weightCoords[roomName][packedCoord] || 0 - args.weightCoords[roomName][packedCoord] = Math.max(20, currentWeight) + const currentWeight = args.weightCoords[roomName][packedCoord] || 0 + args.weightCoords[roomName][packedCoord] = Math.max(20, currentWeight) + } } - } - if (room.roomManager.anchor) { - // The last upgrade position should be the deliver pos, which we want to weight normal + if (room.roomManager.anchor) { + // The last upgrade position should be the deliver pos, which we want to weight normal - for (const pos of room.roomManager.upgradePositions) { - const packedCoord = packCoord(pos) + for (const pos of room.roomManager.upgradePositions) { + const packedCoord = packCoord(pos) - const currentWeight = args.weightCoords[roomName][packedCoord] || 0 - args.weightCoords[roomName][packedCoord] = Math.max(20, currentWeight) - } + const currentWeight = args.weightCoords[roomName][packedCoord] || 0 + args.weightCoords[roomName][packedCoord] = Math.max(20, currentWeight) + } - for (const pos of room.roomManager.mineralHarvestPositions) { - const packedCoord = packCoord(pos) + for (const pos of room.roomManager.mineralHarvestPositions) { + const packedCoord = packCoord(pos) - const currentWeight = args.weightCoords[roomName][packedCoord] || 0 - args.weightCoords[roomName][packedCoord] = Math.max(20, currentWeight) - } + const currentWeight = args.weightCoords[roomName][packedCoord] || 0 + args.weightCoords[roomName][packedCoord] = Math.max(20, currentWeight) + } - const stampAnchors = room.roomManager.stampAnchors - if (stampAnchors) { - const packedCoord = packCoord(stampAnchors.hub[0]) + const stampAnchors = room.roomManager.stampAnchors + if (stampAnchors) { + const packedCoord = packCoord(stampAnchors.hub[0]) - const currentWeight = args.weightCoords[roomName][packedCoord] || 0 - args.weightCoords[roomName][packedCoord] = Math.max(20, currentWeight) - } + const currentWeight = args.weightCoords[roomName][packedCoord] || 0 + args.weightCoords[roomName][packedCoord] = Math.max(20, currentWeight) + } - // Loop through each position of fastFillerPositions, have creeps prefer to avoid + // Loop through each position of fastFillerPositions, have creeps prefer to avoid - for (const pos of room.roomManager.fastFillerPositions) { - const packedCoord = packCoord(pos) + for (const pos of room.roomManager.fastFillerPositions) { + const packedCoord = packCoord(pos) - const currentWeight = args.weightCoords[roomName][packedCoord] || 0 - args.weightCoords[roomName][packedCoord] = Math.max(20, currentWeight) + const currentWeight = args.weightCoords[roomName][packedCoord] || 0 + args.weightCoords[roomName][packedCoord] = Math.max(20, currentWeight) + } } - } - return true -} + return true + } -function weightRemoteStructurePlans(args: CustomPathFinderArgs, roomName: string) { - if (!args.weightRemoteStructurePlans.remoteResourcePathType) return false + private weightRemoteStructurePlans(args: CustomPathFinderArgs, roomName: string) { + if (!args.weightRemoteStructurePlans.remoteResourcePathType) return false - const roomMemory = Memory.rooms[roomName] - if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.remote) return false + const roomMemory = Memory.rooms[roomName] + if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.remote) return false - for (const packedPath of roomMemory[args.weightRemoteStructurePlans.remoteResourcePathType]) { - const path = unpackPosList(packedPath) + for (const packedPath of roomMemory[args.weightRemoteStructurePlans.remoteResourcePathType]) { + const path = unpackPosList(packedPath) - for (const pos of path) { - if (!args.weightCoords[pos.roomName]) args.weightCoords[pos.roomName] = {} - args.weightCoords[pos.roomName][packCoord(pos)] = 1 + for (const pos of path) { + if (!args.weightCoords[pos.roomName]) args.weightCoords[pos.roomName] = {} + args.weightCoords[pos.roomName][packCoord(pos)] = 1 + } } - } - // Prefer to avoid the best source harvest pos - for (const packedPositions of roomMemory[RoomMemoryKeys.remoteSourceHarvestPositions]) { - const pos = unpackPosAt(packedPositions, 0) - const packedCoord = packCoord(pos) + // Prefer to avoid the best source harvest pos + for (const packedPositions of roomMemory[RoomMemoryKeys.remoteSourceHarvestPositions]) { + const pos = unpackPosAt(packedPositions, 0) + const packedCoord = packCoord(pos) - const currentWeight = args.weightCoords[roomName][packedCoord] || 0 - args.weightCoords[roomName][packedCoord] = Math.max(20, currentWeight) - } + const currentWeight = args.weightCoords[roomName][packedCoord] || 0 + args.weightCoords[roomName][packedCoord] = Math.max(20, currentWeight) + } - // Prefer to avoid all potential reservation positions + // Prefer to avoid all potential reservation positions - const positions = unpackPosList(roomMemory[RoomMemoryKeys.remoteControllerPositions]) + const positions = unpackPosList(roomMemory[RoomMemoryKeys.remoteControllerPositions]) - for (const pos of positions) { - const packedCoord = packCoord(pos) - const currentWeight = args.weightCoords[roomName][packedCoord] || 0 - args.weightCoords[roomName][packedCoord] = Math.max(20, currentWeight) - } + for (const pos of positions) { + const packedCoord = packCoord(pos) + const currentWeight = args.weightCoords[roomName][packedCoord] || 0 + args.weightCoords[roomName][packedCoord] = Math.max(20, currentWeight) + } - return true -} + return true + } -function generatePath(args: CustomPathFinderArgs, allowedRoomNames: Set) { - args.plainCost = args.plainCost || defaultPlainCost - args.swampCost = args.swampCost || defaultSwampCost - if (args.avoidKeeperLairs === undefined) args.avoidKeeperLairs = true + private generatePath(args: CustomPathFinderArgs, allowedRoomNames: Set) { + args.plainCost = args.plainCost || defaultPlainCost + args.swampCost = args.swampCost || defaultSwampCost + if (args.avoidKeeperLairs === undefined) args.avoidKeeperLairs = true - const originRoom: undefined | Room = Game.rooms[args.origin.roomName] - const maxRooms = args.maxRooms - ? Math.min(allowedRoomNames.size, args.maxRooms) - : allowedRoomNames.size - const pathFinderResult = PathFinder.search(args.origin, args.goals, { - plainCost: args.plainCost, - swampCost: args.swampCost, - maxRooms, - maxOps: Math.min(100000, (1 + maxRooms) * 2000), - heuristicWeight: 1, - flee: args.flee, + const originRoom: undefined | Room = Game.rooms[args.origin.roomName] + const maxRooms = args.maxRooms + ? Math.min(allowedRoomNames.size, args.maxRooms) + : allowedRoomNames.size + const pathFinderResult = PathFinder.search(args.origin, args.goals, { + plainCost: args.plainCost, + swampCost: args.swampCost, + maxRooms, + maxOps: Math.min(100000, (1 + maxRooms) * 2000), + heuristicWeight: 1, + flee: args.flee, - // Create costMatrixes for room tiles, where lower values are priority, and 255 or more is considered impassible + // Create costMatrixes for room tiles, where lower values are priority, and 255 or more is considered impassible - roomCallback(roomName) { - // If the room is not allowed + roomCallback(roomName) { + // If the room is not allowed - if (!allowedRoomNames.has(roomName)) return false + if (!allowedRoomNames.has(roomName)) return false - const room = Game.rooms[roomName] - const roomMemory = Memory.rooms[roomName] - let costs: CostMatrix - if (args.defaultCostMatrix) { - const defaultCosts = args.defaultCostMatrix(roomName) - if (defaultCosts) costs = defaultCosts - } else costs = new PathFinder.CostMatrix() + const room = Game.rooms[roomName] + const roomMemory = Memory.rooms[roomName] + let costs: CostMatrix + if (args.defaultCostMatrix) { + const defaultCosts = args.defaultCostMatrix(roomName) + if (defaultCosts) costs = defaultCosts + } else costs = new PathFinder.CostMatrix() - // If there is no route + // If there is no route - if (allowedRoomNames.size <= 1) { - // Configure y and loop through top exits + if (allowedRoomNames.size <= 1) { + // Configure y and loop through top exits - let x - let y = 0 - for (x = 0; x < roomDimensions; x += 1) costs.set(x, y, 255) + let x + let y = 0 + for (x = 0; x < roomDimensions; x += 1) costs.set(x, y, 255) - // Configure x and loop through left exits + // Configure x and loop through left exits - x = 0 - for (y = 0; y < roomDimensions; y += 1) costs.set(x, y, 255) + x = 0 + for (y = 0; y < roomDimensions; y += 1) costs.set(x, y, 255) - // Configure y and loop through bottom exits + // Configure y and loop through bottom exits - y = roomDimensions - 1 - for (x = 0; x < roomDimensions; x += 1) costs.set(x, y, 255) + y = roomDimensions - 1 + for (x = 0; x < roomDimensions; x += 1) costs.set(x, y, 255) - // Configure x and loop through right exits + // Configure x and loop through right exits - x = roomDimensions - 1 - for (y = 0; y < roomDimensions; y += 1) costs.set(x, y, 255) - } + x = roomDimensions - 1 + for (y = 0; y < roomDimensions; y += 1) costs.set(x, y, 255) + } - if (args.defaultCostMatrix) return costs + if (args.defaultCostMatrix) return costs - if (args.weightCoordMapsForRoomName) { + if (args.weightCoordMapsForRoomName) { - const coordMap = args.weightCoordMapsForRoomName(roomName) - if (coordMap) { + const coordMap = args.weightCoordMapsForRoomName(roomName) + if (coordMap) { - for (const index in coordMap) { - const packedCoord = parseInt(index) + for (const index in coordMap) { + const packedCoord = parseInt(index) - if (coordMap[packedCoord] === 0) continue + if (coordMap[packedCoord] === 0) continue - const coord = unpackNumAsCoord(packedCoord) - if (costs.get(coord.x, coord.y) === 255) continue + const coord = unpackNumAsCoord(packedCoord) + if (costs.get(coord.x, coord.y) === 255) continue - costs.set(coord.x, coord.y, coordMap[packedCoord]) + costs.set(coord.x, coord.y, coordMap[packedCoord]) + } } } - } - // Weight positions + // Weight positions - if (args.weightCoords && args.weightCoords[roomName]) { - for (const packedCoord in args.weightCoords[roomName]) { - const coord = unpackCoord(packedCoord) + if (args.weightCoords && args.weightCoords[roomName]) { + for (const packedCoord in args.weightCoords[roomName]) { + const coord = unpackCoord(packedCoord) - costs.set(coord.x, coord.y, args.weightCoords[roomName][packedCoord]) + costs.set(coord.x, coord.y, args.weightCoords[roomName][packedCoord]) + } } - } - // Weight coord maps + // Weight coord maps - if (args.weightCoordMaps) { - for (const coordMap of args.weightCoordMaps) { - for (const index in coordMap) { - const packedCoord = parseInt(index) + if (args.weightCoordMaps) { + for (const coordMap of args.weightCoordMaps) { + for (const index in coordMap) { + const packedCoord = parseInt(index) - if (coordMap[packedCoord] === 0) continue + if (coordMap[packedCoord] === 0) continue - const coord = unpackNumAsCoord(packedCoord) - if (costs.get(coord.x, coord.y) === 255) continue + const coord = unpackNumAsCoord(packedCoord) + if (costs.get(coord.x, coord.y) === 255) continue - costs.set(coord.x, coord.y, coordMap[packedCoord]) + costs.set(coord.x, coord.y, coordMap[packedCoord]) + } } } - } - // If we have no vision in the room + // If we have no vision in the room - if (!room) return costs + if (!room) return costs - // The pather is a creep, it isn't in a quad, and it hasn't already weighted roads + // The pather is a creep, it isn't in a quad, and it hasn't already weighted roads - if (args.creep) { + if (args.creep) { - const creepMemory = Memory.creeps[args.creep.name] || Memory.powerCreeps[args.creep.name] + const creepMemory = Memory.creeps[args.creep.name] || Memory.powerCreeps[args.creep.name] - if ( - (!creepMemory[CreepMemoryKeys.squadMembers] || - creepMemory[CreepMemoryKeys.squadMembers].length < 3) && - (!args.weightStructures || !args.weightStructures.road) - ) { - let roadCost = 1 - if (!creepMemory[CreepMemoryKeys.preferRoads]) roadCost = args.plainCost + if ( + (!creepMemory[CreepMemoryKeys.squadMembers] || + creepMemory[CreepMemoryKeys.squadMembers].length < 3) && + (!args.weightStructures || !args.weightStructures.road) + ) { + let roadCost = 1 + if (!creepMemory[CreepMemoryKeys.preferRoads]) roadCost = args.plainCost - for (const road of room.roomManager.structures.road) - costs.set(road.pos.x, road.pos.y, roadCost) + for (const road of room.roomManager.structures.road) + costs.set(road.pos.x, road.pos.y, roadCost) + } } - } - // If avoidStationaryPositions is requested + // If avoidStationaryPositions is requested - if (args.avoidStationaryPositions) { - for (const [packedCoord, reserveType] of room.roomManager.reservedCoords) { - if (args.minReservedCoordType && reserveType < args.minReservedCoordType) - continue + if (args.avoidStationaryPositions) { + for (const [packedCoord, reserveType] of room.roomManager.reservedCoords) { + if (args.minReservedCoordType && reserveType < args.minReservedCoordType) + continue - const coord = unpackCoord(packedCoord) - costs.set(coord.x, coord.y, reserveType * 5 + 5) + const coord = unpackCoord(packedCoord) + costs.set(coord.x, coord.y, reserveType * 5 + 5) + } } - } - // Weight structures + // Weight structures - for (const key in args.weightStructures) { - // Get the numeric value of the weight + for (const key in args.weightStructures) { + // Get the numeric value of the weight - const structureType = key as StructureConstant + const structureType = key as StructureConstant - for (const structure of room.roomManager.structures[structureType]) - costs.set( - structure.pos.x, - structure.pos.y, - args.weightStructures[structureType], - ) - } + for (const structure of room.roomManager.structures[structureType]) + costs.set( + structure.pos.x, + structure.pos.y, + args.weightStructures[structureType], + ) + } - for (const portal of room.roomManager.structures.portal) - costs.set(portal.pos.x, portal.pos.y, 255) + for (const portal of room.roomManager.structures.portal) + costs.set(portal.pos.x, portal.pos.y, 255) - // Loop trough each construction site belonging to an ally + // Loop trough each construction site belonging to an ally - for (const cSite of room.roomManager.notMyConstructionSites.ally) - costs.set(cSite.pos.x, cSite.pos.y, 255) + for (const cSite of room.roomManager.notMyConstructionSites.ally) + costs.set(cSite.pos.x, cSite.pos.y, 255) - // If there is a request to avoid enemy ranges + // If there is a request to avoid enemy ranges - avoidEnemyRanges() + avoidEnemyRanges() - function avoidEnemyRanges() { - // Stop if avoidEnemyRanges isn't specified + function avoidEnemyRanges() { + // Stop if avoidEnemyRanges isn't specified - if (!args.avoidEnemyRanges) return - if (room.controller && room.controller.safeMode && room.controller.my) return + if (!args.avoidEnemyRanges) return + if (room.controller && room.controller.safeMode && room.controller.my) return - for (const packedCoord of room.roomManager.enemyThreatCoords) { - const coord = unpackCoord(packedCoord) - costs.set(coord.x, coord.y, 255) + for (const packedCoord of room.roomManager.enemyThreatCoords) { + const coord = unpackCoord(packedCoord) + costs.set(coord.x, coord.y, 255) + } } - } - if (args.avoidKeeperLairs) { - if (roomMemory[RoomMemoryKeys.type] === RoomTypes.sourceKeeper) { - const lairCoords = unpackCoordList(roomMemory[RoomMemoryKeys.keeperLairCoords]) - for (const lairCoord of lairCoords) { - forCoordsAroundRange(lairCoord, 4, coord => { - costs.set(coord.x, coord.y, 255) - }) + if (args.avoidKeeperLairs) { + if (roomMemory[RoomMemoryKeys.type] === RoomTypes.sourceKeeper) { + const lairCoords = unpackCoordList(roomMemory[RoomMemoryKeys.keeperLairCoords]) + for (const lairCoord of lairCoords) { + forCoordsAroundRange(lairCoord, 4, coord => { + costs.set(coord.x, coord.y, 255) + }) + } } } - } - if (args.avoidNotMyCreeps && (!room.controller || !room.controller.safeMode)) { - for (const creep of room.roomManager.notMyCreeps.enemy) - costs.set(creep.pos.x, creep.pos.y, 255) - for (const creep of room.roomManager.notMyCreeps.ally) - costs.set(creep.pos.x, creep.pos.y, 255) + if (args.avoidNotMyCreeps && (!room.controller || !room.controller.safeMode)) { + for (const creep of room.roomManager.notMyCreeps.enemy) + costs.set(creep.pos.x, creep.pos.y, 255) + for (const creep of room.roomManager.notMyCreeps.ally) + costs.set(creep.pos.x, creep.pos.y, 255) - for (const creep of room.find(FIND_HOSTILE_POWER_CREEPS)) - costs.set(creep.pos.x, creep.pos.y, 255) - } + for (const creep of room.find(FIND_HOSTILE_POWER_CREEPS)) + costs.set(creep.pos.x, creep.pos.y, 255) + } - // If avoiding structures that can't be walked on is enabled + // If avoiding structures that can't be walked on is enabled - if (args.avoidImpassibleStructures) { - for (const rampart of room.roomManager.structures.rampart) { - // If the rampart is mine + if (args.avoidImpassibleStructures) { + for (const rampart of room.roomManager.structures.rampart) { + // If the rampart is mine - if (rampart.my) { - // If there is no weight for my ramparts, iterate + if (rampart.my) { + // If there is no weight for my ramparts, iterate - if (!args.myRampartWeight) continue + if (!args.myRampartWeight) continue - // Otherwise, record rampart by the weight and iterate + // Otherwise, record rampart by the weight and iterate - costs.set(rampart.pos.x, rampart.pos.y, args.myRampartWeight) - continue - } + costs.set(rampart.pos.x, rampart.pos.y, args.myRampartWeight) + continue + } - // If the rampart is public and owned by an ally - // We don't want to try to walk through enemy public ramparts as it could trick our pathing + // If the rampart is public and owned by an ally + // We don't want to try to walk through enemy public ramparts as it could trick our pathing - if (rampart.isPublic && global.settings.allies.includes(rampart.owner.username)) - continue + if (rampart.isPublic && global.settings.allies.includes(rampart.owner.username)) + continue - // Otherwise set the rampart's pos as impassible + // Otherwise set the rampart's pos as impassible - costs.set(rampart.pos.x, rampart.pos.y, 255) - } + costs.set(rampart.pos.x, rampart.pos.y, 255) + } - // Loop through structureTypes of impassibleStructureTypes + // Loop through structureTypes of impassibleStructureTypes - for (const structureType of impassibleStructureTypes) { - for (const structure of room.roomManager.structures[structureType]) { - // Set pos as impassible + for (const structureType of impassibleStructureTypes) { + for (const structure of room.roomManager.structures[structureType]) { + // Set pos as impassible - costs.set(structure.pos.x, structure.pos.y, 255) - } + costs.set(structure.pos.x, structure.pos.y, 255) + } - for (const cSite of room.roomManager.cSites[structureType]) { - // Set pos as impassible + for (const cSite of room.roomManager.cSites[structureType]) { + // Set pos as impassible - costs.set(cSite.pos.x, cSite.pos.y, 255) + costs.set(cSite.pos.x, cSite.pos.y, 255) + } } } - } - // Stop if there are no cost matrixes to weight + // Stop if there are no cost matrixes to weight - if (args.defaultCostMatrixes) { - // Otherwise iterate through each x and y in the room + if (args.defaultCostMatrixes) { + // Otherwise iterate through each x and y in the room - for (let x = 0; x < roomDimensions; x += 1) { - for (let y = 0; y < roomDimensions; y += 1) { - // Loop through each costMatrix + for (let x = 0; x < roomDimensions; x += 1) { + for (let y = 0; y < roomDimensions; y += 1) { + // Loop through each costMatrix - for (const costMatrix of args.defaultCostMatrixes(roomName)) { - costs.set(x, y, costMatrix.get(x, y)) + for (const costMatrix of args.defaultCostMatrixes(roomName)) { + costs.set(x, y, costMatrix.get(x, y)) + } } } } - } - - // Inform the CostMatrix - - return costs - }, - }) - // If the pathFindResult is incomplete, inform an empty array + // Inform the CostMatrix - if (pathFinderResult.incomplete) { - customLog( - 'Incomplete Path', - `${args.origin} -> ${args.goals[0].pos} range: ${args.goals[0].range} goals: ${ - args.goals.length - } path len: ${pathFinderResult.path.length} allowed: ${Array.from(allowedRoomNames)}`, - { - type: LogTypes.warning, + return costs }, - ) + }) - visualizePath(pathFinderResult.path, customColors.red) - originRoom.errorVisual(args.origin) + // If the pathFindResult is incomplete, inform an empty array + + if (pathFinderResult.incomplete) { + customLog( + 'Incomplete Path', + `${args.origin} -> ${args.goals[0].pos} range: ${args.goals[0].range} goals: ${ + args.goals.length + } path len: ${pathFinderResult.path.length} allowed: ${Array.from(allowedRoomNames)}`, + { + type: LogTypes.warning, + }, + ) - let lastPos = args.origin + visualizePath(pathFinderResult.path, customColors.red) + originRoom.errorVisual(args.origin) - for (const goal of args.goals) { - // Ensure no visuals are generated outside of the origin room + let lastPos = args.origin - if (lastPos.roomName !== goal.pos.roomName) continue + for (const goal of args.goals) { + // Ensure no visuals are generated outside of the origin room - originRoom.visual.line(lastPos, goal.pos, { - color: customColors.red, - width: 0.15, - opacity: 0.3, - lineStyle: 'solid', - }) + if (lastPos.roomName !== goal.pos.roomName) continue - lastPos = goal.pos - } + originRoom.visual.line(lastPos, goal.pos, { + color: customColors.red, + width: 0.15, + opacity: 0.3, + lineStyle: 'solid', + }) - return [] - } - - // Otherwise inform the path from pathFinderResult - - return pathFinderResult.path -} + lastPos = goal.pos + } -export class CustomPathFinder { - findPath(args: CustomPathFinderArgs) { + return [] + } + // Otherwise inform the path from pathFinderResult + return pathFinderResult.path } } From 6d17c43f136c4f457933b62b8f6a8e3a3330ff27 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Wed, 27 Dec 2023 00:14:17 -0800 Subject: [PATCH 022/190] customPathFinder optimizations --- src/international/marketOrders.ts | 5 ++ src/other/profilerRegister.ts | 4 +- src/room/construction/communePlanner.ts | 46 +++++++++---------- .../creeps/creepPrototypes/creepFunctions.ts | 4 +- .../creepPrototypes/creepMoveFunctions.ts | 4 +- src/room/remotePlanner.ts | 46 +++++++++---------- src/room/room.ts | 16 +++---- src/room/roomFunctions.ts | 5 +- 8 files changed, 67 insertions(+), 63 deletions(-) diff --git a/src/international/marketOrders.ts b/src/international/marketOrders.ts index 4087e1115..08d85f76c 100644 --- a/src/international/marketOrders.ts +++ b/src/international/marketOrders.ts @@ -402,6 +402,11 @@ export class MarketManager { this.resourceHistory[resourceType][days] return avgPrice } + + decidePrice(resourceType: ResourceConstant, priority: number, startTick: number = Game.time) { + + + } } export const marketManager = new MarketManager() diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index 0ab7e6a8b..a62297c99 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -23,7 +23,6 @@ import { CreepOrganizer } from 'international/creepOrganizer' import { RequestsManager } from 'international/requests' import { SimpleAllies } from 'international/simpleAllies' import { PlayerManager } from 'international/players' -import { customFindPath } from 'international/customPathFinder' import { FlagManager } from 'international/flags' import { roomNameUtils } from 'room/roomNameUtils' import { creepUtils } from 'room/creeps/creepUtils' @@ -63,6 +62,7 @@ import { ConstructionSiteManager } from 'international/constructionSiteManager' import { TransactionsManager } from 'international/transactions' import { CommunePlanner } from 'room/construction/communePlanner' import { packBasePlanCoord, packCoord, packCoordList, packId, packIdList, packPos, packPosList, packRampartPlanCoord, packRoomName, packStampAnchors, packXYAsCoord, packXYAsPos, reversePosList, unpackBasePlanCoords, unpackCoord, unpackCoordAsPos, unpackCoordList, unpackCoordListAsPosList, unpackId, unpackIdList, unpackPos, unpackPosAt, unpackPosList, unpackRampartPlanCoord, unpackRoomName, unpackStampAnchors } from './codec' +import { CustomPathFinder } from 'international/customPathFinder' export function profilerRegister() { @@ -125,6 +125,7 @@ export function profilerRegister() { profiler.registerClass(HaulerSizeManager, 'HaulerSize') profiler.registerClass(RoomVisualsManager, 'RoomVisualsManager') profiler.registerClass(Operator, 'Operator') + profiler.registerClass(CustomPathFinder, 'CustomPathFinder') // Objects @@ -143,7 +144,6 @@ export function profilerRegister() { // Functions profiler.registerFN(originalLoop, 'loop') - profiler.registerFN(customFindPath, 'customFindPath') profiler.registerFN(outOfBucket, 'outOfBucket') // codec functions diff --git a/src/room/construction/communePlanner.ts b/src/room/construction/communePlanner.ts index 308c484ba..ba3353546 100644 --- a/src/room/construction/communePlanner.ts +++ b/src/room/construction/communePlanner.ts @@ -60,7 +60,7 @@ import { RoomManager } from '../room' import { BasePlans } from './basePlans' import { RampartPlans } from './rampartPlans' import { minCutToExit } from './minCut' -import { customFindPath } from 'international/customPathFinder' +import { customPathFinder } from 'international/customPathFinder' import { towerFunctions } from '../commune/towers' const unprotectedCoordWeight = defaultRoadPlanningPlainCost * 16 @@ -637,7 +637,7 @@ export class CommunePlanner { // Paths for grid groups for (const leaderCoord of groupLeaders) { - const path = customFindPath({ + const path = customPathFinder.findPath({ origin: new RoomPosition(leaderCoord.x, leaderCoord.y, this.room.name), goals: [{ pos: anchor, range: 3 }], weightCoordMaps: [this.weightedDiagonalCoords, this.gridCoords, this.baseCoords], @@ -713,7 +713,7 @@ export class CommunePlanner { // Paths for exit groups for (const group of exitGroups) { - const path = customFindPath({ + const path = customPathFinder.findPath({ origin: new RoomPosition(group[0].x, group[0].y, this.room.name), goals: [{ pos: anchor, range: 3 }], weightCoordMaps: [this.weightedDiagonalCoords, this.gridCoords], @@ -927,7 +927,7 @@ export class CommunePlanner { sortBy( sources, ({ pos }) => - customFindPath({ + customPathFinder.findPath({ origin: pos, goals: [ { @@ -992,7 +992,7 @@ export class CommunePlanner { sortBy( sourceHarvestPositions[i], origin => - customFindPath({ + customPathFinder.findPath({ origin, goals: [ { @@ -1020,7 +1020,7 @@ export class CommunePlanner { for (const i in this.communeSources) { const origin = sourceHarvestPositions[i][0] - const path = customFindPath({ + const path = customPathFinder.findPath({ origin: origin, goals: [ { @@ -1057,7 +1057,7 @@ export class CommunePlanner { sortBy( this.mineralHarvestPositions, origin => - customFindPath({ + customPathFinder.findPath({ origin, goals: [ { @@ -1070,7 +1070,7 @@ export class CommunePlanner { }).length, ) - const path = customFindPath({ + const path = customPathFinder.findPath({ origin: this.mineralHarvestPositions[0], goals: [{ pos: goal, range: 1 }], weightCoordMaps: [this.diagonalCoords, this.roadCoords], @@ -1117,7 +1117,7 @@ export class CommunePlanner { for (let i = 0; i < this.sourceHarvestPositions.length; i++) { const closestHarvestPos = this.sourceHarvestPositions[i][0] - const path = customFindPath({ + const path = customPathFinder.findPath({ origin: closestHarvestPos, goals: [ { @@ -1786,7 +1786,7 @@ export class CommunePlanner { let shortestPath: RoomPosition[] for (const source of sources) { - const path = customFindPath({ + const path = customPathFinder.findPath({ origin: source.pos, goals: [{ pos: this.room.controller.pos, range: 1 }], plainCost: defaultRoadPlanningPlainCost, @@ -1802,7 +1802,7 @@ export class CommunePlanner { // Avg path between sources, if more than 1 if (sources.length > 1) { - const path = customFindPath({ + const path = customPathFinder.findPath({ origin: sources[0].pos, goals: [{ pos: sources[1].pos, range: 1 }], plainCost: defaultRoadPlanningPlainCost, @@ -1856,7 +1856,7 @@ export class CommunePlanner { sortBy( sources, ({ pos }) => - customFindPath({ + customPathFinder.findPath({ origin: pos, goals: [ { @@ -1873,7 +1873,7 @@ export class CommunePlanner { sortBy( fastFillerCoords, ({ x, y }) => - customFindPath({ + customPathFinder.findPath({ origin: new RoomPosition( x + stampAnchor.x - stampOffset, y + stampAnchor.y - stampOffset, @@ -1982,7 +1982,7 @@ export class CommunePlanner { let closestSourceDistance = Infinity for (const source of this.room.find(FIND_SOURCES)) { - const range = customFindPath({ + const range = customPathFinder.findPath({ origin: source.pos, goals: [ { @@ -2005,7 +2005,7 @@ export class CommunePlanner { pathOrigin = closestSource.pos } - const path = customFindPath({ + const path = customPathFinder.findPath({ origin: pathOrigin, goals: [{ pos: fastFillerPos, range: 3 }], weightCoordMaps: [this.roadCoords], @@ -2086,7 +2086,7 @@ export class CommunePlanner { this.baseCoords[packAsNum(coord)] = 255 this.roadCoords[packAsNum(coord)] = 255 - const path = customFindPath({ + const path = customPathFinder.findPath({ origin: new RoomPosition(stampAnchor.x, stampAnchor.y, this.room.name), goals: [{ pos: fastFillerPos, range: 3 }], weightCoordMaps: [this.diagonalCoords, this.gridCoords, this.roadCoords], @@ -2198,7 +2198,7 @@ export class CommunePlanner { sortBy( this.outputLabCoords, ({ x, y }) => - customFindPath({ + customPathFinder.findPath({ origin: new RoomPosition(x, y, this.room.name), goals: [ { @@ -2259,7 +2259,7 @@ export class CommunePlanner { for (let i = this.stampAnchors.gridExtension.length - 1; i >= 0; i -= 5) { const coord = this.stampAnchors.gridExtension[i] - const path = customFindPath({ + const path = customPathFinder.findPath({ origin: new RoomPosition(coord.x, coord.y, this.room.name), goals: [{ pos: hubAnchorPos, range: 2 }], weightCoordMaps: [this.diagonalCoords, this.gridCoords, this.roadCoords], @@ -2285,7 +2285,7 @@ export class CommunePlanner { for (let i = this.communeSources.length - 1; i >= 0; i -= 1) { const origin = this.sourceHarvestPositions[i][0] - const path = customFindPath({ + const path = customPathFinder.findPath({ origin: origin, goals: [ { @@ -2306,7 +2306,7 @@ export class CommunePlanner { sourcePaths.push(path) } - const upgradePath = customFindPath({ + const upgradePath = customPathFinder.findPath({ origin: this.centerUpgradePos, goals: [ { @@ -2453,7 +2453,7 @@ export class CommunePlanner { this.room.name, ) - let path = customFindPath({ + let path = customPathFinder.findPath({ origin: hubAnchor, goals: [ { @@ -2793,7 +2793,7 @@ export class CommunePlanner { // Path from the hubAnchor to the cloestPosToAnchor - const path = customFindPath({ + const path = customPathFinder.findPath({ origin: new RoomPosition(closestCoord.x, closestCoord.y, this.room.name), goals: [{ pos: hubAnchorPos, range: 2 }], weightCoordMaps: [this.diagonalCoords, this.roadCoords, this.unprotectedCoords], @@ -3039,7 +3039,7 @@ export class CommunePlanner { for (const coord of this.bestTowerCoords) { const minRCL = this.basePlans.getXY(coord.x, coord.y)[0].minRCL - const path = customFindPath({ + const path = customPathFinder.findPath({ origin: new RoomPosition(coord.x, coord.y, this.room.name), goals: [ { diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index cd19b9986..e273e735e 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -54,11 +54,11 @@ import { } from 'other/codec' import { creepClasses } from '../creepClasses' import { statsManager } from 'international/statsManager' -import { customFindPath } from 'international/customPathFinder' import { creepUtils } from '../creepUtils' import { RoomManager } from 'room/room' import { CreepRoomLogisticsRequest, RoomLogisticsRequest } from 'types/roomRequests' import { customLog, stringifyLog } from 'utils/logging' +import { customPathFinder } from 'international/customPathFinder' Creep.prototype.update = function () {} @@ -1104,7 +1104,7 @@ Creep.prototype.findQuadBulldozeTargets = function (goalPos) { ) return this.memory[CreepMemoryKeys.quadBulldozeTargets] - const path = customFindPath({ + const path = customPathFinder.findPath({ origin: this.pos, goals: [ { diff --git a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts index 1808a46dd..e92539f08 100644 --- a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts @@ -15,7 +15,7 @@ import { communeCreepRoles, ReservedCoordTypes, } from 'international/constants' -import { customFindPath } from 'international/customPathFinder' +import { customPathFinder } from 'international/customPathFinder' import { collectiveManager } from 'international/collective' import { areCoordsEqual, @@ -340,7 +340,7 @@ PowerCreep.prototype.createMoveRequest = Creep.prototype.createMoveRequest = fun // Generate a new path - path = customFindPath(args) + path = customPathFinder.findPath(args) if (!path.length && !this.spawning) return Result.fail // Limit the path's length to the cacheAmount diff --git a/src/room/remotePlanner.ts b/src/room/remotePlanner.ts index d5fe3b280..b14419a7a 100644 --- a/src/room/remotePlanner.ts +++ b/src/room/remotePlanner.ts @@ -60,7 +60,7 @@ import { RoomManager } from './room' import { BasePlans } from './construction/basePlans' import { RampartPlans } from './construction/rampartPlans' import { minCutToExit } from './construction/minCut' -import { customFindPath } from 'international/customPathFinder' +import { customPathFinder } from 'international/customPathFinder' import { towerFunctions } from './commune/towers' const unprotectedCoordWeight = defaultRoadPlanningPlainCost * 16 @@ -627,7 +627,7 @@ export class RemotePlanner { // Paths for grid groups for (const leaderCoord of groupLeaders) { - const path = customFindPath({ + const path = customPathFinder.findPath({ origin: new RoomPosition(leaderCoord.x, leaderCoord.y, this.room.name), goals: [{ pos: anchor, range: 3 }], weightCoordMaps: [this.weightedDiagonalCoords, this.gridCoords, this.baseCoords], @@ -703,7 +703,7 @@ export class RemotePlanner { // Paths for exit groups for (const group of exitGroups) { - const path = customFindPath({ + const path = customPathFinder.findPath({ origin: new RoomPosition(group[0].x, group[0].y, this.room.name), goals: [{ pos: anchor, range: 3 }], weightCoordMaps: [this.weightedDiagonalCoords, this.gridCoords], @@ -917,7 +917,7 @@ export class RemotePlanner { sortBy( sources, ({ pos }) => - customFindPath({ + customPathFinder.findPath({ origin: pos, goals: [ { @@ -979,7 +979,7 @@ export class RemotePlanner { sortBy( sourceHarvestPositions[i], origin => - customFindPath({ + customPathFinder.findPath({ origin, goals: [ { @@ -1007,7 +1007,7 @@ export class RemotePlanner { for (const i in this.communeSources) { const origin = sourceHarvestPositions[i][0] - const path = customFindPath({ + const path = customPathFinder.findPath({ origin: origin, goals: [ { @@ -1044,7 +1044,7 @@ export class RemotePlanner { sortBy( this.mineralHarvestPositions, origin => - customFindPath({ + customPathFinder.findPath({ origin, goals: [ { @@ -1057,7 +1057,7 @@ export class RemotePlanner { }).length, ) - const path = customFindPath({ + const path = customPathFinder.findPath({ origin: this.mineralHarvestPositions[0], goals: [{ pos: goal, range: 1 }], weightCoordMaps: [this.diagonalCoords, this.roadCoords], @@ -1106,7 +1106,7 @@ export class RemotePlanner { for (let i = 0; i < this.sourceHarvestPositions.length; i++) { const closestHarvestPos = this.sourceHarvestPositions[i][0] - const path = customFindPath({ + const path = customPathFinder.findPath({ origin: closestHarvestPos, goals: [ { @@ -1779,7 +1779,7 @@ export class RemotePlanner { let shortestPath: RoomPosition[] for (const source of sources) { - const path = customFindPath({ + const path = customPathFinder.findPath({ origin: source.pos, goals: [{ pos: this.room.controller.pos, range: 1 }], plainCost: defaultRoadPlanningPlainCost, @@ -1795,7 +1795,7 @@ export class RemotePlanner { // Avg path between sources, if more than 1 if (sources.length > 1) { - const path = customFindPath({ + const path = customPathFinder.findPath({ origin: sources[0].pos, goals: [{ pos: sources[1].pos, range: 1 }], plainCost: defaultRoadPlanningPlainCost, @@ -1849,7 +1849,7 @@ export class RemotePlanner { sortBy( sources, ({ pos }) => - customFindPath({ + customPathFinder.findPath({ origin: pos, goals: [ { @@ -1866,7 +1866,7 @@ export class RemotePlanner { sortBy( fastFillerCoords, ({ x, y }) => - customFindPath({ + customPathFinder.findPath({ origin: new RoomPosition( x + stampAnchor.x - stampOffset, y + stampAnchor.y - stampOffset, @@ -1968,7 +1968,7 @@ export class RemotePlanner { let closestSourceDistance = Infinity for (const source of this.room.find(FIND_SOURCES)) { - const range = customFindPath({ + const range = customPathFinder.findPath({ origin: source.pos, goals: [ { @@ -1991,7 +1991,7 @@ export class RemotePlanner { pathOrigin = closestSource.pos } - const path = customFindPath({ + const path = customPathFinder.findPath({ origin: pathOrigin, goals: [{ pos: fastFillerPos, range: 3 }], weightCoordMaps: [this.roadCoords], @@ -2072,7 +2072,7 @@ export class RemotePlanner { this.baseCoords[packAsNum(coord)] = 255 this.roadCoords[packAsNum(coord)] = 255 - const path = customFindPath({ + const path = customPathFinder.findPath({ origin: new RoomPosition(stampAnchor.x, stampAnchor.y, this.room.name), goals: [{ pos: fastFillerPos, range: 3 }], weightCoordMaps: [this.diagonalCoords, this.gridCoords, this.roadCoords], @@ -2184,7 +2184,7 @@ export class RemotePlanner { sortBy( this.outputLabCoords, ({ x, y }) => - customFindPath({ + customPathFinder.findPath({ origin: new RoomPosition(x, y, this.room.name), goals: [ { @@ -2245,7 +2245,7 @@ export class RemotePlanner { for (let i = this.stampAnchors.gridExtension.length - 1; i >= 0; i -= 5) { const coord = this.stampAnchors.gridExtension[i] - const path = customFindPath({ + const path = customPathFinder.findPath({ origin: new RoomPosition(coord.x, coord.y, this.room.name), goals: [{ pos: hubAnchorPos, range: 2 }], weightCoordMaps: [this.diagonalCoords, this.gridCoords, this.roadCoords], @@ -2271,7 +2271,7 @@ export class RemotePlanner { for (let i = this.communeSources.length - 1; i >= 0; i -= 1) { const origin = this.sourceHarvestPositions[i][0] - const path = customFindPath({ + const path = customPathFinder.findPath({ origin: origin, goals: [ { @@ -2292,7 +2292,7 @@ export class RemotePlanner { sourcePaths.push(path) } - const upgradePath = customFindPath({ + const upgradePath = customPathFinder.findPath({ origin: this.centerUpgradePos, goals: [ { @@ -2436,7 +2436,7 @@ export class RemotePlanner { this.room.name, ) - let path = customFindPath({ + let path = customPathFinder.findPath({ origin: hubAnchor, goals: [ { @@ -2773,7 +2773,7 @@ export class RemotePlanner { // Path from the hubAnchor to the cloestPosToAnchor - const path = customFindPath({ + const path = customPathFinder.findPath({ origin: new RoomPosition(closestCoord.x, closestCoord.y, this.room.name), goals: [{ pos: hubAnchorPos, range: 2 }], weightCoordMaps: [this.diagonalCoords, this.roadCoords, this.unprotectedCoords], @@ -3004,7 +3004,7 @@ export class RemotePlanner { for (const coord of this.bestTowerCoords) { const minRCL = this.basePlans.getXY(coord.x, coord.y)[0].minRCL - const path = customFindPath({ + const path = customPathFinder.findPath({ origin: new RoomPosition(coord.x, coord.y, this.room.name), goals: [ { diff --git a/src/room/room.ts b/src/room/room.ts index bda3dab4d..595d23bd5 100644 --- a/src/room/room.ts +++ b/src/room/room.ts @@ -63,7 +63,7 @@ import { } from 'other/codec' import { BasePlans } from './construction/basePlans' import { RampartPlans } from './construction/rampartPlans' -import { PathGoal, customFindPath } from 'international/customPathFinder' +import { PathGoal, customPathFinder } from 'international/customPathFinder' import { roomNameUtils } from './roomNameUtils' import { collectiveManager } from 'international/collective' import { customLog } from 'utils/logging' @@ -308,7 +308,7 @@ export class RoomManager { sortBy( sources, ({ pos }) => - customFindPath({ + customPathFinder.findPath({ origin: pos, goals: [{ pos: anchor, range: 3 }], }).length, @@ -343,7 +343,7 @@ export class RoomManager { sortBy( positions, origin => - customFindPath({ + customPathFinder.findPath({ origin, goals: [{ pos: anchor, range: 3 }], }).length, @@ -368,7 +368,7 @@ export class RoomManager { for (const positions of packedRemoteSourceHarvestPositions) { const origin = unpackPosAt(positions, 0) - const path = customFindPath({ + const path = customPathFinder.findPath({ origin, goals: [{ pos: anchor, range: 3 }], typeWeights: remoteTypeWeights, @@ -432,7 +432,7 @@ export class RoomManager { for (const positions of packedRemoteSourceHarvestPositions) { const origin = unpackPosAt(positions, 0) - const path = customFindPath({ + const path = customPathFinder.findPath({ origin, goals: [{ pos: goalPos, range: 1 }], typeWeights: remoteTypeWeights, @@ -487,7 +487,7 @@ export class RoomManager { sortBy( positions, origin => - customFindPath({ + customPathFinder.findPath({ origin, goals: [{ pos: anchor, range: 3 }], }).length, @@ -506,7 +506,7 @@ export class RoomManager { if (!anchor) throw Error('No anchor for remote controller path' + this.room.name) const origin = unpackPosAt(packedRemoteControllerPositions, 0) - const path = customFindPath({ + const path = customPathFinder.findPath({ origin, goals: [{ pos: anchor, range: 3 }], typeWeights: remoteTypeWeights, @@ -763,7 +763,7 @@ export class RoomManager { sortBy( positions, origin => - customFindPath({ + customPathFinder.findPath({ origin, goals: [{ pos: anchor, range: 4 }], }).length, diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index 8c7a6dd1d..5ddffff9b 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -56,7 +56,6 @@ import { unpackPosList, } from 'other/codec' import { posix } from 'path' -import { customFindPath } from 'international/customPathFinder' import { playerManager } from 'international/players' import { roomNameUtils } from './roomNameUtils' import { customLog } from 'utils/logging' @@ -275,7 +274,7 @@ Room.prototype.scoutMyRemote = function (scoutingRoom) { // loop through sourceNames for (const source of this.find(FIND_SOURCES)) { - const path = customFindPath({ + const path = customPathFinder.findPath({ origin: source.pos, goals: [{ pos: anchor, range: 4 }], typeWeights: { @@ -309,7 +308,7 @@ Room.prototype.scoutMyRemote = function (scoutingRoom) { newSourceEfficaciesTotal += newSourceEfficacy } - const newReservationEfficacy = customFindPath({ + const newReservationEfficacy = customPathFinder.findPath({ origin: this.controller.pos, goals: [{ pos: anchor, range: 4 }], typeWeights: { From 1971426678d3ecc28ab30a2b237e56630af91fdc Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Wed, 27 Dec 2023 00:19:53 -0800 Subject: [PATCH 023/190] more profiler registering --- src/other/profilerRegister.ts | 23 ++++++++++----------- src/room/commune/terminal/marketUtils.ts | 2 +- src/room/creeps/creepUtils.ts | 26 +++++++++++++----------- 3 files changed, 26 insertions(+), 25 deletions(-) diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index a62297c99..87ecf9b35 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -18,16 +18,16 @@ import { DynamicSquad } from 'room/creeps/roleManagers/antifa/dynamicSquad' import { Duo } from 'room/creeps/roleManagers/antifa/duo' import { originalLoop } from 'main' import { creepClasses } from 'room/creeps/creepClasses' -import { outOfBucket, utils } from 'utils/utils' +import { Utils, outOfBucket, utils } from 'utils/utils' import { CreepOrganizer } from 'international/creepOrganizer' import { RequestsManager } from 'international/requests' import { SimpleAllies } from 'international/simpleAllies' import { PlayerManager } from 'international/players' import { FlagManager } from 'international/flags' -import { roomNameUtils } from 'room/roomNameUtils' -import { creepUtils } from 'room/creeps/creepUtils' -import { spawnUtils } from 'room/commune/spawning/spawnUtils' -import { marketUtils } from 'room/commune/terminal/marketUtils' +import { RoomNameUtils, roomNameUtils } from 'room/roomNameUtils' +import { CreepUtils, creepUtils } from 'room/creeps/creepUtils' +import { SpawnUtils, spawnUtils } from 'room/commune/spawning/spawnUtils' +import { MarketUtils, marketUtils } from 'room/commune/terminal/marketUtils' import { CollectiveManager } from 'international/collective' import { MarketManager } from 'international/marketOrders' import { GarbageCollector } from 'international/garbageCollector' @@ -89,6 +89,10 @@ export function profilerRegister() { profiler.registerClass(RespawnManager, 'RespawnManager') profiler.registerClass(BasePlans, 'BasePlans') profiler.registerClass(RampartPlans, 'RampartPlans') + profiler.registerClass(CustomPathFinder, 'CustomPathFinder') + profiler.registerClass(MarketUtils, 'MarketUtils') + profiler.registerClass(Utils, 'Utils') + profiler.registerClass(CreepUtils, 'CreepUtils') // Room classes @@ -125,21 +129,16 @@ export function profilerRegister() { profiler.registerClass(HaulerSizeManager, 'HaulerSize') profiler.registerClass(RoomVisualsManager, 'RoomVisualsManager') profiler.registerClass(Operator, 'Operator') - profiler.registerClass(CustomPathFinder, 'CustomPathFinder') + profiler.registerClass(RoomNameUtils, 'RoomNameUtils') + profiler.registerClass(SpawnUtils, 'SpawnUtils') // Objects profiler.registerObject(global.debugUtils, 'debugUtils') - profiler.registerObject(utils, 'utils') - profiler.registerObject(marketUtils, 'marketUtils') // Room objects - profiler.registerObject(spawnUtils, 'spawnUtils') - profiler.registerObject(roomNameUtils, 'roomUtils') - profiler.registerObject(creepUtils, 'creepUtils') - profiler.registerFunctionsObject('creepUtils', creepUtils) // Functions diff --git a/src/room/commune/terminal/marketUtils.ts b/src/room/commune/terminal/marketUtils.ts index 8ef4c5438..cd91468e2 100644 --- a/src/room/commune/terminal/marketUtils.ts +++ b/src/room/commune/terminal/marketUtils.ts @@ -5,7 +5,7 @@ import { statsManager } from 'international/statsManager' import { marketManager } from 'international/marketOrders' import { Result, RoomStatsKeys } from 'international/constants' -class MarketUtils { +export class MarketUtils { advancedSell(room: Room, resourceType: ResourceConstant, amount: number) { const mySpecificOrders = marketManager.myOrders[room.name]?.[ORDER_SELL][resourceType] || [] diff --git a/src/room/creeps/creepUtils.ts b/src/room/creeps/creepUtils.ts index 5cdb1f824..89eb527a0 100644 --- a/src/room/creeps/creepUtils.ts +++ b/src/room/creeps/creepUtils.ts @@ -17,25 +17,25 @@ import { RoomManager } from 'room/room' import { collectiveManager } from 'international/collective' import { creepClasses } from './creepClasses' -export const creepUtils = { +export class CreepUtils { expandName(creepName: string) { return creepName.split('_') - }, + } roleName(creepName: string) { return creepRoles[parseInt(creepName[0])] - }, + } roleCreep(creep: Creep) { if (creep._role) return creep._role return (creep._role = this.roleName(creep.name)) - }, + } /** * Overhead logic ran for dead creeps */ runDead(creepName: string) { const creepMemory = Memory.creeps[creepName] const role = this.roleName(creepName) - }, + } runRepair(creep: Creep, target: Structure) { // If we've already schedhuled a work intent, don't try to do another if (creep.worked) return Result.noAction @@ -62,7 +62,7 @@ export const creepUtils = { // Estimate the target's nextHits so we can target creeps accordingly target.nextHits = Math.min(target.nextHits + workParts * REPAIR_POWER, target.hitsMax) return Result.success - }, + } repairCommune(creep: Creep) { if (creep.needsResources()) { if ( @@ -160,8 +160,8 @@ export const creepUtils = { }) return true - }, - repairCommuneStationary(creep: Creep) {}, + } + repairCommuneStationary(creep: Creep) {} repairNearby(creep: Creep) { // If the this has no energy, inform false @@ -184,7 +184,7 @@ export const creepUtils = { // Otherwise we repaired successfully return Result.success - }, + } findEnergySpentOnConstruction(creep: Creep, cSite: ConstructionSite, workParts: number) { const energySpent = Math.min( workParts * BUILD_POWER, @@ -194,7 +194,7 @@ export const creepUtils = { ) return energySpent - }, + } advancedUpgradeController(creep: Creep) { const creepMemory = Memory.creeps[creep.name] @@ -383,7 +383,7 @@ export const creepUtils = { // Inform false return false - }, + } findUpgradePosWeak(creep: Creep): RoomPosition | undefined { const upgradePos = creep.room.roomManager.upgradePositions.find( @@ -392,7 +392,7 @@ export const creepUtils = { !creep.room.roomManager.reservedCoords.has(packCoord(pos)) ) return upgradePos - }, + } findUpgradePosStrong(creep: Creep): RoomPosition | undefined { const creepMemory = Memory.creeps[creep.name] @@ -424,3 +424,5 @@ export const creepUtils = { return upgradePos } } + +export const creepUtils = new CreepUtils() From 4de249a4ae2d8c952c7e06f2940c1ff587e29d1d Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Wed, 27 Dec 2023 15:27:33 -0800 Subject: [PATCH 024/190] creep spawnID check for spawning --- src/room/creeps/creepPrototypes/creepMoveFunctions.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts index e92539f08..0e96ffe22 100644 --- a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts @@ -409,8 +409,10 @@ PowerCreep.prototype.createMoveRequest = Creep.prototype.createMoveRequest = fun creepMemory[CreepMemoryKeys.path] = packPosList(path) if (this.spawning) { + if (!this.spawnID) return Result.success + const spawn = findObjectWithID(this.spawnID) - if (!spawn) throw Error('Could not find spawn with ID ' + this.spawnID + ', ' + this.name + ', ' + this.ticksToLive) + if (!spawn) return Result.success // Ensure we aren't using the default direction From 09f22d8b34de3cf9d04f30402d84518df6d69ece Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Wed, 27 Dec 2023 15:38:10 -0800 Subject: [PATCH 025/190] customPathFinder fix --- src/international/customPathFinder.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/international/customPathFinder.ts b/src/international/customPathFinder.ts index 7cfcd2c62..f582dd4bb 100644 --- a/src/international/customPathFinder.ts +++ b/src/international/customPathFinder.ts @@ -164,7 +164,9 @@ export class CustomPathFinder { for (const goal of args.goals) { // If the goal is in the same room as the origin - if (args.origin.roomName === goal.pos.roomName) continue + if (args.origin.roomName === goal.pos.roomName) { + return allowedRoomNames + } if (searchedGoalRoomNames.has(goal.pos.roomName)) continue searchedGoalRoomNames.add(goal.pos.roomName) From 7b8b4bc9bdc8779839d3bcf12b466b480b123f93 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Wed, 27 Dec 2023 20:51:08 -0800 Subject: [PATCH 026/190] fix fastFillerContainers not responded to when no fastFiller creeps --- src/room/container.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/room/container.ts b/src/room/container.ts index cfb8452fd..cb2f63aac 100644 --- a/src/room/container.ts +++ b/src/room/container.ts @@ -22,9 +22,8 @@ export class ContainerManager { } private runFastFillerContainers() { - if (!this.roomManager.room.myCreepsByRole.fastFiller.length) return - const fastFillerContainers = this.roomManager.fastFillerContainers + if (!fastFillerContainers.length) return for (const container of fastFillerContainers) { if (container.reserveStore.energy > container.store.getCapacity() * 0.9) continue From 4491a1a0b64db2c05cec2f3ef2a80d23d2503718 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Wed, 27 Dec 2023 21:17:16 -0800 Subject: [PATCH 027/190] resolves #661 --- src/room/container.ts | 17 ++++++++++------- .../creeps/creepPrototypes/creepFunctions.ts | 6 +++++- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/room/container.ts b/src/room/container.ts index cb2f63aac..0f6db7322 100644 --- a/src/room/container.ts +++ b/src/room/container.ts @@ -26,29 +26,32 @@ export class ContainerManager { if (!fastFillerContainers.length) return for (const container of fastFillerContainers) { - if (container.reserveStore.energy > container.store.getCapacity() * 0.9) continue + const energy = container.reserveStore.energy + const capacity = container.store.getCapacity() + + if (energy > capacity * 0.9) continue this.roomManager.room.createRoomLogisticsRequest({ target: container, type: RoomLogisticsRequestTypes.transfer, onlyFull: true, priority: scalePriority( - container.store.getCapacity(), - container.reserveStore.energy, + capacity, + energy, 20, ), }) - if (container.reserveStore.energy < container.store.getCapacity() * 0.5) continue + if (energy < capacity * 0.5) continue this.roomManager.room.createRoomLogisticsRequest({ target: container, - maxAmount: container.reserveStore.energy * 0.5, + maxAmount: energy * 0.5, onlyFull: true, type: RoomLogisticsRequestTypes.offer, priority: scalePriority( - container.store.getCapacity(), - container.reserveStore.energy, + capacity, + energy, 10, true, ), diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index e273e735e..b95fc7b7a 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -434,13 +434,17 @@ Creep.prototype.findNewRampartRepairTarget = function () { } Creep.prototype.findNewRepairTarget = function () { + + const enemyAttackers = !!this.room.roomManager.enemyAttackers.length + let repairThreshold = enemyAttackers ? 0.15 : 0.3 + let lowestScore = Infinity let bestTarget for (const structure of this.room.roomManager.generalRepairStructures) { // If above 30% of max hits - if (structure.nextHits / structure.hitsMax > 0.3) continue + if (structure.nextHits / structure.hitsMax > repairThreshold) continue const score = getRange(this.pos, structure.pos) + (structure.nextHits / structure.hitsMax) * 20 From ece16a3ee454ef4692810200cf22dd5fa30f509a Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Thu, 28 Dec 2023 23:58:26 -0800 Subject: [PATCH 028/190] market optimizations, lab debug flags --- src/international/flags.ts | 122 +++++++++++++++++- .../{ => market}/marketOrders.ts | 75 ++++++----- src/main.ts | 2 +- src/other/profilerRegister.ts | 2 +- src/room/commune/commune.ts | 2 + src/room/commune/labs.ts | 2 +- src/room/commune/terminal/marketUtils.ts | 2 +- src/room/commune/terminal/terminal.ts | 2 +- src/room/construction/communePlanner.ts | 8 +- src/types.d.ts | 1 + 10 files changed, 172 insertions(+), 46 deletions(-) rename src/international/{ => market}/marketOrders.ts (84%) diff --git a/src/international/flags.ts b/src/international/flags.ts index 477b2f2cd..d9829609a 100644 --- a/src/international/flags.ts +++ b/src/international/flags.ts @@ -1,5 +1,5 @@ import { Dashboard, Rectangle, Table } from 'screeps-viz' -import { Result, RoomMemoryKeys, RoomTypes, customColors, ourImpassibleStructuresSet } from './constants' +import { Result, RoomLogisticsRequestTypes, RoomMemoryKeys, RoomTypes, customColors, ourImpassibleStructuresSet } from './constants' import { collectiveManager } from './collective' import { CombatRequestTypes } from 'types/internationalRequests' import { roomNameUtils } from 'room/roomNameUtils' @@ -497,6 +497,126 @@ export class FlagManager { ], }) } + + private labDataVisuals(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const room = Game.rooms[roomName] + if (!room) { + + flag.setColor(COLOR_RED) + return + } + + const headers = [ + 'Lab output', + 'Lab input 1', + 'Lab input 2', + 'Lab reverse', + ] + const data: any[][] = [] + + const labManager = room.communeManager.labManager + const row = [ + labManager.outputResource, + labManager.inputResources[0], + labManager.inputResources[1], + labManager.outputResource, + ] + data.push(row) + + const height = 3 + data.length + + Dashboard({ + config: { + room: room.name, + }, + widgets: [ + { + pos: { + x: 1, + y: 1, + }, + width: 47, + height, + widget: Rectangle({ + data: Table(() => ({ + data, + config: { + label: 'Lab Data', + headers, + }, + })), + }), + }, + ], + }) + } + + private roomLogisticsDataVisuals(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const room = Game.rooms[roomName] + if (!room) { + + flag.setColor(COLOR_RED) + return + } + + const headers = [ + 'type', + 'resourceType', + 'amount', + 'priority', + 'position', + ] + const data: any[][] = [] + + for (const key in room.roomLogisticsRequests) { + + const requestType = key as unknown as RoomLogisticsRequestTypes + const requests = room.roomLogisticsRequests[requestType] + for (const ID in requests) { + + const request = requests[ID] + const row: any[] = [ + request.type, + request.resourceType, + request.amount, + request.priority, + findObjectWithID(request.targetID).pos, + ] + data.push(row) + } + } + + const height = 3 + data.length + + Dashboard({ + config: { + room: room.name, + }, + widgets: [ + { + pos: { + x: 1, + y: 1, + }, + width: 47, + height, + widget: Rectangle({ + data: Table(() => ({ + data, + config: { + label: 'Room Logistics Requests', + headers, + }, + })), + }), + }, + ], + }) + } } export const flagManager = new FlagManager() diff --git a/src/international/marketOrders.ts b/src/international/market/marketOrders.ts similarity index 84% rename from src/international/marketOrders.ts rename to src/international/market/marketOrders.ts index 08d85f76c..eeed9aef9 100644 --- a/src/international/marketOrders.ts +++ b/src/international/market/marketOrders.ts @@ -1,13 +1,12 @@ import { findHighestScore, randomTick, utils } from 'utils/utils' -import { PlayerMemoryKeys, Result, RoomMemoryKeys } from './constants' -import { collectiveManager } from './collective' +import { PlayerMemoryKeys, Result, RoomMemoryKeys } from '../constants' +import { collectiveManager } from '../collective' import { customLog } from 'utils/logging' export class MarketManager { run() { - this._allOrdersUnorganized = undefined this._myOrders = undefined - this._orders = undefined + this.cachedOrders = {} this._myOrdersCount = undefined this.resourceHistory ??= {} @@ -51,7 +50,7 @@ export class MarketManager { if (order.type === ORDER_BUY) { - const orders = marketManager.orders[ORDER_BUY][order.resourceType] + const orders = this.getOrders(order.resourceType, ORDER_BUY) if (!orders) continue const newPrice = Math.min( @@ -65,7 +64,7 @@ export class MarketManager { // The order type is sell - const orders = marketManager.orders[ORDER_SELL][order.resourceType] + const orders = this.getOrders(order.resourceType, ORDER_SELL) if (!orders) continue const newPrice = Math.min( @@ -81,7 +80,7 @@ export class MarketManager { * Finds the cheapest sell order */ getShardSellOrder(roomName: string, resourceType: MarketResourceConstant, amount: number, maxPrice = this.getAvgPrice(resourceType) * 1.2) { - const orders = this.orders.sell[resourceType] + const orders = this.getOrders(resourceType, ORDER_SELL) if (!orders) return Result.fail let bestOrder: Order @@ -105,7 +104,7 @@ export class MarketManager { * Finds the most expensive buy order */ getShardBuyOrder(roomName: string, resourceType: MarketResourceConstant, amount: number, minPrice = this.getAvgPrice(resourceType) * 0.8) { - const orders = this.orders.buy[resourceType] + const orders = this.getOrders(resourceType, ORDER_BUY) if (!orders) return Result.fail let bestOrder: Order @@ -130,7 +129,7 @@ export class MarketManager { * Finds the cheapest sell order */ getGlobalSellOrder(resourceType: MarketResourceConstant, maxPrice = this.getAvgPrice(resourceType) * 1.2) { - const orders = this.orders.sell[resourceType] + const orders = this.getOrders(resourceType, ORDER_SELL) if (!orders) return Result.fail let bestOrder: Order @@ -155,7 +154,7 @@ export class MarketManager { * Finds the most expensive buy order */ getGlobalBuyOrder(resourceType: MarketResourceConstant, minPrice = this.getAvgPrice(resourceType) * 0.8) { - const orders = this.orders.buy[resourceType] + const orders = this.getOrders(resourceType, ORDER_BUY) if (!orders) return Result.fail let bestOrder: Order @@ -239,36 +238,30 @@ export class MarketManager { }) } - _allOrdersUnorganized: Order[] - get allOrdersUnorganized() { - if (this._allOrdersUnorganized) return this._allOrdersUnorganized - - return this._allOrdersUnorganized = Game.market.getAllOrders() - } - /** - * Existing other-player orders ordered by order type and resourceType + * intra-tick cached orders sorted by resourceType and trade type */ - _orders?: Partial>>> + cachedOrders: CachedMarketOrders /** - * Gets existing other-player orders ordered by order type and resourceType + * orders created by other players that we are on acceptable terms with, for a specified resource and trade type + * See engine: https://github.com/screeps/engine/blob/7ee5b8e24b16b6b31727a83db15f676f5061a114/src/game/market.js#L13 + * It seems that there is caching for each resource, but nothing else. So we will use that cache while also organizing by order type (BUY or SELL) */ - get orders() { - // If _orders are already defined, inform them + getOrders(resourceType: MarketResourceConstant, orderType: MarketOrderTypes) { - /* if (this._orders) return this._orders */ + if (this.cachedOrders[resourceType]) { - const orders: Record>> = { - buy: {}, - sell: {}, + return this.cachedOrders[resourceType][orderType] } - // Get the market's order and loop through them - - const unorganizedOrders = this.allOrdersUnorganized + const ordersByType: CachedMarketOrders[MarketResourceConstant] = { + [ORDER_BUY]: [], + [ORDER_SELL]: [], + } - for (const order of unorganizedOrders) { + const orders = Game.market.getAllOrders({ }) + for (const order of orders) { // Make sure the order isn't coming from a room we own if (collectiveManager.communes.has(order.roomName)) continue @@ -277,7 +270,6 @@ export class MarketManager { // Filter out orders from players we hate if ( roomMemory && - roomMemory[RoomMemoryKeys.owner] && Memory.players[roomMemory[RoomMemoryKeys.owner]] && Memory.players[roomMemory[RoomMemoryKeys.owner]][PlayerMemoryKeys.hate] > 0 ) { @@ -285,14 +277,11 @@ export class MarketManager { continue } - orders[order.type][order.resourceType] ??= [order] - - // Assign the order to a resource-ordered location - - orders[order.type][order.resourceType].push(order) + ordersByType[order.type as MarketOrderTypes].push(order) } - return (this._orders = orders) + this.cachedOrders[resourceType] = ordersByType + return ordersByType[orderType] } /** @@ -368,7 +357,7 @@ export class MarketManager { get isMarketFunctional() { if (this._isMarketFunctional !== undefined) return this._isMarketFunctional - return (this._isMarketFunctional = !!this.allOrdersUnorganized.length) + return (this._isMarketFunctional = !!Game.market.getAllOrders().length) } private resourceHistory: Partial<{[key in MarketResourceConstant]: {[days: string]: number}}> @@ -405,8 +394,16 @@ export class MarketManager { decidePrice(resourceType: ResourceConstant, priority: number, startTick: number = Game.time) { - + } } export const marketManager = new MarketManager() + +export type MarketOrderTypes = ORDER_BUY | ORDER_SELL + +export type CachedMarketOrders = Partial<{ + [key in MarketResourceConstant]: { + [key in MarketOrderTypes]: Order[] + } + }> diff --git a/src/main.ts b/src/main.ts index ed5e16668..489bcac43 100644 --- a/src/main.ts +++ b/src/main.ts @@ -49,7 +49,7 @@ import { WorkRequestManager } from 'room/commune/workRequest' import { ConstructionManager } from 'room/construction/construction' import { wasm } from 'other/wasmInit' import { requestsManager } from 'international/requests' -import { marketManager } from 'international/marketOrders' +import { marketManager } from 'international/market/marketOrders' import { transactionsManager } from 'international/transactions' import { segmentsManager } from 'international/segments' import { creepDataManager } from 'room/creeps/creepData' diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index 87ecf9b35..f8b16792a 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -29,7 +29,7 @@ import { CreepUtils, creepUtils } from 'room/creeps/creepUtils' import { SpawnUtils, spawnUtils } from 'room/commune/spawning/spawnUtils' import { MarketUtils, marketUtils } from 'room/commune/terminal/marketUtils' import { CollectiveManager } from 'international/collective' -import { MarketManager } from 'international/marketOrders' +import { MarketManager } from 'international/market/marketOrders' import { GarbageCollector } from 'international/garbageCollector' import { EndTickManager } from 'international/endTick' import { EndTickCreepManager } from 'room/creeps/endTickCreepManager' diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index f4ae6b88c..a07329a69 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -781,6 +781,8 @@ export class CommuneManager { private _rampartRepairTargets: StructureRampart[] get rampartRepairTargets() { + if (this._rampartRepairTargets) return this._rampartRepairTargets + const rampartRepairTargets: StructureRampart[] = [] const rampartPlans = this.room.roomManager.rampartPlans diff --git a/src/room/commune/labs.ts b/src/room/commune/labs.ts index 506b51322..46a5650f5 100644 --- a/src/room/commune/labs.ts +++ b/src/room/commune/labs.ts @@ -651,7 +651,7 @@ export class LabManager { } private createInputRoomLogisticsRequests() { - let inputLabs = this.inputLabs + const inputLabs = this.inputLabs for (let i = 0; i < inputLabs.length; i++) { const lab = inputLabs[i] const resourceType = this.inputResources[i] diff --git a/src/room/commune/terminal/marketUtils.ts b/src/room/commune/terminal/marketUtils.ts index cd91468e2..fac391a60 100644 --- a/src/room/commune/terminal/marketUtils.ts +++ b/src/room/commune/terminal/marketUtils.ts @@ -2,7 +2,7 @@ import { customLog } from 'utils/logging' import { findLowestScore } from 'utils/utils' import { collectiveManager } from 'international/collective' import { statsManager } from 'international/statsManager' -import { marketManager } from 'international/marketOrders' +import { marketManager } from 'international/market/marketOrders' import { Result, RoomStatsKeys } from 'international/constants' export class MarketUtils { diff --git a/src/room/commune/terminal/terminal.ts b/src/room/commune/terminal/terminal.ts index 3c3e90048..a85c77446 100644 --- a/src/room/commune/terminal/terminal.ts +++ b/src/room/commune/terminal/terminal.ts @@ -6,7 +6,7 @@ import { simpleAllies, AllyRequestTypes, ResourceRequest } from 'international/s import { collectiveManager } from 'international/collective' import { CommuneManager, ResourceTargets } from 'room/commune/commune' import { marketUtils } from './marketUtils' -import { marketManager } from 'international/marketOrders' +import { marketManager } from 'international/market/marketOrders' export class TerminalManager { communeManager: CommuneManager diff --git a/src/room/construction/communePlanner.ts b/src/room/construction/communePlanner.ts index ba3353546..3b7bc1bd7 100644 --- a/src/room/construction/communePlanner.ts +++ b/src/room/construction/communePlanner.ts @@ -3292,10 +3292,16 @@ export class CommunePlanner { roomMemory[RoomMemoryKeys.mineralPath] = plan.mineralPath roomMemory[RoomMemoryKeys.centerUpgradePos] = plan.centerUpgradePos roomMemory[RoomMemoryKeys.upgradePath] = plan.upgradePath + roomMemory[RoomMemoryKeys.communePlanned] = true // Delete uneeded plan data from global to free up space - delete this.planAttempts + /* delete this.planAttempts */ + for (var key in this){ + if (this.hasOwnProperty(key)){ + delete this[key]; + } + } } private visualizeGrid() { for (let x = 0; x < roomDimensions; x++) { diff --git a/src/types.d.ts b/src/types.d.ts index 8a769e48a..bfbe0b7a7 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -22,6 +22,7 @@ import { WorkTypes, creepRoles, PowerCreepTasks, + RoomLogisticsRequestTypes, } from 'international/constants' import { Operator } from 'room/creeps/powerCreeps/operator' import { MeleeDefender } from 'room/creeps/roleManagers/commune/defenders/meleeDefender' From d090847f66aaaf4a67cea77d38d86eb9cbc3524b Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Fri, 29 Dec 2023 15:02:04 -0800 Subject: [PATCH 029/190] cached general repair structures --- src/international/constants.ts | 28 ++---- src/international/tickInit.ts | 3 +- src/main.ts | 6 +- src/other/profilerRegister.ts | 8 ++ src/room/commune/commune.ts | 14 ++- src/room/commune/communeData.ts | 31 +++++++ src/room/commune/communeUtils.ts | 88 ++++++++++++++++++- src/room/commune/spawning/spawnRequests.ts | 6 +- src/room/creeps/creepData.ts | 14 +-- .../creeps/creepPrototypes/creepFunctions.ts | 6 +- src/room/creeps/creepUtils.ts | 3 +- src/room/creeps/endTickCreepManager.ts | 3 +- src/room/room.ts | 42 --------- src/room/roomData.ts | 24 +++++ src/room/roomUtils.ts | 8 +- src/room/roomVisuals.ts | 1 - src/settingsDefault.ts | 26 +++++- src/types.d.ts | 6 ++ 18 files changed, 224 insertions(+), 93 deletions(-) create mode 100644 src/room/commune/communeData.ts create mode 100644 src/room/roomData.ts diff --git a/src/international/constants.ts b/src/international/constants.ts index 3c1b4464c..322985539 100644 --- a/src/international/constants.ts +++ b/src/international/constants.ts @@ -554,29 +554,6 @@ export const nonCommuneSigns = [ 'Religion is the opium of the people - Karl Marx', ] -export const chant = [ - 'Creeps', - 'of', - Game.shard.name, - 'unite,', - 'you', - 'have', - 'nothing', - 'to', - 'lose', - 'but', - 'your', - 'chains!', - undefined, - 'PEACE', - 'LAND', - 'ENERGY', - undefined, - 'Democracy', - 'is non-', - 'negotiable!', - undefined, -] /** * What to say when one of our creeps dies */ @@ -712,6 +689,11 @@ export const combatTargetStructureTypes: Set = new Set([ STRUCTURE_OBSERVER, ]) +export const generalRepairStructureTypes = new Set([ + STRUCTURE_ROAD, + STRUCTURE_CONTAINER, +]) + export const customColors = { white: '#ffffff', lightGrey: '#eaeaea', diff --git a/src/international/tickInit.ts b/src/international/tickInit.ts index d84e7bd17..0ecd644e4 100644 --- a/src/international/tickInit.ts +++ b/src/international/tickInit.ts @@ -1,6 +1,5 @@ import { antifaRoles, - chant, WorkRequestKeys, CombatRequestKeys, creepRoles, @@ -38,7 +37,7 @@ class TickInit { // Chant logic if (global.settings.creepChant) { - if (Memory.chantIndex >= chant.length - 1) Memory.chantIndex = 0 + if (Memory.chantIndex >= global.settings.creepChant.length - 1) Memory.chantIndex = 0 else Memory.chantIndex += 1 } } diff --git a/src/main.ts b/src/main.ts index 489bcac43..ec4d65d6d 100644 --- a/src/main.ts +++ b/src/main.ts @@ -53,6 +53,8 @@ import { marketManager } from 'international/market/marketOrders' import { transactionsManager } from 'international/transactions' import { segmentsManager } from 'international/segments' import { creepDataManager } from 'room/creeps/creepData' +import { communeDataManager } from 'room/commune/communeData' +import { roomDataManager } from 'room/roomData' export function originalLoop() { @@ -78,6 +80,8 @@ export function originalLoop() { wasm.collaborator() roomsManager.updateRun() + roomDataManager.updateRooms() + communeDataManager.updateCommunes() transactionsManager.run() requestsManager.run() @@ -86,7 +90,7 @@ export function originalLoop() { playerManager.run() roomsManager.initRun() creepOrganizer.run() - creepDataManager.run() + creepDataManager.updateData() powerCreepOrganizer.run() roomPruningManager.run() diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index f8b16792a..822826070 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -63,6 +63,10 @@ import { TransactionsManager } from 'international/transactions' import { CommunePlanner } from 'room/construction/communePlanner' import { packBasePlanCoord, packCoord, packCoordList, packId, packIdList, packPos, packPosList, packRampartPlanCoord, packRoomName, packStampAnchors, packXYAsCoord, packXYAsPos, reversePosList, unpackBasePlanCoords, unpackCoord, unpackCoordAsPos, unpackCoordList, unpackCoordListAsPosList, unpackId, unpackIdList, unpackPos, unpackPosAt, unpackPosList, unpackRampartPlanCoord, unpackRoomName, unpackStampAnchors } from './codec' import { CustomPathFinder } from 'international/customPathFinder' +import { RoomUtils } from 'room/roomUtils' +import { CommuneUtils } from 'room/commune/communeUtils' +import { RoomDataManager } from 'room/roomData' +import { CommuneDataManager } from 'room/commune/communeData' export function profilerRegister() { @@ -131,6 +135,10 @@ export function profilerRegister() { profiler.registerClass(Operator, 'Operator') profiler.registerClass(RoomNameUtils, 'RoomNameUtils') profiler.registerClass(SpawnUtils, 'SpawnUtils') + profiler.registerClass(RoomUtils, 'RoomUtils') + profiler.registerClass(CommuneUtils, 'CommuneUtils') + profiler.registerClass(RoomDataManager, 'RoomDataManager') + profiler.registerClass(CommuneDataManager, 'CommuneDataManager') // Objects diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index a07329a69..0f3444e97 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -21,6 +21,7 @@ import { findLowestScore, roundTo, forCoordsAroundRange, + utils, } from 'utils/utils' import { TerminalManager } from './terminal/terminal' import './spawning/spawningStructures' @@ -180,6 +181,11 @@ export class CommuneManager { } update(room: Room) { + + // non manager + + // + delete this._minStoredEnergy delete this._storingStructures delete this._maxCombatRequests @@ -193,10 +199,14 @@ export class CommuneManager { delete this._spawningStructuresByNeed if (randomTick()) { - delete this._maxUpgradeStrength delete this._minRampartHits - delete this._upgradeStructure delete this._storedEnergyBuildThreshold + } + + if (utils.isTickInterval(100)) { + + delete this._maxUpgradeStrength + delete this._upgradeStructure delete this._hasSufficientRoads delete this._resourceTargets } diff --git a/src/room/commune/communeData.ts b/src/room/commune/communeData.ts new file mode 100644 index 000000000..31d67f2d2 --- /dev/null +++ b/src/room/commune/communeData.ts @@ -0,0 +1,31 @@ +import { collectiveManager } from "international/collective"; + +interface CommuneData { + /** + * The last registered room controller level for the commune + */ + registeredRCL: number + generalRepairStructureCoords: Set +} + +/** + * Handles cached data for communes + */ +export class CommuneDataManager { + data: {[roomName: string]: Partial} = {} + + updateCommunes() { + + for (const roomName of collectiveManager.communes) { + + this.updateCommune(Game.rooms[roomName]) + } + } + + private updateCommune(room: Room) { + + this.data[room.name] ??= {} + } +} + +export const communeDataManager = new CommuneDataManager() diff --git a/src/room/commune/communeUtils.ts b/src/room/commune/communeUtils.ts index 47063b124..416662628 100644 --- a/src/room/commune/communeUtils.ts +++ b/src/room/commune/communeUtils.ts @@ -1,8 +1,88 @@ -class CommuneUtils { - getUpgradeCapacity(room: Room) { +import { packCoord } from "other/codec" +import { communeDataManager } from "./communeData" +import { roomDataManager } from "room/roomData" +import { packAsNum, unpackNumAsCoord } from "utils/utils" +import { Result, generalRepairStructureTypes } from "international/constants" - const upgradeStructure = room.communeManager.upgradeStructure - +export class CommuneUtils { + getRCLUpdate(room: Room) { + + const data = communeDataManager.data[room.name] + // If the registered RCL is the actual RCL, we're good. No need to update anything + if (data.registeredRCL === room.controller.level) { + return + } + // If things haven't been registered yet + if (data.registeredRCL === undefined) { + return + } + + this.updateRegisteredRCL(room) + } + + private updateRegisteredRCL(room: Room) { + + const communeData = communeDataManager.data[room.name] + /* const roomData = roomDataManager.data[room.name] */ + + delete communeData.registeredRCL + delete communeData.generalRepairStructureCoords + + communeData.registeredRCL = room.controller.level + } + + getGeneralRepairStructures(room: Room) { + if (room.generalRepairStructures) return room.generalRepairStructures + + const generalRepairStructures: (StructureContainer | StructureRoad)[] = [] + if (this.getGeneralRepairStructuresFromCoords(room, generalRepairStructures) === Result.success) { + return generalRepairStructures + } + + const structureCoords = new Set() + const structures = room.roomManager.structures + const relevantStructures = ( + structures.container as (StructureContainer | StructureRoad)[] + ).concat(structures.road) + const basePlans = room.roomManager.basePlans + const RCL = room.controller.level + + for (const structure of relevantStructures) { + const coordData = basePlans.map[packCoord(structure.pos)] + if (!coordData) continue + + for (const data of coordData) { + if (data.minRCL > RCL) continue + if (data.structureType !== structure.structureType) break + + generalRepairStructures.push(structure) + structureCoords.add(packAsNum(structure.pos)) + break + } + } + + communeDataManager.data[room.name].generalRepairStructureCoords = structureCoords + + room.generalRepairStructures = generalRepairStructures + return generalRepairStructures + } + + private getGeneralRepairStructuresFromCoords(room: Room, generalRepairStructures: (StructureContainer | StructureRoad)[]) { + + const structureCoords = communeDataManager.data[room.name].generalRepairStructureCoords + if (!structureCoords) return Result.fail + + for (const packedCoord of structureCoords) { + + const coord = unpackNumAsCoord(packedCoord) + + const structure = room.findStructureAtCoord(coord, structure => generalRepairStructureTypes.has(structure.structureType)) + if (!structure) return Result.fail + + generalRepairStructures.push(structure) + } + + return Result.success } } diff --git a/src/room/commune/spawning/spawnRequests.ts b/src/room/commune/spawning/spawnRequests.ts index bd72cd49d..765ffa4fa 100644 --- a/src/room/commune/spawning/spawnRequests.ts +++ b/src/room/commune/spawning/spawnRequests.ts @@ -27,6 +27,7 @@ import { customLog } from 'utils/logging' import { SpawnRequest, SpawnRequestArgs, SpawnRequestTypes } from 'types/spawnRequest' import { spawnUtils } from './spawnUtils' import { SpawnRequestConstructor, spawnRequestConstructors } from './spawnRequestConstructors' +import { communeUtils } from '../communeUtils' export class SpawnRequestsManager { communeManager: CommuneManager @@ -576,10 +577,9 @@ export class SpawnRequestsManager { private maintainers() { this.rawSpawnRequestsArgs.push( ((): SpawnRequestArgs | false => { - const generalRepairStructures = - this.communeManager.room.roomManager.generalRepairStructures + const generalRepairStructures = communeUtils.getGeneralRepairStructures(this.communeManager.room) const repairTargets = generalRepairStructures.filter( - structure => structure.hitsMax * 0.2 >= structure.hits, + structure => structure.hitsMax * 0.3 >= structure.hits, ) // Get ramparts below their max hits diff --git a/src/room/creeps/creepData.ts b/src/room/creeps/creepData.ts index 434e96bb5..139edaf4e 100644 --- a/src/room/creeps/creepData.ts +++ b/src/room/creeps/creepData.ts @@ -4,34 +4,34 @@ import { utils } from "utils/utils" export type Boosts = Partial<{[ key in MineralBoostConstant]: number }> export interface CreepData { - parts?: Partial<{[key in BodyPartConstant]: number }> + parts: Partial<{[key in BodyPartConstant]: number }> /** * update when applying boosts */ - upgradeStrength?: number + upgradeStrength: number /** * update when applying boosts */ - boosts?: Boosts + boosts: Boosts /** * update when applying boosts */ - defenceStrength?: number + defenceStrength: number } /** * Handles cached data for creeps we own */ export class CreepDataManager { - creepsData: {[creepName: string]: CreepData } = {} + creepsData: {[creepName: string]: Partial } = {} - run() { + updateData() { if (utils.isTickInterval(15)) { this.updateCreeps() } } - updateCreeps() { + private updateCreeps() { for (const creepName in Game.creeps) { diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index b95fc7b7a..15963a1d9 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -59,6 +59,7 @@ import { RoomManager } from 'room/room' import { CreepRoomLogisticsRequest, RoomLogisticsRequest } from 'types/roomRequests' import { customLog, stringifyLog } from 'utils/logging' import { customPathFinder } from 'international/customPathFinder' +import { communeUtils } from 'room/commune/communeUtils' Creep.prototype.update = function () {} @@ -436,12 +437,13 @@ Creep.prototype.findNewRampartRepairTarget = function () { Creep.prototype.findNewRepairTarget = function () { const enemyAttackers = !!this.room.roomManager.enemyAttackers.length - let repairThreshold = enemyAttackers ? 0.15 : 0.3 + let repairThreshold = enemyAttackers ? 0.1 : 0.2 let lowestScore = Infinity let bestTarget - for (const structure of this.room.roomManager.generalRepairStructures) { + const structures = communeUtils.getGeneralRepairStructures(this.room) + for (const structure of structures) { // If above 30% of max hits if (structure.nextHits / structure.hitsMax > repairThreshold) continue diff --git a/src/room/creeps/creepUtils.ts b/src/room/creeps/creepUtils.ts index 89eb527a0..415f0521c 100644 --- a/src/room/creeps/creepUtils.ts +++ b/src/room/creeps/creepUtils.ts @@ -16,6 +16,7 @@ import { packCoord, unpackCoordAsPos, unpackPosAt } from 'other/codec' import { RoomManager } from 'room/room' import { collectiveManager } from 'international/collective' import { creepClasses } from './creepClasses' +import { communeUtils } from 'room/commune/communeUtils' export class CreepUtils { expandName(creepName: string) { @@ -171,7 +172,7 @@ export class CreepUtils { const workPartCount = creep.parts.work // At some point we should compare this search with flat searching positions around the creep - const structure = creep.room.roomManager.generalRepairStructures.find(structure => { + const structure = communeUtils.getGeneralRepairStructures(creep.room).find(structure => { return ( getRange(structure.pos, creep.pos) <= 3 && structure.hitsMax - structure.hits >= workPartCount * REPAIR_POWER diff --git a/src/room/creeps/endTickCreepManager.ts b/src/room/creeps/endTickCreepManager.ts index abcc9e082..68a7c0a27 100644 --- a/src/room/creeps/endTickCreepManager.ts +++ b/src/room/creeps/endTickCreepManager.ts @@ -1,7 +1,6 @@ import { RoomMemoryKeys, RoomTypes, - chant, customColors, enemyDieChants, friendlyDieChants, @@ -119,7 +118,7 @@ export class EndTickCreepManager { private runChant() { if (!global.settings.creepChant) return - const currentChant = chant[Memory.chantIndex] + const currentChant = global.settings.creepChant[Memory.chantIndex] if (!currentChant) return let creeps: (Creep | PowerCreep)[] = this.roomManager.room.myCreeps diff --git a/src/room/room.ts b/src/room/room.ts index 595d23bd5..3241d2125 100644 --- a/src/room/room.ts +++ b/src/room/room.ts @@ -138,7 +138,6 @@ export class RoomManager { update(room: Room) { delete this._structureUpdate delete this.checkedCSiteUpdate - delete this._generalRepairStructures delete this._communeSources delete this._remoteSources delete this._mineral @@ -793,47 +792,6 @@ export class RoomManager { return (this._mineralHarvestPositions = unpackPosList(packedPositions)) } - _generalRepairStructures: (StructureContainer | StructureRoad)[] - get generalRepairStructures() { - // THIS CODE WON'T WORK FOR HIGHWAY ROOMS! FIX! - - if (this._generalRepairStructures) return this._generalRepairStructures - - const generalRepairStructures: (StructureContainer | StructureRoad)[] = [] - - const roomType = this.room.memory[RoomMemoryKeys.type] - if (roomType === RoomTypes.commune) { - const structures = this.structures - const relevantStructures = ( - structures.container as (StructureContainer | StructureRoad)[] - ).concat(structures.road) - const basePlans = this.basePlans - const RCL = this.room.controller.level - - for (const structure of relevantStructures) { - const coordData = basePlans.map[packCoord(structure.pos)] - if (!coordData) continue - - for (const data of coordData) { - if (data.minRCL > RCL) continue - if (data.structureType !== structure.structureType) break - - generalRepairStructures.push(structure) - break - } - } - - return (this._generalRepairStructures = generalRepairStructures) - } - if (roomType === RoomTypes.remote) { - return (this._generalRepairStructures = generalRepairStructures) - } - - // Non-commune non-remote - - return (this._generalRepairStructures = generalRepairStructures) - } - _remoteControllerPositions: RoomPosition[] get remoteControllerPositions() { if (this._remoteControllerPositions) return this._remoteControllerPositions diff --git a/src/room/roomData.ts b/src/room/roomData.ts new file mode 100644 index 000000000..d89cacc15 --- /dev/null +++ b/src/room/roomData.ts @@ -0,0 +1,24 @@ +interface RoomData { + +} + +/** + * Handles cached data for rooms, including some overlapping data for communes and remotes + */ +export class RoomDataManager { + data: {[roomName: string]: Partial} + + updateRooms() { + for (const roomName in Game.rooms) { + + this.updateRoom(Game.rooms[roomName]) + } + } + + private updateRoom(room: Room) { + + this.data[room.name] ??= {} + } +} + +export const roomDataManager = new RoomDataManager() diff --git a/src/room/roomUtils.ts b/src/room/roomUtils.ts index 484b4d470..24cbb1187 100644 --- a/src/room/roomUtils.ts +++ b/src/room/roomUtils.ts @@ -1,5 +1,11 @@ -class RoomUtils { +import { RoomMemoryKeys, RoomTypes } from "international/constants" +import { packCoord } from "other/codec" +export class RoomUtils { + getRemoteRepairStructures(room: Room) { + + const repairStructures: (StructureContainer | StructureRoad)[] = [] + } } export const roomUtils = new RoomUtils() diff --git a/src/room/roomVisuals.ts b/src/room/roomVisuals.ts index 76c80d95f..10b47f89d 100644 --- a/src/room/roomVisuals.ts +++ b/src/room/roomVisuals.ts @@ -27,7 +27,6 @@ export class RoomVisualsManager { } public run() { - const { room } = this.roomManager this.roomVisuals() this.baseVisuals() diff --git a/src/settingsDefault.ts b/src/settingsDefault.ts index b4b577661..70cdbcdfd 100644 --- a/src/settingsDefault.ts +++ b/src/settingsDefault.ts @@ -87,7 +87,7 @@ export interface Settings { /** * Wether or not creeps should chant slogans */ - creepChant: boolean + creepChant: string[] /** * The public segment number (0-99) that you and your allies are using @@ -134,7 +134,29 @@ export const defaultSettings: Settings = { marketUsage: true, logging: Game.shard.name === 'performanceServer' ? 0 : 1, creepSay: true, - creepChant: true, + creepChant: [ + 'Creeps', + 'of', + Game.shard.name, + 'unite,', + 'you', + 'have', + 'nothing', + 'to', + 'lose', + 'but', + 'your', + 'chains!', + undefined, + 'PEACE', + 'LAND', + 'ENERGY', + undefined, + 'Democracy', + 'is non-', + 'negotiable!', + undefined, + ], allySegmentID: 90, errorExporting: true, structureMigration: true, diff --git a/src/types.d.ts b/src/types.d.ts index bfbe0b7a7..9a5b3fa01 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -522,6 +522,12 @@ declare global { usedRampartIDs: Map, Id> + generalRepairStructures: (StructureRoad | StructureContainer)[] + + // Commune + + + // Functions /** From bbff09bafa4220a9bc93233865bd98f5841c7be4 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Fri, 29 Dec 2023 15:03:48 -0800 Subject: [PATCH 030/190] rcl update each tick --- src/room/commune/commune.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index 0f3444e97..ee68f989b 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -93,6 +93,7 @@ import { roomNameUtils } from 'room/roomNameUtils' import { LogTypes, customLog } from 'utils/logging' import { creepUtils } from 'room/creeps/creepUtils' import { SpawnRequestArgs } from 'types/spawnRequest' +import { communeUtils } from './communeUtils' export type ResourceTargets = { min: Partial<{[key in ResourceConstant]: number }> @@ -247,6 +248,8 @@ export class CommuneManager { roomMemory[RoomMemoryKeys.greatestRCL] = room.controller.level } + communeUtils.getRCLUpdate(room) + if (!roomMemory[RoomMemoryKeys.combatRequests]) roomMemory[RoomMemoryKeys.combatRequests] = [] if (!roomMemory[RoomMemoryKeys.haulRequests]) roomMemory[RoomMemoryKeys.haulRequests] = [] From be62ce7807affc08dc1b4bca7e761ea22c1899d6 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Fri, 29 Dec 2023 15:05:37 -0800 Subject: [PATCH 031/190] proper order new order finding in marketUtils --- src/room/commune/terminal/marketUtils.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/room/commune/terminal/marketUtils.ts b/src/room/commune/terminal/marketUtils.ts index fac391a60..fc259062d 100644 --- a/src/room/commune/terminal/marketUtils.ts +++ b/src/room/commune/terminal/marketUtils.ts @@ -44,7 +44,7 @@ export class MarketUtils { if (Game.market.credits < collectiveManager.minCredits) return false if (marketManager.myOrdersCount === MARKET_MAX_ORDERS) return false - const orders = marketManager.orders[ORDER_SELL][resourceType] + const orders = marketManager.getOrders(resourceType, ORDER_SELL) if (!orders) return false const price = Math.max( @@ -107,7 +107,7 @@ export class MarketUtils { if (mySpecificOrders.length) return false if (marketManager.myOrdersCount === MARKET_MAX_ORDERS) return false - const orders = marketManager.orders[ORDER_BUY][resourceType] + const orders = marketManager.getOrders(resourceType, ORDER_BUY) if (!orders) return false const price = Math.min( From b3bc0bc2b27543e7c596c4a053910f0f2a746df3 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Fri, 29 Dec 2023 15:54:33 -0800 Subject: [PATCH 032/190] cached rampartRepairTargets, caching fixes and improvements --- src/room/commune/commune.ts | 39 ----- src/room/commune/communeData.ts | 3 +- src/room/commune/communeUtils.ts | 136 ++++++++++++++---- src/room/commune/spawning/spawnRequests.ts | 2 +- src/room/commune/towers.ts | 3 +- .../creeps/creepPrototypes/creepFunctions.ts | 2 +- src/types.d.ts | 1 + 7 files changed, 114 insertions(+), 72 deletions(-) diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index ee68f989b..7bc02d6d7 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -190,7 +190,6 @@ export class CommuneManager { delete this._minStoredEnergy delete this._storingStructures delete this._maxCombatRequests - delete this._rampartRepairTargets delete this._defensiveRamparts delete this._sourceLinks delete this._controllerLink @@ -792,44 +791,6 @@ export class CommuneManager { return (this._defensiveRamparts = ramparts) } - private _rampartRepairTargets: StructureRampart[] - get rampartRepairTargets() { - if (this._rampartRepairTargets) return this._rampartRepairTargets - - const rampartRepairTargets: StructureRampart[] = [] - const rampartPlans = this.room.roomManager.rampartPlans - - for (const structure of this.room.roomManager.structures.rampart) { - const data = rampartPlans.map[packCoord(structure.pos)] - if (!data) continue - - if (data.minRCL > this.room.controller.level) continue - if ( - data.coversStructure && - !this.room.coordHasStructureTypes(structure.pos, structureTypesToProtectSet) - ) { - continue - } - - if (data.buildForNuke) { - if (!this.room.roomManager.nukeTargetCoords[packAsNum(structure.pos)]) continue - - rampartRepairTargets.push(structure) - continue - } - if (data.buildForThreat) { - if (!this.buildSecondMincutLayer) continue - - rampartRepairTargets.push(structure) - continue - } - - rampartRepairTargets.push(structure) - } - - return (this._rampartRepairTargets = rampartRepairTargets) - } - /** * Prescriptive of if we desire a second mincut layer */ diff --git a/src/room/commune/communeData.ts b/src/room/commune/communeData.ts index 31d67f2d2..7afa56218 100644 --- a/src/room/commune/communeData.ts +++ b/src/room/commune/communeData.ts @@ -5,7 +5,8 @@ interface CommuneData { * The last registered room controller level for the commune */ registeredRCL: number - generalRepairStructureCoords: Set + generalRepairStructureCoords: Set + rampartRepairStructureCoords: Set } /** diff --git a/src/room/commune/communeUtils.ts b/src/room/commune/communeUtils.ts index 416662628..ebd110cdb 100644 --- a/src/room/commune/communeUtils.ts +++ b/src/room/commune/communeUtils.ts @@ -1,8 +1,8 @@ -import { packCoord } from "other/codec" +import { packCoord, unpackCoord } from "other/codec" import { communeDataManager } from "./communeData" import { roomDataManager } from "room/roomData" import { packAsNum, unpackNumAsCoord } from "utils/utils" -import { Result, generalRepairStructureTypes } from "international/constants" +import { Result, generalRepairStructureTypes, structureTypesToProtectSet } from "international/constants" export class CommuneUtils { getRCLUpdate(room: Room) { @@ -14,6 +14,7 @@ export class CommuneUtils { } // If things haven't been registered yet if (data.registeredRCL === undefined) { + data.registeredRCL = room.controller.level return } @@ -25,8 +26,8 @@ export class CommuneUtils { const communeData = communeDataManager.data[room.name] /* const roomData = roomDataManager.data[room.name] */ - delete communeData.registeredRCL delete communeData.generalRepairStructureCoords + delete communeData.rampartRepairStructureCoords communeData.registeredRCL = room.controller.level } @@ -34,55 +35,132 @@ export class CommuneUtils { getGeneralRepairStructures(room: Room) { if (room.generalRepairStructures) return room.generalRepairStructures - const generalRepairStructures: (StructureContainer | StructureRoad)[] = [] - if (this.getGeneralRepairStructuresFromCoords(room, generalRepairStructures) === Result.success) { - return generalRepairStructures + const repairTargets = this.getGeneralRepairStructuresFromCoords(room) + if (repairTargets.length) { + room.generalRepairStructures = repairTargets + return repairTargets } - const structureCoords = new Set() - const structures = room.roomManager.structures - const relevantStructures = ( - structures.container as (StructureContainer | StructureRoad)[] - ).concat(structures.road) + const structureCoords = new Set() const basePlans = room.roomManager.basePlans const RCL = room.controller.level - for (const structure of relevantStructures) { - const coordData = basePlans.map[packCoord(structure.pos)] - if (!coordData) continue + for (const packedCoord in basePlans.map) { - for (const data of coordData) { - if (data.minRCL > RCL) continue - if (data.structureType !== structure.structureType) break + const coordData = basePlans.map[packedCoord] + for (const data of coordData) { + if (data.minRCL > RCL) continue + if (!generalRepairStructureTypes.has(data.structureType as (STRUCTURE_ROAD | STRUCTURE_CONTAINER))) break - generalRepairStructures.push(structure) - structureCoords.add(packAsNum(structure.pos)) - break - } + structureCoords.add(packedCoord) + + const coord = unpackCoord(packedCoord) + const structure = room.findStructureAtCoord(coord, structure => generalRepairStructureTypes.has(structure.structureType)) + if (!structure) continue + + repairTargets.push(structure) + break + } } communeDataManager.data[room.name].generalRepairStructureCoords = structureCoords - room.generalRepairStructures = generalRepairStructures - return generalRepairStructures + room.generalRepairStructures = repairTargets + return repairTargets } - private getGeneralRepairStructuresFromCoords(room: Room, generalRepairStructures: (StructureContainer | StructureRoad)[]) { + private getGeneralRepairStructuresFromCoords(room: Room) { + const repairTargets: (StructureContainer | StructureRoad)[] = [] const structureCoords = communeDataManager.data[room.name].generalRepairStructureCoords - if (!structureCoords) return Result.fail + if (!structureCoords) return repairTargets for (const packedCoord of structureCoords) { - const coord = unpackNumAsCoord(packedCoord) + const coord = unpackCoord(packedCoord) const structure = room.findStructureAtCoord(coord, structure => generalRepairStructureTypes.has(structure.structureType)) - if (!structure) return Result.fail + if (!structure) return [] + + repairTargets.push(structure) + } + + return repairTargets + } + + getRampartRepairTargets(room: Room) { + if (room.rampartRepairStructures) return room.rampartRepairStructures + + const repairTargets = this.getRampartRepairTargetsFromCoords(room) + if (repairTargets.length) { + room.rampartRepairStructures = repairTargets + return repairTargets + } + + const structureCoords = new Set() + const rampartPlans = room.roomManager.rampartPlans + const RCL = room.controller.level + const buildSecondMincutLayer = room.communeManager.buildSecondMincutLayer + const nukeTargetCoords = room.roomManager.nukeTargetCoords + + for (const packedCoord in rampartPlans.map) { + + const data = rampartPlans.map[packedCoord] + if (data.minRCL > RCL) continue + + structureCoords.add(packedCoord) + + const coord = unpackCoord(packedCoord) + const structure = room.findStructureAtCoord(coord, structure => structure.structureType === STRUCTURE_RAMPART) + if (!structure) continue + + if ( + data.coversStructure && + !room.coordHasStructureTypes(structure.pos, structureTypesToProtectSet) + ) { + continue + } + + if (data.buildForNuke) { + if (!nukeTargetCoords[packAsNum(structure.pos)]) continue + + repairTargets.push(structure) + continue + } + if (data.buildForThreat) { + if (!buildSecondMincutLayer) continue + + repairTargets.push(structure) + continue + } + + repairTargets.push(structure) + break + } + + communeDataManager.data[room.name].rampartRepairStructureCoords = structureCoords + + room.rampartRepairStructures + return repairTargets + } + + private getRampartRepairTargetsFromCoords(room: Room) { + + const repairTargets: StructureRampart[] = [] + const structureCoords = communeDataManager.data[room.name].generalRepairStructureCoords + if (!structureCoords) repairTargets + + for (const packedCoord of structureCoords) { + + const coord = unpackCoord(packedCoord) + + const structure = room.findStructureAtCoord(coord, structure => structure.structureType === STRUCTURE_RAMPART) + if (!structure) return [] - generalRepairStructures.push(structure) + repairTargets.push(structure) } - return Result.success + return repairTargets } } diff --git a/src/room/commune/spawning/spawnRequests.ts b/src/room/commune/spawning/spawnRequests.ts index 765ffa4fa..4111184ce 100644 --- a/src/room/commune/spawning/spawnRequests.ts +++ b/src/room/commune/spawning/spawnRequests.ts @@ -584,7 +584,7 @@ export class SpawnRequestsManager { // Get ramparts below their max hits - const repairRamparts = this.communeManager.rampartRepairTargets.filter( + const repairRamparts = communeUtils.getRampartRepairTargets(this.communeManager.room).filter( rampart => rampart.hits < this.communeManager.room.communeManager.minRampartHits, ) diff --git a/src/room/commune/towers.ts b/src/room/commune/towers.ts index 785da3fb6..4e29443f3 100644 --- a/src/room/commune/towers.ts +++ b/src/room/commune/towers.ts @@ -20,6 +20,7 @@ import { import { packCoord } from 'other/codec' import { CommuneManager } from './commune' import { playerManager } from 'international/players' +import { communeUtils } from './communeUtils' const minTowerRampartRepairTreshold = RAMPART_DECAY_AMOUNT * 1.5 @@ -219,7 +220,7 @@ export class TowerManager { const { room } = this.communeManager const ramparts = room.roomManager.enemyAttackers.length ? room.communeManager.defensiveRamparts - : room.communeManager.rampartRepairTargets + : communeUtils.getRampartRepairTargets(room) const [score, rampart] = findWithLowestScore(ramparts, rampart => { let score = rampart.hits diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index 15963a1d9..af9b97358 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -419,7 +419,7 @@ Creep.prototype.advancedBuildAllyCSite = function () { Creep.prototype.findNewRampartRepairTarget = function () { const ramparts = this.room.roomManager.enemyAttackers.length ? this.room.communeManager.defensiveRamparts - : this.room.communeManager.rampartRepairTargets + : communeUtils.getRampartRepairTargets(this.room) const [score, bestTarget] = findWithLowestScore(ramparts, structure => { if (structure.nextHits / structure.hitsMax > 0.9) return false diff --git a/src/types.d.ts b/src/types.d.ts index 9a5b3fa01..595899297 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -523,6 +523,7 @@ declare global { usedRampartIDs: Map, Id> generalRepairStructures: (StructureRoad | StructureContainer)[] + rampartRepairStructures: StructureRampart[] // Commune From 786e9b689c44a0e6db5bd6c95af62351dc93089b Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Fri, 29 Dec 2023 16:18:37 -0800 Subject: [PATCH 033/190] new market and room caching fixes --- src/international/market/marketOrders.ts | 10 +++++----- src/main.ts | 3 +-- src/room/commune/communeData.ts | 13 ++++--------- src/room/commune/communeUtils.ts | 4 ++-- src/room/roomData.ts | 9 ++++++++- 5 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/international/market/marketOrders.ts b/src/international/market/marketOrders.ts index eeed9aef9..b6661a297 100644 --- a/src/international/market/marketOrders.ts +++ b/src/international/market/marketOrders.ts @@ -81,7 +81,7 @@ export class MarketManager { */ getShardSellOrder(roomName: string, resourceType: MarketResourceConstant, amount: number, maxPrice = this.getAvgPrice(resourceType) * 1.2) { const orders = this.getOrders(resourceType, ORDER_SELL) - if (!orders) return Result.fail + if (!orders.length) return Result.fail let bestOrder: Order let bestOrderCost = Infinity @@ -105,7 +105,7 @@ export class MarketManager { */ getShardBuyOrder(roomName: string, resourceType: MarketResourceConstant, amount: number, minPrice = this.getAvgPrice(resourceType) * 0.8) { const orders = this.getOrders(resourceType, ORDER_BUY) - if (!orders) return Result.fail + if (!orders.length) return Result.fail let bestOrder: Order let bestOrderCost = 0 @@ -130,7 +130,7 @@ export class MarketManager { */ getGlobalSellOrder(resourceType: MarketResourceConstant, maxPrice = this.getAvgPrice(resourceType) * 1.2) { const orders = this.getOrders(resourceType, ORDER_SELL) - if (!orders) return Result.fail + if (!orders.length) return Result.fail let bestOrder: Order let bestOrderCost = Infinity @@ -155,7 +155,7 @@ export class MarketManager { */ getGlobalBuyOrder(resourceType: MarketResourceConstant, minPrice = this.getAvgPrice(resourceType) * 0.8) { const orders = this.getOrders(resourceType, ORDER_BUY) - if (!orders) return Result.fail + if (!orders.length) return Result.fail let bestOrder: Order let bestOrderPrice = 0 @@ -260,7 +260,7 @@ export class MarketManager { [ORDER_SELL]: [], } - const orders = Game.market.getAllOrders({ }) + const orders = Game.market.getAllOrders({ resourceType }) for (const order of orders) { // Make sure the order isn't coming from a room we own diff --git a/src/main.ts b/src/main.ts index ec4d65d6d..1c38e169d 100644 --- a/src/main.ts +++ b/src/main.ts @@ -79,9 +79,8 @@ export function originalLoop() { simpleAllies.initRun() wasm.collaborator() - roomsManager.updateRun() roomDataManager.updateRooms() - communeDataManager.updateCommunes() + roomsManager.updateRun() transactionsManager.run() requestsManager.run() diff --git a/src/room/commune/communeData.ts b/src/room/commune/communeData.ts index 7afa56218..9c98e2d22 100644 --- a/src/room/commune/communeData.ts +++ b/src/room/commune/communeData.ts @@ -15,15 +15,10 @@ interface CommuneData { export class CommuneDataManager { data: {[roomName: string]: Partial} = {} - updateCommunes() { - - for (const roomName of collectiveManager.communes) { - - this.updateCommune(Game.rooms[roomName]) - } - } - - private updateCommune(room: Room) { + /** + * Handled by the RoomDataManager + */ + updateCommune(room: Room) { this.data[room.name] ??= {} } diff --git a/src/room/commune/communeUtils.ts b/src/room/commune/communeUtils.ts index ebd110cdb..c66dea6bb 100644 --- a/src/room/commune/communeUtils.ts +++ b/src/room/commune/communeUtils.ts @@ -147,8 +147,8 @@ export class CommuneUtils { private getRampartRepairTargetsFromCoords(room: Room) { const repairTargets: StructureRampart[] = [] - const structureCoords = communeDataManager.data[room.name].generalRepairStructureCoords - if (!structureCoords) repairTargets + const structureCoords = communeDataManager.data[room.name].rampartRepairStructureCoords + if (!structureCoords) return repairTargets for (const packedCoord of structureCoords) { diff --git a/src/room/roomData.ts b/src/room/roomData.ts index d89cacc15..2d2164e5a 100644 --- a/src/room/roomData.ts +++ b/src/room/roomData.ts @@ -1,3 +1,5 @@ +import { communeDataManager } from "./commune/communeData" + interface RoomData { } @@ -6,7 +8,7 @@ interface RoomData { * Handles cached data for rooms, including some overlapping data for communes and remotes */ export class RoomDataManager { - data: {[roomName: string]: Partial} + data: {[roomName: string]: Partial} = {} updateRooms() { for (const roomName in Game.rooms) { @@ -18,6 +20,11 @@ export class RoomDataManager { private updateRoom(room: Room) { this.data[room.name] ??= {} + + if (room.controller && room.controller.my) { + + communeDataManager.updateCommune(room) + } } } From 6bb759da9bcdec01554718a5a1c33a81243048bc Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Fri, 29 Dec 2023 16:55:44 -0800 Subject: [PATCH 034/190] minor stats and harvesting improvements --- src/international/statsManager.ts | 25 ++++++++++++------- .../creeps/creepPrototypes/creepFunctions.ts | 25 ------------------- src/room/creeps/creepUtils.ts | 18 +++++++++++++ .../roleManagers/commune/sourceHarvester.ts | 6 +++-- .../international/allyVanguard.ts | 10 +++++--- .../roleManagers/international/vanguard.ts | 5 +++- .../remote/remoteSourceHarvester.ts | 5 ++-- src/types.d.ts | 5 ---- 8 files changed, 52 insertions(+), 47 deletions(-) diff --git a/src/international/statsManager.ts b/src/international/statsManager.ts index 10430f684..db4c6dc4b 100644 --- a/src/international/statsManager.ts +++ b/src/international/statsManager.ts @@ -145,7 +145,7 @@ const averageStatNames: Set = new Set([ export class StatsManager { stats: { [roomType in RoomTypes.commune | RoomTypes.remote]: { - [roomName: string]: Partial + [roomName: string]: Partial } } @@ -444,24 +444,31 @@ export class StatsManager { return roundTo(avg, precision) } - updateStat(roomName: string, name: string, value: number) { - if (!this.stats) return - - let roomStatName = name as keyof RoomStats + updateStat(roomName: string, statName: (keyof RoomStats | keyof CommuneStats), value: number) { if (this.stats[RoomTypes.commune][roomName]) { - ;(this.stats[RoomTypes.commune][roomName] as CommuneStats)[roomStatName] += value + this.updateCommuneStat(roomName, statName as keyof CommuneStats, value) return } if (this.stats[RoomTypes.remote][roomName]) { - if (remoteStatNames.has(roomStatName)) { - roomStatName = ('r' + roomStatName) as keyof RoomStats + if (remoteStatNames.has(statName)) { + statName = ('r' + statName) as keyof RoomStats } - ;(this.stats[RoomTypes.remote][roomName] as RoomStats)[roomStatName] += value + this.updateRemoteStat(roomName, statName, value) } } + + updateCommuneStat(roomName: string, statName: keyof CommuneStats, value: number) { + + this.stats[RoomTypes.commune][roomName][statName] += value + } + + updateRemoteStat(roomName: string, statName: (keyof RoomStats | keyof CommuneStats), value: number) { + + this.stats[RoomTypes.remote][roomName][statName] += value + } } export const statsManager = new StatsManager() diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index af9b97358..892737c8a 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -187,31 +187,6 @@ Creep.prototype.advancedPickup = function (target) { return false } -Creep.prototype.advancedHarvestSource = function (source) { - const harvestResult = this.harvest(source) - - // Harvest the source, informing the result if it didn't succeed - - if (harvestResult !== OK) { - this.message = `⛏️` + harvestResult - return false - } - - // Record that the creep has worked - - this.worked = WorkTypes.harvest - - // Find amount of energy harvested and record it in data - - const energyHarvested = Math.min(this.parts.work * HARVEST_POWER, source.energy) - this.nextStore.energy += energyHarvested - - statsManager.updateStat(this.room.name, 'eih', energyHarvested) - - this.message = `⛏️` + energyHarvested - return true -} - Creep.prototype.advancedBuild = function () { const cSiteTarget = this.room.roomManager.cSiteTarget if (!cSiteTarget) return Result.fail diff --git a/src/room/creeps/creepUtils.ts b/src/room/creeps/creepUtils.ts index 415f0521c..6b18771ec 100644 --- a/src/room/creeps/creepUtils.ts +++ b/src/room/creeps/creepUtils.ts @@ -4,6 +4,8 @@ import { Result, RoomLogisticsRequestTypes, RoomMemoryKeys, + RoomStatsKeys, + WorkTypes, creepRoles, packedCoordLength, packedPosLength, @@ -17,6 +19,7 @@ import { RoomManager } from 'room/room' import { collectiveManager } from 'international/collective' import { creepClasses } from './creepClasses' import { communeUtils } from 'room/commune/communeUtils' +import { myCreepUtils } from './myCreepUtils' export class CreepUtils { expandName(creepName: string) { @@ -424,6 +427,21 @@ export class CreepUtils { return upgradePos } + harvestSource(creep: Creep, source: Source) { + if (creep.harvest(source) !== OK) { + return Result.fail + } + + creep.worked = WorkTypes.harvest + + // Find the presumed energy harvested this tick + const energyHarvested = Math.min(myCreepUtils.parts(creep).work * HARVEST_POWER, source.energy) + creep.nextStore.energy += energyHarvested + // Record the harvest in stats + statsManager.updateStat(creep.room.name, RoomStatsKeys.EnergyInputHarvest, energyHarvested) + + return Result.success + } } export const creepUtils = new CreepUtils() diff --git a/src/room/creeps/roleManagers/commune/sourceHarvester.ts b/src/room/creeps/roleManagers/commune/sourceHarvester.ts index 042842f03..2e28ba55b 100644 --- a/src/room/creeps/roleManagers/commune/sourceHarvester.ts +++ b/src/room/creeps/roleManagers/commune/sourceHarvester.ts @@ -5,6 +5,7 @@ import { Result, RoomLogisticsRequestTypes, RoomMemoryKeys, + RoomStatsKeys, WorkTypes, } from 'international/constants' import { statsManager } from 'international/statsManager' @@ -17,6 +18,7 @@ import { } from 'utils/utils' import { packCoord, packPos, reversePosList, unpackPos } from 'other/codec' import { Hauler } from './hauler' +import { creepUtils } from 'room/creeps/creepUtils' export class SourceHarvester extends Creep { constructor(creepID: Id) { @@ -64,7 +66,7 @@ export class SourceHarvester extends Creep { this.room.roomManager.communeSources[this.memory[CreepMemoryKeys.sourceIndex]] if (getRange(this.pos, source.pos) <= 1) { - this.advancedHarvestSource(source) + creepUtils.harvestSource(this, source) } } @@ -259,7 +261,7 @@ export class SourceHarvester extends Creep { ) // Add repair points to total repairPoints counter and say the success - statsManager.updateStat(this.room.name, 'eoro', energySpentOnRepairs) + statsManager.updateStat(this.room.name, RoomStatsKeys.EnergyOutputRepairOther, energySpentOnRepairs) this.message = `🔧${energySpentOnRepairs * REPAIR_POWER}` // Inform success diff --git a/src/room/creeps/roleManagers/international/allyVanguard.ts b/src/room/creeps/roleManagers/international/allyVanguard.ts index ee931da94..ae2f1bc34 100644 --- a/src/room/creeps/roleManagers/international/allyVanguard.ts +++ b/src/room/creeps/roleManagers/international/allyVanguard.ts @@ -8,6 +8,7 @@ import { } from 'international/constants' import { findObjectWithID, getRangeXY, getRange } from 'utils/utils' import { unpackCoord } from 'other/codec' +import { creepUtils } from 'room/creeps/creepUtils' export class AllyVanguard extends Creep { update() { @@ -94,7 +95,8 @@ export class AllyVanguard extends Creep { // Try to normally harvest. Iterate if creep harvested - if (this.advancedHarvestSource(room.find(FIND_SOURCES)[sourceIndex])) return + const source = room.find(FIND_SOURCES)[sourceIndex] + if (creepUtils.harvestSource(this, source) === Result.fail) return } getEnergyFromRoom?(): boolean { @@ -121,8 +123,10 @@ export class AllyVanguard extends Creep { // Try to normally harvest. Iterate if creep harvested - if (this.advancedHarvestSource(this.room.find(FIND_SOURCES)[sourceIndex])) return true - + const source = this.room.roomManager.communeSources[sourceIndex] + if (creepUtils.harvestSource(this, source) === Result.success) { + return true + } return true } diff --git a/src/room/creeps/roleManagers/international/vanguard.ts b/src/room/creeps/roleManagers/international/vanguard.ts index 3cf149c3b..051583abe 100644 --- a/src/room/creeps/roleManagers/international/vanguard.ts +++ b/src/room/creeps/roleManagers/international/vanguard.ts @@ -7,6 +7,7 @@ import { } from 'international/constants' import { findObjectWithID, getRangeXY, getRange } from 'utils/utils' import { unpackCoord } from 'other/codec' +import { creepUtils } from 'room/creeps/creepUtils' export class Vanguard extends Creep { constructor(creepID: Id) { @@ -160,8 +161,10 @@ export class Vanguard extends Creep { // Try to normally harvest. Iterate if creep harvested - if (this.advancedHarvestSource(this.room.roomManager.communeSources[sourceIndex])) + const source = this.room.roomManager.communeSources[sourceIndex] + if (creepUtils.harvestSource(this, source) === Result.success) { return + } return } diff --git a/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts b/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts index e480ff5a2..719e5655e 100644 --- a/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts +++ b/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts @@ -19,6 +19,7 @@ import { } from 'utils/utils' import { packCoord, reversePosList, unpackPosAt } from 'other/codec' import { indexOf } from 'lodash' +import { creepUtils } from 'room/creeps/creepUtils' export class RemoteHarvester extends Creep { constructor(creepID: Id) { @@ -275,7 +276,7 @@ export class RemoteHarvester extends Creep { if (this.maintainContainer(container) === Result.action) return Result.success const source = this.room.roomManager.remoteSources[sourceIndex] - this.advancedHarvestSource(source) + creepUtils.harvestSource(this, source) // Give our energy to the container so it doesn't drop on the ground @@ -294,7 +295,7 @@ export class RemoteHarvester extends Creep { if (this.buildContainer() === Result.action) return Result.success const source = this.room.roomManager.remoteSources[sourceIndex] - this.advancedHarvestSource(source) + creepUtils.harvestSource(this, source) // Stop, we don't have enough energy to justify a request diff --git a/src/types.d.ts b/src/types.d.ts index 595899297..38075c6aa 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -754,11 +754,6 @@ declare global { amount?: number, ): boolean - /** - * Harvests a source and informs the result, while recording the result if successful - */ - advancedHarvestSource(source: Source): boolean - advancedBuild(): number builderGetEnergy(): number From fcb3b263bab337de420fce4622ff71d9d2f84236 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Fri, 29 Dec 2023 17:01:04 -0800 Subject: [PATCH 035/190] shrink main.ts --- src/main.ts | 24 +++--------------------- src/other/profilerRegister.ts | 12 +++++++----- 2 files changed, 10 insertions(+), 26 deletions(-) diff --git a/src/main.ts b/src/main.ts index 1c38e169d..d629191d2 100644 --- a/src/main.ts +++ b/src/main.ts @@ -11,13 +11,9 @@ import './room/structureAdditions' import './room/creeps/creepAdditions' import './other/profilerRegister' import { memHack } from 'other/memHack' -import { customLog } from 'utils/logging' -import { findCPUOf, outOfBucket, randomIntRange } from 'utils/utils' -import { CPUMaxPerTick, Result, customColors } from 'international/constants' -import { CommuneManager } from 'room/commune/commune' +import { outOfBucket } from 'utils/utils' +import { CPUMaxPerTick, Result } from 'international/constants' import { initManager } from './international/init' -import { Quad } from 'room/creeps/roleManagers/antifa/quad' -import { Duo } from 'room/creeps/roleManagers/antifa/duo' import { migrationManager } from 'international/migration' import { respawnManager } from './international/respawn' import { tickInit } from './international/tickInit' @@ -25,35 +21,21 @@ import { simpleAllies } from 'international/simpleAllies' import { creepOrganizer } from './international/creepOrganizer' import { powerCreepOrganizer } from 'international/powerCreepOrganizer' import { ErrorMapper } from 'other/ErrorMapper' -import { StatsManager, statsManager } from 'international/statsManager' +import { statsManager } from 'international/statsManager' import { playerManager } from 'international/players' import { profiler } from 'other/profiler' -import { SpawningStructuresManager } from 'room/commune/spawning/spawningStructures' -import { SpawnRequestsManager } from 'room/commune/spawning/spawnRequests' import { flagManager } from 'international/flags' import { roomPruningManager } from 'international/roomPruning' -import { TerminalManager } from 'room/commune/terminal/terminal' -import { LabManager } from 'room/commune/labs' -import { FactoryManager } from 'room/commune/factory' import './room/construction/minCut' -import { creepClasses } from 'room/creeps/creepClasses' import { constructionSiteManager } from './international/constructionSiteManager' import { mapVisualsManager } from './international/mapVisuals' import { endTickManager } from './international/endTick' -import { RoomManager } from 'room/room' -import { ObserverManager } from 'room/commune/observer' -import { RemotesManager } from 'room/commune/remotesManager' -import { HaulRequestManager } from 'room/commune/haulRequestManager' -import { SourceManager } from 'room/commune/sourceManager' -import { WorkRequestManager } from 'room/commune/workRequest' -import { ConstructionManager } from 'room/construction/construction' import { wasm } from 'other/wasmInit' import { requestsManager } from 'international/requests' import { marketManager } from 'international/market/marketOrders' import { transactionsManager } from 'international/transactions' import { segmentsManager } from 'international/segments' import { creepDataManager } from 'room/creeps/creepData' -import { communeDataManager } from 'room/commune/communeData' import { roomDataManager } from 'room/roomData' export function originalLoop() { diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index 822826070..2d395e690 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -18,16 +18,16 @@ import { DynamicSquad } from 'room/creeps/roleManagers/antifa/dynamicSquad' import { Duo } from 'room/creeps/roleManagers/antifa/duo' import { originalLoop } from 'main' import { creepClasses } from 'room/creeps/creepClasses' -import { Utils, outOfBucket, utils } from 'utils/utils' +import { Utils, outOfBucket } from 'utils/utils' import { CreepOrganizer } from 'international/creepOrganizer' import { RequestsManager } from 'international/requests' import { SimpleAllies } from 'international/simpleAllies' import { PlayerManager } from 'international/players' import { FlagManager } from 'international/flags' -import { RoomNameUtils, roomNameUtils } from 'room/roomNameUtils' -import { CreepUtils, creepUtils } from 'room/creeps/creepUtils' -import { SpawnUtils, spawnUtils } from 'room/commune/spawning/spawnUtils' -import { MarketUtils, marketUtils } from 'room/commune/terminal/marketUtils' +import { RoomNameUtils } from 'room/roomNameUtils' +import { CreepUtils } from 'room/creeps/creepUtils' +import { SpawnUtils } from 'room/commune/spawning/spawnUtils' +import { MarketUtils } from 'room/commune/terminal/marketUtils' import { CollectiveManager } from 'international/collective' import { MarketManager } from 'international/market/marketOrders' import { GarbageCollector } from 'international/garbageCollector' @@ -67,6 +67,7 @@ import { RoomUtils } from 'room/roomUtils' import { CommuneUtils } from 'room/commune/communeUtils' import { RoomDataManager } from 'room/roomData' import { CommuneDataManager } from 'room/commune/communeData' +import { MyCreepUtils } from 'room/creeps/myCreepUtils' export function profilerRegister() { @@ -97,6 +98,7 @@ export function profilerRegister() { profiler.registerClass(MarketUtils, 'MarketUtils') profiler.registerClass(Utils, 'Utils') profiler.registerClass(CreepUtils, 'CreepUtils') + profiler.registerClass(MyCreepUtils, 'MyCreepUtils') // Room classes From 2c4e76237afa09a403924d9de4dfe31fb801572e Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Fri, 29 Dec 2023 17:14:31 -0800 Subject: [PATCH 036/190] remote manageUse on interval --- src/room/commune/remotesManager.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/room/commune/remotesManager.ts b/src/room/commune/remotesManager.ts index 62e532aa3..b0f33161e 100644 --- a/src/room/commune/remotesManager.ts +++ b/src/room/commune/remotesManager.ts @@ -14,6 +14,7 @@ import { getRange, randomRange, randomTick, + utils, } from 'utils/utils' import { unpackPosList } from 'other/codec' import { CommuneManager } from './commune' @@ -27,6 +28,8 @@ const remoteSourcePathTypes: RemoteSourcePathTypes[] = [ RoomMemoryKeys.remoteSourceHubPaths, ] +const manageUseInterval = randomRange(150, 200) + export class RemotesManager { communeManager: CommuneManager @@ -360,7 +363,13 @@ export class RemotesManager { */ private manageUse(remoteName: string): boolean { const roomMemory = Memory.rooms[remoteName] - if (!randomTick(20) && roomMemory[RoomMemoryKeys.disable]) return false + // If we aren't on the inverval to check for use + if (!utils.isTickInterval(manageUseInterval)) { + // Inform the current state of things + return roomMemory[RoomMemoryKeys.disable] + } + + // Otherwise see if the state needs to be updated let disabledSources = this.manageSourcesUse(remoteName) if (disabledSources >= roomMemory[RoomMemoryKeys.remoteSources].length) { From 816aaae187eab8d11e99fb0e2a113d8f7d44f3be Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Fri, 29 Dec 2023 17:27:27 -0800 Subject: [PATCH 037/190] moved enum --- src/international/constants.ts | 5 ++++ .../creepPrototypes/creepMoveFunctions.ts | 25 ++++++++++--------- src/room/creeps/endTickCreepManager.ts | 3 ++- src/room/creeps/roleManagers/antifa/duo.ts | 4 +-- src/room/creeps/roleManagers/antifa/quad.ts | 5 ++-- .../creeps/roleManagers/commune/hauler.ts | 3 ++- src/types.d.ts | 5 ++-- 7 files changed, 30 insertions(+), 20 deletions(-) diff --git a/src/international/constants.ts b/src/international/constants.ts index 322985539..eab0e8fb9 100644 --- a/src/international/constants.ts +++ b/src/international/constants.ts @@ -1394,3 +1394,8 @@ export enum SegmentIDs { BasePlans = 1, Errors = 10, } + +export enum MovedTypes { + moved = 1, + wait, +} diff --git a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts index 0e96ffe22..3d5c8059d 100644 --- a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts @@ -14,6 +14,7 @@ import { Result, communeCreepRoles, ReservedCoordTypes, + MovedTypes, } from 'international/constants' import { customPathFinder } from 'international/customPathFinder' import { collectiveManager } from 'international/collective' @@ -166,7 +167,7 @@ PowerCreep.prototype.createMoveRequestByPath = Creep.prototype.createMoveRequest if (this.moved) return Result.noAction if (this.fatigue > 0) return Result.noAction if (this instanceof Creep && !this.getActiveBodyparts(MOVE)) { - this.moved = 'moved' + this.moved = MovedTypes.moved return Result.noAction } @@ -237,7 +238,7 @@ PowerCreep.prototype.createMoveRequestByPath = Creep.prototype.createMoveRequest /* this.room.visual.text(pos.roomName, this.pos.x, this.pos.y + 1, { font: 0.5 }) */ this.memory[CreepMemoryKeys.path] = packedPath - this.moved = 'moved' + this.moved = MovedTypes.moved return Result.success } @@ -287,7 +288,7 @@ PowerCreep.prototype.createMoveRequest = Creep.prototype.createMoveRequest = fun if (this.moved) return Result.noAction if (this.fatigue > 0) return Result.noAction if (this instanceof Creep && !this.getActiveBodyparts(MOVE)) { - this.moved = 'moved' + this.moved = MovedTypes.moved return Result.noAction } /* @@ -451,7 +452,7 @@ PowerCreep.prototype.createMoveRequest = Creep.prototype.createMoveRequest = fun } if (path[0].roomName !== this.room.name) { - this.moved = 'moved' + this.moved = MovedTypes.moved return Result.success } this.assignMoveRequest(path[0]) @@ -669,7 +670,7 @@ PowerCreep.prototype.recurseMoveRequest = Creep.prototype.recurseMoveRequest = f if (this.spawning) return if (!this.moveRequest) return if (!room.moveRequests[this.moveRequest]) { - this.moved = 'moved' + this.moved = MovedTypes.moved return } @@ -736,7 +737,7 @@ PowerCreep.prototype.recurseMoveRequest = Creep.prototype.recurseMoveRequest = f // if creepAtPos is fatigued it is useless to us if ((creepAtPos as Creep).fatigue > 0) { - this.moved = 'wait' + this.moved = MovedTypes.wait /* delete room.moveRequests[this.moved] */ delete this.moveRequest @@ -773,15 +774,15 @@ PowerCreep.prototype.recurseMoveRequest = Creep.prototype.recurseMoveRequest = f this.moved = 'moved' return } */ - if (creepAtPos.moved === 'moved') { + if (creepAtPos.moved === MovedTypes.moved) { this.runMoveRequest() return } - if (creepAtPos.moved === 'wait') { + if (creepAtPos.moved === MovedTypes.wait) { if (creepAtPos instanceof PowerCreep) { delete this.moveRequest - this.moved = 'wait' + this.moved = MovedTypes.wait return } @@ -814,7 +815,7 @@ PowerCreep.prototype.recurseMoveRequest = Creep.prototype.recurseMoveRequest = f } delete this.moveRequest - this.moved = 'wait' + this.moved = MovedTypes.wait return } @@ -923,13 +924,13 @@ PowerCreep.prototype.recurseMoveRequest = Creep.prototype.recurseMoveRequest = f this.runMoveRequest() delete creepAtPos.moveRequest - creepAtPos.moved = 'moved' + creepAtPos.moved = MovedTypes.moved return } delete this.moveRequest - this.moved = 'moved' + this.moved = MovedTypes.moved creepAtPos.runMoveRequest() return diff --git a/src/room/creeps/endTickCreepManager.ts b/src/room/creeps/endTickCreepManager.ts index 68a7c0a27..561bc3d33 100644 --- a/src/room/creeps/endTickCreepManager.ts +++ b/src/room/creeps/endTickCreepManager.ts @@ -1,4 +1,5 @@ import { + MovedTypes, RoomMemoryKeys, RoomTypes, customColors, @@ -32,7 +33,7 @@ export class EndTickCreepManager { if (!creep.moveRequest) continue if (!room.moveRequests[creep.moveRequest]) { - creep.moved = 'moved' + creep.moved = MovedTypes.moved continue } diff --git a/src/room/creeps/roleManagers/antifa/duo.ts b/src/room/creeps/roleManagers/antifa/duo.ts index 1890ceeac..8ac0d39fa 100644 --- a/src/room/creeps/roleManagers/antifa/duo.ts +++ b/src/room/creeps/roleManagers/antifa/duo.ts @@ -1,4 +1,4 @@ -import { CreepMemoryKeys, RoomTypes, customColors, roomDimensions } from 'international/constants' +import { CreepMemoryKeys, MovedTypes, RoomTypes, customColors, roomDimensions } from 'international/constants' import { findClosestObject, getRangeXY, getRange, isExit, isXYExit } from 'utils/utils' import { Antifa } from './antifa' import { CustomPathFinderArgs } from 'international/customPathFinder' @@ -123,7 +123,7 @@ export class Duo { } holdFormation() { - for (const member of this.members) member.moved = 'moved' + for (const member of this.members) member.moved = MovedTypes.moved } createMoveRequest(opts: CustomPathFinderArgs, moveLeader = this.leader) { diff --git a/src/room/creeps/roleManagers/antifa/quad.ts b/src/room/creeps/roleManagers/antifa/quad.ts index cb0a1de47..ca77c7999 100644 --- a/src/room/creeps/roleManagers/antifa/quad.ts +++ b/src/room/creeps/roleManagers/antifa/quad.ts @@ -1,6 +1,7 @@ import { CombatRequestKeys, CreepMemoryKeys, + MovedTypes, Result, RoomMemoryKeys, RoomTypes, @@ -203,7 +204,7 @@ export class Quad { if (kiteResult === Result.action) return true if (kiteResult === Result.stop) { - + return true } @@ -338,7 +339,7 @@ export class Quad { } holdFormation() { - for (const member of this.members) member.moved = 'moved' + for (const member of this.members) member.moved = MovedTypes.moved } createMoveRequest(opts: CustomPathFinderArgs, moveLeader = this.leader) { diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index ca582a132..e9c081c96 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -1,6 +1,7 @@ import { CreepMemoryKeys, CreepRoomLogisticsRequestKeys, + MovedTypes, Result, RoomLogisticsRequestTypes, RoomMemoryKeys, @@ -539,7 +540,7 @@ export class Hauler extends Creep { // We are next to the source - this.moved = 'wait' + this.moved = MovedTypes.wait return !this.needsResources() } diff --git a/src/types.d.ts b/src/types.d.ts index 38075c6aa..37670f7a2 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -23,6 +23,7 @@ import { creepRoles, PowerCreepTasks, RoomLogisticsRequestTypes, + MovedTypes, } from 'international/constants' import { Operator } from 'room/creeps/powerCreeps/operator' import { MeleeDefender } from 'room/creeps/roleManagers/commune/defenders/meleeDefender' @@ -876,9 +877,9 @@ declare global { movedResource: boolean /** - * The packed coord the creep is trying to act upon, if it exists. -1 means the move attempt failed + * The packed coord the creep is trying to act upon, or the action it has decided on */ - moved?: string | 'moved' | 'wait' + moved?: string | MovedTypes /** * The creep's opts when trying to make a moveRequest intra tick From 51a3768db859bcf7f02c8b11eb6c157fb953190b Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Fri, 29 Dec 2023 20:24:29 -0800 Subject: [PATCH 038/190] improve simpleAllies inline with repository --- src/international/simpleAllies.ts | 91 +++++++++++++++---- .../creepPrototypes/creepMoveFunctions.ts | 23 ----- 2 files changed, 74 insertions(+), 40 deletions(-) diff --git a/src/international/simpleAllies.ts b/src/international/simpleAllies.ts index 1655474c9..a6a90dddb 100644 --- a/src/international/simpleAllies.ts +++ b/src/international/simpleAllies.ts @@ -53,6 +53,27 @@ export interface WorkRequest { workType: WorkRequestType } +export const enum FunnelGoal { + GCL = 0, + RCL7 = 1, + RCL8 = 2 +} + +export interface FunnelRequest { + /** + * Amount of energy needed. Should be equal to energy that needs to be put into controller for achieving goal. + */ + maxAmount: number; + /** + * What energy will be spent on. Room receiving energy should focus solely on achieving the goal. + */ + goalType: FunnelGoal; + /** + * Room to which energy should be sent. If undefined resources can be sent to any of requesting player's rooms. + */ + roomName?: string; +} + export interface EconRequest { /** * total credits the bot has. Should be 0 if there is no market on the server @@ -94,14 +115,35 @@ export interface RoomRequest { } export interface AllyRequests { - resource?: ResourceRequest[] - defense?: DefenseRequest[] - attack?: AttackRequest[] - player?: PlayerRequest[] - work?: WorkRequest[] + resource: ResourceRequest[] + defense: DefenseRequest[] + attack: AttackRequest[] + player: PlayerRequest[] + work: WorkRequest[] + funnel: FunnelRequest[] econ?: EconRequest - room?: RoomRequest[] + room: RoomRequest[] } + +export interface DefenseResponse { + roomName: string +} + +export interface AttackResponse { + roomName: string +} + +export interface WorkResponse { + roomName: string +} + +export interface AllyResponses { + // resource?: ResourceRequest[] + defense: DefenseResponse[] + attack: AttackResponse[] + work: WorkResponse[] +} + /** * Having data we pass into the segment being an object allows us to send additional information outside of requests */ @@ -113,24 +155,35 @@ export interface SimpleAlliesSegment { commands: any[] } +const requestsSekelton: AllyRequests = { + resource: [], + defense: [], + attack: [], + player: [], + work: [], + funnel: [], + room: [], +} + +const responsesSkeleton: AllyResponses = { + defense: [], + attack: [], + work: [], +} + export class SimpleAllies { - myRequests: Partial = {} - allySegmentData: SimpleAlliesSegment - currentAlly: string + myRequests: AllyRequests = {...requestsSekelton} + myResponses: AllyResponses = {...responsesSkeleton} + allySegmentData: Partial = {} + currentAlly?: string /** * To call before any requests are made or responded to. Configures some required values and gets ally requests */ initRun() { // Reset the data of myRequests - this.myRequests = { - resource: [], - defense: [], - attack: [], - player: [], - work: [], - room: [], - } + this.myRequests = {...requestsSekelton} + this.myResponses = {...responsesSkeleton} this.readAllySegment() } @@ -232,6 +285,10 @@ export class SimpleAllies { this.myRequests.work.push(args) } + requestFunnel(args: FunnelRequest) { + this.myRequests.funnel.push(args) + } + requestEcon(args: EconRequest) { this.myRequests.econ = args diff --git a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts index 3d5c8059d..69b200a3c 100644 --- a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts @@ -193,24 +193,6 @@ PowerCreep.prototype.createMoveRequestByPath = Creep.prototype.createMoveRequest const packedGoalPos = packPos(args.goals[0].pos) const isOnLastPos = posIndex + packedPosLength === pathOpts.packedPath.length - if (global.settings.roomVisuals) { - this.room.targetVisual(this.pos, args.goals[0].pos, true) - - this.room.visual.text((posIndex || -1).toString(), this.pos.x, this.pos.y, { - font: 0.4, - }) - this.room.visual.text(pathOpts.packedPath.length.toString(), this.pos.x, this.pos.y + 0.5, { - font: 0.4, - }) - } - /* - this.room.visual.text((posIndex || -1).toString(), this.pos.x, this.pos.y, { - font: 0.4, - }) - this.room.visual.text(pathOpts.packedPath.length.toString(), this.pos.x, this.pos.y + 0.5, { - font: 0.4, - }) - */ if ( !isOnLastPos && posIndex !== -1 && @@ -218,11 +200,6 @@ PowerCreep.prototype.createMoveRequestByPath = Creep.prototype.createMoveRequest ) { const packedPath = pathOpts.packedPath.slice(posIndex + packedPosLength) const pos = unpackPosAt(packedPath, 0) - /* - const path = unpackPosList(packedPath) - visualizePath(path) - */ - this.room.targetVisual(this.pos, pos) // If we're on an exit and the next pos is in the other room, wait From 9962aac1bf729324b954c022d4b76c1fa0f5dcb1 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Fri, 29 Dec 2023 22:09:04 -0800 Subject: [PATCH 039/190] move request creation optimizations --- src/other/profilerRegister.ts | 2 + src/room/commune/workRequest.ts | 2 +- src/room/creeps/creepMoveUtils.ts | 178 +++++++++++ .../creepPrototypes/creepMoveFunctions.ts | 283 +----------------- src/room/creeps/myCreepUtils.ts | 3 + src/types.d.ts | 9 - 6 files changed, 193 insertions(+), 284 deletions(-) create mode 100644 src/room/creeps/creepMoveUtils.ts diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index 2d395e690..b73719289 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -68,6 +68,7 @@ import { CommuneUtils } from 'room/commune/communeUtils' import { RoomDataManager } from 'room/roomData' import { CommuneDataManager } from 'room/commune/communeData' import { MyCreepUtils } from 'room/creeps/myCreepUtils' +import { CreepMoveUtils } from 'room/creeps/creepMoveUtils' export function profilerRegister() { @@ -99,6 +100,7 @@ export function profilerRegister() { profiler.registerClass(Utils, 'Utils') profiler.registerClass(CreepUtils, 'CreepUtils') profiler.registerClass(MyCreepUtils, 'MyCreepUtils') + profiler.registerClass(CreepMoveUtils, 'CreepMoveUtils') // Room classes diff --git a/src/room/commune/workRequest.ts b/src/room/commune/workRequest.ts index 960e2464e..1b128e23f 100644 --- a/src/room/commune/workRequest.ts +++ b/src/room/commune/workRequest.ts @@ -35,7 +35,7 @@ export class WorkRequestManager { } } - public run() { + run() { const { room } = this.communeManager const roomMemory = Memory.rooms[room.name] diff --git a/src/room/creeps/creepMoveUtils.ts b/src/room/creeps/creepMoveUtils.ts new file mode 100644 index 000000000..2546c7a44 --- /dev/null +++ b/src/room/creeps/creepMoveUtils.ts @@ -0,0 +1,178 @@ +import { CreepMemoryKeys, MovedTypes, Result, customColors, defaultCreepSwampCost, defaultPlainCost, packedPosLength } from 'international/constants' +import { CustomPathFinderArgs, PathGoal, customPathFinder } from 'international/customPathFinder' +import { packCoord, packPos, packPosList, unpackPos, unpackPosAt } from 'other/codec' +import { areCoordsEqual, arePositionsEqual, findObjectWithID, getRange } from 'utils/utils' + +/** + * Utilities involving the movement of creeps + */ +export class CreepMoveUtils { + useExistingPath(creep: Creep, args: CustomPathFinderArgs, opts: MoveRequestOpts) { + + if (creep.spawning) return Result.fail + + const creepMemory = Memory.creeps[creep.name] || Memory.powerCreeps[creep.name] + + if (!creepMemory[CreepMemoryKeys.lastCache]) return Result.fail + if (creepMemory[CreepMemoryKeys.lastCache] + opts.cacheAmount <= Game.time) return Result.fail + if (creepMemory[CreepMemoryKeys.flee] !== args.flee) return Result.fail + + const packedPath = creepMemory[CreepMemoryKeys.path] + if (!packedPath || !packedPath.length) return Result.fail + + // Make this more optimal in not redoing paths unecessarily + if (!areCoordsEqual(unpackPos(creepMemory[CreepMemoryKeys.goalPos]), args.goals[0].pos)){ + return Result.fail + } + + const moveTarget = this.findMoveTarget(creep, creepMemory) + if (moveTarget === Result.fail) return Result.fail + if (getRange(creep.pos, moveTarget[0]) > 1) return Result.fail + + // If we're on an exit and we want to go to the other side, wait for it to toggle + if (moveTarget[0].roomName !== creep.room.name) { + creep.moved = MovedTypes.moved + return Result.success + } + + // We've determined our existing path is sufficient. Move to the next position on it + + creep.assignMoveRequest(moveTarget[0]) + return Result.success + } + + private findMoveTarget(creep: Creep, creepMemory: CreepMemory | PowerCreepMemory): Result.fail | [RoomPosition, number] { + + const maxIterations = Math.min(creepMemory[CreepMemoryKeys.path].length / packedPosLength - 1, 1) + let iterations = -1 + + while (iterations < maxIterations) { + + const pos = unpackPosAt(creepMemory[CreepMemoryKeys.path], iterations + 1) + if (arePositionsEqual(creep.pos, pos)) { + + creepMemory[CreepMemoryKeys.path].slice(iterations * packedPosLength) + return [pos, iterations] + } + iterations += 1; + } + + Result.fail + } + + findNewPath(creep: Creep, args: CustomPathFinderArgs, opts: MoveRequestOpts) { + + // Assign the creep to the args + + args.creep = creep + + // Inform args to avoid impassible structures + + args.avoidImpassibleStructures = true + args.avoidStationaryPositions = true + + // If there is no safemode + + if (!creep.room.controller || !creep.room.controller.safeMode) args.avoidNotMyCreeps = true + + const creepMemory = Memory.creeps[creep.name] || Memory.powerCreeps[creep.name] + if (creepMemory[CreepMemoryKeys.preferRoads]) { + args.plainCost ??= defaultPlainCost * 2 + args.swampCost ??= defaultCreepSwampCost * 2 + } + + // Generate a new path + const path = customPathFinder.findPath(args) + if (!path.length && !creep.spawning) return Result.fail + + // Limit the path's length to the cacheAmount + + path.splice(opts.cacheAmount) + + // Show that a new path has been created + + if (global.settings.roomVisuals) + creep.room.visual.text('NP', path[0], { + align: 'center', + color: customColors.lightBlue, + opacity: 0.5, + font: 0.5, + }) + + return path + } + + useNewPath(creep: Creep, args: CustomPathFinderArgs, opts: MoveRequestOpts, path: RoomPosition[]) { + // Set the creep's pathOpts to reflect this moveRequest's args + creep.pathOpts = args + + const creepMemory = Memory.creeps[creep.name] || Memory.powerCreeps[creep.name] + + creepMemory[CreepMemoryKeys.lastCache] = Game.time + creepMemory[CreepMemoryKeys.flee] = args.flee + if (opts.reserveCoord !== undefined) { + creepMemory[CreepMemoryKeys.packedCoord] = packCoord(path[path.length - 1]) + } + // Assign the goal's pos to the creep's goalPos + creepMemory[CreepMemoryKeys.goalPos] = packPos(args.goals[0].pos) + // Set the path in the creep's memory + creepMemory[CreepMemoryKeys.path] = packPosList(path) + + if (creep.spawning) { + this.registerSpawnDirections(creep, path) + return Result.success + } + + // If we're on an exit and we want to go to the other side, wait for it to toggle + if (path[0].roomName !== creep.room.name) { + creep.moved = MovedTypes.moved + return Result.success + } + creep.assignMoveRequest(path[0]) + } + + private registerSpawnDirections(creep: Creep, path: RoomPosition[]) { + + if (!creep.spawnID) return + + const spawn = findObjectWithID(creep.spawnID) + if (!spawn) return + + // Ensure we aren't using the default direction + + if (spawn.spawning.directions) return + + const adjacentCoords: Coord[] = [] + + for (let x = spawn.pos.x - 1; x <= spawn.pos.x + 1; x += 1) { + for (let y = spawn.pos.y - 1; y <= spawn.pos.y + 1; y += 1) { + if (spawn.pos.x === x && spawn.pos.y === y) continue + + const coord = { x, y } + + /* if (room.coordHasStructureTypes(coord, impassibleStructureTypesSet)) continue */ + + // Otherwise ass the x and y to positions + + adjacentCoords.push(coord) + } + } + + // Sort by distance from the first pos in the path + + adjacentCoords.sort((a, b) => { + return getRange(a, path[0]) - getRange(b, path[0]) + }) + + const directions: DirectionConstant[] = [] + + for (const coord of adjacentCoords) { + directions.push(spawn.pos.getDirectionTo(coord.x, coord.y)) + } + + spawn.spawning.setDirections(directions) + return + } +} + +export const creepMoveUtils = new CreepMoveUtils() diff --git a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts index 69b200a3c..49f0fc57b 100644 --- a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts @@ -44,118 +44,8 @@ import { unpackPosList, } from 'other/codec' import { customLog } from 'utils/logging' - -PowerCreep.prototype.needsNewPath = Creep.prototype.needsNewPath = function ( - path, - args, - opts = {}, -) { - // Inform true if there is no path - - if (!path) return true - - if (this.spawning) return false - - // Inform true if the path is at its end - - if (path.length === 0) return true - - // Inform true if there is no lastCache value in the creep's memory - - const creepMemory = Memory.creeps[this.name] || Memory.powerCreeps[this.name] - if (!creepMemory[CreepMemoryKeys.lastCache]) return true - if (creepMemory[CreepMemoryKeys.flee] !== args.flee) return true - - // Inform true if the path is out of caching time - - if (creepMemory[CreepMemoryKeys.lastCache] + opts.cacheAmount <= Game.time) return true - - // Inform true if the path isn't in the same room as the creep - - if (path[0].roomName !== this.room.name) return true - - if (!creepMemory[CreepMemoryKeys.goalPos]) return true - - // Inform true if the creep's previous target isn't its current - - if (!areCoordsEqual(unpackPos(creepMemory[CreepMemoryKeys.goalPos]), args.goals[0].pos)) - return true - - // If next pos in the path is not in range, inform true - - if (this.pos.getRangeTo(path[0]) > 1) return true - - // Otherwise inform false - - return false -} -/* -PowerCreep.prototype.createMoveRequestByPath = Creep.prototype.createMoveRequestByPath = function (args, pathOpts) { - // Stop if the we know the creep won't move - - if (this.moveRequest) return false - if (this.moved) return false - if (this.fatigue > 0) return false - if (this instanceof Creep && !this.parts.move) return false - - if (this.room.roomManager.enemyDamageThreat) return this.createMoveRequest(args) - - const cachedIndex = pathOpts.packedPath.indexOf(packPos(this.pos)) - if (cachedIndex >= 0 && cachedIndex + 2 !== pathOpts.packedPath.length) { - console.log(pathOpts.packedPath.length, unpackPosList(pathOpts.packedPath)) - console.log(pathOpts.packedPath[cachedIndex], pathOpts.packedPath) - pathOpts.packedPath = pathOpts.packedPath.slice(cachedIndex) - - let path: RoomPosition[] - - // If we have a remote, avoid abandoned remotes - - if (pathOpts.remoteName) { - - console.log(pathOpts.packedPath.length, cachedIndex) - const roomNames: Set = new Set() - path = unpackPosList(pathOpts.packedPath) - - for (const pos of path) { - roomNames.add(pos.roomName) - } - - for (const roomName of roomNames) { - const roomMemory = Memory.rooms[roomName] - - if (Memory.rooms[roomName][RoomMemoryKeys.type] !== RoomTypes.remote) continue - if (!roomMemory[RoomMemoryKeys.abandonRemote]) continue - - // The room is unsafe, don't use cached paths - - return this.createMoveRequest(args) - } - } - - if (!path) path = unpackPosList(pathOpts.packedPath) - - this.memory[CreepMemoryKeys.path] = pathOpts.packedPath - this.assignMoveRequest(path[1]) - return true - } - - // If loose is enabled, don't try to get back on the cached path - - if (pathOpts.loose) return this.createMoveRequest(args) - - // Try to get on the path - - args.goals = [] - - for (const pos of unpackPosList(pathOpts.packedPath)) - args.goals.push({ - pos: pos, - range: 0, - }) - - return this.createMoveRequest(args) -} - */ +import { creepUtils } from '../creepUtils' +import { creepMoveUtils } from '../creepMoveUtils' PowerCreep.prototype.createMoveRequestByPath = Creep.prototype.createMoveRequestByPath = function ( args, @@ -257,7 +147,6 @@ PowerCreep.prototype.createMoveRequest = Creep.prototype.createMoveRequest = fun args, opts = {}, ) { - const { room } = this // Stop if the we know the creep won't move @@ -268,174 +157,20 @@ PowerCreep.prototype.createMoveRequest = Creep.prototype.createMoveRequest = fun this.moved = MovedTypes.moved return Result.noAction } - /* - if (this.spawning) return false - */ - // Assign default args - - if (!args.origin) args.origin = this.pos - if (!opts.cacheAmount) opts.cacheAmount = collectiveManager.defaultMinPathCacheTime - - let path: RoomPosition[] - if (this.spawning) path = [] - - const creepMemory = Memory.creeps[this.name] || Memory.powerCreeps[this.name] - - // If there is a path in the creep's memory and it isn't spawning - if (creepMemory[CreepMemoryKeys.path] && !this.spawning) { - path = unpackPosList(creepMemory[CreepMemoryKeys.path]) - - // So long as the creep isn't standing on the first position in the path, and the pos is worth going on - - while (path[0] && arePositionsEqual(this.pos, path[0])) { - // Remove the first pos of the path - - path.shift() - } - } - - // See if the creep needs a new path - - if (this.needsNewPath(path, args)) { - // Assign the creep to the args - - args.creep = this - - // Inform args to avoid impassible structures - - args.avoidImpassibleStructures = true - args.avoidStationaryPositions = true - - // If there is no safemode - - if (!room.controller || !room.controller.safeMode) args.avoidNotMyCreeps = true - - if (creepMemory[CreepMemoryKeys.preferRoads]) { - if (!args.plainCost) args.plainCost = defaultPlainCost * 2 - if (!args.swampCost) args.swampCost = defaultCreepSwampCost * 2 - } - - // Generate a new path - - path = customPathFinder.findPath(args) - if (!path.length && !this.spawning) return Result.fail - - // Limit the path's length to the cacheAmount - - path.splice(opts.cacheAmount) - - creepMemory[CreepMemoryKeys.lastCache] = Game.time - creepMemory[CreepMemoryKeys.flee] = args.flee - if (opts.reserveCoord !== undefined) - creepMemory[CreepMemoryKeys.packedCoord] = packCoord(path[path.length - 1]) - - // Show that a new path has been created - - if (global.settings.roomVisuals) - room.visual.text('NP', path[0], { - align: 'center', - color: customColors.lightBlue, - opacity: 0.5, - font: 0.5, - }) - - // So long as the creep isn't standing on the first position in the path - - while (path[0] && areCoordsEqual(this.pos, path[0])) { - // Remove the first pos of the path - - path.shift() - } - } - - // Stop if there are no positions left in the path - - if (!path.length && !this.spawning) return Result.fail - - // If visuals are enabled, visualize the path - - if (global.settings.roomVisuals) - path.length > 1 - ? visualizePath(path, customColors.lightBlue) - : room.visual.line(this.pos, path[0], { - color: customColors.lightBlue, - opacity: 0.3, - }) - - if (path.length > 1) { - if (global.settings.roomVisuals) visualizePath(path, customColors.lightBlue) - } else { - if (global.settings.roomVisuals) - room.visual.line(this.pos, path[0], { - color: customColors.lightBlue, - opacity: 0.3, - }) - delete creepMemory[CreepMemoryKeys.lastCache] - } - - // Set the creep's pathOpts to reflect this moveRequest's args - - this.pathOpts = args - - // Assign the goal's pos to the creep's goalPos - - creepMemory[CreepMemoryKeys.goalPos] = packPos(args.goals[0].pos) - - // Set the path in the creep's memory - - creepMemory[CreepMemoryKeys.path] = packPosList(path) - - if (this.spawning) { - if (!this.spawnID) return Result.success - - const spawn = findObjectWithID(this.spawnID) - if (!spawn) return Result.success - - // Ensure we aren't using the default direction - - if (spawn.spawning.directions) return Result.success - - const adjacentCoords: Coord[] = [] - - for (let x = spawn.pos.x - 1; x <= spawn.pos.x + 1; x += 1) { - for (let y = spawn.pos.y - 1; y <= spawn.pos.y + 1; y += 1) { - if (spawn.pos.x === x && spawn.pos.y === y) continue - - const coord = { x, y } - - /* if (room.coordHasStructureTypes(coord, impassibleStructureTypesSet)) continue */ - - // Otherwise ass the x and y to positions - - adjacentCoords.push(coord) - } - } - - // Sort by distance from the first pos in the path - - adjacentCoords.sort((a, b) => { - return getRange(a, path[0]) - getRange(b, path[0]) - }) - - const directions: DirectionConstant[] = [] - - for (const coord of adjacentCoords) { - directions.push(spawn.pos.getDirectionTo(coord.x, coord.y)) - } + // Assign default args - spawn.spawning.setDirections(directions) - return Result.success - } + args.origin ??= this.pos + opts.cacheAmount ??= collectiveManager.defaultMinPathCacheTime - if (path[0].roomName !== this.room.name) { - this.moved = MovedTypes.moved + if (creepMoveUtils.useExistingPath(this, args, opts) === Result.success) { return Result.success } - this.assignMoveRequest(path[0]) - // Inform success + const path = creepMoveUtils.findNewPath(this, args, opts) + if (path === Result.fail) return Result.fail + creepMoveUtils.useNewPath(this, args, opts, path) return Result.success } diff --git a/src/room/creeps/myCreepUtils.ts b/src/room/creeps/myCreepUtils.ts index 9a31df918..29105dfd7 100644 --- a/src/room/creeps/myCreepUtils.ts +++ b/src/room/creeps/myCreepUtils.ts @@ -1,5 +1,8 @@ import { Boosts, creepDataManager } from "./creepData" +/** + * Utilities only creeps the bot owns should use + */ export class MyCreepUtils { /** * provides a cached number of parts for creeps we own diff --git a/src/types.d.ts b/src/types.d.ts index 37670f7a2..d476679b9 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -797,15 +797,6 @@ declare global { findMineralHarvestPos(): false | RoomPosition - /** - * - */ - needsNewPath( - path: RoomPosition[] | undefined, - args: CustomPathFinderArgs, - opts?: MoveRequestOpts, - ): boolean - /** * */ From 1426291f0b69270c638600712d71470c92ef6e78 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Fri, 29 Dec 2023 22:10:49 -0800 Subject: [PATCH 040/190] rampart repairing / maintainer spawning fix --- src/room/commune/communeUtils.ts | 52 ++++++-------------------------- 1 file changed, 9 insertions(+), 43 deletions(-) diff --git a/src/room/commune/communeUtils.ts b/src/room/commune/communeUtils.ts index c66dea6bb..7a59947bf 100644 --- a/src/room/commune/communeUtils.ts +++ b/src/room/commune/communeUtils.ts @@ -91,38 +91,26 @@ export class CommuneUtils { getRampartRepairTargets(room: Room) { if (room.rampartRepairStructures) return room.rampartRepairStructures - const repairTargets = this.getRampartRepairTargetsFromCoords(room) - if (repairTargets.length) { - room.rampartRepairStructures = repairTargets - return repairTargets - } - - const structureCoords = new Set() + const repairTargets: StructureRampart[] = [] const rampartPlans = room.roomManager.rampartPlans const RCL = room.controller.level const buildSecondMincutLayer = room.communeManager.buildSecondMincutLayer const nukeTargetCoords = room.roomManager.nukeTargetCoords - for (const packedCoord in rampartPlans.map) { - - const data = rampartPlans.map[packedCoord] - if (data.minRCL > RCL) continue - - structureCoords.add(packedCoord) - - const coord = unpackCoord(packedCoord) - const structure = room.findStructureAtCoord(coord, structure => structure.structureType === STRUCTURE_RAMPART) - if (!structure) continue + for (const structure of room.roomManager.structures.rampart) { + const data = rampartPlans.map[packCoord(structure.pos)] + if (!data) continue + if (data.minRCL > room.controller.level) continue if ( - data.coversStructure && - !room.coordHasStructureTypes(structure.pos, structureTypesToProtectSet) + data.coversStructure && + !room.coordHasStructureTypes(structure.pos, structureTypesToProtectSet) ) { continue } if (data.buildForNuke) { - if (!nukeTargetCoords[packAsNum(structure.pos)]) continue + if (!room.roomManager.nukeTargetCoords[packAsNum(structure.pos)]) continue repairTargets.push(structure) continue @@ -135,31 +123,9 @@ export class CommuneUtils { } repairTargets.push(structure) - break - } - - communeDataManager.data[room.name].rampartRepairStructureCoords = structureCoords - - room.rampartRepairStructures - return repairTargets } - private getRampartRepairTargetsFromCoords(room: Room) { - - const repairTargets: StructureRampart[] = [] - const structureCoords = communeDataManager.data[room.name].rampartRepairStructureCoords - if (!structureCoords) return repairTargets - - for (const packedCoord of structureCoords) { - - const coord = unpackCoord(packedCoord) - - const structure = room.findStructureAtCoord(coord, structure => structure.structureType === STRUCTURE_RAMPART) - if (!structure) return [] - - repairTargets.push(structure) - } - + room.rampartRepairStructures return repairTargets } } From d136ae4977e02e3d0d8fa1703b32a67de06a240f Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Fri, 29 Dec 2023 22:11:29 -0800 Subject: [PATCH 041/190] minor repair structure change --- src/room/commune/communeUtils.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/room/commune/communeUtils.ts b/src/room/commune/communeUtils.ts index 7a59947bf..dc5980250 100644 --- a/src/room/commune/communeUtils.ts +++ b/src/room/commune/communeUtils.ts @@ -43,13 +43,12 @@ export class CommuneUtils { const structureCoords = new Set() const basePlans = room.roomManager.basePlans - const RCL = room.controller.level for (const packedCoord in basePlans.map) { const coordData = basePlans.map[packedCoord] for (const data of coordData) { - if (data.minRCL > RCL) continue + if (data.minRCL > room.controller.level) continue if (!generalRepairStructureTypes.has(data.structureType as (STRUCTURE_ROAD | STRUCTURE_CONTAINER))) break structureCoords.add(packedCoord) @@ -93,7 +92,6 @@ export class CommuneUtils { const repairTargets: StructureRampart[] = [] const rampartPlans = room.roomManager.rampartPlans - const RCL = room.controller.level const buildSecondMincutLayer = room.communeManager.buildSecondMincutLayer const nukeTargetCoords = room.roomManager.nukeTargetCoords @@ -110,7 +108,7 @@ export class CommuneUtils { } if (data.buildForNuke) { - if (!room.roomManager.nukeTargetCoords[packAsNum(structure.pos)]) continue + if (!nukeTargetCoords[packAsNum(structure.pos)]) continue repairTargets.push(structure) continue From 6b1f4ec9398460b10aac3169f38fde79386964be Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Fri, 29 Dec 2023 22:23:38 -0800 Subject: [PATCH 042/190] potential observer optimizations --- src/room/commune/observer.ts | 118 +++++++++++++++-------------------- 1 file changed, 52 insertions(+), 66 deletions(-) diff --git a/src/room/commune/observer.ts b/src/room/commune/observer.ts index f7c12966c..1c3733a8f 100644 --- a/src/room/commune/observer.ts +++ b/src/room/commune/observer.ts @@ -1,81 +1,67 @@ import { customLog } from 'utils/logging' -import { randomTick } from 'utils/utils' +import { forRoomNamesAroundRangeXY, randomTick, utils } from 'utils/utils' import { CommuneManager } from './commune' import { RoomMemoryKeys } from 'international/constants' import { roomNameUtils } from 'room/roomNameUtils' +import { roomUtils } from 'room/roomUtils' export class ObserverManager { - communeManager: CommuneManager - scoutTarget: string - observer: StructureObserver + communeManager: CommuneManager + scoutTarget: string + observer: StructureObserver - constructor(communeManager: CommuneManager) { - this.communeManager = communeManager - } + constructor(communeManager: CommuneManager) { + this.communeManager = communeManager + } - preTickRun() { - // Run only every so often + preTickRun() { + // Run only every so often + if (!utils.isTickInterval(10)) return - if (!randomTick()) return + this.observer = this.communeManager.room.roomManager.structures.observer[0] + if (!this.observer) return - this.observer = this.communeManager.room.roomManager.structures.observer[0] - if (!this.observer) return + const scoutTarget = this.findScoutTarget() + if (!scoutTarget) return - this.findScoutTarget() - if (!this.scoutTarget) return + this.observer.observeRoom(scoutTarget) + } - this.observer.observeRoom(this.scoutTarget) - } + findScoutTarget() { + const roomCoord = roomNameUtils.pack(this.communeManager.room.name) + + let scoutTarget: string | undefined + let highestScore = 0 + + forRoomNamesAroundRangeXY(roomCoord.x, roomCoord.y, OBSERVER_RANGE, (x, y) => { + const roomName = roomNameUtils.unpackXY(x, y) + + const score = this.findRoomNameScore(roomName) + if (score <= highestScore) return + + highestScore = score + scoutTarget = roomName + }) - findScoutTarget() { - const roomCoord = roomNameUtils.pack(this.communeManager.room.name) - - let highestScore = 0 - - let x1 = roomCoord.x - 10 - let y1 = roomCoord.y - 10 - let x2 = roomCoord.x + 10 - let y2 = roomCoord.y + 10 - - for (let x = x1; x <= x2; x += 1) { - for (let y = y1; y <= y2; y += 1) { - const roomName = roomNameUtils.unpackXY(x, y) - - // Ensure the statuses are the same - - if ( - Game.map.getRoomStatus(roomName).status !== - Game.map.getRoomStatus(this.communeManager.room.name).status - ) - continue - - let score - - if (!Memory.rooms[roomName]) { - score = - (OBSERVER_RANGE - - Game.map.getRoomLinearDistance( - roomName, - this.communeManager.room.name, - )) * - 1000 - } else { - score = - Game.time - - (Memory.rooms[roomName][RoomMemoryKeys.lastScout] || 0) + - (OBSERVER_RANGE - - Game.map.getRoomLinearDistance( - roomName, - this.communeManager.room.name, - )) * - 10 - } - - if (score <= highestScore) continue - - highestScore = score - this.scoutTarget = roomName - } - } + return scoutTarget + } + + private findRoomNameScore(roomName: string) { + const roomsDistance = + OBSERVER_RANGE - Game.map.getRoomLinearDistance(roomName, this.communeManager.room.name) + + const roomMemory = Memory.rooms[roomName] + if (!roomMemory) { + const score = roomsDistance * 1000 + return score } + + // We have memory of the room. Consider when we last scouted into the score + + // The time that's surpassed since we last scouted the room + const scoutDifference = Game.time - (roomMemory[RoomMemoryKeys.lastScout] || 0) + + const score = scoutDifference + roomsDistance * 10 + return score + } } From 213c237ce52aa6c1f8cb7a613c6f19b664d9c7b6 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 30 Dec 2023 13:42:39 -0800 Subject: [PATCH 043/190] attempted movement fixes --- src/international/simpleAllies.ts | 16 ++++++++++++++-- src/room/commune/commune.ts | 2 +- src/room/construction/communePlanner.ts | 5 +++-- src/room/creeps/creepMoveUtils.ts | 11 ++++++----- 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/international/simpleAllies.ts b/src/international/simpleAllies.ts index a6a90dddb..9270f3a33 100644 --- a/src/international/simpleAllies.ts +++ b/src/international/simpleAllies.ts @@ -182,8 +182,20 @@ export class SimpleAllies { */ initRun() { // Reset the data of myRequests - this.myRequests = {...requestsSekelton} - this.myResponses = {...responsesSkeleton} + this.myRequests = { + resource: [], + defense: [], + attack: [], + player: [], + work: [], + funnel: [], + room: [], + } + this.myResponses = { + defense: [], + attack: [], + work: [], + } this.readAllySegment() } diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index 7bc02d6d7..84d356ec1 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -298,7 +298,7 @@ export class CommuneManager { initRun() { this.preTickTest() - this.room.roomManager.communePlanner.preTickRun() + this.room.roomManager.communePlanner.preTickRun(this.room) const roomMemory = Memory.rooms[this.room.name] if (!roomMemory[RoomMemoryKeys.communePlanned]) return diff --git a/src/room/construction/communePlanner.ts b/src/room/construction/communePlanner.ts index 3b7bc1bd7..9c851b5ed 100644 --- a/src/room/construction/communePlanner.ts +++ b/src/room/construction/communePlanner.ts @@ -216,8 +216,9 @@ export class CommunePlanner { this.roomManager = roomManager } - preTickRun() { - this.room = this.roomManager.room + preTickRun(room: Room) { + this.roomManager = room.roomManager + this.room = room if (this.room.memory[RoomMemoryKeys.communePlanned] !== undefined) return Result.noAction diff --git a/src/room/creeps/creepMoveUtils.ts b/src/room/creeps/creepMoveUtils.ts index 2546c7a44..428850653 100644 --- a/src/room/creeps/creepMoveUtils.ts +++ b/src/room/creeps/creepMoveUtils.ts @@ -47,17 +47,17 @@ export class CreepMoveUtils { let iterations = -1 while (iterations < maxIterations) { - const pos = unpackPosAt(creepMemory[CreepMemoryKeys.path], iterations + 1) if (arePositionsEqual(creep.pos, pos)) { - - creepMemory[CreepMemoryKeys.path].slice(iterations * packedPosLength) + creepMemory[CreepMemoryKeys.path] = creepMemory[CreepMemoryKeys.path].slice( + iterations * packedPosLength, + ) return [pos, iterations] } - iterations += 1; + iterations += 1 } - Result.fail + return Result.fail } findNewPath(creep: Creep, args: CustomPathFinderArgs, opts: MoveRequestOpts) { @@ -129,6 +129,7 @@ export class CreepMoveUtils { return Result.success } creep.assignMoveRequest(path[0]) + return Result.success } private registerSpawnDirections(creep: Creep, path: RoomPosition[]) { From 180301b874398a6b6b4a762f4a1f95e90f52482f Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 30 Dec 2023 14:09:55 -0800 Subject: [PATCH 044/190] fix planning bug --- src/room/roomFunctions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index 5ddffff9b..e4287693a 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -1525,7 +1525,7 @@ Room.prototype.createWorkRequest = function () { if (communePlanned === false) return false if (communePlanned !== true) { - const result = this.roomManager.communePlanner.preTickRun() + const result = this.roomManager.communePlanner.preTickRun(this) if (result === Result.fail) { this.memory[RoomMemoryKeys.communePlanned] = false return false From 12d91089153cb5eb49990f705c6c2074edba7966 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 30 Dec 2023 18:54:19 -0800 Subject: [PATCH 045/190] fix spawning issue, more use of myCreepUtils.parts --- src/international/constants.ts | 1 + src/international/customPathFinder.ts | 1 + src/international/flags.ts | 23 + src/room/commune/remotesManager.ts | 8 +- .../spawning/spawnRequestConstructors.ts | 61 +- src/room/commune/spawning/spawnRequests.ts | 5 +- src/room/construction/communePlanner.ts | 6 +- src/room/creeps/creepAdditions.ts | 19 +- .../creeps/creepPrototypes/creepFunctions.ts | 5 +- src/room/creeps/creepUtils.ts | 16 +- .../creeps/roleManagers/commune/hauler.ts | 20 +- .../roleManagers/commune/mineralHarvester.ts | 5 +- .../roleManagers/commune/sourceHarvester.ts | 8 +- .../international/allyVanguard.ts | 3 +- .../roleManagers/international/claimer.ts | 5 +- .../roleManagers/international/vanguard.ts | 7 +- .../roleManagers/remote/remoteBuilder.ts | 7 +- .../roleManagers/remote/remoteReserver.ts | 411 +++++---- .../remote/remoteSourceHarvester.ts | 786 +++++++++--------- src/room/room.ts | 1 - src/room/roomFunctions.ts | 26 +- src/types.d.ts | 5 - 22 files changed, 697 insertions(+), 732 deletions(-) diff --git a/src/international/constants.ts b/src/international/constants.ts index eab0e8fb9..8cb715a5c 100644 --- a/src/international/constants.ts +++ b/src/international/constants.ts @@ -975,6 +975,7 @@ export const remoteRoles: export const CPUBucketCapacity = 10000 export const CPUMaxPerTick = 500 +export const basePlanCPUBucketThreshold = CPUBucketCapacity * 0.5 /** * Roles that should attempt relaying diff --git a/src/international/customPathFinder.ts b/src/international/customPathFinder.ts index f582dd4bb..8e94edd25 100644 --- a/src/international/customPathFinder.ts +++ b/src/international/customPathFinder.ts @@ -262,6 +262,7 @@ export class CustomPathFinder { if (!args.weightCommuneStructurePlans) return false const roomMemory = Memory.rooms[roomName] + if (!roomMemory) return false if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.commune) return false const room = Game.rooms[roomName] diff --git a/src/international/flags.ts b/src/international/flags.ts index d9829609a..01779eead 100644 --- a/src/international/flags.ts +++ b/src/international/flags.ts @@ -381,6 +381,7 @@ export class FlagManager { } const roomMemory = Memory.rooms[room.name] + if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.commune) return const sourceIDs = roomMemory[RoomMemoryKeys.communeSources] for (let sourceIndex = 0; sourceIndex < sourceIDs.length; sourceIndex++) { @@ -411,6 +412,7 @@ export class FlagManager { } const roomMemory = Memory.rooms[room.name] + if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.commune) return const containers = room.roomManager.sourceContainers for (let sourceIndex = 0; sourceIndex < containers.length; sourceIndex++) { @@ -434,6 +436,27 @@ export class FlagManager { } } + private remoteSourceVisuals(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const room = Game.rooms[roomName] + if (!room) { + + flag.setColor(COLOR_RED) + return + } + + const roomMemory = Memory.rooms[room.name] + if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.remote) return + + const sourceIDs = roomMemory[RoomMemoryKeys.remoteSources] + for (let sourceIndex = 0; sourceIndex < sourceIDs.length; sourceIndex++) { + + const source = findObjectWithID(sourceIDs[sourceIndex]) + room.visual.text(sourceIndex.toString(), source.pos) + } + } + private calculateDynamicScore(flagName: string, flagNameParts: string[]) { const flag = Game.flags[flagName] const roomName = flagNameParts[1] || flag.pos.roomName diff --git a/src/room/commune/remotesManager.ts b/src/room/commune/remotesManager.ts index b0f33161e..12ac723e0 100644 --- a/src/room/commune/remotesManager.ts +++ b/src/room/commune/remotesManager.ts @@ -98,7 +98,7 @@ export class RemotesManager { // The room is closed or is now a respawn or novice zone if ( - randomTick(20) && + utils.isTickInterval(100) && Game.map.getRoomStatus(remoteName).status !== Game.map.getRoomStatus(room.name).status ) { @@ -106,7 +106,7 @@ export class RemotesManager { continue } - if (remoteMemory[RoomMemoryKeys.abandonRemote] > 0) { + if (remoteMemory[RoomMemoryKeys.abandonRemote] !== undefined && remoteMemory[RoomMemoryKeys.abandonRemote] > 0) { if (!remoteMemory[RoomMemoryKeys.recursedAbandonment]) { this.recurseAbandonment(remoteName) } @@ -269,7 +269,7 @@ export class RemotesManager { if ( (remoteMemory[RoomMemoryKeys.enemyReserved] && remoteMemory[RoomMemoryKeys.invaderCore]) || - remoteMemory[RoomMemoryKeys.remoteDismantler] + remoteMemory[RoomMemoryKeys.remoteDismantler] > 0 ) { for (const i in remoteMemory[RoomMemoryKeys.maxSourceIncome]) { remoteMemory[RoomMemoryKeys.maxSourceIncome][i] = 0 @@ -366,7 +366,7 @@ export class RemotesManager { // If we aren't on the inverval to check for use if (!utils.isTickInterval(manageUseInterval)) { // Inform the current state of things - return roomMemory[RoomMemoryKeys.disable] + return !roomMemory[RoomMemoryKeys.disable] } // Otherwise see if the state needs to be updated diff --git a/src/room/commune/spawning/spawnRequestConstructors.ts b/src/room/commune/spawning/spawnRequestConstructors.ts index 14ab8a946..5f4cf0ec7 100644 --- a/src/room/commune/spawning/spawnRequestConstructors.ts +++ b/src/room/commune/spawning/spawnRequestConstructors.ts @@ -207,7 +207,7 @@ export class SpawnRequestConstructors { // So long as there are totalExtraParts left to assign - while (totalExtraParts > args.extraParts.length && args.maxCreeps > 0) { + while (totalExtraParts >= args.extraParts.length && args.maxCreeps > 0) { // Construct important imformation for the spawnRequest let bodyPartCounts: { [key in PartsByPriority]: number } = { @@ -247,61 +247,30 @@ export class SpawnRequestConstructors { } } - // So long as the cost is less than the maxCostPerCreep and there are remainingAllowedParts + let stop = false + // So long as the cost is less than the maxCostPerCreep and the size is below max size while (cost < maxCostPerCreep && remainingAllowedParts - args.extraParts.length >= 0) { - const addedParts: BodyPartConstant[] = [] - - for (const part of args.extraParts) { - cost += BODYPART_COST[part] - addedParts.push(part) - } - - remainingAllowedParts -= args.extraParts.length - totalExtraParts -= args.extraParts.length - - // If the cost is more than the maxCostPerCreep or there are negative remainingAllowedParts or the body is more than 50 - - if (cost > maxCostPerCreep) { - // Assign partIndex as the length of extraParts - - let partIndex = args.extraParts.length - 1 - - // So long as partIndex is greater or equal to 0 - - while (partIndex >= 0) { - const part = args.extraParts[partIndex] - - const partCost = BODYPART_COST[part] - // if it's not expensive enough and we have enough parts - if (cost - partCost < args.minCostPerCreep) break - - // And remove the part's cost to the cost - cost -= partCost - // Remove the last part in the body - addedParts.pop() - - // Increase remainingAllowedParts and totalExtraParts + tier += 1 - remainingAllowedParts += 1 - totalExtraParts += 1 + for (const part of args.extraParts) { - // Setup to handle the next part - partIndex -= 1 + const partCost = BODYPART_COST[part] + // If the new cost will make us too expensive and we already fulfill the min cost, stop + if (cost + partCost > maxCostPerCreep && cost >= args.minCostPerCreep) { + stop = true + break } - // Increase tier by a percentage (2 decimals) of the extraParts it added + cost += BODYPART_COST[part] + bodyPartCounts[part] += 1 - tier += Math.floor((addedParts.length / args.extraParts.length) * 100) / 100 - for (const part of addedParts) bodyPartCounts[part] += 1 - break + remainingAllowedParts -= 1 + totalExtraParts -= 1 } - tier += 1 - for (const part of addedParts) { - bodyPartCounts[part] += 1 - } + if (stop) break } // Create a spawnRequest using previously constructed information diff --git a/src/room/commune/spawning/spawnRequests.ts b/src/room/commune/spawning/spawnRequests.ts index 4111184ce..1b3ffbc34 100644 --- a/src/room/commune/spawning/spawnRequests.ts +++ b/src/room/commune/spawning/spawnRequests.ts @@ -1133,7 +1133,7 @@ export class SpawnRequestsManager { if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) continue if (remoteMemory[RoomMemoryKeys.commune] !== this.communeManager.room.name) continue if (remoteMemory[RoomMemoryKeys.enemyReserved]) continue - if (remoteMemory[RoomMemoryKeys.abandonRemote]) continue + if (remoteMemory[RoomMemoryKeys.abandonRemote] > 0) continue priorityIncrement += 1 @@ -1210,10 +1210,9 @@ export class SpawnRequestsManager { role, defaultParts: [CARRY], extraParts: [WORK, WORK, MOVE, WORK, MOVE], - partsMultiplier: Math.floor(partsMultiplier / 2), + partsMultiplier: Math.floor(partsMultiplier / 3), spawnGroup, threshold: 0.1, - maxCreeps: sourcePositionsAmount, maxCostPerCreep: 50 + 400 * 2, minCostPerCreep: 300, diff --git a/src/room/construction/communePlanner.ts b/src/room/construction/communePlanner.ts index 9c851b5ed..186039170 100644 --- a/src/room/construction/communePlanner.ts +++ b/src/room/construction/communePlanner.ts @@ -15,6 +15,7 @@ import { buildableStructureTypes, structureTypesToProtectSet, RoomMemoryKeys, + basePlanCPUBucketThreshold, } from 'international/constants' import { areCoordsEqual, @@ -223,8 +224,11 @@ export class CommunePlanner { if (this.room.memory[RoomMemoryKeys.communePlanned] !== undefined) return Result.noAction // Stop if there isn't sufficient CPU - if (Game.cpu.bucket < CPUMaxPerTick) return Result.noAction + if (collectiveManager.communes.size <= 1 && Game.cpu.bucket < basePlanCPUBucketThreshold) { + return Result.noAction + } + if (this.recording) this.record() diff --git a/src/room/creeps/creepAdditions.ts b/src/room/creeps/creepAdditions.ts index 67f7692e2..a39cca7d2 100644 --- a/src/room/creeps/creepAdditions.ts +++ b/src/room/creeps/creepAdditions.ts @@ -147,23 +147,6 @@ Object.defineProperties(Creep.prototype, { return this._netTowerDamage }, }, - upgradeStrength: { - get() { - if (this._upgradeStrength !== undefined) return this._upgradeStrength - - this._upgradeStrength = this.parts.work - const boosts = this.boosts - - if (boosts.XGH2O > 0) - return (this._upgradeStrength *= BOOSTS.work.XGH2O.upgradeController) - if (boosts.GH2O > 0) - return (this._upgradeStrength *= BOOSTS.upgrade.GH2O.upgradeController) - if (boosts.GH > 0) - return (this._upgradeStrength *= BOOSTS.upgrade.GH.upgradeController) - - return this._upgradeStrength - }, - }, combatStrength: { get() { if (this._combatStrength) return this._combatStrength @@ -260,7 +243,7 @@ Object.defineProperties(Creep.prototype, { get() { if (this._canMove !== undefined) return this._canMove - return (this._canMove = !this.fatigue && !this.spawning && this.parts.move > 0) + return (this._canMove = !this.fatigue && !this.spawning && this.getActiveBodyparts(MOVE) > 0) }, }, idealSquadMembers: { diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index 892737c8a..99cdba88f 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -60,6 +60,7 @@ import { CreepRoomLogisticsRequest, RoomLogisticsRequest } from 'types/roomReque import { customLog, stringifyLog } from 'utils/logging' import { customPathFinder } from 'international/customPathFinder' import { communeUtils } from 'room/commune/communeUtils' +import { myCreepUtils } from '../myCreepUtils' Creep.prototype.update = function () {} @@ -289,7 +290,7 @@ Creep.prototype.advancedBuildCSite = function (cSite) { const energySpentOnConstruction = creepUtils.findEnergySpentOnConstruction( this, cSite, - this.parts.work, + myCreepUtils.parts(this).work, ) this.nextStore.energy -= energySpentOnConstruction @@ -371,7 +372,7 @@ Creep.prototype.advancedBuildAllyCSite = function () { const energySpentOnConstruction = creepUtils.findEnergySpentOnConstruction( this, cSiteTarget, - this.parts.work, + myCreepUtils.parts(this).work, ) this.nextStore.energy -= energySpentOnConstruction diff --git a/src/room/creeps/creepUtils.ts b/src/room/creeps/creepUtils.ts index 6b18771ec..1852bb7b0 100644 --- a/src/room/creeps/creepUtils.ts +++ b/src/room/creeps/creepUtils.ts @@ -45,7 +45,7 @@ export class CreepUtils { if (creep.worked) return Result.noAction if (creep.repair(target) !== OK) return Result.fail - const workParts = creep.parts.work + const workParts = myCreepUtils.parts(creep).work // Estimate the repair cost, assuming it goes through const energySpentOnRepair = Math.min( workParts, @@ -92,7 +92,7 @@ export class CreepUtils { // Otherwise if we don't need resources and can maintain - const workPartCount = creep.parts.work + const workPartCount = myCreepUtils.parts(creep).work let repairTarget = creep.findRepairTarget() if (!repairTarget) { @@ -173,7 +173,7 @@ export class CreepUtils { creep.message += '🗺️' - const workPartCount = creep.parts.work + const workPartCount = myCreepUtils.parts(creep).work // At some point we should compare this search with flat searching positions around the creep const structure = communeUtils.getGeneralRepairStructures(creep.room).find(structure => { return ( @@ -189,7 +189,7 @@ export class CreepUtils { return Result.success } - findEnergySpentOnConstruction(creep: Creep, cSite: ConstructionSite, workParts: number) { + findEnergySpentOnConstruction(creep: Creep, cSite: ConstructionSite, workParts: number = myCreepUtils.parts(creep).work) { const energySpent = Math.min( workParts * BUILD_POWER, // In private servers sometimes progress can be greater than progress total @@ -247,7 +247,7 @@ export class CreepUtils { creep.actionCoord = creep.room.roomManager.centerUpgradePos - const workPartCount = creep.parts.work + const workPartCount = myCreepUtils.parts(creep).work const controllerRange = getRange(creep.pos, controller.pos) if (controllerRange <= 3 && creep.nextStore.energy > 0) { @@ -373,7 +373,7 @@ export class CreepUtils { const energySpentOnUpgrades = Math.min( creep.nextStore.energy, - creep.parts.work * UPGRADE_CONTROLLER_POWER, + myCreepUtils.parts(creep).work * UPGRADE_CONTROLLER_POWER, ) statsManager.updateStat(creep.room.name, 'eou', energySpentOnUpgrades) @@ -427,7 +427,7 @@ export class CreepUtils { return upgradePos } - harvestSource(creep: Creep, source: Source) { + harvestSource(creep: Creep, source: Source, workParts: number = myCreepUtils.parts(creep).work) { if (creep.harvest(source) !== OK) { return Result.fail } @@ -435,7 +435,7 @@ export class CreepUtils { creep.worked = WorkTypes.harvest // Find the presumed energy harvested this tick - const energyHarvested = Math.min(myCreepUtils.parts(creep).work * HARVEST_POWER, source.energy) + const energyHarvested = Math.min(workParts * HARVEST_POWER, source.energy) creep.nextStore.energy += energyHarvested // Record the harvest in stats statsManager.updateStat(creep.room.name, RoomStatsKeys.EnergyInputHarvest, energyHarvested) diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index e9c081c96..49328b0a3 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -13,6 +13,7 @@ import { } from 'international/constants' import { statsManager } from 'international/statsManager' import { packCoord, reversePosList, unpackCoord, unpackPosAt } from 'other/codec' +import { myCreepUtils } from 'room/creeps/myCreepUtils' import { customLog } from 'utils/logging' import { findClosestObject, @@ -107,7 +108,8 @@ export class Hauler extends Creep { creepMemory[CreepMemoryKeys.previousRelayer] = undefined } - this.commune.communeManager.haulerCarryParts += this.parts.carry + const carryParts = myCreepUtils.parts(this).carry + this.commune.communeManager.haulerCarryParts += carryParts if (this.hasValidRemote()) { this.applyRemote() @@ -119,7 +121,7 @@ export class Hauler extends Creep { const commune = this.commune if (creepMemory[CreepMemoryKeys.taskRoom] === commune.name) { - commune.communeManager.communeHaulerCarryParts += this.parts.carry + commune.communeManager.communeHaulerCarryParts += carryParts commune.communeManager.communeHaulers.push(this.name) } } @@ -773,7 +775,7 @@ export class Hauler extends Creep { if (creepMemory[CreepMemoryKeys.previousRelayer] && creepMemory[CreepMemoryKeys.previousRelayer][0] === creepAtPos.name) return false // ensure the creep receiving creep is empty - if (creepAtPos.usedNextStore > 0) return false + if (creepAtPos.store.getUsedCapacity() > 0) return false let amount: number | undefined const logisticsRequest = Memory.creeps[this.name][CreepMemoryKeys.roomLogisticsRequests][0] @@ -799,9 +801,11 @@ export class Hauler extends Creep { log('creepAtPos Energy', creepAtPos.freeNextStore) log('nextEnergy', Math.min(this.store.energy, creepAtPos.freeNextStore)) */ - const nextEnergy = amount ?? Math.min(this.store.energy, creepAtPos.freeNextStore) - this.nextStore.energy -= nextEnergy - creepAtPos.nextStore.energy += nextEnergy + const transferAmount = amount ?? Math.min(this.store.getUsedCapacity(RESOURCE_ENERGY), creepAtPos.store.getFreeCapacity()) + this.reserveStore.energy -= transferAmount + this.nextStore.energy -= transferAmount + creepAtPos.reserveStore.energy += transferAmount + creepAtPos.nextStore.energy += transferAmount /* log('this needs res', this.needsResources()) log('creepAtPos need res', creepAtPos.needsResources()) @@ -1015,7 +1019,7 @@ export class Hauler extends Creep { if (this.commune.communeManager.hasSufficientRoads) { // If we have a body not optimized for roads, try to respond to a remote instead - if (this.parts[MOVE] / this.body.length >= 0.5) return Result.fail + if (myCreepUtils.parts(this).move / this.body.length >= 0.5) return Result.fail } // success, we are working for the commune now @@ -1023,7 +1027,7 @@ export class Hauler extends Creep { const creepMemory = Memory.creeps[this.name] if (!creepMemory[CreepMemoryKeys.taskRoom]) { creepMemory[CreepMemoryKeys.taskRoom] = this.room.name - this.commune.communeManager.communeHaulerCarryParts += this.parts.carry + this.commune.communeManager.communeHaulerCarryParts += myCreepUtils.parts(this).carry } return this.runCommuneLogistics() diff --git a/src/room/creeps/roleManagers/commune/mineralHarvester.ts b/src/room/creeps/roleManagers/commune/mineralHarvester.ts index f2805b250..5c1997a7e 100644 --- a/src/room/creeps/roleManagers/commune/mineralHarvester.ts +++ b/src/room/creeps/roleManagers/commune/mineralHarvester.ts @@ -7,6 +7,7 @@ import { import { statsManager } from 'international/statsManager' import { getRangeXY, getRange, areCoordsEqual } from 'utils/utils' import { reversePosList, unpackPos } from 'other/codec' +import { myCreepUtils } from 'room/creeps/myCreepUtils' export class MineralHarvester extends Creep { update() { @@ -17,7 +18,7 @@ export class MineralHarvester extends Creep { } initRun() { - this.room.communeManager.mineralHarvestStrength += this.parts.work * HARVEST_MINERAL_POWER + this.room.communeManager.mineralHarvestStrength += myCreepUtils.parts(this).work * HARVEST_MINERAL_POWER } advancedHarvestMineral?(mineral: Mineral) { @@ -59,7 +60,7 @@ export class MineralHarvester extends Creep { // Find amount of minerals harvested and record it in data const mineralsHarvested = Math.min( - this.parts.work * HARVEST_MINERAL_POWER, + myCreepUtils.parts(this).work * HARVEST_MINERAL_POWER, mineral.mineralAmount, ) this.reserveStore[mineral.mineralType] += mineralsHarvested diff --git a/src/room/creeps/roleManagers/commune/sourceHarvester.ts b/src/room/creeps/roleManagers/commune/sourceHarvester.ts index 2e28ba55b..407fd2653 100644 --- a/src/room/creeps/roleManagers/commune/sourceHarvester.ts +++ b/src/room/creeps/roleManagers/commune/sourceHarvester.ts @@ -19,6 +19,7 @@ import { import { packCoord, packPos, reversePosList, unpackPos } from 'other/codec' import { Hauler } from './hauler' import { creepUtils } from 'room/creeps/creepUtils' +import { myCreepUtils } from 'room/creeps/myCreepUtils' export class SourceHarvester extends Creep { constructor(creepID: Id) { @@ -186,7 +187,7 @@ export class SourceHarvester extends Creep { ) return false if (!sourceContainer) { - if (this.nextStore.energy < this.parts.work) { + if (this.nextStore.energy < myCreepUtils.parts(this).work) { if (this.movedResource) return false const result = this.runRoomLogisticsRequestAdvanced({ @@ -213,12 +214,9 @@ export class SourceHarvester extends Creep { return true } - // Get the creep's number of work parts - - const workPartCount = this.parts.work + const workPartCount = myCreepUtils.parts(this).work // If the sourceContainer doesn't need repairing, inform false - if (sourceContainer.hitsMax - sourceContainer.hits < workPartCount * REPAIR_POWER) return false diff --git a/src/room/creeps/roleManagers/international/allyVanguard.ts b/src/room/creeps/roleManagers/international/allyVanguard.ts index ae2f1bc34..1486ab85b 100644 --- a/src/room/creeps/roleManagers/international/allyVanguard.ts +++ b/src/room/creeps/roleManagers/international/allyVanguard.ts @@ -9,6 +9,7 @@ import { import { findObjectWithID, getRangeXY, getRange } from 'utils/utils' import { unpackCoord } from 'other/codec' import { creepUtils } from 'room/creeps/creepUtils' +import { myCreepUtils } from 'room/creeps/myCreepUtils' export class AllyVanguard extends Creep { update() { @@ -27,7 +28,7 @@ export class AllyVanguard extends Creep { if (!request) return - request[WorkRequestKeys.allyVanguard] -= this.parts.work + request[WorkRequestKeys.allyVanguard] -= myCreepUtils.parts(this).work } findRemote?(): boolean { diff --git a/src/room/creeps/roleManagers/international/claimer.ts b/src/room/creeps/roleManagers/international/claimer.ts index e9e00d833..d42cb666e 100644 --- a/src/room/creeps/roleManagers/international/claimer.ts +++ b/src/room/creeps/roleManagers/international/claimer.ts @@ -1,4 +1,5 @@ import { WorkRequestKeys, CreepMemoryKeys, Result, RoomTypes } from 'international/constants' +import { myCreepUtils } from 'room/creeps/myCreepUtils' export class Claimer extends Creep { constructor(creepID: Id) { @@ -33,7 +34,7 @@ export class Claimer extends Creep { goals: [{ pos: room.controller.pos, range: 1 }], avoidEnemyRanges: true, plainCost: 1, - swampCost: creep.parts.move >= 5 ? 1 : undefined, + swampCost: myCreepUtils.parts(this).move >= 5 ? 1 : undefined, }) return @@ -84,7 +85,7 @@ export class Claimer extends Creep { ], avoidEnemyRanges: true, plainCost: 1, - swampCost: creep.parts.move >= 5 ? 1 : undefined, + swampCost: myCreepUtils.parts(creep).move >= 5 ? 1 : undefined, typeWeights: { [RoomTypes.enemy]: Infinity, [RoomTypes.ally]: Infinity, diff --git a/src/room/creeps/roleManagers/international/vanguard.ts b/src/room/creeps/roleManagers/international/vanguard.ts index 051583abe..2b6fa17f0 100644 --- a/src/room/creeps/roleManagers/international/vanguard.ts +++ b/src/room/creeps/roleManagers/international/vanguard.ts @@ -8,6 +8,7 @@ import { import { findObjectWithID, getRangeXY, getRange } from 'utils/utils' import { unpackCoord } from 'other/codec' import { creepUtils } from 'room/creeps/creepUtils' +import { myCreepUtils } from 'room/creeps/myCreepUtils' export class Vanguard extends Creep { constructor(creepID: Id) { @@ -34,7 +35,7 @@ export class Vanguard extends Creep { const request = Memory.workRequests[this.memory[CreepMemoryKeys.workRequest]] if (!request) return - request[WorkRequestKeys.vanguard] -= this.parts.work + request[WorkRequestKeys.vanguard] -= myCreepUtils.parts(this).work } /** @@ -89,7 +90,7 @@ export class Vanguard extends Creep { this.upgradeController(controller) - if (this.store.energy - this.parts.work * UPGRADE_CONTROLLER_POWER <= 0) { + if (this.store.energy - myCreepUtils.parts(this).work * UPGRADE_CONTROLLER_POWER <= 0) { delete Memory.creeps[this.name][CreepMemoryKeys.targetID] } @@ -132,7 +133,7 @@ export class Vanguard extends Creep { this.repair(rampartTarget) - if (this.store.energy - this.parts.work * REPAIR_POWER * REPAIR_COST <= 0) { + if (this.store.energy - myCreepUtils.parts(this).work * REPAIR_POWER * REPAIR_COST <= 0) { delete creepMemory[CreepMemoryKeys.targetID] } return true diff --git a/src/room/creeps/roleManagers/remote/remoteBuilder.ts b/src/room/creeps/roleManagers/remote/remoteBuilder.ts index 80c9538c6..1d78fcb4e 100644 --- a/src/room/creeps/roleManagers/remote/remoteBuilder.ts +++ b/src/room/creeps/roleManagers/remote/remoteBuilder.ts @@ -16,6 +16,7 @@ import { } from 'utils/utils' import { packCoord, reversePosList, unpackPosAt } from 'other/codec' import { indexOf } from 'lodash' +import { myCreepUtils } from 'room/creeps/myCreepUtils' export class RemoteBuilder extends Creep { constructor(creepID: Id) { @@ -52,7 +53,7 @@ export class RemoteBuilder extends Creep { // Record response - Memory.rooms[remoteName][RoomMemoryKeys.remoteBuilder] += this.parts.work + Memory.rooms[remoteName][RoomMemoryKeys.remoteBuilder] += myCreepUtils.parts(this).work } hasValidRemote?() { @@ -99,7 +100,7 @@ export class RemoteBuilder extends Creep { if (this.isDying()) return - Memory.rooms[remoteName][RoomMemoryKeys.remoteBuilder] += this.parts.work + Memory.rooms[remoteName][RoomMemoryKeys.remoteBuilder] += myCreepUtils.parts(this).work } removeRemote?() { @@ -108,7 +109,7 @@ export class RemoteBuilder extends Creep { if (!this.isDying()) { const remoteName = creepMemory[CreepMemoryKeys.remote] - Memory.rooms[remoteName][RoomMemoryKeys.remoteBuilder] -= this.parts.work + Memory.rooms[remoteName][RoomMemoryKeys.remoteBuilder] -= myCreepUtils.parts(this).work } delete creepMemory[CreepMemoryKeys.remote] diff --git a/src/room/creeps/roleManagers/remote/remoteReserver.ts b/src/room/creeps/roleManagers/remote/remoteReserver.ts index 79ddcbcec..705584fa1 100644 --- a/src/room/creeps/roleManagers/remote/remoteReserver.ts +++ b/src/room/creeps/roleManagers/remote/remoteReserver.ts @@ -14,238 +14,233 @@ import { unpackPosAt, unpackPosList, } from 'other/codec' +import { myCreepUtils } from 'room/creeps/myCreepUtils' export class RemoteReserver extends Creep { - constructor(creepID: Id) { - super(creepID) - } - - public isDying(): boolean { - // Stop if creep is spawning - - if (this.spawning) return false - - if (this.memory[CreepMemoryKeys.remote]) { - if ( - this.ticksToLive > - this.body.length * CREEP_SPAWN_TIME + - Memory.rooms[this.memory[CreepMemoryKeys.remote]][ - RoomMemoryKeys.remoteControllerPath - ].length / - packedPosLength - ) - return false - } else if (this.ticksToLive > this.body.length * CREEP_SPAWN_TIME) return false - - return true + constructor(creepID: Id) { + super(creepID) + } + + public isDying(): boolean { + // Stop if creep is spawning + + if (this.spawning) return false + + if (this.memory[CreepMemoryKeys.remote]) { + if ( + this.ticksToLive > + this.body.length * CREEP_SPAWN_TIME + + Memory.rooms[this.memory[CreepMemoryKeys.remote]][RoomMemoryKeys.remoteControllerPath] + .length / + packedPosLength + ) + return false + } else if (this.ticksToLive > this.body.length * CREEP_SPAWN_TIME) return false + + return true + } + + update() { + const packedCoord = Memory.creeps[this.name][CreepMemoryKeys.packedCoord] + if (packedCoord) { + if (this.isDying()) { + this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.dying) + } else { + this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.important) + } } + } - update() { - const packedCoord = Memory.creeps[this.name][CreepMemoryKeys.packedCoord] - if (packedCoord) { - if (this.isDying()) { - this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.dying) - } else { - this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.important) - } - } + initRun() { + if (randomTick() && !this.getActiveBodyparts(MOVE)) { + this.suicide() + return } - initRun() { - if (randomTick() && !this.getActiveBodyparts(MOVE)) { - this.suicide() - return - } - - if (!this.hasValidRemote()) { - this.removeRemote() - return - } - - // We have a valid remote - - this.applyRemote() - this.controllerAction() + if (!this.hasValidRemote()) { + this.removeRemote() + return } - /** - * Finds a remote to harvest in - */ - findRemote?() { - if (this.hasValidRemote()) return true - - const remoteNamesByEfficacy = this.commune.roomManager.remoteNamesByEfficacy - for (const remoteName of remoteNamesByEfficacy) { - const remoteMemory = Memory.rooms[remoteName] - - if (remoteMemory[RoomMemoryKeys.disable]) continue - if (remoteMemory[RoomMemoryKeys.abandonRemote]) continue - if (remoteMemory[RoomMemoryKeys.remoteReservers] <= 0) continue - if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) continue - if (remoteMemory[RoomMemoryKeys.commune] !== this.commune.name) continue + // We have a valid remote + this.applyRemote() + this.controllerAction() + } - this.assignRemote(remoteName) - return true - } - - return false - } - - hasValidRemote?() { - const creepMemory = Memory.creeps[this.name] - if (!creepMemory[CreepMemoryKeys.remote]) return false + /** + * Finds a remote to harvest in + */ + findRemote?() { + if (this.hasValidRemote()) return true - const remoteMemory = Memory.rooms[creepMemory[CreepMemoryKeys.remote]] + const remoteNamesByEfficacy = this.commune.roomManager.remoteNamesByEfficacy + for (const remoteName of remoteNamesByEfficacy) { + const remoteMemory = Memory.rooms[remoteName] - if (remoteMemory[RoomMemoryKeys.disable]) return false - if (remoteMemory[RoomMemoryKeys.abandonRemote]) return false - if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) return false - if (remoteMemory[RoomMemoryKeys.commune] !== this.commune.name) return false + if (remoteMemory[RoomMemoryKeys.disable]) continue + if (remoteMemory[RoomMemoryKeys.abandonRemote]) continue + if (remoteMemory[RoomMemoryKeys.remoteReservers] <= 0) continue + if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) continue + if (remoteMemory[RoomMemoryKeys.commune] !== this.commune.name) continue - return true + this.assignRemote(remoteName) + return true } - assignRemote?(remoteName: string) { - const creepMemory = Memory.creeps[this.name] - creepMemory[CreepMemoryKeys.remote] = remoteName + return false + } - this.applyRemote() - } + hasValidRemote?() { + const creepMemory = Memory.creeps[this.name] + if (!creepMemory[CreepMemoryKeys.remote]) return false - applyRemote?() { - const creepMemory = Memory.creeps[this.name] - const commune = this.commune - const remoteName = creepMemory[CreepMemoryKeys.remote] + const remoteMemory = Memory.rooms[creepMemory[CreepMemoryKeys.remote]] - if (commune.creepsOfRemote[remoteName]) - commune.creepsOfRemote[remoteName][this.role].push(this.name) + if (remoteMemory[RoomMemoryKeys.disable]) return false + if (remoteMemory[RoomMemoryKeys.abandonRemote]) return false + if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) return false + if (remoteMemory[RoomMemoryKeys.commune] !== this.commune.name) return false - if (this.isDying()) return + return true + } - Memory.rooms[creepMemory[CreepMemoryKeys.remote]][RoomMemoryKeys.remoteReservers] -= - this.parts.claim - } + assignRemote?(remoteName: string) { + const creepMemory = Memory.creeps[this.name] + creepMemory[CreepMemoryKeys.remote] = remoteName - removeRemote?() { - const creepMemory = Memory.creeps[this.name] + this.applyRemote() + } - delete creepMemory[CreepMemoryKeys.remote] - } + applyRemote?() { + const creepMemory = Memory.creeps[this.name] + const commune = this.commune + const remoteName = creepMemory[CreepMemoryKeys.remote] - controllerAction?() { - if (this.room.name !== Memory.creeps[this.name][CreepMemoryKeys.remote]) return Result.fail - if (getRange(this.room.controller.pos, this.pos) > 1) return Result.fail - - // The controller is reserved by someone else - if ( - this.room.controller.reservation && - this.room.controller.reservation.username !== Memory.me - ) { - this.attackController(this.room.controller) - return Result.action - } - - // Nobody is reserving - we should - this.reserveController(this.room.controller) - return Result.success - } - - findControllerPos?() { - const creepMemory = Memory.creeps[this.name] - let packedCoord = creepMemory[CreepMemoryKeys.packedCoord] - if (packedCoord) { - return unpackCoordAsPos(packedCoord, this.room.name) - } + if (commune.creepsOfRemote[remoteName]) + commune.creepsOfRemote[remoteName][this.role].push(this.name) - const reservedCoords = this.room.roomManager.reservedCoords - const usePos = this.room.roomManager.remoteControllerPositions.find(pos => { - return reservedCoords.get(packCoord(pos)) !== ReservedCoordTypes.important - }) - if (!usePos) return false + if (this.isDying()) return - packedCoord = packCoord(usePos) + Memory.rooms[creepMemory[CreepMemoryKeys.remote]][RoomMemoryKeys.remoteReservers] -= + myCreepUtils.parts(this).claim + } - creepMemory[CreepMemoryKeys.packedCoord] = packedCoord - this.room.roomManager.reservedCoords.set(packedCoord, ReservedCoordTypes.important) + removeRemote?() { + const creepMemory = Memory.creeps[this.name] - return usePos - } + delete creepMemory[CreepMemoryKeys.remote] + } - travelToController?() { - const usePos = this.findControllerPos() - if (!usePos) return Result.fail - - this.actionCoord = this.room.controller.pos - if (getRange(this.pos, usePos) === 0) return Result.success - - this.createMoveRequestByPath( - { - origin: this.pos, - goals: [ - { - pos: usePos, - range: 0, - }, - ], - }, - { - packedPath: reversePosList( - Memory.rooms[this.memory[CreepMemoryKeys.remote]][ - RoomMemoryKeys.remoteControllerPath - ], - ), - remoteName: this.memory[CreepMemoryKeys.remote], - }, - ) + controllerAction?() { + if (this.room.name !== Memory.creeps[this.name][CreepMemoryKeys.remote]) return Result.fail + if (getRange(this.room.controller.pos, this.pos) > 1) return Result.fail - return Result.action + // The controller is reserved by someone else + if ( + this.room.controller.reservation && + this.room.controller.reservation.username !== Memory.me + ) { + this.attackController(this.room.controller) + return Result.action } - runRemote?() { - if (this.travelToController() !== Result.success) return - } + // Nobody is reserving - we should + this.reserveController(this.room.controller) + return Result.success + } - outsideRemote?() { - const controllerPos = unpackPosAt( - Memory.rooms[Memory.creeps[this.name][CreepMemoryKeys.remote]][ - RoomMemoryKeys.remoteControllerPositions - ], - ) - - this.createMoveRequestByPath( - { - origin: this.pos, - goals: [ - { - pos: controllerPos, - range: 0, - }, - ], - }, - { - packedPath: reversePosList( - Memory.rooms[this.memory[CreepMemoryKeys.remote]][ - RoomMemoryKeys.remoteControllerPath - ], - ), - remoteName: this.memory[CreepMemoryKeys.remote], - }, - ) + findControllerPos?() { + const creepMemory = Memory.creeps[this.name] + let packedCoord = creepMemory[CreepMemoryKeys.packedCoord] + if (packedCoord) { + return unpackCoordAsPos(packedCoord, this.room.name) } - static roleManager(room: Room, creepsOfRole: string[]) { - for (const creepName of creepsOfRole) { - const creep: RemoteReserver = Game.creeps[creepName] - - // Try to find a remote - - if (!creep.findRemote()) { - // If the room is the creep's commune - - creep.message = '❌ Remote' - - /* + const reservedCoords = this.room.roomManager.reservedCoords + const usePos = this.room.roomManager.remoteControllerPositions.find(pos => { + return reservedCoords.get(packCoord(pos)) !== ReservedCoordTypes.important + }) + if (!usePos) return false + + packedCoord = packCoord(usePos) + + creepMemory[CreepMemoryKeys.packedCoord] = packedCoord + this.room.roomManager.reservedCoords.set(packedCoord, ReservedCoordTypes.important) + + return usePos + } + + travelToController?() { + const usePos = this.findControllerPos() + if (!usePos) return Result.fail + + this.actionCoord = this.room.controller.pos + if (getRange(this.pos, usePos) === 0) return Result.success + + this.createMoveRequestByPath( + { + origin: this.pos, + goals: [ + { + pos: usePos, + range: 0, + }, + ], + }, + { + packedPath: reversePosList( + Memory.rooms[this.memory[CreepMemoryKeys.remote]][RoomMemoryKeys.remoteControllerPath], + ), + remoteName: this.memory[CreepMemoryKeys.remote], + }, + ) + + return Result.action + } + + runRemote?() { + if (this.travelToController() !== Result.success) return + } + + outsideRemote?() { + const controllerPos = unpackPosAt( + Memory.rooms[Memory.creeps[this.name][CreepMemoryKeys.remote]][ + RoomMemoryKeys.remoteControllerPositions + ], + ) + + this.createMoveRequestByPath( + { + origin: this.pos, + goals: [ + { + pos: controllerPos, + range: 0, + }, + ], + }, + { + packedPath: reversePosList( + Memory.rooms[this.memory[CreepMemoryKeys.remote]][RoomMemoryKeys.remoteControllerPath], + ), + remoteName: this.memory[CreepMemoryKeys.remote], + }, + ) + } + + static roleManager(room: Room, creepsOfRole: string[]) { + for (const creepName of creepsOfRole) { + const creep: RemoteReserver = Game.creeps[creepName] + + // Try to find a remote + + if (!creep.findRemote()) { + // If the room is the creep's commune + + creep.message = '❌ Remote' + + /* if (room.name === creep.commune.name) { // Advanced recycle and iterate @@ -265,19 +260,19 @@ export class RemoteReserver extends Creep { ], }) */ - continue - } + continue + } - creep.message = creep.memory[CreepMemoryKeys.remote] + creep.message = creep.memory[CreepMemoryKeys.remote] - // If the creep is in the remote + // If the creep is in the remote - if (room.name === creep.memory[CreepMemoryKeys.remote]) { - creep.runRemote() - continue - } + if (room.name === creep.memory[CreepMemoryKeys.remote]) { + creep.runRemote() + continue + } - creep.outsideRemote() - } + creep.outsideRemote() } + } } diff --git a/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts b/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts index 719e5655e..c88fd1193 100644 --- a/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts +++ b/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts @@ -20,440 +20,452 @@ import { import { packCoord, reversePosList, unpackPosAt } from 'other/codec' import { indexOf } from 'lodash' import { creepUtils } from 'room/creeps/creepUtils' +import { myCreepUtils } from 'room/creeps/myCreepUtils' export class RemoteHarvester extends Creep { - constructor(creepID: Id) { - super(creepID) - } - - public isDying(): boolean { - // Stop if creep is spawning - - if (this.spawning) return false + constructor(creepID: Id) { + super(creepID) + } + + public isDying(): boolean { + // Stop if creep is spawning + + if (this.spawning) return false + + if (this.memory[CreepMemoryKeys.remote]) { + if ( + this.ticksToLive > + this.body.length * CREEP_SPAWN_TIME + + Memory.rooms[this.memory[CreepMemoryKeys.remote]][ + RoomMemoryKeys.remoteSourceFastFillerPaths + ][this.memory[CreepMemoryKeys.sourceIndex]].length / + packedPosLength + ) + return false + } else if (this.ticksToLive > this.body.length * CREEP_SPAWN_TIME) return false - if (this.memory[CreepMemoryKeys.remote]) { - if ( - this.ticksToLive > - this.body.length * CREEP_SPAWN_TIME + - Memory.rooms[this.memory[CreepMemoryKeys.remote]][ - RoomMemoryKeys.remoteSourceFastFillerPaths - ][this.memory[CreepMemoryKeys.sourceIndex]].length / - packedPosLength - ) - return false - } else if (this.ticksToLive > this.body.length * CREEP_SPAWN_TIME) return false + // Record creep as isDying - // Record creep as isDying + return true + } - return true + update() { + const packedCoord = Memory.creeps[this.name][CreepMemoryKeys.packedCoord] + if (packedCoord) { + if (this.isDying()) { + this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.dying) + } else { + this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.important) + } } + } - update() { - const packedCoord = Memory.creeps[this.name][CreepMemoryKeys.packedCoord] - if (packedCoord) { - if (this.isDying()) { - this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.dying) - } else { - this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.important) - } - } + initRun(): void { + if (randomTick() && this.getActiveBodyparts(MOVE) === 0) { + this.suicide() + return } - initRun(): void { - if (randomTick() && !this.getActiveBodyparts(MOVE)) { - this.suicide() - return - } - - if (!this.hasValidRemote()) { - this.removeRemote() - return - } - - // We do have a valid remote + const creepMemory = Memory.creeps[this.name] + if (!creepMemory[CreepMemoryKeys.remote]) return - this.remoteActions() - this.applyRemote() - - return + if (!this.shouldRemoveRemote()) { + this.removeRemote() + return } - hasValidRemote?() { - const creepMemory = Memory.creeps[this.name] - if (!creepMemory[CreepMemoryKeys.remote]) return false - - const remoteMemory = Memory.rooms[creepMemory[CreepMemoryKeys.remote]] - - if (remoteMemory[RoomMemoryKeys.abandonRemote]) return false - if (remoteMemory[RoomMemoryKeys.disable]) return false - if (remoteMemory[RoomMemoryKeys.enemyReserved]) return false - if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) return false - if (remoteMemory[RoomMemoryKeys.commune] !== this.commune.name) return false - - return true + // We do have a valid remote + + this.remoteActions() + this.applyRemote() + + return + } + + shouldRemoveRemote?() { + const creepMemory = Memory.creeps[this.name] + const remoteMemory = Memory.rooms[creepMemory[CreepMemoryKeys.remote]] + + if ( + remoteMemory[RoomMemoryKeys.abandonRemote] !== undefined && + remoteMemory[RoomMemoryKeys.abandonRemote] > 0 + ) + return false + if (remoteMemory[RoomMemoryKeys.disable]) return false + if (remoteMemory[RoomMemoryKeys.enemyReserved]) return false + if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) return false + if (remoteMemory[RoomMemoryKeys.commune] !== this.commune.name) return false + + return true + } + + hasValidRemote?() { + const creepMemory = Memory.creeps[this.name] + if (!creepMemory[CreepMemoryKeys.remote]) return false + + const remoteMemory = Memory.rooms[creepMemory[CreepMemoryKeys.remote]] + + if ( + remoteMemory[RoomMemoryKeys.abandonRemote] !== undefined && + remoteMemory[RoomMemoryKeys.abandonRemote] > 0 + ) + return false + if (remoteMemory[RoomMemoryKeys.disable]) return false + if (remoteMemory[RoomMemoryKeys.enemyReserved]) return false + if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) return false + if (remoteMemory[RoomMemoryKeys.commune] !== this.commune.name) return false + + return true + } + + isRemoteValid?(remoteName: string, sourceIndex: number) { + const remoteMemory = Memory.rooms[remoteName] + + // Make sure there are enough harvest positions for us + if ( + this.commune.communeManager.remoteSourceHarvesters[remoteName][sourceIndex].length >= + remoteMemory[RoomMemoryKeys.remoteSourceHarvestPositions][sourceIndex].length / + packedPosLength + ) + return false + if ( + remoteMemory[RoomMemoryKeys.remoteSourceHarvesters][sourceIndex] * HARVEST_POWER >= + remoteMemory[RoomMemoryKeys.maxSourceIncome][sourceIndex] + ) + return false + + return true + } + + /** + * Finds a remote to harvest in + */ + findRemote?() { + if (this.hasValidRemote()) return true + + for (const remoteInfo of this.commune.roomManager.remoteSourceIndexesByEfficacy) { + const splitRemoteInfo = remoteInfo.split(' ') + const remoteName = splitRemoteInfo[0] + const remoteMemory = Memory.rooms[remoteName] + + if (remoteMemory[RoomMemoryKeys.disable]) continue + if (remoteMemory[RoomMemoryKeys.abandonRemote] > 0) continue + if (remoteMemory[RoomMemoryKeys.enemyReserved]) continue + if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) continue + if (remoteMemory[RoomMemoryKeys.commune] !== this.commune.name) continue + + const sourceIndex = parseInt(splitRemoteInfo[1]) + + if (!this.isRemoteValid(remoteName, sourceIndex)) continue + + this.assignRemote(remoteName, sourceIndex) + return true } - isRemoteValid?(remoteName: string, sourceIndex: number) { - const remoteMemory = Memory.rooms[remoteName] - - // Make sure there are enough harvest positions for us - if ( - this.commune.communeManager.remoteSourceHarvesters[remoteName][sourceIndex].length >= - remoteMemory[RoomMemoryKeys.remoteSourceHarvestPositions][sourceIndex].length / - packedPosLength - ) - return false - if ( - remoteMemory[RoomMemoryKeys.remoteSourceHarvesters][sourceIndex] * HARVEST_POWER <= - remoteMemory[RoomMemoryKeys.maxSourceIncome][sourceIndex] - ) - return false - - return true - } + return false + } - /** - * Finds a remote to harvest in - */ - findRemote?() { - if (this.hasValidRemote()) return true + assignRemote?(remoteName: string, sourceIndex: number) { + const creepMemory = Memory.creeps[this.name] + creepMemory[CreepMemoryKeys.remote] = remoteName + creepMemory[CreepMemoryKeys.sourceIndex] = sourceIndex - for (const remoteInfo of this.commune.roomManager.remoteSourceIndexesByEfficacy) { - const splitRemoteInfo = remoteInfo.split(' ') - const remoteName = splitRemoteInfo[0] - const remoteMemory = Memory.rooms[remoteName] + delete creepMemory[CreepMemoryKeys.packedCoord] - if (remoteMemory[RoomMemoryKeys.disable]) continue - if (remoteMemory[RoomMemoryKeys.abandonRemote]) continue - if (remoteMemory[RoomMemoryKeys.enemyReserved]) continue - if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) continue - if (remoteMemory[RoomMemoryKeys.commune] !== this.commune.name) continue + if (this.store.energy) this.drop(RESOURCE_ENERGY, this.store.energy) - const sourceIndex = parseInt(splitRemoteInfo[1]) + this.applyRemote() + } - if (!this.isRemoteValid(remoteName, sourceIndex)) continue + /** + * Apply response values to the remote + */ + applyRemote?() { + const creepMemory = Memory.creeps[this.name] + const sourceIndex = creepMemory[CreepMemoryKeys.sourceIndex] + const workParts = myCreepUtils.parts(this).work + const remoteMemory = Memory.rooms[creepMemory[CreepMemoryKeys.remote]] + /* + if (!this.spawning) { - this.assignRemote(remoteName, sourceIndex) - return true } + */ + if (this.room.name === creepMemory[CreepMemoryKeys.remote]) { + if (!this.isDying()) { + this.room.creepsOfSource[creepMemory[CreepMemoryKeys.sourceIndex]].push(this.name) + } + + // We are in harvest range of the source + const source = this.room.roomManager.remoteSources[sourceIndex] + if (getRange(source.pos, this.pos) <= 1) { + // manage remote needs + + // The smaller of the source path length or the creep's remaining lifetime + const creditLifetime = Math.min( + remoteMemory[RoomMemoryKeys.remoteSourceFastFillerPaths].length / packedPosLength, + this.ticksToLive, + ) - return false - } - - assignRemote?(remoteName: string, sourceIndex: number) { - const creepMemory = Memory.creeps[this.name] - creepMemory[CreepMemoryKeys.remote] = remoteName - creepMemory[CreepMemoryKeys.sourceIndex] = sourceIndex - - delete creepMemory[CreepMemoryKeys.packedCoord] - - if (this.store.energy) this.drop(RESOURCE_ENERGY, this.store.energy) - - this.applyRemote() - } + const totalCreditChange = Math.min( + // Dont allow negative credit change + Math.max( + remoteMemory[RoomMemoryKeys.remoteSourceCreditChange][sourceIndex] + + workParts * HARVEST_POWER, + 0, + ), + remoteMemory[RoomMemoryKeys.maxSourceIncome][sourceIndex], + ) - /** - * Apply response values to the remote - */ - applyRemote?() { - const creepMemory = Memory.creeps[this.name] - const sourceIndex = creepMemory[CreepMemoryKeys.sourceIndex] - const workParts = this.parts.work - const remoteMemory = Memory.rooms[creepMemory[CreepMemoryKeys.remote]] - /* - if (!this.spawning) { + // We probably need to account for how harvesters can harvest a source fully + if (remoteMemory[RoomMemoryKeys.hasContainer][sourceIndex]) { + if (remoteMemory[RoomMemoryKeys.remoteSourceCredit][sourceIndex] < CONTAINER_CAPACITY) { + const creditChange = Math.min( + Math.min( + remoteMemory[RoomMemoryKeys.maxSourceIncome][sourceIndex], + workParts * HARVEST_POWER, + ), + totalCreditChange, + ) + remoteMemory[RoomMemoryKeys.remoteSourceCredit][sourceIndex] += + creditChange * creditLifetime + } } - */ - if (this.room.name === creepMemory[CreepMemoryKeys.remote]) { - if (!this.isDying()) { - this.room.creepsOfSource[creepMemory[CreepMemoryKeys.sourceIndex]].push(this.name) - } - - // We are in harvest range of the source - const source = this.room.roomManager.remoteSources[sourceIndex] - if (getRange(source.pos, this.pos) <= 1) { - // manage remote needs - - // The smaller of the source path length or the creep's remaining lifetime - const creditLifetime = Math.min( - remoteMemory[RoomMemoryKeys.remoteSourceFastFillerPaths].length / - packedPosLength, - this.ticksToLive, - ) - - const totalCreditChange = Math.min( - // Dont allow negative credit change - Math.max( - remoteMemory[RoomMemoryKeys.remoteSourceCreditChange][sourceIndex] + - workParts * HARVEST_POWER, - 0, - ), - remoteMemory[RoomMemoryKeys.maxSourceIncome][sourceIndex], - ) - - // We probably need to account for how harvesters can harvest a source fully - - if (remoteMemory[RoomMemoryKeys.hasContainer][sourceIndex]) { - if ( - remoteMemory[RoomMemoryKeys.remoteSourceCredit][sourceIndex] < - CONTAINER_CAPACITY - ) { - const creditChange = Math.min( - Math.min( - remoteMemory[RoomMemoryKeys.maxSourceIncome][sourceIndex], - workParts * HARVEST_POWER, - ), - totalCreditChange, - ) - remoteMemory[RoomMemoryKeys.remoteSourceCredit][sourceIndex] += - creditChange * creditLifetime - } - } - // There is no container for the source - else { - const creditChange = Math.min( - Math.min( - remoteMemory[RoomMemoryKeys.maxSourceIncome][sourceIndex], - workParts * HARVEST_POWER, - ), - totalCreditChange, - ) - remoteMemory[RoomMemoryKeys.remoteSourceCredit][sourceIndex] += - creditChange * creditLifetime - } - - remoteMemory[RoomMemoryKeys.remoteSourceCreditChange][sourceIndex] = - totalCreditChange - } + // There is no container for the source + else { + const creditChange = Math.min( + Math.min( + remoteMemory[RoomMemoryKeys.maxSourceIncome][sourceIndex], + workParts * HARVEST_POWER, + ), + totalCreditChange, + ) + remoteMemory[RoomMemoryKeys.remoteSourceCredit][sourceIndex] += + creditChange * creditLifetime } - if (this.isDying()) return - - this.commune.communeManager.remoteSourceHarvesters[creepMemory[CreepMemoryKeys.remote]][ - sourceIndex - ].push(this.name) - remoteMemory[RoomMemoryKeys.remoteSourceHarvesters][sourceIndex] += workParts + remoteMemory[RoomMemoryKeys.remoteSourceCreditChange][sourceIndex] = totalCreditChange + } } - removeRemote?() { - const creepMemory = Memory.creeps[this.name] - /* - if (!this.isDying()) { - const remoteName = creepMemory[CreepMemoryKeys.remote] + if (this.isDying()) return - Memory.rooms[remoteName][RoomMemoryKeys.remoteSourceHarvesters][ - this.memory[CreepMemoryKeys.sourceIndex] - ] -= this.parts.work - } - */ - delete creepMemory[CreepMemoryKeys.remote] - delete creepMemory[CreepMemoryKeys.packedCoord] - } + this.commune.communeManager.remoteSourceHarvesters[creepMemory[CreepMemoryKeys.remote]][ + sourceIndex + ].push(this.name) + remoteMemory[RoomMemoryKeys.remoteSourceHarvesters][sourceIndex] += workParts + } - remoteActions?() { - const creepMemory = Memory.creeps[this.name] + removeRemote?() { + const creepMemory = Memory.creeps[this.name] - // Make sure we are in the remote - if (creepMemory[CreepMemoryKeys.remote] !== this.room.name) return Result.noAction + delete creepMemory[CreepMemoryKeys.remote] + delete creepMemory[CreepMemoryKeys.packedCoord] + } - // Try to move to source + remoteActions?() { + const creepMemory = Memory.creeps[this.name] - const sourceIndex = creepMemory[CreepMemoryKeys.sourceIndex] - if (this.travelToSource(sourceIndex) !== Result.success) return Result.action + // Make sure we are in the remote + if (creepMemory[CreepMemoryKeys.remote] !== this.room.name) return Result.noAction - // Make sure we're a bit ahead source regen time - /* + // Try to move to source + + const sourceIndex = creepMemory[CreepMemoryKeys.sourceIndex] + if (this.travelToSource(sourceIndex) !== Result.success) return Result.action + + // Make sure we're a bit ahead source regen time + /* const sourcee = this.room.roomManager.remoteSources[this.memory[CreepMemoryKeys.sourceIndex]] this.room.visual.text((sourcee.energy * ENERGY_REGEN_TIME).toString() + ', ' + (sourcee.ticksToRegeneration * 0.9 * sourcee.energyCapacity).toString(), this.pos) */ - const container = this.room.roomManager.sourceContainers[sourceIndex] - if (container) { - // Repair or build the container if we're ahead on source regen + const container = this.room.roomManager.sourceContainers[sourceIndex] + if (container) { + // Repair or build the container if we're ahead on source regen - if (this.maintainContainer(container) === Result.action) return Result.success + if (this.maintainContainer(container) === Result.action) return Result.success - const source = this.room.roomManager.remoteSources[sourceIndex] - creepUtils.harvestSource(this, source) + const source = this.room.roomManager.remoteSources[sourceIndex] + creepUtils.harvestSource(this, source) - // Give our energy to the container so it doesn't drop on the ground + // Give our energy to the container so it doesn't drop on the ground - if ( - getRange(this.pos, container.pos) === 1 && - this.store.getFreeCapacity() <= this.parts.work - ) { - this.transfer(container, RESOURCE_ENERGY) - } + if ( + getRange(this.pos, container.pos) === 1 && + this.store.getFreeCapacity() <= myCreepUtils.parts(this).work + ) { + this.transfer(container, RESOURCE_ENERGY) + } - return Result.success - } + return Result.success + } - // There is no container + // There is no container - if (this.buildContainer() === Result.action) return Result.success + if (this.buildContainer() === Result.action) return Result.success - const source = this.room.roomManager.remoteSources[sourceIndex] - creepUtils.harvestSource(this, source) + const source = this.room.roomManager.remoteSources[sourceIndex] + creepUtils.harvestSource(this, source) - // Stop, we don't have enough energy to justify a request + // Stop, we don't have enough energy to justify a request - if (this.reserveStore.energy < this.store.getCapacity() * 0.5) return Result.action + if (this.reserveStore.energy < this.store.getCapacity() * 0.5) return Result.action - // Try to have haulers get energy directly from us (avoids decay) + // Try to have haulers get energy directly from us (avoids decay) - this.room.createRoomLogisticsRequest({ - target: this, - type: RoomLogisticsRequestTypes.withdraw, - priority: scalePriority(this.store.getCapacity(), this.reserveStore.energy, 5, true), - }) + this.room.createRoomLogisticsRequest({ + target: this, + type: RoomLogisticsRequestTypes.withdraw, + priority: scalePriority(this.store.getCapacity(), this.reserveStore.energy, 5, true), + }) - return Result.success - } + return Result.success + } - private obtainEnergyIfNeeded() { - if (this.nextStore.energy >= this.parts.work) return Result.success - if (this.movedResource) return Result.fail - - return this.runRoomLogisticsRequestAdvanced({ - resourceTypes: new Set([RESOURCE_ENERGY]), - types: new Set([ - RoomLogisticsRequestTypes.withdraw, - RoomLogisticsRequestTypes.pickup, - RoomLogisticsRequestTypes.offer, - ]), - conditions: request => { - getRange(findObjectWithID(request.targetID).pos, this.pos) <= 1 - }, - }) - } + private obtainEnergyIfNeeded() { + if (this.nextStore.energy >= myCreepUtils.parts(this).work) return Result.success + if (this.movedResource) return Result.fail - maintainContainer(container: StructureContainer): number { - // Make sure we're a bit ahead source regen time + return this.runRoomLogisticsRequestAdvanced({ + resourceTypes: new Set([RESOURCE_ENERGY]), + types: new Set([ + RoomLogisticsRequestTypes.withdraw, + RoomLogisticsRequestTypes.pickup, + RoomLogisticsRequestTypes.offer, + ]), + conditions: request => { + getRange(findObjectWithID(request.targetID).pos, this.pos) <= 1 + }, + }) + } - const source = this.room.roomManager.remoteSources[this.memory[CreepMemoryKeys.sourceIndex]] - if ( - source.energy * ENERGY_REGEN_TIME > - source.ticksToRegeneration * source.energyCapacity * 0.9 - ) - return Result.noAction + maintainContainer(container: StructureContainer): number { + // Make sure we're a bit ahead source regen time - // Ensure we have enough energy to use all work parts + const source = this.room.roomManager.remoteSources[this.memory[CreepMemoryKeys.sourceIndex]] + if ( + source.energy * ENERGY_REGEN_TIME > + source.ticksToRegeneration * source.energyCapacity * 0.9 + ) + return Result.noAction - if (this.store.energy < this.parts.work) return Result.noAction + // Ensure we have enough energy to use all work parts - // Make sure the contianer is sufficiently needy of repair + if (this.store.energy < myCreepUtils.parts(this).work) return Result.noAction - if (container.hits > container.hitsMax * 0.8) return Result.noAction - if (this.obtainEnergyIfNeeded() !== Result.success) return Result.noAction + // Make sure the contianer is sufficiently needy of repair - this.repair(container) - this.worked = WorkTypes.repair + if (container.hits > container.hitsMax * 0.8) return Result.noAction + if (this.obtainEnergyIfNeeded() !== Result.success) return Result.noAction - return Result.action - } + this.repair(container) + this.worked = WorkTypes.repair - buildContainer(): number { - // Don't build new remote containers until we can reserve the room - if (!this.commune.communeManager.shouldRemoteContainers) return Result.noAction + return Result.action + } - // Make sure we're a bit ahead source regen time + buildContainer(): number { + // Don't build new remote containers until we can reserve the room + if (!this.commune.communeManager.shouldRemoteContainers) return Result.noAction - const source = this.room.roomManager.remoteSources[this.memory[CreepMemoryKeys.sourceIndex]] - if ( - source.energy * ENERGY_REGEN_TIME > - source.ticksToRegeneration * source.energyCapacity * 0.9 - ) - return Result.noAction + // Make sure we're a bit ahead source regen time - // Find an existing container construction site + const source = this.room.roomManager.remoteSources[this.memory[CreepMemoryKeys.sourceIndex]] + if ( + source.energy * ENERGY_REGEN_TIME > + source.ticksToRegeneration * source.energyCapacity * 0.9 + ) + return Result.noAction - const cSite = this.room.findCSiteAtCoord( - this.pos, - cSite => cSite.structureType === STRUCTURE_CONTAINER, - ) + // Find an existing container construction site - if (cSite) { - // Pick energy off the ground if possible + const cSite = this.room.findCSiteAtCoord( + this.pos, + cSite => cSite.structureType === STRUCTURE_CONTAINER, + ) - if (this.obtainEnergyIfNeeded() !== Result.success) return Result.noAction + if (cSite) { + // Pick energy off the ground if possible - // Don't allow the construction site manager to remove the site for while we're building + if (this.obtainEnergyIfNeeded() !== Result.success) return Result.noAction - Memory.constructionSites[cSite.id] = 0 + // Don't allow the construction site manager to remove the site for while we're building - this.build(cSite) - this.worked = WorkTypes.build + Memory.constructionSites[cSite.id] = 0 - return Result.action - } + this.build(cSite) + this.worked = WorkTypes.build - // There is no container cSite, place one + return Result.action + } - const sourcePos = - this.room.roomManager.remoteSourceHarvestPositions[ - this.memory[CreepMemoryKeys.sourceIndex] - ][0] - this.room.createConstructionSite(sourcePos, STRUCTURE_CONTAINER) + // There is no container cSite, place one - return Result.noAction - } + const sourcePos = + this.room.roomManager.remoteSourceHarvestPositions[ + this.memory[CreepMemoryKeys.sourceIndex] + ][0] + this.room.createConstructionSite(sourcePos, STRUCTURE_CONTAINER) - /** - * - */ - travelToSource?(sourceIndex: number): number { - this.message = '🚬' + return Result.noAction + } - // Unpack the harvestPos + /** + * + */ + travelToSource?(sourceIndex: number): number { + this.message = '🚬' - const harvestPos = this.findRemoteSourceHarvestPos(this.memory[CreepMemoryKeys.sourceIndex]) - if (!harvestPos) return Result.noAction + // Unpack the harvestPos - this.actionCoord = - this.room.roomManager.remoteSources[this.memory[CreepMemoryKeys.sourceIndex]].pos + const harvestPos = this.findRemoteSourceHarvestPos(this.memory[CreepMemoryKeys.sourceIndex]) + if (!harvestPos) return Result.noAction - // If the creep is at the creep's packedHarvestPos, inform false + this.actionCoord = + this.room.roomManager.remoteSources[this.memory[CreepMemoryKeys.sourceIndex]].pos - if (getRange(this.pos, harvestPos) === 0) return Result.success + // If the creep is at the creep's packedHarvestPos, inform false - // Otherwise say the intention and create a moveRequest to the creep's harvestPos, and inform the attempt + if (getRange(this.pos, harvestPos) === 0) return Result.success - this.message = `⏩ ` + sourceIndex + // Otherwise say the intention and create a moveRequest to the creep's harvestPos, and inform the attempt - this.createMoveRequestByPath( - { - origin: this.pos, - goals: [ - { - pos: harvestPos, - range: 0, - }, - ], - }, - { - packedPath: reversePosList( - Memory.rooms[this.memory[CreepMemoryKeys.remote]][ - RoomMemoryKeys.remoteSourceFastFillerPaths - ][this.memory[CreepMemoryKeys.sourceIndex]], - ), - remoteName: this.memory[CreepMemoryKeys.remote], - }, - ) + this.message = `⏩ ` + sourceIndex - return Result.action - } + this.createMoveRequestByPath( + { + origin: this.pos, + goals: [ + { + pos: harvestPos, + range: 0, + }, + ], + }, + { + packedPath: reversePosList( + Memory.rooms[this.memory[CreepMemoryKeys.remote]][ + RoomMemoryKeys.remoteSourceFastFillerPaths + ][this.memory[CreepMemoryKeys.sourceIndex]], + ), + remoteName: this.memory[CreepMemoryKeys.remote], + }, + ) + + return Result.action + } - static roleManager(room: Room, creepsOfRole: string[]) { - for (const creepName of creepsOfRole) { - const creep: RemoteHarvester = Game.creeps[creepName] as RemoteHarvester + static roleManager(room: Room, creepsOfRole: string[]) { + for (const creepName of creepsOfRole) { + const creep: RemoteHarvester = Game.creeps[creepName] as RemoteHarvester - // Try to find a remote + // Try to find a remote - if (!creep.findRemote()) { - creep.message = '❌ Remote' - /* + if (!creep.findRemote()) { + creep.message = '❌ Remote' + /* // If the room is the creep's commune if (room.name === creep.commune.name) { @@ -475,52 +487,52 @@ export class RemoteHarvester extends Creep { ], }) */ - continue - } + continue + } - // If the creep needs resources + // If the creep needs resources - if (room.name === creep.memory[CreepMemoryKeys.remote]) { - /* creep.remoteActions() */ - continue - } + if (room.name === creep.memory[CreepMemoryKeys.remote]) { + /* creep.remoteActions() */ + continue + } - creep.message = creep.memory[CreepMemoryKeys.remote] + creep.message = creep.memory[CreepMemoryKeys.remote] - const sourcePos = unpackPosAt( - Memory.rooms[creep.memory[CreepMemoryKeys.remote]][ - RoomMemoryKeys.remoteSourceHarvestPositions - ][creep.memory[CreepMemoryKeys.sourceIndex]], - ) + const sourcePos = unpackPosAt( + Memory.rooms[creep.memory[CreepMemoryKeys.remote]][ + RoomMemoryKeys.remoteSourceHarvestPositions + ][creep.memory[CreepMemoryKeys.sourceIndex]], + ) - creep.createMoveRequestByPath( - { - origin: creep.pos, - goals: [ - { - pos: sourcePos, - range: 1, - }, - ], - avoidEnemyRanges: true, - typeWeights: { - [RoomTypes.enemy]: Infinity, - [RoomTypes.ally]: Infinity, - [RoomTypes.sourceKeeper]: Infinity, - [RoomTypes.enemyRemote]: Infinity, - [RoomTypes.allyRemote]: Infinity, - }, - avoidDanger: true, - }, - { - packedPath: reversePosList( - Memory.rooms[creep.memory[CreepMemoryKeys.remote]][ - RoomMemoryKeys.remoteSourceFastFillerPaths - ][creep.memory[CreepMemoryKeys.sourceIndex]], - ), - remoteName: creep.memory[CreepMemoryKeys.remote], - }, - ) - } + creep.createMoveRequestByPath( + { + origin: creep.pos, + goals: [ + { + pos: sourcePos, + range: 1, + }, + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + avoidDanger: true, + }, + { + packedPath: reversePosList( + Memory.rooms[creep.memory[CreepMemoryKeys.remote]][ + RoomMemoryKeys.remoteSourceFastFillerPaths + ][creep.memory[CreepMemoryKeys.sourceIndex]], + ), + remoteName: creep.memory[CreepMemoryKeys.remote], + }, + ) } + } } diff --git a/src/room/room.ts b/src/room/room.ts index 3241d2125..fc9cdeb82 100644 --- a/src/room/room.ts +++ b/src/room/room.ts @@ -220,7 +220,6 @@ export class RoomManager { room.myPowerCreepsByRole = {} for (const className of powerCreepClassNames) room.myPowerCreepsByRole[className] = [] - room.partsOfRoles = {} room.powerTasks = {} room.creepsOfSource = [] diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index e4287693a..7d89a78d4 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -59,6 +59,7 @@ import { posix } from 'path' import { playerManager } from 'international/players' import { roomNameUtils } from './roomNameUtils' import { customLog } from 'utils/logging' +import { myCreepUtils } from './creeps/myCreepUtils' /** @param pos1 pos of the object performing the action @@ -1490,31 +1491,6 @@ Room.prototype.findAdjacentPositions = function (rx, ry) { return positions } -Room.prototype.getPartsOfRole = function (role) { - if (this.partsOfRoles[role]) return this.partsOfRoles[role] - - this.partsOfRoles[role] = {} - - // Loop through every creepName in the creepsFromRoom of the specified role - - for (const creepName of this.creepsFromRoom[role]) { - const creep = Game.creeps[creepName] - - for (const key in creep.parts) { - const partType = key as BodyPartConstant - - if (!this.partsOfRoles[role][partType]) { - this.partsOfRoles[role][partType] = 1 - continue - } - - this.partsOfRoles[role][partType] += 1 - } - } - - return this.partsOfRoles[role] -} - Room.prototype.createWorkRequest = function () { if (this.find(FIND_SOURCES).length < 2) return false if (Memory.workRequests[this.name]) return false diff --git a/src/types.d.ts b/src/types.d.ts index d476679b9..eaf941314 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -683,8 +683,6 @@ declare global { [key in CreepRoles]: Partial<{ [key in BodyPartConstant]: number }> }> - getPartsOfRole(role: CreepRoles): Partial<{ [key in BodyPartConstant]: number }> - createWorkRequest(): boolean findSwampPlainsRatio(): number @@ -1063,9 +1061,6 @@ declare global { */ readonly strength: number - _upgradeStrength: number - readonly upgradeStrength: number - _combatStrength: CombatStrength readonly combatStrength: CombatStrength From f9247804a7be1fc4f1e340560f1ac4e47bd4aa48 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 30 Dec 2023 21:56:41 -0800 Subject: [PATCH 046/190] functional movement optimizations --- src/international/constants.ts | 4 + src/international/requests.ts | 2 +- src/international/tickInit.ts | 32 ----- src/room/commune/remotesManager.ts | 7 +- src/room/commune/spawning/spawnRequests.ts | 4 +- src/room/construction/construction.ts | 11 +- src/room/container.ts | 32 ++--- src/room/creeps/creepMoveUtils.ts | 127 +++++++++++------- .../creepPrototypes/creepMoveFunctions.ts | 16 ++- .../creeps/roleManagers/commune/hauler.ts | 4 +- src/room/roomFunctions.ts | 3 +- 11 files changed, 132 insertions(+), 110 deletions(-) diff --git a/src/international/constants.ts b/src/international/constants.ts index 8cb715a5c..0f0dd03e3 100644 --- a/src/international/constants.ts +++ b/src/international/constants.ts @@ -1400,3 +1400,7 @@ export enum MovedTypes { moved = 1, wait, } + +export enum FlagNames { + debugMovement = 'debugMovement' +} diff --git a/src/international/requests.ts b/src/international/requests.ts index d3453b074..0e9b052d0 100644 --- a/src/international/requests.ts +++ b/src/international/requests.ts @@ -37,7 +37,7 @@ export class RequestsManager extends Sleepable { private updateWorkRequests() { - const runThreshold = randomRange(19000, 20000) + const runThreshold = randomIntRange(19000, 20000) for (const roomName in Memory.workRequests) { diff --git a/src/international/tickInit.ts b/src/international/tickInit.ts index 0ecd644e4..0c543c466 100644 --- a/src/international/tickInit.ts +++ b/src/international/tickInit.ts @@ -1,35 +1,3 @@ -import { - antifaRoles, - WorkRequestKeys, - CombatRequestKeys, - creepRoles, - haulerUpdateDefault, - HaulRequestKeys, - maxWorkRequestDistance, - maxCombatDistance, - maxHaulDistance, - customColors, - powerCreepClassNames, - remoteRoles, - stamps, - RoomMemoryKeys, - RoomTypes, -} from './constants' -import { - createPosMap, - findCarryPartsRequired, - findClosestRoomName, - findCPUOf, - randomRange, - randomTick, -} from '../utils/utils' -import { collectiveManager, CollectiveManager } from './collective' -import { statsManager } from './statsManager' -import { indexOf } from 'lodash' -import { CommuneManager } from 'room/commune/commune' -import { powerCreepClasses } from 'room/creeps/powerCreepClasses' -import { RoomManager } from 'room/room' -import { roomNameUtils } from 'room/roomNameUtils' class TickInit { configGeneral() { diff --git a/src/room/commune/remotesManager.ts b/src/room/commune/remotesManager.ts index 12ac723e0..e086d4b0d 100644 --- a/src/room/commune/remotesManager.ts +++ b/src/room/commune/remotesManager.ts @@ -12,6 +12,7 @@ import { findCarryPartsRequired, findLowestScore, getRange, + randomIntRange, randomRange, randomTick, utils, @@ -28,7 +29,7 @@ const remoteSourcePathTypes: RemoteSourcePathTypes[] = [ RoomMemoryKeys.remoteSourceHubPaths, ] -const manageUseInterval = randomRange(150, 200) +const manageUseInterval = randomIntRange(150, 200) export class RemotesManager { communeManager: CommuneManager @@ -203,8 +204,8 @@ export class RemotesManager { return creep.ticksToLive }) remoteMemory[RoomMemoryKeys.danger] = - Game.time + randomRange(score, score + 100) - roomNameUtils.abandonRemote(remoteName, randomRange(score, score + 100)) + Game.time + randomIntRange(score, score + 100) + roomNameUtils.abandonRemote(remoteName, randomIntRange(score, score + 100)) continue } diff --git a/src/room/commune/spawning/spawnRequests.ts b/src/room/commune/spawning/spawnRequests.ts index 1b3ffbc34..e29974ef6 100644 --- a/src/room/commune/spawning/spawnRequests.ts +++ b/src/room/commune/spawning/spawnRequests.ts @@ -1453,13 +1453,13 @@ export class SpawnRequestsManager { const healAmount = Math.floor(minHealCost / (BODYPART_COST[HEAL] + BODYPART_COST[MOVE])) if ((rangedAttackAmount + healAmount) * 2 > 50) { - Memory.rooms[remoteName][RoomMemoryKeys.abandonRemote] = randomRange(1000, 1500) + Memory.rooms[remoteName][RoomMemoryKeys.abandonRemote] = randomIntRange(1000, 1500) return false } const minCost = minRangedAttackCost + minHealCost if (minCost > this.spawnEnergyCapacity) { - Memory.rooms[remoteName][RoomMemoryKeys.abandonRemote] = randomRange(1000, 1500) + Memory.rooms[remoteName][RoomMemoryKeys.abandonRemote] = randomIntRange(1000, 1500) return false } diff --git a/src/room/construction/construction.ts b/src/room/construction/construction.ts index 388a2dc03..1a5c95a54 100644 --- a/src/room/construction/construction.ts +++ b/src/room/construction/construction.ts @@ -8,7 +8,7 @@ import { structureTypesToProtectSet, } from 'international/constants' import { customLog } from 'utils/logging' -import { findObjectWithID, packAsNum, randomIntRange, randomTick } from 'utils/utils' +import { findObjectWithID, packAsNum, randomIntRange, randomTick, utils } from 'utils/utils' import { packCoord, unpackCoord } from 'other/codec' import { CommuneManager } from 'room/commune/commune' import { BasePlans } from './basePlans' @@ -35,15 +35,15 @@ const noOverlapDestroyStructures: Set = new Set([ STRUCTURE_SPAWN, STRUCTURE_RAMPART, ]) +const constructionInterval = randomIntRange(70, 90) -export class ConstructionManager extends Sleepable { +export class ConstructionManager { communeManager: CommuneManager room: Room placedSites: number - sleepFor = randomIntRange(50, 100) constructor(communeManager: CommuneManager) { - super() + this.communeManager = communeManager } @@ -92,8 +92,7 @@ export class ConstructionManager extends Sleepable { // If there are no builders // Only run every so often - else if (this.room.controller.level !== 1 && this.isSleeping()) return false - this.sleepWhenDone() + else if (this.room.controller.level !== 1 && !utils.isTickInterval(constructionInterval)) return false // If there are too many construction sites if (this.room.find(FIND_MY_CONSTRUCTION_SITES).length >= collectiveManager.maxCSitesPerRoom) diff --git a/src/room/container.ts b/src/room/container.ts index 0f6db7322..bd85a7727 100644 --- a/src/room/container.ts +++ b/src/room/container.ts @@ -29,6 +29,23 @@ export class ContainerManager { const energy = container.reserveStore.energy const capacity = container.store.getCapacity() + if (energy > capacity * 0.5) { + + this.roomManager.room.createRoomLogisticsRequest({ + target: container, + maxAmount: energy * 0.5, + onlyFull: true, + type: RoomLogisticsRequestTypes.offer, + priority: scalePriority( + capacity, + energy, + 10, + true, + ), + }) + } + + // If we're sufficiently full, we don't need to ask for more if (energy > capacity * 0.9) continue this.roomManager.room.createRoomLogisticsRequest({ @@ -41,21 +58,6 @@ export class ContainerManager { 20, ), }) - - if (energy < capacity * 0.5) continue - - this.roomManager.room.createRoomLogisticsRequest({ - target: container, - maxAmount: energy * 0.5, - onlyFull: true, - type: RoomLogisticsRequestTypes.offer, - priority: scalePriority( - capacity, - energy, - 10, - true, - ), - }) } } diff --git a/src/room/creeps/creepMoveUtils.ts b/src/room/creeps/creepMoveUtils.ts index 428850653..589ec2994 100644 --- a/src/room/creeps/creepMoveUtils.ts +++ b/src/room/creeps/creepMoveUtils.ts @@ -1,4 +1,13 @@ -import { CreepMemoryKeys, MovedTypes, Result, customColors, defaultCreepSwampCost, defaultPlainCost, packedPosLength } from 'international/constants' +import { + CreepMemoryKeys, + FlagNames, + MovedTypes, + Result, + customColors, + defaultCreepSwampCost, + defaultPlainCost, + packedPosLength, +} from 'international/constants' import { CustomPathFinderArgs, PathGoal, customPathFinder } from 'international/customPathFinder' import { packCoord, packPos, packPosList, unpackPos, unpackPosAt } from 'other/codec' import { areCoordsEqual, arePositionsEqual, findObjectWithID, getRange } from 'utils/utils' @@ -8,8 +17,7 @@ import { areCoordsEqual, arePositionsEqual, findObjectWithID, getRange } from 'u */ export class CreepMoveUtils { useExistingPath(creep: Creep, args: CustomPathFinderArgs, opts: MoveRequestOpts) { - - if (creep.spawning) return Result.fail + if (creep.spawning) return Result.noAction const creepMemory = Memory.creeps[creep.name] || Memory.powerCreeps[creep.name] @@ -21,47 +29,75 @@ export class CreepMoveUtils { if (!packedPath || !packedPath.length) return Result.fail // Make this more optimal in not redoing paths unecessarily - if (!areCoordsEqual(unpackPos(creepMemory[CreepMemoryKeys.goalPos]), args.goals[0].pos)){ + if (!areCoordsEqual(unpackPos(creepMemory[CreepMemoryKeys.goalPos]), args.goals[0].pos)) { return Result.fail } const moveTarget = this.findMoveTarget(creep, creepMemory) if (moveTarget === Result.fail) return Result.fail - if (getRange(creep.pos, moveTarget[0]) > 1) return Result.fail // If we're on an exit and we want to go to the other side, wait for it to toggle - if (moveTarget[0].roomName !== creep.room.name) { + if (moveTarget.roomName !== creep.room.name) { creep.moved = MovedTypes.moved return Result.success } + if (Game.flags[FlagNames.debugMovement]) { + creep.room.visual.line(creep.pos, moveTarget, { color: customColors.lightBlue }) + } + // We've determined our existing path is sufficient. Move to the next position on it - creep.assignMoveRequest(moveTarget[0]) + creep.assignMoveRequest(moveTarget) return Result.success } - private findMoveTarget(creep: Creep, creepMemory: CreepMemory | PowerCreepMemory): Result.fail | [RoomPosition, number] { + /** + * Similar to the game's moveByPath + */ + private findMoveTarget( + creep: Creep, + creepMemory: CreepMemory | PowerCreepMemory, + ): Result.fail | RoomPosition { - const maxIterations = Math.min(creepMemory[CreepMemoryKeys.path].length / packedPosLength - 1, 1) - let iterations = -1 + // First index - while (iterations < maxIterations) { - const pos = unpackPosAt(creepMemory[CreepMemoryKeys.path], iterations + 1) - if (arePositionsEqual(creep.pos, pos)) { - creepMemory[CreepMemoryKeys.path] = creepMemory[CreepMemoryKeys.path].slice( - iterations * packedPosLength, - ) - return [pos, iterations] + let firstIndex = 0 + let pos = unpackPosAt(creepMemory[CreepMemoryKeys.path], firstIndex) + const range = getRange(creep.pos, pos) + + if (creepMemory[CreepMemoryKeys.path].length === 1 * packedPosLength) { + + if (range <= 1) { + return pos } - iterations += 1 + + return Result.fail + } + else if (range === 1) { + return pos + } + + // Failed to use first index + + // Cut the path based coords we skiped over + creepMemory[CreepMemoryKeys.path] = creepMemory[CreepMemoryKeys.path].slice((firstIndex + 1) * packedPosLength) + + // Second index + + pos = unpackPosAt(creepMemory[CreepMemoryKeys.path], firstIndex) + if (getRange(creep.pos, pos) === 1) { + return pos } + // Failed to use second index + + // Cut the path based coords we skiped over + creepMemory[CreepMemoryKeys.path] = creepMemory[CreepMemoryKeys.path].slice((firstIndex + 1) * packedPosLength) return Result.fail } findNewPath(creep: Creep, args: CustomPathFinderArgs, opts: MoveRequestOpts) { - // Assign the creep to the args args.creep = creep @@ -72,37 +108,39 @@ export class CreepMoveUtils { args.avoidStationaryPositions = true // If there is no safemode - if (!creep.room.controller || !creep.room.controller.safeMode) args.avoidNotMyCreeps = true const creepMemory = Memory.creeps[creep.name] || Memory.powerCreeps[creep.name] if (creepMemory[CreepMemoryKeys.preferRoads]) { - args.plainCost ??= defaultPlainCost * 2 - args.swampCost ??= defaultCreepSwampCost * 2 + args.plainCost ??= defaultPlainCost * 2 + args.swampCost ??= defaultCreepSwampCost * 2 } // Generate a new path const path = customPathFinder.findPath(args) - if (!path.length && !creep.spawning) return Result.fail + if (!path.length) return Result.fail // Limit the path's length to the cacheAmount - path.splice(opts.cacheAmount) - // Show that a new path has been created - - if (global.settings.roomVisuals) - creep.room.visual.text('NP', path[0], { - align: 'center', - color: customColors.lightBlue, - opacity: 0.5, - font: 0.5, - }) + if (Game.flags[FlagNames.debugMovement]) { + creep.room.visual.text('NP', creep.pos, { + align: 'center', + color: customColors.lightBlue, + opacity: 0.7, + font: 0.7, + }) + } return path } - useNewPath(creep: Creep, args: CustomPathFinderArgs, opts: MoveRequestOpts, path: RoomPosition[]) { + useNewPath( + creep: Creep, + args: CustomPathFinderArgs, + opts: MoveRequestOpts, + path: RoomPosition[], + ) { // Set the creep's pathOpts to reflect this moveRequest's args creep.pathOpts = args @@ -126,14 +164,13 @@ export class CreepMoveUtils { // If we're on an exit and we want to go to the other side, wait for it to toggle if (path[0].roomName !== creep.room.name) { creep.moved = MovedTypes.moved - return Result.success + return Result.success } creep.assignMoveRequest(path[0]) return Result.success } private registerSpawnDirections(creep: Creep, path: RoomPosition[]) { - if (!creep.spawnID) return const spawn = findObjectWithID(creep.spawnID) @@ -146,29 +183,29 @@ export class CreepMoveUtils { const adjacentCoords: Coord[] = [] for (let x = spawn.pos.x - 1; x <= spawn.pos.x + 1; x += 1) { - for (let y = spawn.pos.y - 1; y <= spawn.pos.y + 1; y += 1) { - if (spawn.pos.x === x && spawn.pos.y === y) continue + for (let y = spawn.pos.y - 1; y <= spawn.pos.y + 1; y += 1) { + if (spawn.pos.x === x && spawn.pos.y === y) continue - const coord = { x, y } + const coord = { x, y } - /* if (room.coordHasStructureTypes(coord, impassibleStructureTypesSet)) continue */ + /* if (room.coordHasStructureTypes(coord, impassibleStructureTypesSet)) continue */ - // Otherwise ass the x and y to positions + // Otherwise ass the x and y to positions - adjacentCoords.push(coord) - } + adjacentCoords.push(coord) + } } // Sort by distance from the first pos in the path adjacentCoords.sort((a, b) => { - return getRange(a, path[0]) - getRange(b, path[0]) + return getRange(a, path[0]) - getRange(b, path[0]) }) const directions: DirectionConstant[] = [] for (const coord of adjacentCoords) { - directions.push(spawn.pos.getDirectionTo(coord.x, coord.y)) + directions.push(spawn.pos.getDirectionTo(coord.x, coord.y)) } spawn.spawning.setDirections(directions) diff --git a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts index 49f0fc57b..c11f39f19 100644 --- a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts @@ -153,9 +153,19 @@ PowerCreep.prototype.createMoveRequest = Creep.prototype.createMoveRequest = fun if (this.moveRequest) return Result.noAction if (this.moved) return Result.noAction if (this.fatigue > 0) return Result.noAction - if (this instanceof Creep && !this.getActiveBodyparts(MOVE)) { - this.moved = MovedTypes.moved - return Result.noAction + if (this instanceof Creep) { + + if (this.spawning) { + const spawn = findObjectWithID(this.spawnID) + if (!spawn) return Result.noAction + + // Don't plan the path until we are nearly ready to be spawned + if (spawn.spawning.remainingTime > 1) return Result.noAction + } + if (!this.getActiveBodyparts(MOVE)) { + this.moved = MovedTypes.moved + return Result.noAction + } } // Assign default args diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index 49328b0a3..a9e4d1ef6 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -14,9 +14,7 @@ import { import { statsManager } from 'international/statsManager' import { packCoord, reversePosList, unpackCoord, unpackPosAt } from 'other/codec' import { myCreepUtils } from 'room/creeps/myCreepUtils' -import { customLog } from 'utils/logging' import { - findClosestObject, findObjectWithID, getRange, getRangeXY, @@ -775,6 +773,7 @@ export class Hauler extends Creep { if (creepMemory[CreepMemoryKeys.previousRelayer] && creepMemory[CreepMemoryKeys.previousRelayer][0] === creepAtPos.name) return false // ensure the creep receiving creep is empty + /* if (creepAtPos.store.getUsedCapacity() > 0) return false */ if (creepAtPos.store.getUsedCapacity() > 0) return false let amount: number | undefined @@ -786,6 +785,7 @@ export class Hauler extends Creep { amount = logisticsRequest[CreepRoomLogisticsRequestKeys.amount] } + if (creepAtPos.store.getFreeCapacity() !== (amount ?? this.store.getUsedCapacity(RESOURCE_ENERGY))) return false this.transfer(creepAtPos, RESOURCE_ENERGY, amount) diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index 7d89a78d4..7726a41b2 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -44,6 +44,7 @@ import { doesCoordExist, findClosestObjectInRange, findClosestObject, + randomIntRange, } from 'utils/utils' import { collectiveManager } from 'international/collective' import { @@ -844,7 +845,7 @@ Room.prototype.createDefendCombatRequest = function (opts) { } request[CombatRequestKeys.inactionTimer] = 0 - request[CombatRequestKeys.inactionTimerMax] = randomRange( + request[CombatRequestKeys.inactionTimerMax] = randomIntRange( 2000, 3000, ) From d31f0d61816b1887ff9e8dda55d80ce70d389b1e Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 30 Dec 2023 23:10:02 -0800 Subject: [PATCH 047/190] remote non commune assignment fixed --- src/international/constants.ts | 3 +- src/room/commune/commune.ts | 40 ------------------- src/room/creeps/creepMoveUtils.ts | 11 +---- .../creepPrototypes/creepMoveFunctions.ts | 31 +++++++------- .../creeps/roleManagers/commune/hauler.ts | 21 ++++------ src/room/room.ts | 37 ++++++++++++++--- 6 files changed, 57 insertions(+), 86 deletions(-) diff --git a/src/international/constants.ts b/src/international/constants.ts index 0f0dd03e3..6037be5fa 100644 --- a/src/international/constants.ts +++ b/src/international/constants.ts @@ -1402,5 +1402,6 @@ export enum MovedTypes { } export enum FlagNames { - debugMovement = 'debugMovement' + debugMovement = 'debugMovement', + debugRelay = 'debugRelay', } diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index 84d356ec1..985c7e677 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -1,23 +1,9 @@ import { - createPosMap, - findAdjacentCoordsToCoord, - findAdjacentCoordsToXY, - findClosestObject, - findCPUOf, findLinkThroughput, findObjectWithID, - forAdjacentCoords, - forCoordsInRange, - getRangeXY, getRange, - isXYExit, - isXYInBorder, - isXYInRoom, packAsNum, - packXYAsNum, - randomIntRange, randomTick, - unpackNumAsCoord, findLowestScore, roundTo, forCoordsAroundRange, @@ -31,21 +17,11 @@ import './workRequest' import './combatRequest' import { creepRoles, - impassibleStructureTypesSet, - customColors, - remoteRoles, - roomDimensions, - stamps, - defaultRoadPlanningPlainCost, - adjacentOffsets, packedPosLength, - structureTypesToProtectSet, - buildableStructuresSet, RoomMemoryKeys, RoomTypes, rampartUpkeepCost, RemoteResourcePathTypes, - Result, ReservedCoordTypes, RoomStatsKeys, } from 'international/constants' @@ -53,9 +29,6 @@ import './factory' import { LabManager } from './labs' import './towers' import './links' -import { RoomVisualsManager } from '../roomVisuals' -import { EndTickCreepManager } from '../creeps/endTickCreepManager' -import { CreepRoleManager } from '../creeps/creepRoleManager' import { RemotesManager } from './remotesManager' import { WorkRequestManager } from './workRequest' import { CombatRequestManager } from './combatRequest' @@ -70,29 +43,17 @@ import { HaulerSizeManager } from './haulerSize' import { HaulerNeedManager } from './haulerNeed' import { packCoord, - packXYAsCoord, - unpackCoord, unpackPosAt, - unpackPosList, - unpackStampAnchors, } from 'other/codec' -import { ContainerManager } from '../container' import { StoringStructuresManager } from './storingStructures' -import { DroppedResourceManager } from 'room/droppedResources' import { LinkManager } from './links' -import { profiler } from 'other/profiler' import { FactoryManager } from './factory' import { SpawnRequestsManager } from './spawning/spawnRequests' import { ObserverManager } from './observer' -import { decode, encode } from 'base32768' import { collectiveManager } from 'international/collective' import { ConstructionManager } from 'room/construction/construction' -import { RampartPlans } from 'room/construction/rampartPlans' -import { has } from 'lodash' import { roomNameUtils } from 'room/roomNameUtils' import { LogTypes, customLog } from 'utils/logging' -import { creepUtils } from 'room/creeps/creepUtils' -import { SpawnRequestArgs } from 'types/spawnRequest' import { communeUtils } from './communeUtils' export type ResourceTargets = { @@ -227,7 +188,6 @@ export class CommuneManager { return } - roomMemory[RoomMemoryKeys.type] = RoomTypes.commune collectiveManager.communes.add(room.name) if (this.room.controller.safeMode) collectiveManager.safemodedCommuneName = this.room.name diff --git a/src/room/creeps/creepMoveUtils.ts b/src/room/creeps/creepMoveUtils.ts index 589ec2994..ce7fec5fd 100644 --- a/src/room/creeps/creepMoveUtils.ts +++ b/src/room/creeps/creepMoveUtils.ts @@ -64,17 +64,8 @@ export class CreepMoveUtils { let firstIndex = 0 let pos = unpackPosAt(creepMemory[CreepMemoryKeys.path], firstIndex) - const range = getRange(creep.pos, pos) - if (creepMemory[CreepMemoryKeys.path].length === 1 * packedPosLength) { - - if (range <= 1) { - return pos - } - - return Result.fail - } - else if (range === 1) { + if (getRange(creep.pos, pos) === 1) { return pos } diff --git a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts index c11f39f19..78286fa86 100644 --- a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts @@ -56,11 +56,20 @@ PowerCreep.prototype.createMoveRequestByPath = Creep.prototype.createMoveRequest if (this.moveRequest) return Result.noAction if (this.moved) return Result.noAction if (this.fatigue > 0) return Result.noAction - if (this instanceof Creep && !this.getActiveBodyparts(MOVE)) { - this.moved = MovedTypes.moved - return Result.noAction - } + if (this instanceof Creep) { + if (this.spawning) { + const spawn = findObjectWithID(this.spawnID) + if (!spawn) return Result.noAction + + // Don't plan the path until we are nearly ready to be spawned + if (spawn.spawning.remainingTime > 1) return Result.noAction + } + if (!this.getActiveBodyparts(MOVE)) { + this.moved = MovedTypes.moved + return Result.noAction + } + } if (this.room.roomManager.enemyDamageThreat) return this.createMoveRequest(args) // const posIndex = pathOpts.packedPath.indexOf(packPos(this.pos)) @@ -76,10 +85,7 @@ PowerCreep.prototype.createMoveRequestByPath = Creep.prototype.createMoveRequest } // - /* - const path = unpackPosList(pathOpts.packedPath) - for (const pos of path) new RoomVisual(pos.roomName).rect(pos.x - 0.5, pos.y - 0.5, 1, 1, { fill: customColors.lightBlue, opacity: 0.2 }) - */ + const packedGoalPos = packPos(args.goals[0].pos) const isOnLastPos = posIndex + packedPosLength === pathOpts.packedPath.length @@ -94,15 +100,6 @@ PowerCreep.prototype.createMoveRequestByPath = Creep.prototype.createMoveRequest // If we're on an exit and the next pos is in the other room, wait if (pos.roomName !== this.room.name) { - this.room.visual.text(pos.roomName, this.pos.x, this.pos.y - 0.5, { font: 0.3 }) - - this.room.visual.text(args.goals[0].pos.roomName, this.pos.x, this.pos.y - 1, { - font: 0.3, - }) - - /* const secondPos = unpackPosAt(pathOpts.packedPath, posIndex / packedPosLength - 1) - this.room.visual.text(secondPos.roomName, this.pos.x, this.pos.y - 1, { font: 0.3 }) */ - /* this.room.visual.text(pos.roomName, this.pos.x, this.pos.y + 1, { font: 0.5 }) */ this.memory[CreepMemoryKeys.path] = packedPath this.moved = MovedTypes.moved diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index a9e4d1ef6..1fe25fc33 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -1,6 +1,7 @@ import { CreepMemoryKeys, CreepRoomLogisticsRequestKeys, + FlagNames, MovedTypes, Result, RoomLogisticsRequestTypes, @@ -776,6 +777,9 @@ export class Hauler extends Creep { /* if (creepAtPos.store.getUsedCapacity() > 0) return false */ if (creepAtPos.store.getUsedCapacity() > 0) return false + // Ensure that they have the same opinions on roads + if (creepMemory[CreepMemoryKeys.preferRoads] === creepMemory[CreepMemoryKeys.preferRoads]) return false + let amount: number | undefined const logisticsRequest = Memory.creeps[this.name][CreepMemoryKeys.roomLogisticsRequests][0] if (logisticsRequest) { @@ -866,22 +870,13 @@ export class Hauler extends Creep { if (creepAtPosMemory[CreepMemoryKeys.taskRoom]) hauler.runCommuneLogistics() else if (creepAtPosMemory[CreepMemoryKeys.remote]) hauler.deliverResources() - /* - for (const creep of [this, creepAtPos]) { - - if (creep.moveRequest) { - - const coord = unpackCoord(creep.moveRequest) + if (Game.flags[FlagNames.debugRelay]) { - this.room.coordVisual(coord.x, coord.y) + if (this.moveRequest) this.room.targetVisual(this.pos, unpackCoord(this.moveRequest), true) + if (creepAtPos.moveRequest) { + creepAtPos.room.targetVisual(creepAtPos.pos, unpackCoord(creepAtPos.moveRequest), true) } } - */ - - if (this.moveRequest) this.room.targetVisual(this.pos, unpackCoord(this.moveRequest), true) - if (creepAtPos.moveRequest) { - creepAtPos.room.targetVisual(creepAtPos.pos, unpackCoord(creepAtPos.moveRequest), true) - } return true } diff --git a/src/room/room.ts b/src/room/room.ts index fc9cdeb82..cb9683ab3 100644 --- a/src/room/room.ts +++ b/src/room/room.ts @@ -234,26 +234,53 @@ export class RoomManager { [RoomLogisticsRequestTypes.pickup]: {}, } - if (roomMemory[RoomMemoryKeys.type] === RoomTypes.remote) return + if (!room.controller) return - // Check if the room is a commune + // There is a controller + + if (this.updatePotentialCommune(room) === true) return + + // The room isn't a commune + + + } + + /** + * + * @returns wether or not the room is a commune + */ + private updatePotentialCommune(room: Room): boolean { + + const roomMemory = Memory.rooms[room.name] + + if (!this.room.controller.my) { - if (!room.controller) return - if (!room.controller.my) { if (roomMemory[RoomMemoryKeys.type] === RoomTypes.commune) { roomMemory[RoomMemoryKeys.type] = RoomTypes.neutral roomNameUtils.cleanMemory(room.name) } - return + return false + } + + // If the type isn't a commune, make it so and clean its memory + + if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.commune) { + + roomMemory[RoomMemoryKeys.type] = RoomTypes.commune + roomNameUtils.cleanMemory(room.name) } + // If there is no communeManager for the room yet, make one and assign them together + room.communeManager = CommuneManager.communeManagers[room.name] if (!room.communeManager) { + room.communeManager = new CommuneManager() CommuneManager.communeManagers[room.name] = room.communeManager } room.communeManager.update(room) + return true } initRun() { From 0fe7aea56d4a3d8967c2881ed2c7dea35a94c3a2 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 30 Dec 2023 23:17:43 -0800 Subject: [PATCH 048/190] rampartRepairStructures caching fix facepalm --- src/room/commune/communeUtils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/room/commune/communeUtils.ts b/src/room/commune/communeUtils.ts index dc5980250..4b73c6c10 100644 --- a/src/room/commune/communeUtils.ts +++ b/src/room/commune/communeUtils.ts @@ -123,7 +123,7 @@ export class CommuneUtils { repairTargets.push(structure) } - room.rampartRepairStructures + room.rampartRepairStructures = repairTargets return repairTargets } } From 8956e5d37722103154be7562e465ab00361fae70 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 30 Dec 2023 23:20:05 -0800 Subject: [PATCH 049/190] repair threshold adjustments --- src/room/commune/communeData.ts | 1 - src/room/commune/communeUtils.ts | 1 - src/room/commune/spawning/spawnRequests.ts | 2 +- src/room/creeps/creepPrototypes/creepFunctions.ts | 2 +- 4 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/room/commune/communeData.ts b/src/room/commune/communeData.ts index 9c98e2d22..5ab3b06c0 100644 --- a/src/room/commune/communeData.ts +++ b/src/room/commune/communeData.ts @@ -6,7 +6,6 @@ interface CommuneData { */ registeredRCL: number generalRepairStructureCoords: Set - rampartRepairStructureCoords: Set } /** diff --git a/src/room/commune/communeUtils.ts b/src/room/commune/communeUtils.ts index 4b73c6c10..4eaf6fd0e 100644 --- a/src/room/commune/communeUtils.ts +++ b/src/room/commune/communeUtils.ts @@ -27,7 +27,6 @@ export class CommuneUtils { /* const roomData = roomDataManager.data[room.name] */ delete communeData.generalRepairStructureCoords - delete communeData.rampartRepairStructureCoords communeData.registeredRCL = room.controller.level } diff --git a/src/room/commune/spawning/spawnRequests.ts b/src/room/commune/spawning/spawnRequests.ts index e29974ef6..99d84424c 100644 --- a/src/room/commune/spawning/spawnRequests.ts +++ b/src/room/commune/spawning/spawnRequests.ts @@ -579,7 +579,7 @@ export class SpawnRequestsManager { ((): SpawnRequestArgs | false => { const generalRepairStructures = communeUtils.getGeneralRepairStructures(this.communeManager.room) const repairTargets = generalRepairStructures.filter( - structure => structure.hitsMax * 0.3 >= structure.hits, + structure => structure.hitsMax * 0.15 >= structure.hits, ) // Get ramparts below their max hits diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index 99cdba88f..5ccfd76db 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -413,7 +413,7 @@ Creep.prototype.findNewRampartRepairTarget = function () { Creep.prototype.findNewRepairTarget = function () { const enemyAttackers = !!this.room.roomManager.enemyAttackers.length - let repairThreshold = enemyAttackers ? 0.1 : 0.2 + let repairThreshold = enemyAttackers ? 0.1 : 0.3 let lowestScore = Infinity let bestTarget From c805f18735d9dfcc36fa504f7ce122daa7406f1c Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 30 Dec 2023 23:25:31 -0800 Subject: [PATCH 050/190] fix relaying preferRoads check --- src/room/creeps/roleManagers/commune/hauler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index 1fe25fc33..085aeff31 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -778,7 +778,7 @@ export class Hauler extends Creep { if (creepAtPos.store.getUsedCapacity() > 0) return false // Ensure that they have the same opinions on roads - if (creepMemory[CreepMemoryKeys.preferRoads] === creepMemory[CreepMemoryKeys.preferRoads]) return false + if (creepMemory[CreepMemoryKeys.preferRoads] !== creepMemory[CreepMemoryKeys.preferRoads]) return false let amount: number | undefined const logisticsRequest = Memory.creeps[this.name][CreepMemoryKeys.roomLogisticsRequests][0] From 0a1304af87c538a519dc5ea8fae681911b7fd276 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 30 Dec 2023 23:27:41 -0800 Subject: [PATCH 051/190] end of path check for moveTarget --- src/room/creeps/creepMoveUtils.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/room/creeps/creepMoveUtils.ts b/src/room/creeps/creepMoveUtils.ts index ce7fec5fd..ad0ec9491 100644 --- a/src/room/creeps/creepMoveUtils.ts +++ b/src/room/creeps/creepMoveUtils.ts @@ -73,6 +73,7 @@ export class CreepMoveUtils { // Cut the path based coords we skiped over creepMemory[CreepMemoryKeys.path] = creepMemory[CreepMemoryKeys.path].slice((firstIndex + 1) * packedPosLength) + if (!creepMemory[CreepMemoryKeys.path].length) return Result.fail // Second index From 4a979fad410c087b41b7cc4accf54b539da70c86 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sun, 31 Dec 2023 11:48:05 -0800 Subject: [PATCH 052/190] general logistics improvements --- src/international/constants.ts | 5 +- src/international/flags.ts | 58 + src/international/init.ts | 29 +- src/international/players.ts | 6 +- src/room/commune/commune.ts | 2 +- src/room/container.ts | 2 +- src/room/creeps/creepMoveUtils.ts | 6 +- .../creeps/creepPrototypes/creepFunctions.ts | 2614 ++++++++--------- .../creeps/roleManagers/commune/hauler.ts | 27 +- src/room/room.ts | 9 +- src/room/roomFunctions.ts | 189 +- 11 files changed, 1499 insertions(+), 1448 deletions(-) diff --git a/src/international/constants.ts b/src/international/constants.ts index 6037be5fa..e9bc610cd 100644 --- a/src/international/constants.ts +++ b/src/international/constants.ts @@ -1402,6 +1402,7 @@ export enum MovedTypes { } export enum FlagNames { - debugMovement = 'debugMovement', - debugRelay = 'debugRelay', + debugMovement = 'debugMovement', + debugRelay = 'debugRelay', + debugRoomLogistics = 'debugRoomLogistics', } diff --git a/src/international/flags.ts b/src/international/flags.ts index 01779eead..7a701fff6 100644 --- a/src/international/flags.ts +++ b/src/international/flags.ts @@ -7,6 +7,7 @@ import { packCoord } from 'other/codec' import { findObjectWithID, isAlly } from 'utils/utils' import { customLog } from 'utils/logging' import { spawnRequestConstructorsByType } from 'room/commune/spawning/spawningStructures' +import { roomUtils } from 'room/roomUtils' export class FlagManager { run() { @@ -640,6 +641,63 @@ export class FlagManager { ], }) } + + private diagonalCoords(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const room = Game.rooms[roomName] + if (!room) { + + flag.setColor(COLOR_RED) + return + } + + const roomMemory = Memory.rooms[room.name] + if (!roomMemory || !roomMemory[RoomMemoryKeys.commune]) { + + flag.setColor(COLOR_RED) + return + } + + const commune = Game.rooms[roomMemory[RoomMemoryKeys.commune]] + if (!commune) { + + flag.setColor(COLOR_RED) + return + } + + const diagonalCoords = roomNameUtils.diagonalCoords(room.name, commune) + room.visualizeCoordMap(diagonalCoords) + } + + private controllerStructure(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const room = Game.rooms[roomName] + if (!room) { + + flag.setColor(COLOR_RED) + return + } + + if (!room.communeManager) { + + flag.setColor(COLOR_RED) + return + } + + const controllerStructure = room.communeManager.upgradeStructure + if (!controllerStructure) { + + const centerUpgradePos = room.roomManager.centerUpgradePos + room.visual.text('X', centerUpgradePos) + return + } + + // There is a controller structure + + room.visual.text('CS', controllerStructure.pos) + } } export const flagManager = new FlagManager() diff --git a/src/international/init.ts b/src/international/init.ts index a0d657c92..6e007f1cc 100644 --- a/src/international/init.ts +++ b/src/international/init.ts @@ -1,6 +1,8 @@ import { getMe } from 'utils/utils' import { playerManager } from './players' import { statsManager } from './statsManager' +import { PlayerMemoryKeys } from './constants' +import { PlayerRelationships } from 'types/players' /** * Configures variables to align with the bot's expectations, to ensure proper function @@ -10,16 +12,7 @@ class InitManager { this.initMemory() this.initGlobal() } - /** - * Make sure we have configured memory for allies - */ - initAllies() { - for (const playerName of global.settings.allies) { - if (Memory.players[playerName]) continue - playerManager.initPlayer(playerName) - } - } /** * Construct Memory if it isn't constructed yet */ @@ -48,10 +41,6 @@ class InitManager { Memory.haulRequests = {} Memory.nukeRequests = {} statsManager.internationalConfig() - - // - - this.initAllies() } /** * Construct global if it isn't constructed yet @@ -63,6 +52,20 @@ class InitManager { global.packedRoomNames = {} global.unpackedRoomNames = {} + + this.initPlayers() + } + private initPlayers() { + + for (const playerName of global.settings.allies) { + + const playerMemory = Memory.players[playerName] + if (!playerMemory) { + playerManager.initPlayer(playerName) + } + + playerMemory[PlayerMemoryKeys.relationship] = PlayerRelationships.ally + } } } diff --git a/src/international/players.ts b/src/international/players.ts index 66872ad12..51d4132e2 100644 --- a/src/international/players.ts +++ b/src/international/players.ts @@ -34,9 +34,11 @@ export class PlayerManager extends Sleepable { } const threat = player[PlayerMemoryKeys.offensiveThreat] - if (threat <= this.highestThreat) continue + if (threat > this.highestThreat) { + this.highestThreat = threat + } - this.highestThreat = threat + } } diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index 985c7e677..24a9849c9 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -810,7 +810,7 @@ export class CommuneManager { return (this._sourceLinks = links) } - private controllerLinkID: Id + controllerLinkID: Id private _controllerLink: StructureLink | false get controllerLink() { if (this._controllerLink !== undefined) return this._controllerLink diff --git a/src/room/container.ts b/src/room/container.ts index bd85a7727..c6a6d2b22 100644 --- a/src/room/container.ts +++ b/src/room/container.ts @@ -91,7 +91,7 @@ export class ContainerManager { ? 0 : 50 priority += scalePriority(container.store.getCapacity(), container.reserveStore.energy, 20) - + this.roomManager.room.createRoomLogisticsRequest({ target: container, type: RoomLogisticsRequestTypes.transfer, diff --git a/src/room/creeps/creepMoveUtils.ts b/src/room/creeps/creepMoveUtils.ts index ad0ec9491..abe7c5dba 100644 --- a/src/room/creeps/creepMoveUtils.ts +++ b/src/room/creeps/creepMoveUtils.ts @@ -54,6 +54,7 @@ export class CreepMoveUtils { /** * Similar to the game's moveByPath + * We need to also check if the next position is an opposite exit coord */ private findMoveTarget( creep: Creep, @@ -72,12 +73,13 @@ export class CreepMoveUtils { // Failed to use first index // Cut the path based coords we skiped over - creepMemory[CreepMemoryKeys.path] = creepMemory[CreepMemoryKeys.path].slice((firstIndex + 1) * packedPosLength) + creepMemory[CreepMemoryKeys.path] = creepMemory[CreepMemoryKeys.path].slice(packedPosLength) if (!creepMemory[CreepMemoryKeys.path].length) return Result.fail // Second index pos = unpackPosAt(creepMemory[CreepMemoryKeys.path], firstIndex) + console.log(creepMemory[CreepMemoryKeys.path].length, creepMemory[CreepMemoryKeys.path]) if (getRange(creep.pos, pos) === 1) { return pos } @@ -85,7 +87,7 @@ export class CreepMoveUtils { // Failed to use second index // Cut the path based coords we skiped over - creepMemory[CreepMemoryKeys.path] = creepMemory[CreepMemoryKeys.path].slice((firstIndex + 1) * packedPosLength) + creepMemory[CreepMemoryKeys.path] = creepMemory[CreepMemoryKeys.path].slice(packedPosLength) return Result.fail } diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index 5ccfd76db..591f695c6 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -1,56 +1,56 @@ import { spawn } from 'child_process' import { - cacheAmountModifier, - communeSign, - CPUBucketCapacity, - defaultCreepSwampCost, - defaultPlainCost, - impassibleStructureTypes, - customColors, - nonCommuneSigns, - quadAttackMemberOffsets, - roomDimensions, - TrafficPriorities, - offsetsByDirection, - Result, - storingStructureTypesSet, - CreepMemoryKeys, - CreepRoomLogisticsRequestKeys, - RoomMemoryKeys, - ReservedCoordTypes, - WorkTypes, - RoomLogisticsRequestTypes, + cacheAmountModifier, + communeSign, + CPUBucketCapacity, + defaultCreepSwampCost, + defaultPlainCost, + impassibleStructureTypes, + customColors, + nonCommuneSigns, + quadAttackMemberOffsets, + roomDimensions, + TrafficPriorities, + offsetsByDirection, + Result, + storingStructureTypesSet, + CreepMemoryKeys, + CreepRoomLogisticsRequestKeys, + RoomMemoryKeys, + ReservedCoordTypes, + WorkTypes, + RoomLogisticsRequestTypes, } from 'international/constants' import { - areCoordsEqual, - findClosestObject, - findClosestPos, - findCreepInQueueMatchingRequest, - findObjectWithID, - findCoordsInsideRect, - getRangeXY, - findClosestObjectInRange, - isXYExit, - packAsNum, - unpackNumAsPos, - packXYAsNum, - unpackNumAsCoord, - getRange, - randomTick, - arePositionsEqual, - findWithLowestScore, + areCoordsEqual, + findClosestObject, + findClosestPos, + findCreepInQueueMatchingRequest, + findObjectWithID, + findCoordsInsideRect, + getRangeXY, + findClosestObjectInRange, + isXYExit, + packAsNum, + unpackNumAsPos, + packXYAsNum, + unpackNumAsCoord, + getRange, + randomTick, + arePositionsEqual, + findWithLowestScore, } from 'utils/utils' import { collectiveManager } from 'international/collective' import { any, pick, random, repeat } from 'lodash' import { - packCoord, - packPos, - packPosList, - packXYAsCoord, - unpackCoord, - unpackCoordAsPos, - unpackPos, - unpackPosList, + packCoord, + packPos, + packPosList, + packXYAsCoord, + unpackCoord, + unpackCoordAsPos, + unpackPos, + unpackPosList, } from 'other/codec' import { creepClasses } from '../creepClasses' import { statsManager } from 'international/statsManager' @@ -69,510 +69,506 @@ Creep.prototype.initRun = function () {} Creep.prototype.endRun = function () {} Creep.prototype.isDying = function () { - // Stop if creep is spawning + // Stop if creep is spawning - if (this.spawning) return false + if (this.spawning) return false - // If the creep's remaining ticks are more than the estimated spawn time, inform false + // If the creep's remaining ticks are more than the estimated spawn time, inform false - if (this.ticksToLive > this.body.length * CREEP_SPAWN_TIME) return false + if (this.ticksToLive > this.body.length * CREEP_SPAWN_TIME) return false - // Record creep as isDying + // Record creep as isDying - return true + return true } PowerCreep.prototype.isDying = function () { - return this.ticksToLive < POWER_CREEP_LIFE_TIME / 5 + return this.ticksToLive < POWER_CREEP_LIFE_TIME / 5 } -PowerCreep.prototype.advancedTransfer = Creep.prototype.advancedTransfer = function (target, resourceType = RESOURCE_ENERGY, amount) { - // If creep isn't in transfer range +PowerCreep.prototype.advancedTransfer = Creep.prototype.advancedTransfer = function ( + target, + resourceType = RESOURCE_ENERGY, + amount, +) { + // If creep isn't in transfer range - if (this.pos.getRangeTo(target.pos) > 1) { - // Make a moveRequest to target and inform false + if (this.pos.getRangeTo(target.pos) > 1) { + // Make a moveRequest to target and inform false - this.createMoveRequest({ - origin: this.pos, - goals: [{ pos: target.pos, range: 1 }], - avoidEnemyRanges: true, - }) - return false - } + this.createMoveRequest({ + origin: this.pos, + goals: [{ pos: target.pos, range: 1 }], + avoidEnemyRanges: true, + }) + return false + } - if (this.movedResource) return false + if (this.movedResource) return false - // Try to transfer, recording the result + // Try to transfer, recording the result - const transferResult = this.transfer(target, resourceType, amount) - this.message += transferResult + const transferResult = this.transfer(target, resourceType, amount) + this.message += transferResult - // If the action can be considered a success + // If the action can be considered a success - if ( - transferResult === OK || - transferResult === ERR_FULL || - transferResult === ERR_NOT_ENOUGH_RESOURCES - ) { - this.movedResource = true - return true - } + if ( + transferResult === OK || + transferResult === ERR_FULL || + transferResult === ERR_NOT_ENOUGH_RESOURCES + ) { + this.movedResource = true + return true + } - // Otherwise inform false + // Otherwise inform false - return false + return false } Creep.prototype.advancedWithdraw = function (target, resourceType = RESOURCE_ENERGY, amount) { - // If creep isn't in transfer range + // If creep isn't in transfer range - if (this.pos.getRangeTo(target.pos) > 1) { - // Create a moveRequest to the target and inform failure + if (this.pos.getRangeTo(target.pos) > 1) { + // Create a moveRequest to the target and inform failure - this.createMoveRequest({ - origin: this.pos, - goals: [{ pos: target.pos, range: 1 }], - avoidEnemyRanges: true, - }) + this.createMoveRequest({ + origin: this.pos, + goals: [{ pos: target.pos, range: 1 }], + avoidEnemyRanges: true, + }) - return false - } + return false + } - if (this.movedResource) return false + if (this.movedResource) return false - // Try to withdraw, recording the result + // Try to withdraw, recording the result - const withdrawResult = this.withdraw(target as any, resourceType, amount) - this.message += withdrawResult + const withdrawResult = this.withdraw(target as any, resourceType, amount) + this.message += withdrawResult - // If the action can be considered a success + // If the action can be considered a success - if (withdrawResult === OK || withdrawResult === ERR_FULL) { - this.movedResource = true - return true - } + if (withdrawResult === OK || withdrawResult === ERR_FULL) { + this.movedResource = true + return true + } - // Otherwise inform false + // Otherwise inform false - return false + return false } Creep.prototype.advancedPickup = function (target) { - // If creep isn't in transfer range + // If creep isn't in transfer range - if (this.pos.getRangeTo(target.pos) > 1) { - // Make a moveRequest to the target and inform failure + if (this.pos.getRangeTo(target.pos) > 1) { + // Make a moveRequest to the target and inform failure - this.createMoveRequest({ - origin: this.pos, - goals: [{ pos: target.pos, range: 1 }], - avoidEnemyRanges: true, - }) + this.createMoveRequest({ + origin: this.pos, + goals: [{ pos: target.pos, range: 1 }], + avoidEnemyRanges: true, + }) - return false - } + return false + } - if (this.movedResource) return false + if (this.movedResource) return false - const pickupResult = this.pickup(target) - this.message += pickupResult + const pickupResult = this.pickup(target) + this.message += pickupResult - // Try to pickup. if the action can be considered a success + // Try to pickup. if the action can be considered a success - if (pickupResult === OK || pickupResult === ERR_FULL) { - this.movedResource = true - return true - } + if (pickupResult === OK || pickupResult === ERR_FULL) { + this.movedResource = true + return true + } - // Otherwise inform false + // Otherwise inform false - return false + return false } Creep.prototype.advancedBuild = function () { - const cSiteTarget = this.room.roomManager.cSiteTarget - if (!cSiteTarget) return Result.fail + const cSiteTarget = this.room.roomManager.cSiteTarget + if (!cSiteTarget) return Result.fail - // Try to run catch every situation of results + // Try to run catch every situation of results - if (this.builderGetEnergy() === Result.stop) return Result.action + if (this.builderGetEnergy() === Result.stop) return Result.action - if (this.advancedBuildCSite(cSiteTarget) !== Result.success) return Result.action + if (this.advancedBuildCSite(cSiteTarget) !== Result.success) return Result.action - if (this.builderGetEnergy() === Result.stop) return Result.action - return Result.success + if (this.builderGetEnergy() === Result.stop) return Result.action + return Result.success } Creep.prototype.builderGetEnergy = function () { - // If there is a sufficient storing structure + // If there is a sufficient storing structure - if (this.room.communeManager.buildersMakeRequests) return Result.noAction - if (!this.needsResources()) return Result.noAction + if (this.room.communeManager.buildersMakeRequests) return Result.noAction + if (!this.needsResources()) return Result.noAction - if (this.room.communeManager && this.room.communeManager.storingStructures.length) { - if (this.room.roomManager.resourcesInStoringStructures.energy < 1000) { - return Result.noAction - } - - this.runRoomLogisticsRequestsAdvanced({ - types: new Set([ - RoomLogisticsRequestTypes.withdraw, - RoomLogisticsRequestTypes.pickup, - RoomLogisticsRequestTypes.offer, - ]), - resourceTypes: new Set([RESOURCE_ENERGY]), - }) - - // Don't try to build if we still need resources - - if (this.needsResources()) return Result.stop - return Result.success + if (this.room.communeManager && this.room.communeManager.storingStructures.length) { + if (this.room.roomManager.resourcesInStoringStructures.energy < 1000) { + return Result.noAction } - // We don't have a storage or terminal, don't allow use of sourceContainers - this.runRoomLogisticsRequestsAdvanced({ - types: new Set([ - RoomLogisticsRequestTypes.withdraw, - RoomLogisticsRequestTypes.pickup, - RoomLogisticsRequestTypes.offer, - ]), - resourceTypes: new Set([RESOURCE_ENERGY]), - conditions: (request: RoomLogisticsRequest) => { - const target = findObjectWithID(request.targetID) - - // Don't get energy from the sources - for (const positions of this.room.roomManager.communeSourceHarvestPositions) { - if (getRange(target.pos, positions[0]) <= 1) return false - } - - return true - }, + types: new Set([ + RoomLogisticsRequestTypes.withdraw, + RoomLogisticsRequestTypes.pickup, + RoomLogisticsRequestTypes.offer, + ]), + resourceTypes: new Set([RESOURCE_ENERGY]), }) + // Don't try to build if we still need resources if (this.needsResources()) return Result.stop return Result.success + } + + // We don't have a storage or terminal, don't allow use of sourceContainers + + this.runRoomLogisticsRequestsAdvanced({ + types: new Set([ + RoomLogisticsRequestTypes.withdraw, + RoomLogisticsRequestTypes.pickup, + RoomLogisticsRequestTypes.offer, + ]), + resourceTypes: new Set([RESOURCE_ENERGY]), + conditions: (request: RoomLogisticsRequest) => { + const target = findObjectWithID(request.targetID) + + // Don't get energy from the sources + for (const positions of this.room.roomManager.communeSourceHarvestPositions) { + if (getRange(target.pos, positions[0]) <= 1) return false + } + + return true + }, + }) + // Don't try to build if we still need resources + + if (this.needsResources()) return Result.stop + return Result.success } Creep.prototype.advancedBuildCSite = function (cSite) { - this.actionCoord = cSite.pos - - // If the cSite is out of range + this.actionCoord = cSite.pos - if (getRange(this.pos, cSite.pos) > 3) { - this.message = '➡️🚧' + // If the cSite is out of range - // Make a move request to it + if (getRange(this.pos, cSite.pos) > 3) { + this.message = '➡️🚧' - this.createMoveRequest({ - origin: this.pos, - goals: [{ pos: cSite.pos, range: 3 }], - avoidEnemyRanges: true, - defaultCostMatrix(roomName) { - const roomManager = RoomManager.roomManagers[roomName] - if (!roomManager) return false + // Make a move request to it - return roomManager.defaultCostMatrix - }, - }) + this.createMoveRequest({ + origin: this.pos, + goals: [{ pos: cSite.pos, range: 3 }], + avoidEnemyRanges: true, + defaultCostMatrix(roomName) { + const roomManager = RoomManager.roomManagers[roomName] + if (!roomManager) return false + + return roomManager.defaultCostMatrix + }, + }) - return Result.action - } + return Result.action + } - if (this.worked) return Result.noAction + if (this.worked) return Result.noAction - // Buld the cSite + // Buld the cSite - if (this.build(cSite) !== OK) return Result.fail + if (this.build(cSite) !== OK) return Result.fail - // Find the build amount by finding the smaller of the creep's work and the progress left for the cSite divided by build power + // Find the build amount by finding the smaller of the creep's work and the progress left for the cSite divided by build power - const energySpentOnConstruction = creepUtils.findEnergySpentOnConstruction( - this, - cSite, - myCreepUtils.parts(this).work, - ) + const energySpentOnConstruction = creepUtils.findEnergySpentOnConstruction( + this, + cSite, + myCreepUtils.parts(this).work, + ) - this.nextStore.energy -= energySpentOnConstruction + this.nextStore.energy -= energySpentOnConstruction - // Add control points to total controlPoints counter and say the success + // Add control points to total controlPoints counter and say the success - statsManager.updateStat(this.room.name, 'eob', energySpentOnConstruction) - this.message = `🚧 ` + energySpentOnConstruction + statsManager.updateStat(this.room.name, 'eob', energySpentOnConstruction) + this.message = `🚧 ` + energySpentOnConstruction - return Result.success + return Result.success } Creep.prototype.advancedBuildAllyCSite = function () { - const { room } = this + const { room } = this - // If there is no construction target ID + // If there is no construction target ID - if (!room.memory[RoomMemoryKeys.constructionSiteTarget]) { - // Try to find a construction target. If none are found, stop + if (!room.memory[RoomMemoryKeys.constructionSiteTarget]) { + // Try to find a construction target. If none are found, stop - room.findAllyCSiteTargetID(this) - } + room.findAllyCSiteTargetID(this) + } - // Convert the construction target ID into a game object + // Convert the construction target ID into a game object - let cSiteTarget = findObjectWithID(room.memory[RoomMemoryKeys.constructionSiteTarget]) + let cSiteTarget = findObjectWithID(room.memory[RoomMemoryKeys.constructionSiteTarget]) - // If there is no construction target + // If there is no construction target - if (!cSiteTarget) { - // Try to find a construction target. If none are found, stop + if (!cSiteTarget) { + // Try to find a construction target. If none are found, stop - room.findAllyCSiteTargetID(this) - } - - // Convert the construction target ID into a game object, stopping if it's undefined - - cSiteTarget = findObjectWithID(room.memory[RoomMemoryKeys.constructionSiteTarget]) + room.findAllyCSiteTargetID(this) + } - // Stop if the cSite is undefined + // Convert the construction target ID into a game object, stopping if it's undefined - if (!cSiteTarget) return false + cSiteTarget = findObjectWithID(room.memory[RoomMemoryKeys.constructionSiteTarget]) - this.message = 'ABCS' + // Stop if the cSite is undefined - // If the cSite is out of range + if (!cSiteTarget) return false - if (getRangeXY(this.pos.x, cSiteTarget.pos.x, this.pos.y, cSiteTarget.pos.y) > 3) { - this.message = '➡️CS' + this.message = 'ABCS' - // Make a move request to it + // If the cSite is out of range - this.createMoveRequest({ - origin: this.pos, - goals: [{ pos: cSiteTarget.pos, range: 3 }], - avoidEnemyRanges: true, - defaultCostMatrix(roomName) { - const roomManager = RoomManager.roomManagers[roomName] - if (!roomManager) return false + if (getRangeXY(this.pos.x, cSiteTarget.pos.x, this.pos.y, cSiteTarget.pos.y) > 3) { + this.message = '➡️CS' - return roomManager.defaultCostMatrix - }, - }) - - return true - } + // Make a move request to it - // Otherwise + this.createMoveRequest({ + origin: this.pos, + goals: [{ pos: cSiteTarget.pos, range: 3 }], + avoidEnemyRanges: true, + defaultCostMatrix(roomName) { + const roomManager = RoomManager.roomManagers[roomName] + if (!roomManager) return false + + return roomManager.defaultCostMatrix + }, + }) - // Try to build the construction site + return true + } - const buildResult = this.build(cSiteTarget) + // Otherwise - // If the build worked + // Try to build the construction site - if (buildResult === OK) { - // Find the build amount by finding the smaller of the creep's work and the progress left for the cSite divided by build power + const buildResult = this.build(cSiteTarget) - const energySpentOnConstruction = creepUtils.findEnergySpentOnConstruction( - this, - cSiteTarget, - myCreepUtils.parts(this).work, - ) + // If the build worked - this.nextStore.energy -= energySpentOnConstruction + if (buildResult === OK) { + // Find the build amount by finding the smaller of the creep's work and the progress left for the cSite divided by build power - // Add control points to total controlPoints counter and say the success + const energySpentOnConstruction = creepUtils.findEnergySpentOnConstruction( + this, + cSiteTarget, + myCreepUtils.parts(this).work, + ) - statsManager.updateStat(this.room.name, 'eob', energySpentOnConstruction) - this.message = `🚧${energySpentOnConstruction}` + this.nextStore.energy -= energySpentOnConstruction - // Inform true + // Add control points to total controlPoints counter and say the success - return true - } + statsManager.updateStat(this.room.name, 'eob', energySpentOnConstruction) + this.message = `🚧${energySpentOnConstruction}` // Inform true return true + } + + // Inform true + + return true } Creep.prototype.findNewRampartRepairTarget = function () { - const ramparts = this.room.roomManager.enemyAttackers.length - ? this.room.communeManager.defensiveRamparts - : communeUtils.getRampartRepairTargets(this.room) + const ramparts = this.room.roomManager.enemyAttackers.length + ? this.room.communeManager.defensiveRamparts + : communeUtils.getRampartRepairTargets(this.room) - const [score, bestTarget] = findWithLowestScore(ramparts, structure => { - if (structure.nextHits / structure.hitsMax > 0.9) return false + const [score, bestTarget] = findWithLowestScore(ramparts, structure => { + if (structure.nextHits / structure.hitsMax > 0.9) return false - // Score by range and hits - return getRange(this.pos, structure.pos) + structure.nextHits / 1000 - }) + // Score by range and hits + return getRange(this.pos, structure.pos) + structure.nextHits / 1000 + }) - if (!bestTarget) return false + if (!bestTarget) return false - Memory.creeps[this.name][CreepMemoryKeys.structureTarget] = bestTarget.id - return bestTarget + Memory.creeps[this.name][CreepMemoryKeys.structureTarget] = bestTarget.id + return bestTarget } Creep.prototype.findNewRepairTarget = function () { + const enemyAttackers = !!this.room.roomManager.enemyAttackers.length + let repairThreshold = enemyAttackers ? 0.1 : 0.3 - const enemyAttackers = !!this.room.roomManager.enemyAttackers.length - let repairThreshold = enemyAttackers ? 0.1 : 0.3 - - let lowestScore = Infinity - let bestTarget + let lowestScore = Infinity + let bestTarget - const structures = communeUtils.getGeneralRepairStructures(this.room) - for (const structure of structures) { - // If above 30% of max hits + const structures = communeUtils.getGeneralRepairStructures(this.room) + for (const structure of structures) { + // If above 30% of max hits - if (structure.nextHits / structure.hitsMax > repairThreshold) continue + if (structure.nextHits / structure.hitsMax > repairThreshold) continue - const score = - getRange(this.pos, structure.pos) + (structure.nextHits / structure.hitsMax) * 20 - if (score >= lowestScore) continue + const score = getRange(this.pos, structure.pos) + (structure.nextHits / structure.hitsMax) * 20 + if (score >= lowestScore) continue - lowestScore = score - bestTarget = structure - } + lowestScore = score + bestTarget = structure + } - if (!bestTarget) return false + if (!bestTarget) return false - this.memory[CreepMemoryKeys.structureTarget] = bestTarget.id - return bestTarget + this.memory[CreepMemoryKeys.structureTarget] = bestTarget.id + return bestTarget } Creep.prototype.findRepairTarget = function () { - if (this.memory[CreepMemoryKeys.structureTarget]) { - const repairTarget = findObjectWithID(this.memory[CreepMemoryKeys.structureTarget]) - if (repairTarget) return repairTarget - } + if (this.memory[CreepMemoryKeys.structureTarget]) { + const repairTarget = findObjectWithID(this.memory[CreepMemoryKeys.structureTarget]) + if (repairTarget) return repairTarget + } - return this.findNewRepairTarget() || this.findNewRampartRepairTarget() + return this.findNewRepairTarget() || this.findNewRampartRepairTarget() } Creep.prototype.findSourceIndex = function () { - const { room } = this + const { room } = this - this.message = 'FOSN' + this.message = 'FOSN' - if (this.memory[CreepMemoryKeys.sourceIndex] !== undefined) return true + if (this.memory[CreepMemoryKeys.sourceIndex] !== undefined) return true - let creepThreshold = 1 + let creepThreshold = 1 - // So long as the creepThreshold is less than 4 + // So long as the creepThreshold is less than 4 - while (creepThreshold < 4) { - // Find the first source with open spots + while (creepThreshold < 4) { + // Find the first source with open spots - for (let i = 0; i < this.room.find(FIND_SOURCES).length; i++) { - // If there are still creeps needed to harvest a source under the creepThreshold + for (let i = 0; i < this.room.find(FIND_SOURCES).length; i++) { + // If there are still creeps needed to harvest a source under the creepThreshold - if ( - Math.min(creepThreshold, room.roomManager.sourceHarvestPositions[i].length) - - room.creepsOfSource[i].length > - 0 - ) { - this.memory[CreepMemoryKeys.sourceIndex] = i - return true - } - } + if ( + Math.min(creepThreshold, room.roomManager.sourceHarvestPositions[i].length) - + room.creepsOfSource[i].length > + 0 + ) { + this.memory[CreepMemoryKeys.sourceIndex] = i + return true + } + } - // Otherwise increase the creepThreshold + // Otherwise increase the creepThreshold - creepThreshold += 1 - } + creepThreshold += 1 + } - return false + return false } Creep.prototype.findCommuneSourceIndex = function () { - const { room } = this + const { room } = this - this.message = 'FOSN' + this.message = 'FOSN' - if (this.memory[CreepMemoryKeys.sourceIndex] !== undefined) return true + if (this.memory[CreepMemoryKeys.sourceIndex] !== undefined) return true - let creepThreshold = 1 + let creepThreshold = 1 - // So long as the creepThreshold is less than 4 + // So long as the creepThreshold is less than 4 - while (creepThreshold < 4) { - // Find the first source with open spots + while (creepThreshold < 4) { + // Find the first source with open spots - for (const source of room.roomManager.communeSources) { - const index = source.communeIndex as 0 | 1 + for (const source of room.roomManager.communeSources) { + const index = source.communeIndex as 0 | 1 - // If there are still creeps needed to harvest a source under the creepThreshold + // If there are still creeps needed to harvest a source under the creepThreshold - if ( - Math.min( - creepThreshold, - room.roomManager.communeSourceHarvestPositions[index].length, - ) - - room.creepsOfSource[index].length > - 0 - ) { - this.memory[CreepMemoryKeys.sourceIndex] = index - return true - } - } + if ( + Math.min(creepThreshold, room.roomManager.communeSourceHarvestPositions[index].length) - + room.creepsOfSource[index].length > + 0 + ) { + this.memory[CreepMemoryKeys.sourceIndex] = index + return true + } + } - // Otherwise increase the creepThreshold + // Otherwise increase the creepThreshold - creepThreshold += 1 - } + creepThreshold += 1 + } - return false + return false } Creep.prototype.findRemoteSourceIndex = function () { - const { room } = this + const { room } = this - this.message = 'FOSN' + this.message = 'FOSN' - if (this.memory[CreepMemoryKeys.sourceIndex] !== undefined) return true + if (this.memory[CreepMemoryKeys.sourceIndex] !== undefined) return true - let creepThreshold = 1 + let creepThreshold = 1 - // So long as the creepThreshold is less than 4 + // So long as the creepThreshold is less than 4 - while (creepThreshold < 4) { - // Find the first source with open spots + while (creepThreshold < 4) { + // Find the first source with open spots - for (const source of room.roomManager.remoteSources) { - const index = source.remoteIndex as 0 | 1 + for (const source of room.roomManager.remoteSources) { + const index = source.remoteIndex as 0 | 1 - // If there are still creeps needed to harvest a source under the creepThreshold + // If there are still creeps needed to harvest a source under the creepThreshold - if ( - Math.min( - creepThreshold, - room.roomManager.remoteSourceHarvestPositions[index].length, - ) - - room.creepsOfSource[index].length > - 0 - ) { - this.memory[CreepMemoryKeys.sourceIndex] = index - return true - } - } + if ( + Math.min(creepThreshold, room.roomManager.remoteSourceHarvestPositions[index].length) - + room.creepsOfSource[index].length > + 0 + ) { + this.memory[CreepMemoryKeys.sourceIndex] = index + return true + } + } - // Otherwise increase the creepThreshold + // Otherwise increase the creepThreshold - creepThreshold += 1 - } + creepThreshold += 1 + } - return false + return false } Creep.prototype.findSourceHarvestPos = function (index) { - const { room } = this + const { room } = this - this.message = 'FSHP' + this.message = 'FSHP' - // Stop if the creep already has a packedHarvestPos + // Stop if the creep already has a packedHarvestPos - let packedCoord = this.memory[CreepMemoryKeys.packedCoord] - if (packedCoord) { - // On random intervals take the best source pos if it's open - /* + let packedCoord = this.memory[CreepMemoryKeys.packedCoord] + if (packedCoord) { + // On random intervals take the best source pos if it's open + /* if (randomTick()) { const sourcePos = room.roomManager.communeSourceHarvestPositions[index][0] const packedSourceCoord = packCoord(sourcePos) @@ -582,37 +578,37 @@ Creep.prototype.findSourceHarvestPos = function (index) { } } */ - return unpackCoordAsPos(packedCoord, room.name) - } + return unpackCoordAsPos(packedCoord, room.name) + } - // Get usedSourceHarvestPositions + // Get usedSourceHarvestPositions - const usedSourceHarvestCoords = room.roomManager.reservedCoords + const usedSourceHarvestCoords = room.roomManager.reservedCoords - const usePos = room.roomManager.sourceHarvestPositions[index].find( - pos => !usedSourceHarvestCoords.has(packCoord(pos)), - ) - if (!usePos) return false + const usePos = room.roomManager.sourceHarvestPositions[index].find( + pos => !usedSourceHarvestCoords.has(packCoord(pos)), + ) + if (!usePos) return false - packedCoord = packCoord(usePos) + packedCoord = packCoord(usePos) - this.memory[CreepMemoryKeys.packedCoord] = packedCoord - room.roomManager.reservedCoords.set(packedCoord, ReservedCoordTypes.important) + this.memory[CreepMemoryKeys.packedCoord] = packedCoord + room.roomManager.reservedCoords.set(packedCoord, ReservedCoordTypes.important) - return usePos + return usePos } Creep.prototype.findCommuneSourceHarvestPos = function (index) { - const { room } = this + const { room } = this - this.message = 'FSHP' + this.message = 'FSHP' - // Stop if the creep already has a packedHarvestPos + // Stop if the creep already has a packedHarvestPos - let packedCoord = this.memory[CreepMemoryKeys.packedCoord] - if (packedCoord) { - // On random intervals take the best source pos if it's open - /* + let packedCoord = this.memory[CreepMemoryKeys.packedCoord] + if (packedCoord) { + // On random intervals take the best source pos if it's open + /* if (randomTick()) { const sourcePos = room.roomManager.communeSourceHarvestPositions[index][0] const packedSourceCoord = packCoord(sourcePos) @@ -622,34 +618,34 @@ Creep.prototype.findCommuneSourceHarvestPos = function (index) { } } */ - return unpackCoordAsPos(packedCoord, room.name) - } + return unpackCoordAsPos(packedCoord, room.name) + } - // Get usedSourceHarvestPositions + // Get usedSourceHarvestPositions - const usePos = room.roomManager.communeSourceHarvestPositions[index].find( - pos => room.roomManager.reservedCoords.get(packCoord(pos)) !== ReservedCoordTypes.important, - ) - if (!usePos) return false + const usePos = room.roomManager.communeSourceHarvestPositions[index].find( + pos => room.roomManager.reservedCoords.get(packCoord(pos)) !== ReservedCoordTypes.important, + ) + if (!usePos) return false - packedCoord = packCoord(usePos) + packedCoord = packCoord(usePos) - this.memory[CreepMemoryKeys.packedCoord] = packedCoord - room.roomManager.reservedCoords.set(packedCoord, ReservedCoordTypes.important) + this.memory[CreepMemoryKeys.packedCoord] = packedCoord + room.roomManager.reservedCoords.set(packedCoord, ReservedCoordTypes.important) - return usePos + return usePos } Creep.prototype.findRemoteSourceHarvestPos = function (index) { - const { room } = this + const { room } = this - this.message = 'FSHP' + this.message = 'FSHP' - // Stop if the creep already has a packedHarvestPos - let packedCoord = this.memory[CreepMemoryKeys.packedCoord] - if (packedCoord) { - // On random intervals take the best source pos if it's open - /* + // Stop if the creep already has a packedHarvestPos + let packedCoord = this.memory[CreepMemoryKeys.packedCoord] + if (packedCoord) { + // On random intervals take the best source pos if it's open + /* if (randomTick()) { const sourcePos = room.roomManager.remoteSourceHarvestPositions[index][0] const packedSourceCoord = packCoord(sourcePos) @@ -660,608 +656,611 @@ Creep.prototype.findRemoteSourceHarvestPos = function (index) { } */ - return unpackCoordAsPos(packedCoord, room.name) - } + return unpackCoordAsPos(packedCoord, room.name) + } - // Get usedSourceHarvestPositions + // Get usedSourceHarvestPositions - const reservedCoords = room.roomManager.reservedCoords - const usePos = room.roomManager.remoteSourceHarvestPositions[index].find(pos => { - return reservedCoords.get(packCoord(pos)) !== ReservedCoordTypes.important - }) - if (!usePos) return false + const reservedCoords = room.roomManager.reservedCoords + const usePos = room.roomManager.remoteSourceHarvestPositions[index].find(pos => { + return reservedCoords.get(packCoord(pos)) !== ReservedCoordTypes.important + }) + if (!usePos) return false - packedCoord = packCoord(usePos) + packedCoord = packCoord(usePos) - this.memory[CreepMemoryKeys.packedCoord] = packedCoord - room.roomManager.reservedCoords.set(packedCoord, ReservedCoordTypes.important) + this.memory[CreepMemoryKeys.packedCoord] = packedCoord + room.roomManager.reservedCoords.set(packedCoord, ReservedCoordTypes.important) - return usePos + return usePos } Creep.prototype.findMineralHarvestPos = function () { - const { room } = this + const { room } = this - this.message = 'FMHP' + this.message = 'FMHP' - // Stop if the creep already has a packedHarvestPos + // Stop if the creep already has a packedHarvestPos - let packedCoord = this.memory[CreepMemoryKeys.packedCoord] - if (packedCoord) return unpackCoordAsPos(packedCoord, room.name) + let packedCoord = this.memory[CreepMemoryKeys.packedCoord] + if (packedCoord) return unpackCoordAsPos(packedCoord, room.name) - // Get usedSourceHarvestPositions + // Get usedSourceHarvestPositions - const usedMineralCoords = room.roomManager.reservedCoords + const usedMineralCoords = room.roomManager.reservedCoords - const usePos = room.roomManager.mineralHarvestPositions.find( - pos => !usedMineralCoords.has(packCoord(pos)), - ) - if (!usePos) return false + const usePos = room.roomManager.mineralHarvestPositions.find( + pos => !usedMineralCoords.has(packCoord(pos)), + ) + if (!usePos) return false - packedCoord = packCoord(usePos) + packedCoord = packCoord(usePos) - this.memory[CreepMemoryKeys.packedCoord] = packedCoord - room.roomManager.reservedCoords.set(packedCoord, ReservedCoordTypes.important) + this.memory[CreepMemoryKeys.packedCoord] = packedCoord + room.roomManager.reservedCoords.set(packedCoord, ReservedCoordTypes.important) - return usePos + return usePos } Creep.prototype.needsResources = function () { - const creepMemory = Memory.creeps[this.name] + const creepMemory = Memory.creeps[this.name] - // If the creep is empty - if (this.usedNextStore <= 0) { - return (creepMemory[CreepMemoryKeys.needsResources] = true) - } + // If the creep is empty + if (this.usedNextStore <= 0) { + return (creepMemory[CreepMemoryKeys.needsResources] = true) + } - // Otherwise if the creep is full - if (this.freeNextStore <= 0) { - creepMemory[CreepMemoryKeys.needsResources] = undefined - return false - } + // Otherwise if the creep is full + if (this.freeNextStore <= 0) { + creepMemory[CreepMemoryKeys.needsResources] = undefined + return false + } - // Otherwise keep it the same - return creepMemory[CreepMemoryKeys.needsResources] + // Otherwise keep it the same + return creepMemory[CreepMemoryKeys.needsResources] } Creep.prototype.hasNonEnergyResource = function () { - for (const key in this.nextStore) { - const resourceType = key as ResourceConstant - if (resourceType === RESOURCE_ENERGY) continue + for (const key in this.nextStore) { + const resourceType = key as ResourceConstant + if (resourceType === RESOURCE_ENERGY) continue - // The resourceType is not energy - return true - } + // The resourceType is not energy + return true + } - return false + return false } Creep.prototype.findRecycleTarget = function () { - const { room } = this + const { room } = this - const spawns = room.roomManager.structures.spawn.filter(spawn => spawn.isRCLActionable) + const spawns = room.roomManager.structures.spawn.filter(spawn => spawn.isRCLActionable) - if (!spawns.length) return false + if (!spawns.length) return false - if (this.memory[CreepMemoryKeys.recycleTarget]) { - const spawn = findObjectWithID(this.memory[CreepMemoryKeys.recycleTarget]) - if (spawn) return spawn - } + if (this.memory[CreepMemoryKeys.recycleTarget]) { + const spawn = findObjectWithID(this.memory[CreepMemoryKeys.recycleTarget]) + if (spawn) return spawn + } - const fastFillerContainers = this.room.roomManager.fastFillerContainers + const fastFillerContainers = this.room.roomManager.fastFillerContainers - for (const container of fastFillerContainers) { - // If there is no spawn adjacent to the container + for (const container of fastFillerContainers) { + // If there is no spawn adjacent to the container - if (!findClosestObjectInRange(container.pos, spawns, 1)) continue + if (!findClosestObjectInRange(container.pos, spawns, 1)) continue - return findObjectWithID((this.memory[CreepMemoryKeys.recycleTarget] = container.id)) - } + return findObjectWithID((this.memory[CreepMemoryKeys.recycleTarget] = container.id)) + } - // Find the closest spawn to the creep + // Find the closest spawn to the creep - const spawn = findClosestObject(this.pos, spawns) + const spawn = findClosestObject(this.pos, spawns) - return findObjectWithID((this.memory[CreepMemoryKeys.recycleTarget] = spawn.id)) + return findObjectWithID((this.memory[CreepMemoryKeys.recycleTarget] = spawn.id)) } Creep.prototype.advancedRecycle = function () { - const { room } = this + const { room } = this - const recycleTarget = this.findRecycleTarget() - if (!recycleTarget) return false + const recycleTarget = this.findRecycleTarget() + if (!recycleTarget) return false - const range = getRangeXY(this.pos.x, recycleTarget.pos.x, this.pos.y, recycleTarget.pos.y) + const range = getRangeXY(this.pos.x, recycleTarget.pos.x, this.pos.y, recycleTarget.pos.y) - // If the target is a spawn + // If the target is a spawn - if (recycleTarget instanceof StructureSpawn) { - this.message = '♻️ S' + if (recycleTarget instanceof StructureSpawn) { + this.message = '♻️ S' - // If the recycleTarget is out of actionable range, move to it + // If the recycleTarget is out of actionable range, move to it - if (range > 1) { - this.createMoveRequest({ - origin: this.pos, - goals: [{ pos: recycleTarget.pos, range: 1 }], - avoidEnemyRanges: true, - }) + if (range > 1) { + this.createMoveRequest({ + origin: this.pos, + goals: [{ pos: recycleTarget.pos, range: 1 }], + avoidEnemyRanges: true, + }) - return true - } + return true + } - // If the recycleTarget is a spawn, directly recycle + // If the recycleTarget is a spawn, directly recycle - return recycleTarget.recycleCreep(this) === OK - } + return recycleTarget.recycleCreep(this) === OK + } - // Otherwise if the target is a container + // Otherwise if the target is a container - this.message = '♻️ C' + this.message = '♻️ C' - if (range === 0) { - const spawn = findClosestObject(this.pos, room.roomManager.structures.spawn) + if (range === 0) { + const spawn = findClosestObject(this.pos, room.roomManager.structures.spawn) - return spawn.recycleCreep(this) === OK - } + return spawn.recycleCreep(this) === OK + } - // If the recycleTarget is out of actionable range, move to it + // If the recycleTarget is out of actionable range, move to it - this.createMoveRequest({ - origin: this.pos, - goals: [{ pos: recycleTarget.pos, range: 0 }], - avoidEnemyRanges: true, - }) + this.createMoveRequest({ + origin: this.pos, + goals: [{ pos: recycleTarget.pos, range: 0 }], + avoidEnemyRanges: true, + }) - return true + return true } Creep.prototype.activeRenew = function () { - const { room } = this + const { room } = this - // If there is insufficient CPU to renew, inform false + // If there is insufficient CPU to renew, inform false - if (!room.myCreepsByRole.fastFiller.length) return - if (this.isDying()) return + if (!room.myCreepsByRole.fastFiller.length) return + if (this.isDying()) return - // If the creep's age is less than the benefit from renewing, inform false + // If the creep's age is less than the benefit from renewing, inform false - const energyCost = Math.ceil(this.findCost() / 2.5 / this.body.length) - if (CREEP_LIFE_TIME - this.ticksToLive < Math.floor(600 / this.body.length)) return + const energyCost = Math.ceil(this.findCost() / 2.5 / this.body.length) + if (CREEP_LIFE_TIME - this.ticksToLive < Math.floor(600 / this.body.length)) return - const spawns = room.roomManager.structures.spawn.filter( - spawn => !spawn.renewed && !spawn.spawning, - ) - if (!spawns.length) return + const spawns = room.roomManager.structures.spawn.filter( + spawn => !spawn.renewed && !spawn.spawning, + ) + if (!spawns.length) return - const spawn = findClosestObject(this.pos, spawns) + const spawn = findClosestObject(this.pos, spawns) - if (getRange(this.pos, spawn.pos) > 1) { - this.createMoveRequest({ - origin: this.pos, - goals: [{ pos: spawn.pos, range: 1 }], - avoidEnemyRanges: true, - }) - return - } - - const result = spawn.renewCreep(this) - if (result === OK) { - statsManager.updateStat(this.room.name, 'eosp', energyCost) - spawn.renewed = true - } + if (getRange(this.pos, spawn.pos) > 1) { + this.createMoveRequest({ + origin: this.pos, + goals: [{ pos: spawn.pos, range: 1 }], + avoidEnemyRanges: true, + }) + return + } + + const result = spawn.renewCreep(this) + if (result === OK) { + statsManager.updateStat(this.room.name, 'eosp', energyCost) + spawn.renewed = true + } } Creep.prototype.passiveRenew = function () { - const { room } = this + const { room } = this - // If there is insufficient CPU to renew, inform false + // If there is insufficient CPU to renew, inform false - if (this.body.length > 10) return - if (!room.myCreepsByRole.fastFiller.length) return - if (this.isDying()) return + if (this.body.length > 10) return + if (!room.myCreepsByRole.fastFiller.length) return + if (this.isDying()) return - // If the creep's age is less than the benefit from renewing, inform false + // If the creep's age is less than the benefit from renewing, inform false - const energyCost = Math.ceil(this.findCost() / 2.5 / this.body.length) - if (CREEP_LIFE_TIME - this.ticksToLive < Math.floor(600 / this.body.length)) return + const energyCost = Math.ceil(this.findCost() / 2.5 / this.body.length) + if (CREEP_LIFE_TIME - this.ticksToLive < Math.floor(600 / this.body.length)) return - // Get the room's spawns, stopping if there are none + // Get the room's spawns, stopping if there are none - const spawns = room.roomManager.structures.spawn + const spawns = room.roomManager.structures.spawn - // Get a spawn in range of 1, informing false if there are none + // Get a spawn in range of 1, informing false if there are none - const spawn = spawns.find( - spawn => - getRangeXY(this.pos.x, spawn.pos.x, this.pos.y, spawn.pos.y) === 1 && - !spawn.renewed && - !spawn.spawning && - spawn.isRCLActionable, - ) - if (!spawn) return + const spawn = spawns.find( + spawn => + getRangeXY(this.pos.x, spawn.pos.x, this.pos.y, spawn.pos.y) === 1 && + !spawn.renewed && + !spawn.spawning && + spawn.isRCLActionable, + ) + if (!spawn) return - const result = spawn.renewCreep(this) - if (result === OK) { - statsManager.updateStat(this.room.name, 'eosp', energyCost) - spawn.renewed = true - } + const result = spawn.renewCreep(this) + if (result === OK) { + statsManager.updateStat(this.room.name, 'eosp', energyCost) + spawn.renewed = true + } } Creep.prototype.advancedReserveController = function () { - const { room } = this + const { room } = this - // Get the controller + // Get the controller - const { controller } = room + const { controller } = room - // If the creep is in range of 1 of the controller + // If the creep is in range of 1 of the controller - if (this.pos.getRangeTo(controller.pos) === 1) { - // If the controller is reserved and it isn't reserved by me + if (this.pos.getRangeTo(controller.pos) === 1) { + // If the controller is reserved and it isn't reserved by me - if (controller.reservation && controller.reservation.username !== Memory.me) { - // Try to attack it, informing the result + if (controller.reservation && controller.reservation.username !== Memory.me) { + // Try to attack it, informing the result - this.message = '🗡️' + this.message = '🗡️' - return this.attackController(controller) === OK - } + return this.attackController(controller) === OK + } - // Try to reserve it, informing the result + // Try to reserve it, informing the result - this.message = '🤳' + this.message = '🤳' - return this.reserveController(controller) === OK - } + return this.reserveController(controller) === OK + } - // Otherwise, make a move request to it and inform true + // Otherwise, make a move request to it and inform true - this.message = '⏩🤳' + this.message = '⏩🤳' - this.createMoveRequest({ - origin: this.pos, - goals: [{ pos: controller.pos, range: 1 }], - avoidEnemyRanges: true, - plainCost: 1, - }) + this.createMoveRequest({ + origin: this.pos, + goals: [{ pos: controller.pos, range: 1 }], + avoidEnemyRanges: true, + plainCost: 1, + }) - return true + return true } Creep.prototype.findCost = function () { - let cost = 0 + let cost = 0 - for (const part of this.body) cost += BODYPART_COST[part.type] + for (const part of this.body) cost += BODYPART_COST[part.type] - return cost + return cost } Creep.prototype.passiveHeal = function () { - const { room } = this + const { room } = this - this.message = 'PH' + this.message = 'PH' - if (!this.worked) { - // If the creep is below max hits + if (!this.worked) { + // If the creep is below max hits - if (this.hitsMax > this.hits) { - // Have it heal itself and stop + if (this.hitsMax > this.hits) { + // Have it heal itself and stop - this.heal(this) - this.worked = WorkTypes.heal - return false - } + this.heal(this) + this.worked = WorkTypes.heal + return false + } - let top = Math.max(Math.min(this.pos.y - 1, roomDimensions - 1), 0) - let left = Math.max(Math.min(this.pos.x - 1, roomDimensions - 1), 0) - let bottom = Math.max(Math.min(this.pos.y + 1, roomDimensions - 1), 0) - let right = Math.max(Math.min(this.pos.x + 1, roomDimensions - 1), 0) + let top = Math.max(Math.min(this.pos.y - 1, roomDimensions - 1), 0) + let left = Math.max(Math.min(this.pos.x - 1, roomDimensions - 1), 0) + let bottom = Math.max(Math.min(this.pos.y + 1, roomDimensions - 1), 0) + let right = Math.max(Math.min(this.pos.x + 1, roomDimensions - 1), 0) - // Find adjacent creeps + // Find adjacent creeps - const adjacentCreeps = room.lookForAtArea(LOOK_CREEPS, top, left, bottom, right, true) + const adjacentCreeps = room.lookForAtArea(LOOK_CREEPS, top, left, bottom, right, true) - // Loop through each adjacentCreep + // Loop through each adjacentCreep - for (const posData of adjacentCreeps) { - // If the creep is the posData creep, iterate + for (const posData of adjacentCreeps) { + // If the creep is the posData creep, iterate - if (this.name === posData.creep.name) continue + if (this.name === posData.creep.name) continue - // If the creep is not owned and isn't an ally + // If the creep is not owned and isn't an ally - if (!posData.creep.my && !global.settings.allies.includes(posData.creep.owner.username)) - continue + if (!posData.creep.my && !global.settings.allies.includes(posData.creep.owner.username)) + continue - // If the creep is at full health, iterate + // If the creep is at full health, iterate - if (posData.creep.hitsMax === posData.creep.hits) continue + if (posData.creep.hitsMax === posData.creep.hits) continue - // have the creep heal the adjacentCreep and stop + // have the creep heal the adjacentCreep and stop - this.heal(posData.creep) - this.worked = WorkTypes.heal - return false - } + this.heal(posData.creep) + this.worked = WorkTypes.heal + return false } + } - if (this.ranged) return false + if (this.ranged) return false - let top = Math.max(Math.min(this.pos.y - 3, roomDimensions - 2), 2) - let left = Math.max(Math.min(this.pos.x - 3, roomDimensions - 2), 2) - let bottom = Math.max(Math.min(this.pos.y + 3, roomDimensions - 2), 2) - let right = Math.max(Math.min(this.pos.x + 3, roomDimensions - 2), 2) + let top = Math.max(Math.min(this.pos.y - 3, roomDimensions - 2), 2) + let left = Math.max(Math.min(this.pos.x - 3, roomDimensions - 2), 2) + let bottom = Math.max(Math.min(this.pos.y + 3, roomDimensions - 2), 2) + let right = Math.max(Math.min(this.pos.x + 3, roomDimensions - 2), 2) - // Find my creeps in range of creep + // Find my creeps in range of creep - const nearbyCreeps = room.lookForAtArea(LOOK_CREEPS, top, left, bottom, right, true) + const nearbyCreeps = room.lookForAtArea(LOOK_CREEPS, top, left, bottom, right, true) - // Loop through each nearbyCreep + // Loop through each nearbyCreep - for (const posData of nearbyCreeps) { - // If the creep is the posData creep, iterate + for (const posData of nearbyCreeps) { + // If the creep is the posData creep, iterate - if (this.name === posData.creep.name) continue + if (this.name === posData.creep.name) continue - // If the creep is not owned and isn't an ally + // If the creep is not owned and isn't an ally - if (!posData.creep.my && !global.settings.allies.includes(posData.creep.owner.username)) - continue + if (!posData.creep.my && !global.settings.allies.includes(posData.creep.owner.username)) + continue - // If the creep is at full health, iterate + // If the creep is at full health, iterate - if (posData.creep.hitsMax === posData.creep.hits) continue + if (posData.creep.hitsMax === posData.creep.hits) continue - // have the creep rangedHeal the nearbyCreep and stop + // have the creep rangedHeal the nearbyCreep and stop - this.rangedHeal(posData.creep) - this.ranged = true - return true - } + this.rangedHeal(posData.creep) + this.ranged = true + return true + } - return false + return false } Creep.prototype.aggressiveHeal = function () { - const { room } = this + const { room } = this - this.message = 'AH' + this.message = 'AH' - if (!this.worked) { - // If the creep is below max hits + if (!this.worked) { + // If the creep is below max hits - if (this.hitsMax > this.hits) { - // Have it heal itself and stop + if (this.hitsMax > this.hits) { + // Have it heal itself and stop - this.heal(this) - this.worked = WorkTypes.heal - return true - } + this.heal(this) + this.worked = WorkTypes.heal + return true } + } - const healTargets = room.myCreeps - .concat(room.roomManager.notMyCreeps.ally) - .filter(function (creep) { - return creep.hits < creep.hitsMax - }) + const healTargets = room.myCreeps + .concat(room.roomManager.notMyCreeps.ally) + .filter(function (creep) { + return creep.hits < creep.hitsMax + }) - if (!healTargets.length) return false + if (!healTargets.length) return false - const healTarget = findClosestObject(this.pos, healTargets) - const range = getRangeXY(this.pos.x, healTarget.pos.x, this.pos.y, healTarget.pos.y) + const healTarget = findClosestObject(this.pos, healTargets) + const range = getRangeXY(this.pos.x, healTarget.pos.x, this.pos.y, healTarget.pos.y) - if (range > 1) { - if (this.ranged) return false + if (range > 1) { + if (this.ranged) return false - this.createMoveRequest({ - origin: this.pos, - goals: [{ pos: healTarget.pos, range: 1 }], - }) + this.createMoveRequest({ + origin: this.pos, + goals: [{ pos: healTarget.pos, range: 1 }], + }) - if (range <= 3) { - this.rangedHeal(healTarget) - return true - } + if (range <= 3) { + this.rangedHeal(healTarget) + return true } + } - if (this.worked) return false + if (this.worked) return false - this.heal(healTarget) - return true + this.heal(healTarget) + return true } Creep.prototype.passiveRangedAttack = function () { - return true + return true } Creep.prototype.findBulzodeTargets = function (goalPos) { - return [] + return [] } Creep.prototype.findQuadBulldozeTargets = function (goalPos) { - if ( - this.memory[CreepMemoryKeys.quadBulldozeTargets] && - this.memory[CreepMemoryKeys.quadBulldozeTargets].length - ) - return this.memory[CreepMemoryKeys.quadBulldozeTargets] + if ( + this.memory[CreepMemoryKeys.quadBulldozeTargets] && + this.memory[CreepMemoryKeys.quadBulldozeTargets].length + ) + return this.memory[CreepMemoryKeys.quadBulldozeTargets] + + const path = customPathFinder.findPath({ + origin: this.pos, + goals: [ + { + pos: goalPos, + range: 0, + }, + ], + defaultCostMatrixes(roomName) { + return [RoomManager.roomManagers[roomName].quadBulldozeCostMatrix] + }, + }) + + path.push(goalPos) + + const targetStructureIDs: Set> = new Set() + const visitedCoords: Set = new Set() + + for (const pos of path) { + for (let i = quadAttackMemberOffsets.length - 1; i > -1; i--) { + const offset = quadAttackMemberOffsets[i] + const coord = { + x: pos.x + offset.x, + y: pos.y + offset.y, + } + const packedCoord = packCoord(coord) + if (visitedCoords.has(packedCoord)) continue + + visitedCoords.add(packedCoord) + + for (const structure of this.room.lookForAt(LOOK_STRUCTURES, coord.x, coord.y)) { + if (structure.structureType === STRUCTURE_KEEPER_LAIR) continue - const path = customPathFinder.findPath({ - origin: this.pos, - goals: [ - { - pos: goalPos, - range: 0, - }, - ], - defaultCostMatrixes(roomName) { - return [RoomManager.roomManagers[roomName].quadBulldozeCostMatrix] - }, - }) - - path.push(goalPos) - - const targetStructureIDs: Set> = new Set() - const visitedCoords: Set = new Set() - - for (const pos of path) { - for (let i = quadAttackMemberOffsets.length - 1; i > -1; i--) { - const offset = quadAttackMemberOffsets[i] - const coord = { - x: pos.x + offset.x, - y: pos.y + offset.y, - } - const packedCoord = packCoord(coord) - if (visitedCoords.has(packedCoord)) continue - - visitedCoords.add(packedCoord) - - for (const structure of this.room.lookForAt(LOOK_STRUCTURES, coord.x, coord.y)) { - if (structure.structureType === STRUCTURE_KEEPER_LAIR) continue - - if ( - !impassibleStructureTypes.includes(structure.structureType) && - structure.structureType !== STRUCTURE_RAMPART - ) - continue + if ( + !impassibleStructureTypes.includes(structure.structureType) && + structure.structureType !== STRUCTURE_RAMPART + ) + continue - if (targetStructureIDs.has(structure.id)) continue + if (targetStructureIDs.has(structure.id)) continue - targetStructureIDs.add(structure.id) - } - } + targetStructureIDs.add(structure.id) + } } + } - return (this.memory[CreepMemoryKeys.quadBulldozeTargets] = Array.from(targetStructureIDs)) + return (this.memory[CreepMemoryKeys.quadBulldozeTargets] = Array.from(targetStructureIDs)) } Creep.prototype.manageSpawning = function (spawn: StructureSpawn) { - if (spawn.spawning.remainingTime > 1 || spawn.spawning.name.includes('shard')) return + if (spawn.spawning.remainingTime > 1 || spawn.spawning.name.includes('shard')) return - const offset = offsetsByDirection[spawn.spawning.directions[0]] - const coord = { - x: this.pos.x + offset[0], - y: this.pos.y + offset[1], - } + const offset = offsetsByDirection[spawn.spawning.directions[0]] + const coord = { + x: this.pos.x + offset[0], + y: this.pos.y + offset[1], + } - this.assignMoveRequest(coord) + this.assignMoveRequest(coord) } Creep.prototype.roomLogisticsRequestManager = function () { - if (!this.memory[CreepMemoryKeys.roomLogisticsRequests]) { - this.memory[CreepMemoryKeys.roomLogisticsRequests] = [] - return - } - if (!this.memory[CreepMemoryKeys.roomLogisticsRequests].length) return - - for (let i = this.memory[CreepMemoryKeys.roomLogisticsRequests].length - 1; i >= 0; i--) { - const request = this.memory[CreepMemoryKeys.roomLogisticsRequests][i] - const target = findObjectWithID(request[CreepRoomLogisticsRequestKeys.target]) - if (target) continue - - this.memory[CreepMemoryKeys.roomLogisticsRequests].splice(i, 1) - } - - const request = this.memory[CreepMemoryKeys.roomLogisticsRequests][0] - if (!request) return - + const creepMemory = Memory.creeps[this.name] + if (!creepMemory[CreepMemoryKeys.roomLogisticsRequests]) { + creepMemory[CreepMemoryKeys.roomLogisticsRequests] = [] + return + } + if (!creepMemory[CreepMemoryKeys.roomLogisticsRequests].length) return + + for (let i = creepMemory[CreepMemoryKeys.roomLogisticsRequests].length - 1; i >= 0; i--) { + const request = creepMemory[CreepMemoryKeys.roomLogisticsRequests][i] const target = findObjectWithID(request[CreepRoomLogisticsRequestKeys.target]) + if (target) continue - // Pickup type + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(i, 1) + } - if (target instanceof Resource) { - // Update in accordance to potential resource decay + const request = creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] + if (!request) return - request[CreepRoomLogisticsRequestKeys.amount] = Math.min( - Math.min(this.freeNextStore, target.nextAmount), - request[CreepRoomLogisticsRequestKeys.amount], - ) - if (request[CreepRoomLogisticsRequestKeys.amount] <= 0) { - this.memory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return - } + const target = findObjectWithID(request[CreepRoomLogisticsRequestKeys.target]) - if (!request[CreepRoomLogisticsRequestKeys.noReserve]) - target.reserveAmount -= request[CreepRoomLogisticsRequestKeys.amount] - return - } + // If pickup type + if (target instanceof Resource) { + // Update in accordance to potential resource decay - if (request[CreepRoomLogisticsRequestKeys.type] === RoomLogisticsRequestTypes.transfer) { - // Delete the request if the target is fulfilled - - if (target.freeNextStore < request[CreepRoomLogisticsRequestKeys.amount]) { - this.memory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return - } - - request[CreepRoomLogisticsRequestKeys.amount] = Math.min( - Math.min( - this.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]], - target.freeNextStore, - ), - request[CreepRoomLogisticsRequestKeys.amount], - ) - if (request[CreepRoomLogisticsRequestKeys.amount] <= 0) { - this.memory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return - } - - if (!request[CreepRoomLogisticsRequestKeys.noReserve]) - target.reserveStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += - request[CreepRoomLogisticsRequestKeys.amount] - return + request[CreepRoomLogisticsRequestKeys.amount] = Math.min( + Math.min(this.freeNextStore, target.nextAmount), + request[CreepRoomLogisticsRequestKeys.amount], + ) + if (request[CreepRoomLogisticsRequestKeys.amount] <= 0) { + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return } - // Withdraw or offer type + if (!request[CreepRoomLogisticsRequestKeys.noReserve]) { + target.reserveAmount -= request[CreepRoomLogisticsRequestKeys.amount] + } + return + } - // Delete the request if the target doesn't have what we need + if (request[CreepRoomLogisticsRequestKeys.type] === RoomLogisticsRequestTypes.transfer) { + // Delete the request if the target is fulfilled - if ( - target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] < - request[CreepRoomLogisticsRequestKeys.amount] - ) { - this.memory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return + if (target.freeNextStore < request[CreepRoomLogisticsRequestKeys.amount]) { + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return } request[CreepRoomLogisticsRequestKeys.amount] = Math.min( - Math.min( - this.freeNextStore, - target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]], - ), - request[CreepRoomLogisticsRequestKeys.amount], + Math.min( + this.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]], + target.freeNextStore, + ), + request[CreepRoomLogisticsRequestKeys.amount], ) if (request[CreepRoomLogisticsRequestKeys.amount] <= 0) { - this.memory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return } - if (!request[CreepRoomLogisticsRequestKeys.noReserve]) - target.reserveStore[request[CreepRoomLogisticsRequestKeys.resourceType]] -= - request[CreepRoomLogisticsRequestKeys.amount] + if (!request[CreepRoomLogisticsRequestKeys.noReserve]) { + target.reserveStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += + request[CreepRoomLogisticsRequestKeys.amount] + } + return + } + + // Withdraw or offer type + + // Delete the request if the target doesn't have what we need + + if ( + target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] < + request[CreepRoomLogisticsRequestKeys.amount] + ) { + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return + } + + request[CreepRoomLogisticsRequestKeys.amount] = Math.min( + Math.min( + this.freeNextStore, + target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]], + ), + request[CreepRoomLogisticsRequestKeys.amount], + ) + if (request[CreepRoomLogisticsRequestKeys.amount] <= 0) { + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return + } + + if (!request[CreepRoomLogisticsRequestKeys.noReserve]) { + target.reserveStore[request[CreepRoomLogisticsRequestKeys.resourceType]] -= + request[CreepRoomLogisticsRequestKeys.amount] + } } Creep.prototype.findRoomLogisticsRequest = function (args) { + const creepMemory = Memory.creeps[this.name] + if (creepMemory[CreepMemoryKeys.roomLogisticsRequests][0]) { + return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] + } - const creepMemory = Memory.creeps[this.name] - if (creepMemory[CreepMemoryKeys.roomLogisticsRequests][0]) - return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] - - if (args) this.noDelivery = args.noDelivery - else this.noDelivery = undefined + if (args) this.noDelivery = args.noDelivery + else this.noDelivery = undefined - const types = this.findRoomLogisticsRequestTypes(args) - if (types === Result.fail) return Result.fail + const types = this.findRoomLogisticsRequestTypes(args) + if (types === Result.fail) return Result.fail - let lowestScore = Infinity - let bestRequest: RoomLogisticsRequest | 0 + let lowestScore = Infinity + let bestRequest: RoomLogisticsRequest | 0 - for (const type of types) { - for (const requestID in this.room.roomLogisticsRequests[type]) { - const request = this.room.roomLogisticsRequests[type][requestID] + for (const type of types) { + for (const requestID in this.room.roomLogisticsRequests[type]) { + const request = this.room.roomLogisticsRequests[type][requestID] - delete request.delivery - /* + delete request.delivery + /* // Make a personal amount based on existing amount plus estimated income for distance request.personalAmount = @@ -1269,234 +1268,222 @@ Creep.prototype.findRoomLogisticsRequest = function (args) { (request.income ? getRange(findObjectWithID(request.targetID).pos, this.pos) * request.income : 0) */ - // Customizable conditions + // Customizable conditions - if (args) { - if (args.resourceTypes && !args.resourceTypes.has(request.resourceType)) continue - if (args.conditions && !args.conditions(request)) continue - } + if (args) { + if (args.resourceTypes && !args.resourceTypes.has(request.resourceType)) continue + if (args.conditions && !args.conditions(request)) continue + } - // Default conditions + // Default conditions - if (!this.canAcceptRoomLogisticsRequest(request.type, request.ID)) continue + if (!this.canAcceptRoomLogisticsRequest(request.type, request.ID)) continue - const targetPos = findObjectWithID(request.targetID).pos - const score = request.priority + getRange(targetPos, this.pos) / 20 + const targetPos = findObjectWithID(request.targetID).pos + const score = request.priority + getRange(targetPos, this.pos) / 20 - if (score >= lowestScore) continue + if (score >= lowestScore) continue - lowestScore = score - bestRequest = request - } + lowestScore = score + bestRequest = request } - /* + } + /* log('FINDING REQ', bestRequest + ', ' + Array.from(types), { position: 1 }) */ - let creepRequest: CreepRoomLogisticsRequest | 0 + let creepRequest: CreepRoomLogisticsRequest | 0 - if (!bestRequest) { - creepRequest = this.createBackupStoringStructuresRoomLogisticsRequest( - types, - args?.resourceTypes, - ) - if (!creepRequest) return Result.fail - } else { - creepRequest = { - [CreepRoomLogisticsRequestKeys.type]: bestRequest.type, - [CreepRoomLogisticsRequestKeys.target]: bestRequest.targetID, - [CreepRoomLogisticsRequestKeys.resourceType]: bestRequest.resourceType, - [CreepRoomLogisticsRequestKeys.amount]: this.findRoomLogisticRequestAmount(bestRequest), - [CreepRoomLogisticsRequestKeys.noReserve]: bestRequest.noReserve, + if (!bestRequest) { + creepRequest = this.createBackupStoringStructuresRoomLogisticsRequest( + types, + args?.resourceTypes, + ) + if (!creepRequest) return Result.fail + } else { + creepRequest = { + [CreepRoomLogisticsRequestKeys.type]: bestRequest.type, + [CreepRoomLogisticsRequestKeys.target]: bestRequest.targetID, + [CreepRoomLogisticsRequestKeys.resourceType]: bestRequest.resourceType, + [CreepRoomLogisticsRequestKeys.amount]: this.findRoomLogisticRequestAmount(bestRequest), + [CreepRoomLogisticsRequestKeys.noReserve]: bestRequest.noReserve, + } + + if (bestRequest.delivery) { + // This request will proceed the one we've accepted to provide for the delivery + let nextCreepRequest: CreepRoomLogisticsRequest + const storingStructure = findObjectWithID(bestRequest.delivery as Id) + + if (storingStructure) { + nextCreepRequest = { + [CreepRoomLogisticsRequestKeys.type]: RoomLogisticsRequestTypes.withdraw, + [CreepRoomLogisticsRequestKeys.target]: storingStructure.id, + [CreepRoomLogisticsRequestKeys.resourceType]: bestRequest.resourceType, + [CreepRoomLogisticsRequestKeys.amount]: Math.min( + storingStructure.reserveStore[bestRequest.resourceType], + creepRequest[CreepRoomLogisticsRequestKeys.amount], + ), + [CreepRoomLogisticsRequestKeys.noReserve]: bestRequest.noReserve, + } + } else { + // The delivery provider is + + const nextRequest = + this.room.roomLogisticsRequests[RoomLogisticsRequestTypes.withdraw][ + bestRequest.delivery + ] || + this.room.roomLogisticsRequests[RoomLogisticsRequestTypes.offer][bestRequest.delivery] || + this.room.roomLogisticsRequests[RoomLogisticsRequestTypes.pickup][bestRequest.delivery] + + nextCreepRequest = { + [CreepRoomLogisticsRequestKeys.type]: nextRequest.type, + [CreepRoomLogisticsRequestKeys.target]: nextRequest.targetID, + [CreepRoomLogisticsRequestKeys.resourceType]: nextRequest.resourceType, + [CreepRoomLogisticsRequestKeys.amount]: Math.min( + this.nextStore[nextRequest.resourceType] + this.freeNextStore, + creepRequest[CreepRoomLogisticsRequestKeys.amount], + ), + [CreepRoomLogisticsRequestKeys.noReserve]: + creepRequest[CreepRoomLogisticsRequestKeys.noReserve], } - if (bestRequest.delivery) { - // This request will proceed the one we've accepted to provide for the delivery - let nextCreepRequest: CreepRoomLogisticsRequest - const storingStructure = findObjectWithID(bestRequest.delivery as Id) - - if (storingStructure) { - nextCreepRequest = { - [CreepRoomLogisticsRequestKeys.type]: RoomLogisticsRequestTypes.withdraw, - [CreepRoomLogisticsRequestKeys.target]: storingStructure.id, - [CreepRoomLogisticsRequestKeys.resourceType]: bestRequest.resourceType, - [CreepRoomLogisticsRequestKeys.amount]: Math.min( - storingStructure.reserveStore[bestRequest.resourceType], - creepRequest[CreepRoomLogisticsRequestKeys.amount], - ), - [CreepRoomLogisticsRequestKeys.noReserve]: bestRequest.noReserve, - } - } else { - // If it's not for a RoomObject, it is for another request - const nextRequest = - this.room.roomLogisticsRequests[RoomLogisticsRequestTypes.withdraw][ - bestRequest.delivery - ] || - this.room.roomLogisticsRequests[RoomLogisticsRequestTypes.offer][ - bestRequest.delivery - ] || - this.room.roomLogisticsRequests[RoomLogisticsRequestTypes.pickup][ - bestRequest.delivery - ] - - nextCreepRequest = { - [CreepRoomLogisticsRequestKeys.type]: nextRequest.type, - [CreepRoomLogisticsRequestKeys.target]: nextRequest.targetID, - [CreepRoomLogisticsRequestKeys.resourceType]: nextRequest.resourceType, - [CreepRoomLogisticsRequestKeys.amount]: Math.min( - this.nextStore[nextRequest.resourceType] + this.freeNextStore, - creepRequest[CreepRoomLogisticsRequestKeys.amount], - ), - [CreepRoomLogisticsRequestKeys.noReserve]: - creepRequest[CreepRoomLogisticsRequestKeys.noReserve], - } - - // tbh I forget what this is supposed to do but it's probably important - - if (!creepRequest[CreepRoomLogisticsRequestKeys.noReserve]) { - - // delete the parent request if it has no more utility, otherwise, reduce its amount - - if ( - nextRequest.amount === - nextCreepRequest[CreepRoomLogisticsRequestKeys.amount] - ) { + // Handle reservations for nextRequest - delete this.room.roomLogisticsRequests[nextRequest.type][nextRequest.ID] - } - else { - nextRequest.amount -= nextCreepRequest[CreepRoomLogisticsRequestKeys.amount] - } + if (!creepRequest[CreepRoomLogisticsRequestKeys.noReserve]) { + // delete the parent request if it has no more utility, otherwise, reduce its amount - const target = findObjectWithID(nextRequest.targetID) + if (nextRequest.amount === nextCreepRequest[CreepRoomLogisticsRequestKeys.amount]) { + delete this.room.roomLogisticsRequests[nextRequest.type][nextRequest.ID] + } else { + nextRequest.amount -= nextCreepRequest[CreepRoomLogisticsRequestKeys.amount] + } - // Pickup type + const target = findObjectWithID(nextRequest.targetID) - if (target instanceof Resource) { - target.reserveAmount -= - nextCreepRequest[CreepRoomLogisticsRequestKeys.amount] - } else { - // Withdraw or offer type + // Pickup type - target.reserveStore[ - nextCreepRequest[CreepRoomLogisticsRequestKeys.resourceType] - ] -= nextCreepRequest[CreepRoomLogisticsRequestKeys.amount] - } - } - } + if (target instanceof Resource) { + target.reserveAmount -= nextCreepRequest[CreepRoomLogisticsRequestKeys.amount] + } else { + // Withdraw or offer type - creepMemory[CreepMemoryKeys.roomLogisticsRequests].push(nextCreepRequest) + target.reserveStore[nextCreepRequest[CreepRoomLogisticsRequestKeys.resourceType]] -= + nextCreepRequest[CreepRoomLogisticsRequestKeys.amount] + } } + } - // delete the parent request if it has no more utility, otherwise, reduce its amount + creepMemory[CreepMemoryKeys.roomLogisticsRequests].push(nextCreepRequest) + } - if ( - !creepRequest[CreepRoomLogisticsRequestKeys.noReserve] && - bestRequest.amount === creepRequest[CreepRoomLogisticsRequestKeys.amount] - ) { - delete this.room.roomLogisticsRequests[bestRequest.type][bestRequest.ID] - } - else bestRequest.amount -= creepRequest[CreepRoomLogisticsRequestKeys.amount] + // delete the parent request if it has no more utility, otherwise, reduce its amount + + if ( + !creepRequest[CreepRoomLogisticsRequestKeys.noReserve] && + bestRequest.amount === creepRequest[CreepRoomLogisticsRequestKeys.amount] + ) { + delete this.room.roomLogisticsRequests[bestRequest.type][bestRequest.ID] + } else { + bestRequest.amount -= creepRequest[CreepRoomLogisticsRequestKeys.amount] } + } - creepMemory[CreepMemoryKeys.roomLogisticsRequests].push(creepRequest) - if (creepRequest[CreepRoomLogisticsRequestKeys.noReserve]) - return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] + creepMemory[CreepMemoryKeys.roomLogisticsRequests].push(creepRequest) + if (creepRequest[CreepRoomLogisticsRequestKeys.noReserve]) { + return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] + } - const target = findObjectWithID(creepRequest[CreepRoomLogisticsRequestKeys.target]) + const target = findObjectWithID(creepRequest[CreepRoomLogisticsRequestKeys.target]) - // Pickup type + // Pickup type - if (target instanceof Resource) { - target.reserveAmount -= creepRequest[CreepRoomLogisticsRequestKeys.amount] + if (target instanceof Resource) { + target.reserveAmount -= creepRequest[CreepRoomLogisticsRequestKeys.amount] - return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] - } + return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] + } - if (creepRequest[CreepRoomLogisticsRequestKeys.type] === RoomLogisticsRequestTypes.transfer) { - target.reserveStore[creepRequest[CreepRoomLogisticsRequestKeys.resourceType]] += - creepRequest[CreepRoomLogisticsRequestKeys.amount] + if (creepRequest[CreepRoomLogisticsRequestKeys.type] === RoomLogisticsRequestTypes.transfer) { + target.reserveStore[creepRequest[CreepRoomLogisticsRequestKeys.resourceType]] += + creepRequest[CreepRoomLogisticsRequestKeys.amount] - return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] - } + return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] + } - // Withdraw or offer type + // Withdraw or offer type - target.reserveStore[creepRequest[CreepRoomLogisticsRequestKeys.resourceType]] -= - creepRequest[CreepRoomLogisticsRequestKeys.amount] + target.reserveStore[creepRequest[CreepRoomLogisticsRequestKeys.resourceType]] -= + creepRequest[CreepRoomLogisticsRequestKeys.amount] - return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] + return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] } Creep.prototype.findRoomLogisticsRequestTypes = function (args) { - if (args && args.types) { - if (args.types.has(RoomLogisticsRequestTypes.transfer) && this.hasNonEnergyResource()) { - - if (args && args.noDelivery) return Result.fail - - this.noDelivery = true - return new Set([RoomLogisticsRequestTypes.transfer]) - } + if (args && args.types) { + if (args.types.has(RoomLogisticsRequestTypes.transfer) && this.hasNonEnergyResource()) { + if (args && args.noDelivery) return Result.fail - // Make sure we have the right store values for our types + this.noDelivery = true + return new Set([RoomLogisticsRequestTypes.transfer]) + } - if (this.needsResources()) { - args.types.delete(RoomLogisticsRequestTypes.transfer) - return args.types - } + // Make sure we have the right store values for our types - args.types.delete(RoomLogisticsRequestTypes.pickup) - args.types.delete(RoomLogisticsRequestTypes.offer) - args.types.delete(RoomLogisticsRequestTypes.withdraw) - return args.types + if (this.needsResources()) { + args.types.delete(RoomLogisticsRequestTypes.transfer) + return args.types } - if (this.hasNonEnergyResource()) { + args.types.delete(RoomLogisticsRequestTypes.pickup) + args.types.delete(RoomLogisticsRequestTypes.offer) + args.types.delete(RoomLogisticsRequestTypes.withdraw) + return args.types + } - if (args && args.noDelivery) return Result.fail + if (this.hasNonEnergyResource()) { + if (args && args.noDelivery) return Result.fail - this.noDelivery = true - return new Set([RoomLogisticsRequestTypes.transfer]) - } + this.noDelivery = true + return new Set([RoomLogisticsRequestTypes.transfer]) + } - if (!this.needsResources()) return new Set([RoomLogisticsRequestTypes.transfer]) - return new Set([ - RoomLogisticsRequestTypes.withdraw, - RoomLogisticsRequestTypes.pickup, - RoomLogisticsRequestTypes.transfer, - ]) + if (!this.needsResources()) return new Set([RoomLogisticsRequestTypes.transfer]) + return new Set([ + RoomLogisticsRequestTypes.withdraw, + RoomLogisticsRequestTypes.pickup, + RoomLogisticsRequestTypes.transfer, + ]) } Creep.prototype.canAcceptRoomLogisticsRequest = function (requestType, requestID) { - const request = this.room.roomLogisticsRequests[requestType][requestID] - const target = findObjectWithID(request.targetID) + const request = this.room.roomLogisticsRequests[requestType][requestID] + const target = findObjectWithID(request.targetID) - // Pickup type + // Pickup type - if (target instanceof Resource) { - if (request.onlyFull) { - // If the creep has enough space - - /* if (this.freeNextStore >= target.reserveAmount) return true */ - if (target.reserveAmount >= this.freeNextStore) return true - return false - } + if (target instanceof Resource) { + if (request.onlyFull) { + // If the creep has enough space - return true + /* if (this.freeNextStore >= target.reserveAmount) return true */ + if (target.reserveAmount >= this.freeNextStore) return true + return false } - if (request.type === RoomLogisticsRequestTypes.transfer) { + return true + } - // We don't have enough resource and we can deliver + if (request.type === RoomLogisticsRequestTypes.transfer) { + // We don't have enough resource and we can deliver - if (this.nextStore[request.resourceType] <= 0) { - if (this.noDelivery) return false + if (this.nextStore[request.resourceType] <= 0) { + if (this.noDelivery) return false - // There are no practical storing structures to deliver from - if (this.room.name !== this.commune.name) return false + // There are no practical storing structures to deliver from + if (this.room.name !== this.commune.name) return false - // We don't have space to get any - if (this.freeNextStore <= 0) return false - /* + // We don't have space to get any + if (this.freeNextStore <= 0) return false + /* // Try to find a sufficient withdraw or offer task const types: RoomLogisticsRequestTypes[] = ['withdraw', 'pickup'] @@ -1525,472 +1512,471 @@ Creep.prototype.canAcceptRoomLogisticsRequest = function (requestType, requestID return true } */ - // We aren't gonna deliver to a storing structure + // We aren't gonna deliver to a storing structure - if (target instanceof Structure && storingStructureTypesSet.has(target.structureType)) - return false - - let storingStructure + if (target instanceof Structure && storingStructureTypesSet.has(target.structureType)) + return false - // If energy, make sure there is enough to fill us to full + let storingStructure - if (request.resourceType === RESOURCE_ENERGY) { - storingStructure = this.commune.communeManager.storingStructures.find( - structure => structure.reserveStore[request.resourceType] >= this.freeNextStore, - ) - } else { - storingStructure = this.commune.communeManager.storingStructures.find( - structure => structure.reserveStore[request.resourceType] >= request.amount, - ) - } + // If energy, make sure there is enough to fill us to full - if (!storingStructure) return false + if (request.resourceType === RESOURCE_ENERGY) { + storingStructure = this.commune.communeManager.storingStructures.find( + structure => structure.reserveStore[request.resourceType] >= this.freeNextStore, + ) + } else { + storingStructure = this.commune.communeManager.storingStructures.find( + structure => structure.reserveStore[request.resourceType] >= request.amount, + ) + } - request.delivery = storingStructure.id - return true - } + if (!storingStructure) return false - if (request.onlyFull) { - // If the creep has enough resource - /* this.room.visual.text(Math.min(amount, target.store.getCapacity(request.resourceType) / 2).toString(), this.pos) */ - - // - const creepEffectiveCapacity = - this.store.getCapacity() - - this.store.getUsedCapacity() + - this.nextStore[request.resourceType] - - if ( - this.nextStore[request.resourceType] >= - Math.min( - this.nextStore[request.resourceType], - request.amount, - target.store.getCapacity(request.resourceType), - creepEffectiveCapacity, - ) - ) - return true - return false - } + request.delivery = storingStructure.id + return true + } + if (request.onlyFull) { + // If the creep has enough resource + /* this.room.visual.text(Math.min(amount, target.store.getCapacity(request.resourceType) / 2).toString(), this.pos) */ + + // + /* const creepEffectiveCapacity = this.freeNextStore */ + const creepEffectiveCapacity = + this.store.getCapacity() - + this.store.getUsedCapacity() + + this.nextStore[request.resourceType] + + if ( + this.nextStore[request.resourceType] >= + Math.min( + this.nextStore[request.resourceType], + request.amount, + target.store.getCapacity(request.resourceType), + creepEffectiveCapacity, + ) + ) return true + return false } - // Withdraw or offer type + return true + } - if (request.onlyFull) { - // If the creep has enough space + // Withdraw or offer type - if (target.reserveStore[request.resourceType] >= this.freeNextStore) return true - return false - } + if (request.onlyFull) { + // If the creep has enough space - return true + if (target.reserveStore[request.resourceType] >= this.freeNextStore) return true + return false + } + + return true } Creep.prototype.createBackupStoringStructuresRoomLogisticsRequest = function ( - types, - resourceTypes, + types, + resourceTypes, ) { - if (this.room.name !== this.commune.name) return Result.fail + if (this.room.name !== this.commune.name) return Result.fail - if (types.has(RoomLogisticsRequestTypes.transfer)) - return this.createBackupStoringStructuresRoomLogisticsRequestTransfer() + if (types.has(RoomLogisticsRequestTypes.transfer)) + return this.createBackupStoringStructuresRoomLogisticsRequestTransfer() - if (this.role === 'hauler') return Result.fail - return this.createBackupStoringStructuresRoomLogisticsRequestWithdraw(resourceTypes) + if (this.role === 'hauler') return Result.fail + return this.createBackupStoringStructuresRoomLogisticsRequestWithdraw(resourceTypes) } Creep.prototype.createBackupStoringStructuresRoomLogisticsRequestTransfer = function () { - const storingStructures = this.commune.communeManager.storingStructures - if (!storingStructures.length) return Result.fail - - let resourceType: ResourceConstant - - for (const key in this.store) { - if (key === RESOURCE_ENERGY) continue - if (this.nextStore[key as ResourceConstant] <= 0) continue - - resourceType = key as ResourceConstant - break - } - - if (!resourceType) return Result.fail - - const storingStructure = storingStructures.find( - structure => structure.freeReserveStore >= this.nextStore[resourceType], - ) - if (!storingStructure) return Result.fail - /* this.room.visual.text((this.nextStore[resourceType]).toString(), this.pos.x, this.pos.y, { color: customColors.red }) */ - return { - [CreepRoomLogisticsRequestKeys.type]: RoomLogisticsRequestTypes.transfer, - [CreepRoomLogisticsRequestKeys.target]: storingStructure.id, - [CreepRoomLogisticsRequestKeys.resourceType]: resourceType, - [CreepRoomLogisticsRequestKeys.amount]: this.nextStore[resourceType], - } + const storingStructures = this.commune.communeManager.storingStructures + if (!storingStructures.length) return Result.fail + + let resourceType: ResourceConstant + + for (const key in this.store) { + if (key === RESOURCE_ENERGY) continue + if (this.nextStore[key as ResourceConstant] <= 0) continue + + resourceType = key as ResourceConstant + break + } + + if (!resourceType) return Result.fail + + const storingStructure = storingStructures.find( + structure => structure.freeReserveStore >= this.nextStore[resourceType], + ) + if (!storingStructure) return Result.fail + /* this.room.visual.text((this.nextStore[resourceType]).toString(), this.pos.x, this.pos.y, { color: customColors.red }) */ + return { + [CreepRoomLogisticsRequestKeys.type]: RoomLogisticsRequestTypes.transfer, + [CreepRoomLogisticsRequestKeys.target]: storingStructure.id, + [CreepRoomLogisticsRequestKeys.resourceType]: resourceType, + [CreepRoomLogisticsRequestKeys.amount]: this.nextStore[resourceType], + } } Creep.prototype.createBackupStoringStructuresRoomLogisticsRequestWithdraw = function ( - resourceTypes = new Set([RESOURCE_ENERGY]), + resourceTypes = new Set([RESOURCE_ENERGY]), ) { - const storingStructures = this.commune.communeManager.storingStructures - if (!storingStructures.length) return Result.fail - - let resourceType: ResourceConstant - let storingStructure: AnyStoreStructure - - for (resourceType of resourceTypes) { - storingStructure = storingStructures.find( - structure => structure.reserveStore[resourceType] >= this.freeNextStore, - ) - if (storingStructure) break - } + const storingStructures = this.commune.communeManager.storingStructures + if (!storingStructures.length) return Result.fail - if (!storingStructure) return Result.fail + let resourceType: ResourceConstant + let storingStructure: AnyStoreStructure - /* this.room.visual.text((this.nextStore[resourceType]).toString(), this.pos.x, this.pos.y, { color: customColors.red }) */ - return { - [CreepRoomLogisticsRequestKeys.type]: RoomLogisticsRequestTypes.withdraw, - [CreepRoomLogisticsRequestKeys.target]: storingStructure.id, - [CreepRoomLogisticsRequestKeys.resourceType]: resourceType, - [CreepRoomLogisticsRequestKeys.amount]: this.freeNextStore, - } + for (resourceType of resourceTypes) { + storingStructure = storingStructures.find( + structure => structure.reserveStore[resourceType] >= this.freeNextStore, + ) + if (storingStructure) break + } + + if (!storingStructure) return Result.fail + + /* this.room.visual.text((this.nextStore[resourceType]).toString(), this.pos.x, this.pos.y, { color: customColors.red }) */ + return { + [CreepRoomLogisticsRequestKeys.type]: RoomLogisticsRequestTypes.withdraw, + [CreepRoomLogisticsRequestKeys.target]: storingStructure.id, + [CreepRoomLogisticsRequestKeys.resourceType]: resourceType, + [CreepRoomLogisticsRequestKeys.amount]: this.freeNextStore, + } } Creep.prototype.findRoomLogisticRequestAmount = function (request) { - const target = findObjectWithID(request.targetID) - - // Pickup type + const target = findObjectWithID(request.targetID) - if (target instanceof Resource) { - return Math.min(this.freeNextStore, request.amount) - } + // Pickup type - if (request.type === RoomLogisticsRequestTypes.transfer) { - if (request.delivery) { + if (target instanceof Resource) { + return Math.min(this.freeNextStore, request.amount) + } - // Take extra energy in case its needed + if (request.type === RoomLogisticsRequestTypes.transfer) { + if (request.delivery) { + // Take extra energy in case its needed - if (request.resourceType === RESOURCE_ENERGY) { - return this.nextStore[request.resourceType] + this.freeNextStore - } + if (request.resourceType === RESOURCE_ENERGY) { + return this.nextStore[request.resourceType] + this.freeNextStore + } - return Math.min( - request.amount, - this.nextStore[request.resourceType] + this.freeNextStore, - ) - } - return Math.min(this.nextStore[request.resourceType], request.amount) + return Math.min(request.amount, this.nextStore[request.resourceType] + this.freeNextStore) } + return Math.min(this.nextStore[request.resourceType], request.amount) + } - // Withdraw or offer type + // Withdraw or offer type - return Math.min(this.freeNextStore, request.amount) + return Math.min(this.freeNextStore, request.amount) } Creep.prototype.runRoomLogisticsRequestAdvanced = function (args) { - const request = this.findRoomLogisticsRequest(args) - if (!request) return Result.noAction + const request = this.findRoomLogisticsRequest(args) + if (!request) return Result.noAction + + /* log('REQUEST RESPONSE', request.T, { position: 1 }) */ + const target = findObjectWithID(request[CreepRoomLogisticsRequestKeys.target]) + this.room.targetVisual(this.pos, target.pos) + if (getRange(target.pos, this.pos) > 1) { + const result = this.createMoveRequest({ + origin: this.pos, + goals: [{ pos: target.pos, range: 1 }], + defaultCostMatrix(roomName) { + const roomManager = RoomManager.roomManagers[roomName] + if (!roomManager) return false + + return roomManager.defaultCostMatrix + }, + }) + // An enemy is probably blocking access to the logistics target + if (result === Result.fail) { + this.room.roomManager.roomLogisticsBlacklistCoords.add(packCoord(target.pos)) + Result.fail + } - /* log('REQUEST RESPONSE', request.T, { position: 1 }) */ - const target = findObjectWithID(request[CreepRoomLogisticsRequestKeys.target]) - this.room.targetVisual(this.pos, target.pos) - if (getRange(target.pos, this.pos) > 1) { - const result = this.createMoveRequest({ - origin: this.pos, - goals: [{ pos: target.pos, range: 1 }], - defaultCostMatrix(roomName) { - const roomManager = RoomManager.roomManagers[roomName] - if (!roomManager) return false - - return roomManager.defaultCostMatrix - }, - }) - // An enemy is probably blocking access to the logistics target - if (result === Result.fail) { - - this.room.roomManager.roomLogisticsBlacklistCoords.add(packCoord(target.pos)) - Result.fail - } + return Result.action + } - return Result.action - } + // If we already moved a resource this tick, then wait (presumably) until the next one to take any resoure-moving action + if (this.movedResource) return Result.noAction - /* log( + /* log( 'DOING REQUEST', request.T + ', ' + request[CreepRoomLogisticsRequestKeys.amount] + ', ' + this.store.getCapacity(request[CreepRoomLogisticsRequestKeys.resourceType]) + ', ' + this.name, { position: 1 }, ) */ - // Pickup type - - if (target instanceof Resource) { - this.pickup(target) - this.movedResource = true - - this.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += - request[CreepRoomLogisticsRequestKeys.amount] - target.nextAmount -= request[CreepRoomLogisticsRequestKeys.amount] - - this.memory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return Result.success - } - - if (request[CreepRoomLogisticsRequestKeys.type] === RoomLogisticsRequestTypes.transfer) { + // Pickup type - stringifyLog('tried to resolve request for ' + this.name, request) + if (target instanceof Resource) { + this.pickup(target) + this.movedResource = true - const result = this.transfer( - target as AnyStoreStructure | Creep, - request[CreepRoomLogisticsRequestKeys.resourceType], - request[CreepRoomLogisticsRequestKeys.amount], - ) - if (result !== OK) { - this.room.visual.text(result.toString(), this.pos) - return Result.fail - } + this.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += + request[CreepRoomLogisticsRequestKeys.amount] + target.nextAmount -= request[CreepRoomLogisticsRequestKeys.amount] - this.movedResource = true + this.memory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return Result.success + } - this.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] -= - request[CreepRoomLogisticsRequestKeys.amount] - target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += - request[CreepRoomLogisticsRequestKeys.amount] + if (request[CreepRoomLogisticsRequestKeys.type] === RoomLogisticsRequestTypes.transfer) { + stringifyLog('tried to resolve request for ' + this.name, request) - this.memory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return Result.success + const result = this.transfer( + target as AnyStoreStructure | Creep, + request[CreepRoomLogisticsRequestKeys.resourceType], + request[CreepRoomLogisticsRequestKeys.amount], + ) + if (result !== OK) { + this.room.visual.text(result.toString(), this.pos) + return Result.fail } - // Withdraw or offer type - - // Creeps need to transfer to each other + this.movedResource = true - if (target instanceof Creep) { - if ( - target.transfer( - this, - request[CreepRoomLogisticsRequestKeys.resourceType], - request[CreepRoomLogisticsRequestKeys.amount], - ) !== OK - ) - return Result.fail + this.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] -= + request[CreepRoomLogisticsRequestKeys.amount] + target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += + request[CreepRoomLogisticsRequestKeys.amount] - target.movedResource = true + this.memory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return Result.success + } - this.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += - request[CreepRoomLogisticsRequestKeys.amount] - target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] -= - request[CreepRoomLogisticsRequestKeys.amount] + // Withdraw or offer type - this.memory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return Result.action - } + // Creeps need to transfer to each other + if (target instanceof Creep) { if ( - this.withdraw( - target, - request[CreepRoomLogisticsRequestKeys.resourceType], - request[CreepRoomLogisticsRequestKeys.amount], - ) !== OK + target.transfer( + this, + request[CreepRoomLogisticsRequestKeys.resourceType], + request[CreepRoomLogisticsRequestKeys.amount], + ) !== OK ) - return Result.fail + return Result.fail - this.movedResource = true + target.movedResource = true this.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += - request[CreepRoomLogisticsRequestKeys.amount] + request[CreepRoomLogisticsRequestKeys.amount] target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] -= - request[CreepRoomLogisticsRequestKeys.amount] + request[CreepRoomLogisticsRequestKeys.amount] this.memory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return Result.success + return Result.action + } + + if ( + this.withdraw( + target, + request[CreepRoomLogisticsRequestKeys.resourceType], + request[CreepRoomLogisticsRequestKeys.amount], + ) !== OK + ) + return Result.fail + + this.movedResource = true + + this.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += + request[CreepRoomLogisticsRequestKeys.amount] + target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] -= + request[CreepRoomLogisticsRequestKeys.amount] + + this.memory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return Result.success } Creep.prototype.runRoomLogisticsRequestsAdvanced = function (args) { - if (this.spawning) return Result.noAction + if (this.spawning) return Result.noAction - const result = this.runRoomLogisticsRequestAdvanced(args) - if (result === Result.action) return result + const result = this.runRoomLogisticsRequestAdvanced(args) + if (result === Result.action) return result - this.runRoomLogisticsRequestAdvanced(args) - return Result.success + this.runRoomLogisticsRequestAdvanced(args) + return Result.success } Creep.prototype.runRoomLogisticsRequest = function () { - const request = this.memory[CreepMemoryKeys.roomLogisticsRequests][0] - if (!request) return Result.fail - - /* log('REQUEST RESPONSE', request.T, { position: 1 }) */ - const target = findObjectWithID(request[CreepRoomLogisticsRequestKeys.target]) + const creepMemory = Memory.creeps[this.name] + const request = creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] + if (!request) return Result.fail - if (getRange(target.pos, this.pos) > 1) { - this.createMoveRequest({ - origin: this.pos, - goals: [{ pos: target.pos, range: 1 }], - defaultCostMatrix(roomName) { - const roomManager = RoomManager.roomManagers[roomName] - if (!roomManager) return false + /* log('REQUEST RESPONSE', request.T, { position: 1 }) */ + const target = findObjectWithID(request[CreepRoomLogisticsRequestKeys.target]) - return roomManager.defaultCostMatrix - }, - }) + if (getRange(target.pos, this.pos) > 1) { + this.createMoveRequest({ + origin: this.pos, + goals: [{ pos: target.pos, range: 1 }], + defaultCostMatrix(roomName) { + const roomManager = RoomManager.roomManagers[roomName] + if (!roomManager) return false + + return roomManager.defaultCostMatrix + }, + }) - return Result.action - } + return Result.action + } - /* log( + /* log( 'DOING REQUEST', request.T + ', ' + request[CreepRoomLogisticsRequestKeys.amount] + ', ' + this.store.getCapacity(request[CreepRoomLogisticsRequestKeys.resourceType]) + ', ' + this.name, { position: 1 }, ) */ - // Pickup type + // Pickup type - if (target instanceof Resource) { - this.pickup(target) - this.movedResource = true - - this.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += - request[CreepRoomLogisticsRequestKeys.amount] - target.nextAmount -= request[CreepRoomLogisticsRequestKeys.amount] - - this.memory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return Result.success - } - - if (request[CreepRoomLogisticsRequestKeys.type] === RoomLogisticsRequestTypes.transfer) { - if ( - this.transfer( - target as AnyStoreStructure | Creep, - request[CreepRoomLogisticsRequestKeys.resourceType], - request[CreepRoomLogisticsRequestKeys.amount], - ) !== OK - ) - return Result.fail - - this.movedResource = true + if (target instanceof Resource) { + this.pickup(target) + this.movedResource = true - this.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] -= - request[CreepRoomLogisticsRequestKeys.amount] - target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += - request[CreepRoomLogisticsRequestKeys.amount] + this.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += + request[CreepRoomLogisticsRequestKeys.amount] + target.nextAmount -= request[CreepRoomLogisticsRequestKeys.amount] - this.memory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return Result.success - } + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return Result.success + } - // Withdraw or offer type + if (request[CreepRoomLogisticsRequestKeys.type] === RoomLogisticsRequestTypes.transfer) { + if ( + this.transfer( + target as AnyStoreStructure | Creep, + request[CreepRoomLogisticsRequestKeys.resourceType], + request[CreepRoomLogisticsRequestKeys.amount], + ) !== OK + ) + return Result.fail - // Creeps need to transfer to each other + this.movedResource = true - if (target instanceof Creep) { - if ( - target.transfer( - this, - request[CreepRoomLogisticsRequestKeys.resourceType], - request[CreepRoomLogisticsRequestKeys.amount], - ) !== OK - ) - return Result.fail + this.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] -= + request[CreepRoomLogisticsRequestKeys.amount] + target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += + request[CreepRoomLogisticsRequestKeys.amount] - this.movedResource = true + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return Result.success + } - this.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += - request[CreepRoomLogisticsRequestKeys.amount] - target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] -= - request[CreepRoomLogisticsRequestKeys.amount] + // Withdraw or offer type - this.memory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return Result.success - } + // Creeps need to transfer to each other + if (target instanceof Creep) { if ( - this.withdraw( - target, - request[CreepRoomLogisticsRequestKeys.resourceType], - request[CreepRoomLogisticsRequestKeys.amount], - ) !== OK + target.transfer( + this, + request[CreepRoomLogisticsRequestKeys.resourceType], + request[CreepRoomLogisticsRequestKeys.amount], + ) !== OK ) - return Result.fail + return Result.fail this.movedResource = true this.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += - request[CreepRoomLogisticsRequestKeys.amount] + request[CreepRoomLogisticsRequestKeys.amount] target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] -= - request[CreepRoomLogisticsRequestKeys.amount] + request[CreepRoomLogisticsRequestKeys.amount] - this.memory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) return Result.success + } + + if ( + this.withdraw( + target, + request[CreepRoomLogisticsRequestKeys.resourceType], + request[CreepRoomLogisticsRequestKeys.amount], + ) !== OK + ) + return Result.fail + + this.movedResource = true + + this.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += + request[CreepRoomLogisticsRequestKeys.amount] + target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] -= + request[CreepRoomLogisticsRequestKeys.amount] + + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return Result.success } Creep.prototype.runRoomLogisticsRequests = function () { - if (this.spawning) return false + if (this.spawning) return false - if (this.runRoomLogisticsRequest() !== Result.success) return false + if (this.runRoomLogisticsRequest() !== Result.success) return false - this.runRoomLogisticsRequest() - return true + this.runRoomLogisticsRequest() + return true } Creep.prototype.findCreepRoomLogisticsRequestAmount = function ( - type, - targetID, - amount, - resourceType, + type, + targetID, + amount, + resourceType, ) { - const target = findObjectWithID(targetID) + const target = findObjectWithID(targetID) - // Pickup type + // Pickup type - if (target instanceof Resource) { - // Update in accordance to potential resource decay + if (target instanceof Resource) { + // Update in accordance to potential resource decay - amount = Math.min(target.nextAmount, amount) - if (amount <= 0) return amount + amount = Math.min(target.nextAmount, amount) + if (amount <= 0) return amount - target.reserveAmount -= amount - return amount - } + target.reserveAmount -= amount + return amount + } - if (type === RoomLogisticsRequestTypes.transfer) { - // Delete the request if the target is fulfilled + if (type === RoomLogisticsRequestTypes.transfer) { + // Delete the request if the target is fulfilled - if (target.freeNextStore < amount) return 0 + if (target.freeNextStore < amount) return 0 - amount = Math.min(Math.min(this.nextStore[resourceType], target.freeNextStore), amount) - if (amount <= 0) return amount + amount = Math.min(Math.min(this.nextStore[resourceType], target.freeNextStore), amount) + if (amount <= 0) return amount - target.reserveStore[resourceType] += amount - return amount - } + target.reserveStore[resourceType] += amount + return amount + } - // Withdraw or offer type + // Withdraw or offer type - // Delete the request if the target doesn't have what we need + // Delete the request if the target doesn't have what we need - if (target.nextStore[resourceType] < amount) return amount + if (target.nextStore[resourceType] < amount) return amount - amount = Math.min(target.nextStore[resourceType], amount) - if (amount <= 0) return amount + amount = Math.min(target.nextStore[resourceType], amount) + if (amount <= 0) return amount - target.reserveStore[resourceType] -= amount - return amount + target.reserveStore[resourceType] -= amount + return amount } Creep.prototype.createCreepRoomLogisticsRequest = function ( - type, - targetID, - amount, - resourceType = RESOURCE_ENERGY, + type, + targetID, + amount, + resourceType = RESOURCE_ENERGY, ) { - /* amount = */ this.findCreepRoomLogisticsRequestAmount(type, targetID, amount, resourceType) - if (amount <= 0) return Result.fail - - this.memory[CreepMemoryKeys.roomLogisticsRequests].push({ - [CreepRoomLogisticsRequestKeys.type]: type, - [CreepRoomLogisticsRequestKeys.target]: targetID, - [CreepRoomLogisticsRequestKeys.resourceType]: resourceType, - [CreepRoomLogisticsRequestKeys.amount]: amount, - }) + /* amount = */ this.findCreepRoomLogisticsRequestAmount(type, targetID, amount, resourceType) + if (amount <= 0) return Result.fail - return Result.success + this.memory[CreepMemoryKeys.roomLogisticsRequests].push({ + [CreepRoomLogisticsRequestKeys.type]: type, + [CreepRoomLogisticsRequestKeys.target]: targetID, + [CreepRoomLogisticsRequestKeys.resourceType]: resourceType, + [CreepRoomLogisticsRequestKeys.amount]: amount, + }) + + return Result.success } diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index 085aeff31..19df5c954 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -780,7 +780,7 @@ export class Hauler extends Creep { // Ensure that they have the same opinions on roads if (creepMemory[CreepMemoryKeys.preferRoads] !== creepMemory[CreepMemoryKeys.preferRoads]) return false - let amount: number | undefined +/* let amount: number | undefined const logisticsRequest = Memory.creeps[this.name][CreepMemoryKeys.roomLogisticsRequests][0] if (logisticsRequest) { const target = findObjectWithID(logisticsRequest[CreepRoomLogisticsRequestKeys.target]) @@ -788,10 +788,10 @@ export class Hauler extends Creep { if (getRange(target.pos, creepAtPos.pos) <= 1) return false amount = logisticsRequest[CreepRoomLogisticsRequestKeys.amount] - } - if (creepAtPos.store.getFreeCapacity() !== (amount ?? this.store.getUsedCapacity(RESOURCE_ENERGY))) return false + } */ + if (creepAtPos.store.getFreeCapacity() !== this.store.getUsedCapacity(RESOURCE_ENERGY)) return false - this.transfer(creepAtPos, RESOURCE_ENERGY, amount) + this.transfer(creepAtPos, RESOURCE_ENERGY) this.movedResource = true creepAtPos.movedResource = true @@ -805,7 +805,7 @@ export class Hauler extends Creep { log('creepAtPos Energy', creepAtPos.freeNextStore) log('nextEnergy', Math.min(this.store.energy, creepAtPos.freeNextStore)) */ - const transferAmount = amount ?? Math.min(this.store.getUsedCapacity(RESOURCE_ENERGY), creepAtPos.store.getFreeCapacity()) + const transferAmount = Math.min(this.store.getUsedCapacity(RESOURCE_ENERGY), creepAtPos.store.getFreeCapacity()) this.reserveStore.energy -= transferAmount this.nextStore.energy -= transferAmount creepAtPos.reserveStore.energy += transferAmount @@ -998,28 +998,31 @@ export class Hauler extends Creep { return Result.action } + /** + * Run commune logistics, but only for creeps intended for commune logistics + */ runRestrictedCommuneLogistics?() { + const creepMemory = Memory.creeps[this.name] // let it respond to its remote if (Memory.creeps[this.name][CreepMemoryKeys.remote]) return Result.fail // We aren't in the commune if (this.room.name !== this.commune.name) return Result.fail + if (this.commune.communeManager.hasSufficientRoads) { + // If we have a body not optimized for roads, try to respond to a remote instead + if (!creepMemory[CreepMemoryKeys.preferRoads]) return Result.fail + } + // If there is no need for more commune haulers if ( this.commune.communeManager.communeHaulerNeed < this.commune.communeManager.communeHaulerCarryParts ) { - return Result.fail - } - - if (this.commune.communeManager.hasSufficientRoads) { - // If we have a body not optimized for roads, try to respond to a remote instead - if (myCreepUtils.parts(this).move / this.body.length >= 0.5) return Result.fail + return Result.stop } // success, we are working for the commune now - const creepMemory = Memory.creeps[this.name] if (!creepMemory[CreepMemoryKeys.taskRoom]) { creepMemory[CreepMemoryKeys.taskRoom] = this.room.name this.commune.communeManager.communeHaulerCarryParts += myCreepUtils.parts(this).carry diff --git a/src/room/room.ts b/src/room/room.ts index cb9683ab3..06db67774 100644 --- a/src/room/room.ts +++ b/src/room/room.ts @@ -942,10 +942,7 @@ export class RoomManager { // Structures have been added, destroyed or aren't yet initialized this._structureCoords = undefined - this._upgradePositions = undefined - this._fastFillerPositions = undefined this.sourceContainerIDs = undefined - this.fastFillerContainerIDs = undefined const communeManager = this.room.communeManager if (communeManager) { @@ -953,6 +950,10 @@ export class RoomManager { communeManager.spawningStructuresByPriorityIDs = undefined communeManager._fastFillerSpawnEnergyCapacity = undefined communeManager.sourceLinkIDs = undefined + + this.fastFillerContainerIDs = undefined + this._upgradePositions = undefined + this._fastFillerPositions = undefined } if (!newAllStructures) newAllStructures = this.room.find(FIND_STRUCTURES) @@ -1619,7 +1620,7 @@ export class RoomManager { const controllerContainer = findObjectWithID(this.controllerContainerID) if (controllerContainer) { this._controllerContainer = controllerContainer - return this._controllerContainer + return controllerContainer } } diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index 7726a41b2..58c74e76e 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -1,31 +1,32 @@ import { - allStructureTypes, - WorkRequestKeys, - CombatRequestKeys, - defaultPlainCost, - defaultSwampCost, - impassibleStructureTypes, - impassibleStructureTypesSet, - maxRampartGroupSize, - maxRemoteRoomDistance, - customColors, - PlayerMemoryKeys, - roomDimensions, - roomTypeProperties, - roomTypes, - constantRoomTypes, - stamps, - defaultStructureTypesByBuildPriority, - Result, - adjacentOffsets, - CreepMemoryKeys, - RoomMemoryKeys, - RoomTypes, - packedPosLength, - maxRemotePathDistance, - RoomLogisticsRequestTypes, - remoteRoles, - RemoteResourcePathTypes, + allStructureTypes, + WorkRequestKeys, + CombatRequestKeys, + defaultPlainCost, + defaultSwampCost, + impassibleStructureTypes, + impassibleStructureTypesSet, + maxRampartGroupSize, + maxRemoteRoomDistance, + customColors, + PlayerMemoryKeys, + roomDimensions, + roomTypeProperties, + roomTypes, + constantRoomTypes, + stamps, + defaultStructureTypesByBuildPriority, + Result, + adjacentOffsets, + CreepMemoryKeys, + RoomMemoryKeys, + RoomTypes, + packedPosLength, + maxRemotePathDistance, + RoomLogisticsRequestTypes, + remoteRoles, + RemoteResourcePathTypes, + FlagNames, } from 'international/constants' import { areCoordsEqual, @@ -1625,89 +1626,83 @@ Room.prototype.highestWeightedStoringStructures = function (resourceType) { } Room.prototype.createRoomLogisticsRequest = function (args) { - // Don't make requests when there is nobody to respond - - if (!this.myCreeps.length) return Result.noAction - if (this.roomManager.roomLogisticsBlacklistCoords.has(packCoord(args.target.pos))) - return Result.noAction - - if (!args.resourceType) args.resourceType = RESOURCE_ENERGY - // We should only handle energy until we have an active storage or terminal - else if ( - args.resourceType !== RESOURCE_ENERGY && - (!this.storage || this.controller.level < 4) && - (!this.terminal || this.controller.level < 6) - ) - return Result.fail + // Don't make requests when there is nobody to respond - let amount: number + if (!this.myCreeps.length) return Result.noAction + if (this.roomManager.roomLogisticsBlacklistCoords.has(packCoord(args.target.pos))) + return Result.noAction - // Make sure we are not infringing on the threshold + if (!args.resourceType) args.resourceType = RESOURCE_ENERGY + // We should only handle energy until we have an active storage or terminal + else if ( + args.resourceType !== RESOURCE_ENERGY && + (!this.storage || this.controller.level < 4) && + (!this.terminal || this.controller.level < 6) + ) + return Result.fail - if (args.target instanceof Resource) { - amount = (args.target as Resource).reserveAmount + let amount: number - if (amount < 1) return Result.fail - } else if (args.type === RoomLogisticsRequestTypes.transfer) { - if ( - args.target.reserveStore[args.resourceType] >= - args.target.store.getCapacity(args.resourceType) - ) - return Result.fail + // Make sure we are not infringing on the threshold - amount = args.target.freeReserveStoreOf(args.resourceType) - /* this.visual.text(args.target.reserveStore[args.resourceType].toString(), args.target.pos) */ - } + if (args.target instanceof Resource) { + amount = (args.target as Resource).reserveAmount - // Offer or withdraw types - else { - amount = args.target.reserveStore[args.resourceType] + if (amount < 1) return Result.fail + } else if (args.type === RoomLogisticsRequestTypes.transfer) { + if ( + args.target.reserveStore[args.resourceType] >= + args.target.store.getCapacity(args.resourceType) + ) + return Result.fail - // We don't have enough resources to make a request + amount = args.target.freeReserveStoreOf(args.resourceType) + /* this.visual.text(args.target.reserveStore[args.resourceType].toString(), args.target.pos) */ + } - if (amount < 1) return Result.fail + // Offer or withdraw types + else { + amount = args.target.reserveStore[args.resourceType] - if (args.maxAmount) amount = Math.min(amount, Math.round(args.maxAmount)) - } + // We don't have enough resources to make a request - if (args.priority === undefined) args.priority = 1 - else args.priority = Math.round(args.priority * 100) / 100 + if (amount < 1) return Result.fail - const ID = collectiveManager.newTickID() + if (args.maxAmount) amount = Math.min(amount, Math.round(args.maxAmount)) + } - if (global.settings.roomLogisticsVisuals && args.type === RoomLogisticsRequestTypes.pickup) { - this.visual.resource(args.resourceType, args.target.pos.x, args.target.pos.y) - this.visual.text(args.priority.toString(), args.target.pos, { font: 0.4 }) - } + if (args.priority === undefined) args.priority = 1 + else args.priority = Math.round(args.priority * 100) / 100 - /* this.visual.text(args.priority.toString(), args.target.pos) */ - /* this.visual.resource(args.resourceType, args.target.pos.x, args.target.pos.y) */ - /* if (args.type === 'transfer') this.visual.resource(args.resourceType, args.target.pos.x, args.target.pos.y) */ - /* if (args.type === 'offer') { - - this.visual.text(amount.toString(), args.target.pos.x, args.target.pos.y + 0.5) - this.visual.text(args.priority.toString(), args.target.pos) - } */ - /* if (args.type === 'transfer') { - - this.visual.text(amount.toString(), args.target.pos.x, args.target.pos.y + 0.5) - this.visual.text(args.priority.toString(), args.target.pos) - } */ - /* if (args.type === 'withdraw') { - - this.visual.text(amount.toString(), args.target.pos.x, args.target.pos.y + 0.5) - this.visual.text(args.priority.toString(), args.target.pos) - } */ - return (this.roomLogisticsRequests[args.type][ID] = { - ID, - type: args.type, - targetID: args.target.id, - resourceType: args.resourceType, - amount: amount, - priority: args.priority, - onlyFull: true || args.onlyFull, - noReserve: !this.roomManager.advancedLogistics || undefined, // Don't reserve if advancedLogistics is disabled - }) + const ID = collectiveManager.newTickID() + + if (Game.flags[FlagNames.debugRoomLogistics]) { + if (args.type === RoomLogisticsRequestTypes.offer) { + this.visual.text('O ' + amount.toString(), args.target.pos.x, args.target.pos.y + 0.5) + this.visual.text(args.priority.toString(), args.target.pos) + } else if (args.type === RoomLogisticsRequestTypes.transfer) { + this.visual.text('T ' + amount.toString(), args.target.pos.x, args.target.pos.y + 0.5) + this.visual.text(args.priority.toString(), args.target.pos) + } else if (args.type === RoomLogisticsRequestTypes.withdraw) { + this.visual.text('W ' + amount.toString(), args.target.pos.x, args.target.pos.y + 0.5) + this.visual.text(args.priority.toString(), args.target.pos) + } + } + + /* this.visual.text(args.priority.toString(), args.target.pos) */ + /* this.visual.resource(args.resourceType, args.target.pos.x, args.target.pos.y) */ + /* if (args.type === 'transfer') this.visual.resource(args.resourceType, args.target.pos.x, args.target.pos.y) */ + + return (this.roomLogisticsRequests[args.type][ID] = { + ID, + type: args.type, + targetID: args.target.id, + resourceType: args.resourceType, + amount: amount, + priority: args.priority, + onlyFull: true || args.onlyFull, + noReserve: !this.roomManager.advancedLogistics || undefined, // Don't reserve if advancedLogistics is disabled + }) } Room.prototype.findStructureAtCoord = function ( From b9e963eb2c153a9f786ce28ea17aa109208477c3 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sun, 31 Dec 2023 14:12:18 -0800 Subject: [PATCH 053/190] fix hauler logistics running --- src/international/flags.ts | 16 ++++++++++++++ .../creeps/creepPrototypes/creepFunctions.ts | 3 +++ .../creeps/roleManagers/commune/hauler.ts | 22 +++++++++---------- 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/src/international/flags.ts b/src/international/flags.ts index 7a701fff6..f154b793a 100644 --- a/src/international/flags.ts +++ b/src/international/flags.ts @@ -698,6 +698,22 @@ export class FlagManager { room.visual.text('CS', controllerStructure.pos) } + + private creepUsedStore(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const room = Game.rooms[roomName] + if (!room) { + + flag.setColor(COLOR_RED) + return + } + + for (const creep of room.myCreeps) { + + room.visual.text(creep.usedNextStore.toString(), creep.pos) + } + } } export const flagManager = new FlagManager() diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index 591f695c6..488e59d79 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -1823,6 +1823,9 @@ Creep.prototype.runRoomLogisticsRequest = function () { return Result.action } + // If we already moved a resource this tick, then wait (presumably) until the next one to take any resoure-moving action + if (this.movedResource) return Result.noAction + /* log( 'DOING REQUEST', request.T + ', ' + request[CreepRoomLogisticsRequestKeys.amount] + ', ' + this.store.getCapacity(request[CreepRoomLogisticsRequestKeys.resourceType]) + ', ' + this.name, diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index 19df5c954..2e749cb1f 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -155,6 +155,8 @@ export class Hauler extends Creep { if (remoteMemory[RoomMemoryKeys.abandonRemote]) continue if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) continue if (remoteMemory[RoomMemoryKeys.commune] !== this.commune.name) continue + // Ensure the creep and the remote have the same opinions on roads + if (!!remoteMemory[RoomMemoryKeys.roads].length !== Memory.creeps[this.name][CreepMemoryKeys.preferRoads]) continue const sourceIndex = parseInt(splitRemoteInfo[1]) if (!this.isRemoteValid(remoteName, sourceIndex)) continue @@ -780,14 +782,11 @@ export class Hauler extends Creep { // Ensure that they have the same opinions on roads if (creepMemory[CreepMemoryKeys.preferRoads] !== creepMemory[CreepMemoryKeys.preferRoads]) return false -/* let amount: number | undefined - const logisticsRequest = Memory.creeps[this.name][CreepMemoryKeys.roomLogisticsRequests][0] + /* const logisticsRequest = Memory.creeps[this.name][CreepMemoryKeys.roomLogisticsRequests][0] if (logisticsRequest) { const target = findObjectWithID(logisticsRequest[CreepRoomLogisticsRequestKeys.target]) // Don't relay if they are close to our logistics target if (getRange(target.pos, creepAtPos.pos) <= 1) return false - - amount = logisticsRequest[CreepRoomLogisticsRequestKeys.amount] } */ if (creepAtPos.store.getFreeCapacity() !== this.store.getUsedCapacity(RESOURCE_ENERGY)) return false @@ -1004,13 +1003,13 @@ export class Hauler extends Creep { runRestrictedCommuneLogistics?() { const creepMemory = Memory.creeps[this.name] // let it respond to its remote - if (Memory.creeps[this.name][CreepMemoryKeys.remote]) return Result.fail + if (Memory.creeps[this.name][CreepMemoryKeys.remote]) return false // We aren't in the commune - if (this.room.name !== this.commune.name) return Result.fail + if (this.room.name !== this.commune.name) return false if (this.commune.communeManager.hasSufficientRoads) { // If we have a body not optimized for roads, try to respond to a remote instead - if (!creepMemory[CreepMemoryKeys.preferRoads]) return Result.fail + if (!creepMemory[CreepMemoryKeys.preferRoads]) return false } // If there is no need for more commune haulers @@ -1018,7 +1017,7 @@ export class Hauler extends Creep { this.commune.communeManager.communeHaulerNeed < this.commune.communeManager.communeHaulerCarryParts ) { - return Result.stop + return false } // success, we are working for the commune now @@ -1028,13 +1027,14 @@ export class Hauler extends Creep { this.commune.communeManager.communeHaulerCarryParts += myCreepUtils.parts(this).carry } - return this.runCommuneLogistics() + this.runCommuneLogistics() + return true } runCommuneLogistics?() { this.passiveRenew() - if (this.runRoomLogisticsRequestsAdvanced() !== Result.success) { + if (this.runRoomLogisticsRequestsAdvanced() === Result.action) { this.relay() return Result.action } @@ -1043,7 +1043,7 @@ export class Hauler extends Creep { } run?() { - if (this.runRestrictedCommuneLogistics() !== Result.fail) { + if (this.runRestrictedCommuneLogistics() === true) { return } From 9114adf7a1c0d48303e4c9c6d5389ab175362acf Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 2 Jan 2024 16:26:14 -0800 Subject: [PATCH 054/190] smarter remoters, work request visuals, inter room range --- src/international/flags.ts | 74 +- src/room/commune/defence.ts | 23 +- src/room/commune/haulerSize.ts | 2 +- src/room/container.ts | 25 +- .../creeps/roleManagers/commune/hauler.ts | 57 +- .../roleManagers/remote/remoteReserver.ts | 72 +- .../remote/remoteSourceHarvester.ts | 90 +- src/utils/utils.ts | 790 +++++++++--------- 8 files changed, 635 insertions(+), 498 deletions(-) diff --git a/src/international/flags.ts b/src/international/flags.ts index f154b793a..746eb5dd1 100644 --- a/src/international/flags.ts +++ b/src/international/flags.ts @@ -1,5 +1,5 @@ import { Dashboard, Rectangle, Table } from 'screeps-viz' -import { Result, RoomLogisticsRequestTypes, RoomMemoryKeys, RoomTypes, customColors, ourImpassibleStructuresSet } from './constants' +import { Result, RoomLogisticsRequestTypes, RoomMemoryKeys, RoomTypes, WorkRequestKeys, customColors, ourImpassibleStructuresSet } from './constants' import { collectiveManager } from './collective' import { CombatRequestTypes } from 'types/internationalRequests' import { roomNameUtils } from 'room/roomNameUtils' @@ -642,6 +642,78 @@ export class FlagManager { }) } + private workRequestsByScore(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const room = Game.rooms[roomName] + if (!room) { + + flag.setColor(COLOR_RED) + return + } + + const headers = [ + 'roomName', + 'static score', + 'dynamic score', + 'responder', + 'abandon' + ] + const data: any[][] = [] + + const workRequests = Object.keys(Memory.workRequests).sort((a, b) => { + const aScore = (Memory.rooms[a][RoomMemoryKeys.score] + + Memory.rooms[a][RoomMemoryKeys.dynamicScore]) + + const bScore = (Memory.rooms[b][RoomMemoryKeys.score] + + Memory.rooms[b][RoomMemoryKeys.dynamicScore]) + + return aScore - bScore + }) + + for (const requestRoomName of workRequests) { + + const roomMemory = Memory.rooms[requestRoomName] + const request = Memory.workRequests[requestRoomName] + + const row = [ + requestRoomName, + roomMemory[RoomMemoryKeys.score], + roomMemory[RoomMemoryKeys.dynamicScore], + request[WorkRequestKeys.responder], + request[WorkRequestKeys.abandon], + ] + data.push(row) + } + + const height = 3 + data.length + + Dashboard({ + config: { + room: room.name, + }, + widgets: [ + { + pos: { + x: 1, + y: 1, + }, + width: 47, + height, + widget: Rectangle({ + data: Table(() => ({ + data, + config: { + label: 'Work Requests', + headers, + }, + })), + }), + }, + ], + }) + } + private diagonalCoords(flagName: string, flagNameParts: string[]) { const flag = Game.flags[flagName] const roomName = flagNameParts[1] || flag.pos.roomName diff --git a/src/room/commune/defence.ts b/src/room/commune/defence.ts index 6689426ae..32c407039 100644 --- a/src/room/commune/defence.ts +++ b/src/room/commune/defence.ts @@ -34,7 +34,6 @@ import { customLog, LogTypes } from 'utils/logging' export class DefenceManager { communeManager: CommuneManager - presentThreat: number threatByPlayers: Map constructor(communeManager: CommuneManager) { @@ -374,12 +373,13 @@ export class DefenceManager { } private findPresentThreat() { - this.presentThreat = 0 - this.threatByPlayers = new Map() const { room } = this.communeManager - if (!room.towerInferiority) return + if (!room.towerInferiority) return false + + let presentThreat = 0 + this.threatByPlayers = new Map() for (const enemyCreep of room.roomManager.enemyAttackers) { let threat = 0 @@ -391,7 +391,7 @@ export class DefenceManager { threat += enemyCreep.combatStrength.heal / enemyCreep.defenceStrength threat = Math.floor(threat) - this.presentThreat += threat + presentThreat += threat const playerName = enemyCreep.owner.username if (playerName === 'Invader') continue @@ -404,25 +404,30 @@ export class DefenceManager { this.threatByPlayers.set(playerName, threat) } + + return presentThreat } manageThreat() { const { room } = this.communeManager - this.findPresentThreat() + const presentThreat = this.findPresentThreat() const roomMemory = Memory.rooms[room.name] - if (!this.presentThreat) { + if (!presentThreat) { // Reduce attack threat over time if (roomMemory[RoomMemoryKeys.threatened] > 0) roomMemory[RoomMemoryKeys.threatened] *= defaultDataDecay - if (roomMemory[RoomMemoryKeys.lastAttackedBy]) roomMemory[RoomMemoryKeys.lastAttackedBy] += 1 + if (roomMemory[RoomMemoryKeys.lastAttackedBy] !== undefined) roomMemory[RoomMemoryKeys.lastAttackedBy] += 1 + return } + // There is a present threat + roomMemory[RoomMemoryKeys.threatened] = Math.max( roomMemory[RoomMemoryKeys.threatened], - this.presentThreat, + presentThreat, playerManager.highestThreat / 3, ) diff --git a/src/room/commune/haulerSize.ts b/src/room/commune/haulerSize.ts index 4fc62326e..28ea14420 100644 --- a/src/room/commune/haulerSize.ts +++ b/src/room/commune/haulerSize.ts @@ -16,7 +16,7 @@ export class HaulerSizeManager { if (roomMemory[RoomMemoryKeys.minHaulerCost] === undefined) { - roomMemory[RoomMemoryKeys.minHaulerCost] = Math.max(Memory.minHaulerCost, 100 * this.communeManager.room.roomManager.structures.spawn.length) + roomMemory[RoomMemoryKeys.minHaulerCost] = Math.max(Memory.minHaulerCost, 200 * this.communeManager.room.roomManager.structures.spawn.length) roomMemory[RoomMemoryKeys.minHaulerCostUpdate] = Game.time + randomIntRange(1500, 3000) return } diff --git a/src/room/container.ts b/src/room/container.ts index c6a6d2b22..1c540ac36 100644 --- a/src/room/container.ts +++ b/src/room/container.ts @@ -46,18 +46,19 @@ export class ContainerManager { } // If we're sufficiently full, we don't need to ask for more - if (energy > capacity * 0.9) continue + if (energy < capacity * 0.6) { - this.roomManager.room.createRoomLogisticsRequest({ - target: container, - type: RoomLogisticsRequestTypes.transfer, - onlyFull: true, - priority: scalePriority( - capacity, - energy, - 20, - ), - }) + this.roomManager.room.createRoomLogisticsRequest({ + target: container, + type: RoomLogisticsRequestTypes.transfer, + onlyFull: true, + priority: scalePriority( + capacity, + energy, + 20, + ), + }) + } } } @@ -91,7 +92,7 @@ export class ContainerManager { ? 0 : 50 priority += scalePriority(container.store.getCapacity(), container.reserveStore.energy, 20) - + this.roomManager.room.createRoomLogisticsRequest({ target: container, type: RoomLogisticsRequestTypes.transfer, diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index 2e749cb1f..928c83270 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -21,6 +21,7 @@ import { getRangeXY, randomIntRange, randomTick, + utils, } from 'utils/utils' export class Hauler extends Creep { @@ -96,7 +97,7 @@ export class Hauler extends Creep { } initRun() { - if (randomTick() && (!this.getActiveBodyparts(MOVE) || !this.getActiveBodyparts(CARRY))) { + if (utils.isTickInterval(10) && this.getActiveBodyparts(CARRY) === 0) { this.suicide() return } @@ -155,13 +156,10 @@ export class Hauler extends Creep { if (remoteMemory[RoomMemoryKeys.abandonRemote]) continue if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) continue if (remoteMemory[RoomMemoryKeys.commune] !== this.commune.name) continue - // Ensure the creep and the remote have the same opinions on roads - if (!!remoteMemory[RoomMemoryKeys.roads].length !== Memory.creeps[this.name][CreepMemoryKeys.preferRoads]) continue const sourceIndex = parseInt(splitRemoteInfo[1]) if (!this.isRemoteValid(remoteName, sourceIndex)) continue - /* this.room.visual.text((this.freeNextStore + remoteMemory[RoomMemoryKeys.remoteSourceCreditReservation][sourceIndex]).toString(), this.pos.x, this.pos.y + 0.5) */ this.assignRemote(remoteName, sourceIndex) return true } @@ -170,35 +168,44 @@ export class Hauler extends Creep { } isRemoteValid?(remoteName: string, sourceIndex: number) { - const remoteMemory = Memory.rooms[remoteName] - const commune = this.commune + const remoteMemory = Memory.rooms[remoteName] + + // Ensure the creep and the remote have the same opinions on roads + if ( + !!(remoteMemory[RoomMemoryKeys.roads][sourceIndex]) != + !!Memory.creeps[this.name][CreepMemoryKeys.preferRoads] + ) + return false - // Make sure we have enough life to get there + const commune = this.commune + // Make sure we have enough life to get there + /* const pathLength = remoteMemory[commune.communeManager.remoteResourcePathType][sourceIndex].length / packedPosLength if (pathLength >= this.ticksToLive) return false + */ + // Make sure we have enough free space to keep reservation below credit + if ( + remoteMemory[RoomMemoryKeys.remoteSourceCredit][sourceIndex] - + remoteMemory[RoomMemoryKeys.remoteSourceCreditReservation][sourceIndex] < + this.freeNextStore + ) { + return false + } - // Make sure we have enough free space to keep reservation below credit - if ( - remoteMemory[RoomMemoryKeys.remoteSourceCredit][sourceIndex] - - remoteMemory[RoomMemoryKeys.remoteSourceCreditReservation][sourceIndex] < - this.freeNextStore - ) { - return false - } - - // If we do roads but the remote doesn't - change to be a low-priority search later - if (Memory.creeps[this.name][CreepMemoryKeys.preferRoads]) { - - const roadsQuota = remoteMemory[commune.communeManager.remoteResourcePathType][sourceIndex].length / packedPosLength + // If we do roads but the remote doesn't - change to be a low-priority search later + if (Memory.creeps[this.name][CreepMemoryKeys.preferRoads]) { + const roadsQuota = + remoteMemory[commune.communeManager.remoteResourcePathType][sourceIndex].length / + packedPosLength - // See if there are roads close enough or more than the quota - if (remoteMemory[RoomMemoryKeys.roads][sourceIndex] < roadsQuota * 0.9) return false - } + // See if there are roads close enough or more than the quota + if (remoteMemory[RoomMemoryKeys.roads][sourceIndex] < roadsQuota * 0.9) return false + } - return true + return true } isCurrentRemoteValid?() { @@ -969,7 +976,7 @@ export class Hauler extends Creep { } travelToCommune?() { - if (this.room.name === this.commune.name) { + if (this.room.name === this.commune.name && !this.isOnExit) { return Result.success } diff --git a/src/room/creeps/roleManagers/remote/remoteReserver.ts b/src/room/creeps/roleManagers/remote/remoteReserver.ts index 705584fa1..253f72fd0 100644 --- a/src/room/creeps/roleManagers/remote/remoteReserver.ts +++ b/src/room/creeps/roleManagers/remote/remoteReserver.ts @@ -1,18 +1,18 @@ import { - CreepMemoryKeys, - ReservedCoordTypes, - Result, - RoomMemoryKeys, - RoomTypes, - packedPosLength, + CreepMemoryKeys, + ReservedCoordTypes, + Result, + RoomMemoryKeys, + RoomTypes, + packedPosLength, } from 'international/constants' import { getRange, randomTick } from 'utils/utils' import { - packCoord, - reversePosList, - unpackCoordAsPos, - unpackPosAt, - unpackPosList, + packCoord, + reversePosList, + unpackCoordAsPos, + unpackPosAt, + unpackPosList, } from 'other/codec' import { myCreepUtils } from 'room/creeps/myCreepUtils' @@ -229,6 +229,35 @@ export class RemoteReserver extends Creep { ) } + travelToCommune?() { + if (this.room.name === this.commune.name && !this.isOnExit) { + return Result.success + } + + const anchor = this.commune.roomManager.anchor + if (!anchor) throw Error('no anchor for hauler') + + this.createMoveRequest({ + origin: this.pos, + goals: [ + { + pos: anchor, + range: 3, + }, + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + }) + + return Result.action + } + static roleManager(room: Room, creepsOfRole: string[]) { for (const creepName of creepsOfRole) { const creep: RemoteReserver = Game.creeps[creepName] @@ -240,26 +269,7 @@ export class RemoteReserver extends Creep { creep.message = '❌ Remote' - /* - if (room.name === creep.commune.name) { - // Advanced recycle and iterate - - creep.advancedRecycle() - continue - } - - // Otherwise, have the creep make a moveRequest to its commune and iterate - - creep.createMoveRequest({ - origin: creep.pos, - goals: [ - { - pos: creep.commune.anchor, - range: 5, - }, - ], - }) - */ + creep.travelToCommune() continue } diff --git a/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts b/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts index c88fd1193..346c2b530 100644 --- a/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts +++ b/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts @@ -1,21 +1,22 @@ import { - CreepMemoryKeys, - packedPosLength, - ReservedCoordTypes, - Result, - RoomLogisticsRequestTypes, - RoomMemoryKeys, - RoomTypes, - WorkTypes, + CreepMemoryKeys, + packedPosLength, + ReservedCoordTypes, + Result, + RoomLogisticsRequestTypes, + RoomMemoryKeys, + RoomTypes, + WorkTypes, } from 'international/constants' import { - findCarryPartsRequired, - findObjectWithID, - getRangeXY, - getRange, - randomTick, - scalePriority, - areCoordsEqual, + findCarryPartsRequired, + findObjectWithID, + getRangeXY, + getRange, + randomTick, + scalePriority, + areCoordsEqual, + utils, } from 'utils/utils' import { packCoord, reversePosList, unpackPosAt } from 'other/codec' import { indexOf } from 'lodash' @@ -61,7 +62,7 @@ export class RemoteHarvester extends Creep { } initRun(): void { - if (randomTick() && this.getActiveBodyparts(MOVE) === 0) { + if (utils.isTickInterval(10) && this.getActiveBodyparts(MOVE) === 0) { this.suicide() return } @@ -69,7 +70,7 @@ export class RemoteHarvester extends Creep { const creepMemory = Memory.creeps[this.name] if (!creepMemory[CreepMemoryKeys.remote]) return - if (!this.shouldRemoveRemote()) { + if (!this.shouldKeepRemote()) { this.removeRemote() return } @@ -82,7 +83,7 @@ export class RemoteHarvester extends Creep { return } - shouldRemoveRemote?() { + shouldKeepRemote?() { const creepMemory = Memory.creeps[this.name] const remoteMemory = Memory.rooms[creepMemory[CreepMemoryKeys.remote]] @@ -457,6 +458,35 @@ export class RemoteHarvester extends Creep { return Result.action } + travelToCommune?() { + if (this.room.name === this.commune.name && !this.isOnExit) { + return Result.success + } + + const anchor = this.commune.roomManager.anchor + if (!anchor) throw Error('no anchor for hauler') + + this.createMoveRequest({ + origin: this.pos, + goals: [ + { + pos: anchor, + range: 3, + }, + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + }) + + return Result.action + } + static roleManager(room: Room, creepsOfRole: string[]) { for (const creepName of creepsOfRole) { const creep: RemoteHarvester = Game.creeps[creepName] as RemoteHarvester @@ -465,28 +495,8 @@ export class RemoteHarvester extends Creep { if (!creep.findRemote()) { creep.message = '❌ Remote' - /* - // If the room is the creep's commune - - if (room.name === creep.commune.name) { - // Advanced recycle and iterate - - creep.advancedRecycle() - continue - } - - // Otherwise, have the creep make a moveRequest to its commune and iterate - - creep.createMoveRequest({ - origin: creep.pos, - goals: [ - { - pos: creep.commune.anchor, - range: 5, - }, - ], - }) - */ + + creep.travelToCommune() continue } diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 2d18bb3f6..a8bdf043f 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -19,114 +19,114 @@ import { import { collectiveManager } from '../international/collective' import { LogTypes, customLog } from './logging' import { PlayerRelationships } from 'types/players' +import { roomNameUtils } from 'room/roomNameUtils' /** * Uses a provided ID to find an object associated with it */ export function findObjectWithID>(ID: T): fromId | undefined { - return Game.getObjectById(ID) || undefined + return Game.getObjectById(ID) || undefined } /** * Check if an x and y are valid when mapped onto a room */ export function doesXYExist(x: number, y: number) { - return x >= 0 && x < roomDimensions && y >= 0 && y < roomDimensions + return x >= 0 && x < roomDimensions && y >= 0 && y < roomDimensions } /** * Check if a coord is valid when mapped onto a room */ export function doesCoordExist(coord: Coord) { - return coord.x >= 0 && coord.x < roomDimensions && coord.y >= 0 && coord.y < roomDimensions + return coord.x >= 0 && coord.x < roomDimensions && coord.y >= 0 && coord.y < roomDimensions } /** * Takes a rectange and returns the coords inside of it in an array */ export function findCoordsInsideRect(x1: number, y1: number, x2: number, y2: number) { - const coords: Coord[] = [] + const coords: Coord[] = [] - for (let x = x1; x <= x2; x += 1) { - for (let y = y1; y <= y2; y += 1) { - // Iterate if the pos doesn't map onto a room + for (let x = x1; x <= x2; x += 1) { + for (let y = y1; y <= y2; y += 1) { + // Iterate if the pos doesn't map onto a room - if (x < 0 || x >= roomDimensions || y < 0 || y >= roomDimensions) continue + if (x < 0 || x >= roomDimensions || y < 0 || y >= roomDimensions) continue - // Otherwise pass the x and y to positions + // Otherwise pass the x and y to positions - coords.push({ x, y }) - } + coords.push({ x, y }) } + } - return coords + return coords } /** * Takes a coord and returns the coords inside of it in an array */ export function findCoordsInRangeXY(startX: number, startY: number, range: number) { - const coords: Coord[] = [] + const coords: Coord[] = [] - for (let x = startX - range; x <= startX + range; x += 1) { - for (let y = startY - range; y <= startY + range; y += 1) { - // Iterate if the pos doesn't map onto a room + for (let x = startX - range; x <= startX + range; x += 1) { + for (let y = startY - range; y <= startY + range; y += 1) { + // Iterate if the pos doesn't map onto a room - if (startX < 0 || startX >= roomDimensions || startY < 0 || startY >= roomDimensions) - continue + if (startX < 0 || startX >= roomDimensions || startY < 0 || startY >= roomDimensions) continue - // Otherwise pass the x and y to positions + // Otherwise pass the x and y to positions - coords.push({ x, y }) - } + coords.push({ x, y }) } + } - return coords + return coords } /** * Takes a coord and returns the positions inside of it in an array */ export function findCoordsInRange(coord: Coord, range: number) { - return findCoordsInRangeXY(coord.x, coord.y, range) + return findCoordsInRangeXY(coord.x, coord.y, range) } export function findAdjacentCoordsToXY(x: number, y: number) { - const positions: Coord[] = [] + const positions: Coord[] = [] - for (let i = x - 1; i <= x + 1; i += 1) { - for (let j = y - 1; j <= y + 1; j += 1) { - // Iterate if the pos doesn't map onto a room + for (let i = x - 1; i <= x + 1; i += 1) { + for (let j = y - 1; j <= y + 1; j += 1) { + // Iterate if the pos doesn't map onto a room - if (i < 0 || i >= roomDimensions || j < 0 || j >= roomDimensions) continue + if (i < 0 || i >= roomDimensions || j < 0 || j >= roomDimensions) continue - if (x === i && y === j) continue + if (x === i && y === j) continue - // Otherwise pass the x and y to positions + // Otherwise pass the x and y to positions - positions.push({ x: i, y: j }) - } + positions.push({ x: i, y: j }) } + } - return positions + return positions } export function findAdjacentCoordsToCoord(coord: Coord) { - return findAdjacentCoordsToXY(coord.x, coord.y) + return findAdjacentCoordsToXY(coord.x, coord.y) } /** * Checks if two coords are equal */ export function areCoordsEqual(coord1: Coord, coord2: Coord) { - return coord1.x === coord2.x && coord1.y === coord2.y + return coord1.x === coord2.x && coord1.y === coord2.y } /** * Checks if two positions are equal */ export function arePositionsEqual(pos1: RoomPosition, pos2: RoomPosition) { - return pos1.roomName === pos2.roomName && pos1.x === pos2.x && pos1.y === pos2.y + return pos1.roomName === pos2.roomName && pos1.x === pos2.x && pos1.y === pos2.y } /** @@ -134,7 +134,7 @@ export function arePositionsEqual(pos1: RoomPosition, pos2: RoomPosition) { * @returns an incremented ID */ export function newID() { - return (Memory.ID += 1).toString() + return (Memory.ID += 1).toString() } /** @@ -143,350 +143,343 @@ export function newID() { * @param income The number of resources added to the pile each tick */ export function findCarryPartsRequired(distance: number, income: number) { - return Math.ceil((distance * 2 * income) / CARRY_CAPACITY) + return Math.ceil((distance * 2 * income) / CARRY_CAPACITY) } export function findLinkThroughput(range: number, income: number = LINK_CAPACITY) { - return Math.min(LINK_CAPACITY / range, income) * (1 - LINK_LOSS_RATIO) + return Math.min(LINK_CAPACITY / range, income) * (1 - LINK_LOSS_RATIO) } /** * Finds a position equally between two positions */ export function findAvgBetweenCoords(pos1: Coord, pos2: Coord) { - // Inform the rounded average of the two positions + // Inform the rounded average of the two positions - return { - x: Math.floor((pos1.x + pos2.x) / 2), - y: Math.floor((pos1.y + pos2.y) / 2), - } + return { + x: Math.floor((pos1.x + pos2.x) / 2), + y: Math.floor((pos1.y + pos2.y) / 2), + } } /** * Gets the range between two positions' x and y (Half Manhattan) - * @param x1 the first position's x - * @param y1 the first position's y - * @param x2 the second position's x - * @param y2 the second position's y */ export function getRangeXY(x1: number, x2: number, y1: number, y2: number) { - // Find the range using Chebyshev's formula + // Find the range using Chebyshev's formula - return Math.max(Math.abs(x2 - x1), Math.abs(y2 - y1)) + return Math.max(Math.abs(x2 - x1), Math.abs(y2 - y1)) } export function getRange(coord1: Coord, coord2: Coord) { - return getRangeXY(coord1.x, coord2.x, coord1.y, coord2.y) + return getRangeXY(coord1.x, coord2.x, coord1.y, coord2.y) } /** * Finds the closest object with a position to a given target, by range (Half Manhattan) */ export function findClosestObject( - target: RoomPosition | Coord, - objects: T[], + target: RoomPosition | Coord, + objects: T[], ) { - let minRange = Infinity - let closest = undefined + let minRange = Infinity + let closest = undefined - for (const object of objects) { - const range = getRangeXY(target.x, object.pos.x, target.y, object.pos.y) + for (const object of objects) { + const range = getRangeXY(target.x, object.pos.x, target.y, object.pos.y) - if (range > minRange) continue + if (range > minRange) continue - minRange = range - closest = object - } + minRange = range + closest = object + } - return closest + return closest } /** * Finds the closest object with a position to a given target, by range, in a specified range (Half Manhattan) */ export function findClosestObjectInRange( - target: RoomPosition | Coord, - objects: T[], - range: number, + target: RoomPosition | Coord, + objects: T[], + range: number, ) { - let minRange = Infinity - let closest = undefined + let minRange = Infinity + let closest = undefined - for (const object of objects) { - const range = getRangeXY(target.x, object.pos.x, target.y, object.pos.y) + for (const object of objects) { + const range = getRangeXY(target.x, object.pos.x, target.y, object.pos.y) - if (range > minRange) continue + if (range > minRange) continue - minRange = range - closest = object - } + minRange = range + closest = object + } - // Inform the closest object, if within range + // Inform the closest object, if within range - if (minRange <= range) return closest - return false + if (minRange <= range) return closest + return false } /** * Finds the closest position to a given target (Half Manhattan) */ export function findClosestCoord( - target: RoomPosition | Coord, - positions: Coord[], + target: RoomPosition | Coord, + positions: Coord[], ): [Coord, number] { - let minRange = Infinity - let closestI = 0 + let minRange = Infinity + let closestI = 0 - for (let i = 0; i < positions.length; i++) { - const pos = positions[i] - const range = getRangeXY(target.x, pos.x, target.y, pos.y) + for (let i = 0; i < positions.length; i++) { + const pos = positions[i] + const range = getRangeXY(target.x, pos.x, target.y, pos.y) - if (range > minRange) continue + if (range > minRange) continue - minRange = range - closestI = i - } + minRange = range + closestI = i + } - return [positions[closestI], closestI] + return [positions[closestI], closestI] } /** * Finds the closest position to a given target (Half Manhattan) */ export function findClosestPos(target: RoomPosition | Coord, positions: RoomPosition[]) { - let minRange = Infinity - let closest = undefined + let minRange = Infinity + let closest = undefined - for (const pos of positions) { - const range = getRangeXY(target.x, pos.x, target.y, pos.y) + for (const pos of positions) { + const range = getRangeXY(target.x, pos.x, target.y, pos.y) - if (range > minRange) continue + if (range > minRange) continue - minRange = range - closest = pos - } + minRange = range + closest = pos + } - return closest + return closest } /** * Gets the range between two positions' x and y (Euclidean) */ export function getRangeEucXY(x1: number, x2: number, y1: number, y2: number) { - // Find the range using Chebyshev's formula + // Find the range using Chebyshev's formula - return Math.round(Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)) * 10) / 10 + return Math.round(Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)) * 10) / 10 } export function getRangeEuc(coord1: Coord, coord2: Coord) { - return getRangeEucXY(coord1.x, coord2.x, coord1.y, coord2.y) + return getRangeEucXY(coord1.x, coord2.x, coord1.y, coord2.y) } /** * Finds the closest object with a position to a given target (Euclidean) */ export function findClosestObjectEuc( - target: RoomPosition | Coord, - objects: T[], + target: RoomPosition | Coord, + objects: T[], ) { - let minRange = Infinity - let closest = undefined + let minRange = Infinity + let closest = undefined - for (const object of objects) { - const range = getRangeEucXY(target.x, object.pos.x, target.y, object.pos.y) + for (const object of objects) { + const range = getRangeEucXY(target.x, object.pos.x, target.y, object.pos.y) - if (range >= minRange) continue + if (range >= minRange) continue - minRange = range - closest = object - } + minRange = range + closest = object + } - return closest + return closest } /** * Finds the closest object with a position to a given target (Euclidean) */ export function findFurthestObjectEuc( - target: RoomPosition | Coord, - objects: T[], + target: RoomPosition | Coord, + objects: T[], ) { - let maxRange = Infinity - let furthest = undefined + let maxRange = Infinity + let furthest = undefined - for (const object of objects) { - const range = getRangeEucXY(target.x, object.pos.x, target.y, object.pos.y) + for (const object of objects) { + const range = getRangeEucXY(target.x, object.pos.x, target.y, object.pos.y) - if (range <= maxRange) continue + if (range <= maxRange) continue - maxRange = range - furthest = object - } + maxRange = range + furthest = object + } - return furthest + return furthest } /** * Finds the closest position to a given target (Euclidean) */ export function findClosestPosEuc( - target: RoomPosition | Coord, - positions: T[], + target: RoomPosition | Coord, + positions: T[], ) { - let minRange = Infinity - let closest = undefined + let minRange = Infinity + let closest = undefined - for (const pos of positions) { - const range = getRangeEucXY(target.x, pos.x, target.y, pos.y) + for (const pos of positions) { + const range = getRangeEucXY(target.x, pos.x, target.y, pos.y) - if (range >= minRange) continue + if (range >= minRange) continue - minRange = range - closest = pos - } + minRange = range + closest = pos + } - return closest + return closest } export function findCPUColor(): string { - const CPU = Game.cpu.getUsed() + const CPU = Game.cpu.getUsed() - // Inform color based on percent of cpu used of limit + // Inform color based on percent of cpu used of limit - if (CPU > Game.cpu.limit * 0.6) return customColors.green - if (CPU > Game.cpu.limit * 0.9) return customColors.green - return customColors.green + if (CPU > Game.cpu.limit * 0.6) return customColors.green + if (CPU > Game.cpu.limit * 0.9) return customColors.green + return customColors.green } export function createPosMap(innerArray?: boolean, initialValue?: string | number) { - // Construct the position map + // Construct the position map - const packedPosMap: PosMap = [] + const packedPosMap: PosMap = [] - // Loop through each x and y in the room + // Loop through each x and y in the room - for (let x = 0; x < roomDimensions; x += 1) { - for (let y = 0; y < roomDimensions; y += 1) { - // Add an element for this pos + for (let x = 0; x < roomDimensions; x += 1) { + for (let y = 0; y < roomDimensions; y += 1) { + // Add an element for this pos - packedPosMap.push(innerArray ? [] : initialValue) - } + packedPosMap.push(innerArray ? [] : initialValue) } + } - // Inform the position map + // Inform the position map - return packedPosMap + return packedPosMap } export function packAsNum(pos: Coord) { - // Inform a packed pos + // Inform a packed pos - return pos.x * roomDimensions + pos.y + return pos.x * roomDimensions + pos.y } export function packXYAsNum(x: number, y: number) { - // Inform a packed pos + // Inform a packed pos - return x * roomDimensions + y + return x * roomDimensions + y } export function unpackNumAsCoord(packedCoord: number) { - // Inform an unpacked pos + // Inform an unpacked pos - return { - x: Math.floor(packedCoord / roomDimensions), - y: Math.floor(packedCoord % roomDimensions), - } + return { + x: Math.floor(packedCoord / roomDimensions), + y: Math.floor(packedCoord % roomDimensions), + } } export function unpackNumAsPos(packedPos: number, roomName: string) { - // Inform an unpacked RoomPosition + // Inform an unpacked RoomPosition - return new RoomPosition( - Math.floor(packedPos / roomDimensions), - Math.floor(packedPos % roomDimensions), - roomName, - ) + return new RoomPosition( + Math.floor(packedPos / roomDimensions), + Math.floor(packedPos % roomDimensions), + roomName, + ) } export function findCreepInQueueMatchingRequest(queue: string[], requestPackedPos: number) { - // Loop through each creepName of the queue + // Loop through each creepName of the queue - for (const creepName of queue) { - // Get the creep using the creepName + for (const creepName of queue) { + // Get the creep using the creepName - const queuedCreep = Game.creeps[creepName] + const queuedCreep = Game.creeps[creepName] - // If the queuedCreep's pos is equal to the moveRequest, inform the creep + // If the queuedCreep's pos is equal to the moveRequest, inform the creep - if (packAsNum(queuedCreep.pos) === requestPackedPos) return queuedCreep - } + if (packAsNum(queuedCreep.pos) === requestPackedPos) return queuedCreep + } - return undefined + return undefined } export function findClosestRoomName(start: string, targets: Iterable) { - let minRange = Infinity - let closest = undefined + let minRange = Infinity + let closest = undefined - for (const target of targets) { - const range = Game.map.getRoomLinearDistance(start, target) + for (const target of targets) { + const range = Game.map.getRoomLinearDistance(start, target) - if (range > minRange) continue + if (range > minRange) continue - minRange = range - closest = target - } + minRange = range + closest = target + } - return closest + return closest } /** * Generatesa a random integer between two thresholds */ export function randomIntRange(min: number, max: number) { - return Math.floor(Math.random() * (max - min) + min) + return Math.floor(Math.random() * (max - min) + min) } export function findCPUOf(func: Function) { - const CPU = Game.cpu.getUsed() + const CPU = Game.cpu.getUsed() - func() + func() - customLog('CPU for ' + func.name, Game.cpu.getUsed() - CPU) + customLog('CPU for ' + func.name, Game.cpu.getUsed() - CPU) } export function isXYExit(x: number, y: number) { - return x <= 0 || x >= roomDimensions - 1 || y <= 0 || y >= roomDimensions - 1 + return x <= 0 || x >= roomDimensions - 1 || y <= 0 || y >= roomDimensions - 1 } export function isExit(coord: Coord) { - return ( - coord.x <= 0 || - coord.x >= roomDimensions - 1 || - coord.y <= 0 || - coord.y >= roomDimensions - 1 - ) + return ( + coord.x <= 0 || coord.x >= roomDimensions - 1 || coord.y <= 0 || coord.y >= roomDimensions - 1 + ) } export function randomTick(max: number = 20) { - return Game.time % Math.floor(Math.random() * max) === 0 + return Game.time % Math.floor(Math.random() * max) === 0 } export function randomChance(number: number = 10) { - return Math.floor(Math.random() * number) === number + return Math.floor(Math.random() * number) === number } export function randomRange(min: number, max: number) { - return Math.floor(Math.random() * (max - min) + min) + return Math.floor(Math.random() * (max - min) + min) } export function isNearRoomEdge(coord: Coord, minRange: number) { - if (coord.x <= minRange) return true - if (coord.x - roomDimensions - 1 <= minRange) return true - if (coord.y <= minRange) return true - if (coord.y - roomDimensions - 1 <= minRange) return true - return false + if (coord.x <= minRange) return true + if (coord.x - roomDimensions - 1 <= minRange) return true + if (coord.y <= minRange) return true + if (coord.y - roomDimensions - 1 <= minRange) return true + return false } /** @@ -494,59 +487,57 @@ export function isNearRoomEdge(coord: Coord, minRange: number) { * @param reverse Decreases priority as a percentage of capacity used */ export function scalePriority( - capacity: number, - amount: number, - multiplier: number = 1, - reverse?: boolean, + capacity: number, + amount: number, + multiplier: number = 1, + reverse?: boolean, ) { - if (reverse) { - return (1 - amount / capacity) * multiplier - } + if (reverse) { + return (1 - amount / capacity) * multiplier + } - return (amount / capacity) * multiplier + return (amount / capacity) * multiplier } export function forRoomNamesInRangeXY( - startX: number, - startY: number, - range: number, - f: (x: number, y: number) => void, + startX: number, + startY: number, + range: number, + f: (x: number, y: number) => void, ) { - for (let x = startX - range; x <= startX + range; x += 1) { - for (let y = startY - range; y <= startY + range; y += 1) { - if (startX === x && startY === y) continue - f(x, y) - } + for (let x = startX - range; x <= startX + range; x += 1) { + for (let y = startY - range; y <= startY + range; y += 1) { + if (startX === x && startY === y) continue + f(x, y) } + } } export function forRoomNamesAroundRangeXY( - startX: number, - startY: number, - range: number, - f: (x: number, y: number) => void, + startX: number, + startY: number, + range: number, + f: (x: number, y: number) => void, ) { - for (let x = startX - range; x <= startX + range; x += 1) { - for (let y = startY - range; y <= startY + range; y += 1) { - if (startX === x && startY === y) continue + for (let x = startX - range; x <= startX + range; x += 1) { + for (let y = startY - range; y <= startY + range; y += 1) { + if (startX === x && startY === y) continue - f(x, y) - } + f(x, y) } + } } export function isXYInRoom(x: number, y: number) { - return x >= 0 && x < roomDimensions && y >= 0 && y < roomDimensions + return x >= 0 && x < roomDimensions && y >= 0 && y < roomDimensions } export function isXYInBorder(x: number, y: number, inset: number) { - return ( - x > inset && x < roomDimensions - 1 - inset && y > inset && y < roomDimensions - 1 - inset - ) + return x > inset && x < roomDimensions - 1 - inset && y > inset && y < roomDimensions - 1 - inset } export function roundTo(num: number, decimals: number) { - return parseFloat(num.toFixed(decimals)) + return parseFloat(num.toFixed(decimals)) } /** @@ -557,154 +548,162 @@ export function roundTo(num: number, decimals: number) { * @return {mixed} Whatever the original fuction returns. */ export function tryErrorMapped(callback: () => T): T { - try { - return callback() - } catch (error: any) { - let stackTrace = error.stack - if (error instanceof Error) { - stackTrace = _.escape(ErrorMapper.sourceMappedStackTrace(error)) - } - - console.log('' + error.name + stackTrace + '') + try { + return callback() + } catch (error: any) { + let stackTrace = error.stack + if (error instanceof Error) { + stackTrace = _.escape(ErrorMapper.sourceMappedStackTrace(error)) } - return undefined + console.log('' + error.name + stackTrace + '') + } + + return undefined } export function forAdjacentCoords(startCoord: Coord, f: (near: Coord) => Result.stop | void) { - for (let x = startCoord.x - 1; x <= startCoord.x + 1; x += 1) { - for (let y = startCoord.y - 1; y <= startCoord.y + 1; y += 1) { - if (x == startCoord.x && y === startCoord.y) continue - if (isXYExit(x, y)) continue + for (let x = startCoord.x - 1; x <= startCoord.x + 1; x += 1) { + for (let y = startCoord.y - 1; y <= startCoord.y + 1; y += 1) { + if (x == startCoord.x && y === startCoord.y) continue + if (isXYExit(x, y)) continue - if (f({ x, y }) === Result.stop) return - } + if (f({ x, y }) === Result.stop) return } + } } /** * Excludes center around range */ -export function forCoordsAroundRange(startCoord: Coord, range: number, f: (coord: Coord) => Result.stop | void) { - for (let x = startCoord.x - range; x <= startCoord.x + range; x += 1) { - for (let y = startCoord.y - range; y <= startCoord.y + range; y += 1) { - if (x == startCoord.x && y === startCoord.y) continue - // Iterate if the pos doesn't map onto a room +export function forCoordsAroundRange( + startCoord: Coord, + range: number, + f: (coord: Coord) => Result.stop | void, +) { + for (let x = startCoord.x - range; x <= startCoord.x + range; x += 1) { + for (let y = startCoord.y - range; y <= startCoord.y + range; y += 1) { + if (x == startCoord.x && y === startCoord.y) continue + // Iterate if the pos doesn't map onto a room - if (x < 0 || x >= roomDimensions || y < 0 || y >= roomDimensions) continue + if (x < 0 || x >= roomDimensions || y < 0 || y >= roomDimensions) continue - if (f({ x, y }) === Result.stop) return - } + if (f({ x, y }) === Result.stop) return } + } } /** * includes center around range */ -export function forCoordsInRange(startCoord: Coord, range: number, f: (coord: Coord) => Result.stop | void) { - for (let x = startCoord.x - range; x <= startCoord.x + range; x += 1) { - for (let y = startCoord.y - range; y <= startCoord.y + range; y += 1) { - // Iterate if the pos doesn't map onto a room +export function forCoordsInRange( + startCoord: Coord, + range: number, + f: (coord: Coord) => Result.stop | void, +) { + for (let x = startCoord.x - range; x <= startCoord.x + range; x += 1) { + for (let y = startCoord.y - range; y <= startCoord.y + range; y += 1) { + // Iterate if the pos doesn't map onto a room - if (x < 0 || x >= roomDimensions || y < 0 || y >= roomDimensions) continue + if (x < 0 || x >= roomDimensions || y < 0 || y >= roomDimensions) continue - if (f({ x, y }) === Result.stop) return - } + if (f({ x, y }) === Result.stop) return } + } } export function randomVal(array: any[]) { - return array[randomIntRange(0, array.length)] + return array[randomIntRange(0, array.length)] } export function findRangeFromExit(coord: Coord) { - const dx = Math.min(coord.x, roomDimensions - 1 - coord.x) - const dy = Math.min(coord.y, roomDimensions - 1 - coord.y) - return Math.min(dx, dy) + const dx = Math.min(coord.x, roomDimensions - 1 - coord.x) + const dy = Math.min(coord.y, roomDimensions - 1 - coord.y) + return Math.min(dx, dy) } /** * Finds the weighted range of a coord from an exit, where the weight effects values */ export function findWeightedRangeFromExit(coord: Coord, weight: number) { - const dx = Math.min(coord.x, roomDimensions - 1 - coord.x) - const dy = Math.min(coord.y, roomDimensions - 1 - coord.y) - const weightedRange = Math.pow(Math.min(dx, dy), weight) + const dx = Math.min(coord.x, roomDimensions - 1 - coord.x) + const dy = Math.min(coord.y, roomDimensions - 1 - coord.y) + const weightedRange = Math.pow(Math.min(dx, dy), weight) - return roundTo(weightedRange, 2) + return roundTo(weightedRange, 2) } /** * @example splitAt('foo, 1), // ["f", "oo"] */ export function splitStringAt(string: string, index: number) { - return [string.slice(0, index), string.slice(index)] + return [string.slice(0, index), string.slice(index)] } export function findHighestScore(iter: T[], f: (val: T) => number | false): number { - let highestScore = 0 + let highestScore = 0 - for (const val of iter) { - const score = f(val) - if (score === false) continue - if (score <= highestScore) continue + for (const val of iter) { + const score = f(val) + if (score === false) continue + if (score <= highestScore) continue - highestScore = score - } + highestScore = score + } - return highestScore + return highestScore } export function findWithHighestScore( - iter: T[], - f: (val: T) => number | false, + iter: T[], + f: (val: T) => number | false, ): [number, T | undefined] { - let highestScore = 0 - let bestVal: T | undefined + let highestScore = 0 + let bestVal: T | undefined - for (const val of iter) { - const score = f(val) - if (score === false) continue - if (score <= highestScore) continue + for (const val of iter) { + const score = f(val) + if (score === false) continue + if (score <= highestScore) continue - highestScore = score - bestVal = val - } + highestScore = score + bestVal = val + } - return [highestScore, bestVal] + return [highestScore, bestVal] } export function findLowestScore(iter: T[], f: (val: T) => number | false): number { - let lowestScore = Infinity + let lowestScore = Infinity - for (const val of iter) { - const score = f(val) - if (score === false) continue - if (score >= lowestScore) continue + for (const val of iter) { + const score = f(val) + if (score === false) continue + if (score >= lowestScore) continue - lowestScore = score - } + lowestScore = score + } - return lowestScore + return lowestScore } export function findWithLowestScore( - iter: T[], - f: (val: T) => number | false, + iter: T[], + f: (val: T) => number | false, ): [number, T | undefined] { - let lowestScore = Infinity - let bestVal: T | undefined + let lowestScore = Infinity + let bestVal: T | undefined - for (const val of iter) { - const score = f(val) - if (score === false) continue - if (score >= lowestScore) continue + for (const val of iter) { + const score = f(val) + if (score === false) continue + if (score >= lowestScore) continue - lowestScore = score - bestVal = val - } + lowestScore = score + bestVal = val + } - return [lowestScore, bestVal] + return [lowestScore, bestVal] } /** @@ -712,107 +711,140 @@ export function findWithLowestScore( * Like `array.sort((a, b) => score(a)-score(b))` but with cache */ export function sortBy(array: T[], score: (t: T) => number, reversed?: true): T[] { - const reverseSign = reversed ? -1 : 1 - const cache = new Map(array.map(t => [t, score(t) * reverseSign])) - return array.sort((a, b) => cache.get(a) - cache.get(b)) + const reverseSign = reversed ? -1 : 1 + const cache = new Map(array.map(t => [t, score(t) * reverseSign])) + return array.sort((a, b) => cache.get(a) - cache.get(b)) } export function randomOf(array: T[]): T { - return array[Math.floor(Math.random() * array.length)] + return array[Math.floor(Math.random() * array.length)] } export function visualizePath( - path: RoomPosition[], - color: string = customColors.yellow, - visualize: boolean = global.settings.roomVisuals, + path: RoomPosition[], + color: string = customColors.yellow, + visualize: boolean = global.settings.roomVisuals, ) { - if (!visualize) return - - for (let i = 0; i < path.length; i++) { - const nextPos = path[i + 1] - if (!nextPos) break - const pos = path[i] - if (nextPos.roomName !== pos.roomName) continue - - new RoomVisual(pos.roomName).line(pos, nextPos, { - color, - opacity: 0.2, - }) - } + if (!visualize) return + + for (let i = 0; i < path.length; i++) { + const nextPos = path[i + 1] + if (!nextPos) break + const pos = path[i] + if (nextPos.roomName !== pos.roomName) continue + + new RoomVisual(pos.roomName).line(pos, nextPos, { + color, + opacity: 0.2, + }) + } } /** * Efficiently checks if a given player name matches one of our allies */ export function isAlly(playerName: string) { + const playerMemory = Memory.players[playerName] + // If PlayerMemory does not exist they are not an ally, as ally memory is always present + if (!playerMemory) return false - const playerMemory = Memory.players[playerName] - // If PlayerMemory does not exist they are not an ally, as ally memory is always present - if (!playerMemory) return false - - // Wether or not they are recorded as an ally - return playerMemory[PlayerMemoryKeys.relationship] === PlayerRelationships.ally + // Wether or not they are recorded as an ally + return playerMemory[PlayerMemoryKeys.relationship] === PlayerRelationships.ally } export function outOfBucket() { - - collectiveManager.logs = '' - customLog('Skipping tick due to low bucket, bucket remaining', Game.cpu.bucket, { - type: LogTypes.warning, - }) - console.log( - global.settings.logging - ? collectiveManager.logs - : `Skipping tick due to low bucket, bucket remaining ${Game.cpu.bucket}`, - ) + collectiveManager.logs = '' + customLog('Skipping tick due to low bucket, bucket remaining', Game.cpu.bucket, { + type: LogTypes.warning, + }) + console.log( + global.settings.logging + ? collectiveManager.logs + : `Skipping tick due to low bucket, bucket remaining ${Game.cpu.bucket}`, + ) } /** * Finds your username */ export function getMe() { - if (Memory.me) return Memory.me + if (Memory.me) return Memory.me - for (const roomName in Game.rooms) { - const room = Game.rooms[roomName] - if (!room.controller) continue - if (!room.controller.my) continue + for (const roomName in Game.rooms) { + const room = Game.rooms[roomName] + if (!room.controller) continue + if (!room.controller.my) continue - return room.controller.owner.username - } + return room.controller.owner.username + } - throw Error('Could not find me') + throw Error('Could not find me') } export class Utils { - isTickInterval(interval: number) { + isTickInterval(interval: number) { + return Game.time % interval === 0 + } + /** + * + * @returns [score, index] + */ + findIndexWithLowestScore(iter: T[], f: (val: T) => number | false): [number, number] { + let lowestScore = Infinity + let bestIndex: number + + for (let i = 0; i < iter.length; i++) { + const val = iter[i] + + const score = f(val) + if (score === false) continue + if (score >= lowestScore) continue - return (Game.time % interval === 0) + lowestScore = score + bestIndex = i } - /** - * - * @returns [score, index] - */ - findIndexWithLowestScore( - iter: T[], - f: (val: T) => number | false, - ): [number, number] { - let lowestScore = Infinity - let bestIndex: number - - for (let i = 0; i < iter.length; i++) { - const val = iter[i] - - const score = f(val) - if (score === false) continue - if (score >= lowestScore) continue - - lowestScore = score - bestIndex = i - } - - return [lowestScore, bestIndex] + + return [lowestScore, bestIndex] + } + + getInterRangeXY( + x1: number, + y1: number, + roomName1: string, + x2: number, + y2: number, + roomName2: string, + ) { + if (roomName1 === roomName2) { + return getRangeXY(x1, x2, y1, y2) } + + const roomCoord1 = roomNameUtils.pack(roomName1) + const roomCoord2 = roomNameUtils.pack(roomName2) + + const worldCoord1 = { + x: + roomCoord1.x < 0 ? roomCoord1.x * roomDimensions + x1 : roomCoord1.x * roomDimensions + ~x1, + y: + roomCoord1.y < 0 ? roomCoord1.y * roomDimensions + y1 : roomCoord1.y * roomDimensions + ~y1, + } + const worldCoord2 = { + x: + roomCoord2.x < 0 ? roomCoord2.x * roomDimensions + x2 : roomCoord2.x * roomDimensions + ~x2, + y: + roomCoord2.y < 0 ? roomCoord2.y * roomDimensions + y2 : roomCoord2.y * roomDimensions + ~y2, + } + + const range = Math.max( + Math.abs(worldCoord2.x - worldCoord1.x), + Math.abs(worldCoord2.y - worldCoord1.y), + ) + return range + } + + getInterRange(coord1: Coord, roomName1: string, coord2: Coord, roomName2: string) { + return this.getInterRangeXY(coord1.x, coord1.y, roomName1, coord2.x, coord2.y, roomName2) + } } export const utils = new Utils() From 59e53eed5af33312acd24fcc9d2e40c2299dd3f7 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 2 Jan 2024 21:46:23 -0800 Subject: [PATCH 055/190] (migration) dynamic score fix --- src/international/commands.ts | 9 ++- src/international/flags.ts | 2 +- src/international/migration.ts | 60 ++++++++++--------- src/international/requests.ts | 7 ++- src/room/commune/commune.ts | 11 +++- src/room/commune/terminal/terminal.ts | 5 +- .../roleManagers/antifa/dynamicSquad.ts | 30 ++++++++++ src/room/roomFunctions.ts | 4 ++ src/room/roomNameUtils.ts | 5 +- src/settingsDefault.ts | 2 +- 10 files changed, 97 insertions(+), 38 deletions(-) diff --git a/src/international/commands.ts b/src/international/commands.ts index 443fdf7c7..36b87edea 100644 --- a/src/international/commands.ts +++ b/src/international/commands.ts @@ -1,3 +1,4 @@ +import { roomNameUtils } from 'room/roomNameUtils' import { collectiveManager } from './collective' import { allStructureTypes, WorkRequestKeys, CombatRequestKeys, RoomMemoryKeys, RoomTypes } from './constants' @@ -153,7 +154,7 @@ global.destroyCommuneStructures = function (types?) { return log + ` ${types ? `with the types ${types}` : ''}` } -global.claim = function (requestName, communeName, priority = 0) { +global.claim = function (requestName, communeName, priority = 0, override?: boolean) { if (!Memory.rooms[requestName]) return 'No roomMemory for ' + requestName if (Memory.rooms[requestName][RoomMemoryKeys.communePlanned] !== true) return 'Planning not completed for ' + requestName @@ -182,6 +183,12 @@ global.claim = function (requestName, communeName, priority = 0) { request[WorkRequestKeys.responder] = communeName } + if (override) { + + Memory.rooms[requestName][RoomMemoryKeys.type] = RoomTypes.neutral + roomNameUtils.cleanMemory(requestName) + } + return `${ communeName ? `${communeName} is responding to the` : `created` } workRequest for ${requestName}` diff --git a/src/international/flags.ts b/src/international/flags.ts index 746eb5dd1..37b3a3cf1 100644 --- a/src/international/flags.ts +++ b/src/international/flags.ts @@ -642,7 +642,7 @@ export class FlagManager { }) } - private workRequestsByScore(flagName: string, flagNameParts: string[]) { + private workRequestVisuals(flagName: string, flagNameParts: string[]) { const flag = Game.flags[flagName] const roomName = flagNameParts[1] || flag.pos.roomName const room = Game.rooms[roomName] diff --git a/src/international/migration.ts b/src/international/migration.ts index 2c1e19314..8b64009e5 100644 --- a/src/international/migration.ts +++ b/src/international/migration.ts @@ -1,41 +1,45 @@ +import { roomNameUtils } from 'room/roomNameUtils' import { RoomMemoryKeys, RoomTypes } from './constants' /** * Migrate version by performing actions, if required */ export class MigrationManager { - public run() { - if (Memory.breakingVersion === global.settings.breakingVersion) return + public run() { + if (Memory.breakingVersion === global.settings.breakingVersion) return - if (Memory.breakingVersion === 89) { - global.killCreeps() - Memory.breakingVersion += 1 - } - if (Memory.breakingVersion === 92) { - global.killCreeps() - Memory.breakingVersion += 1 - } - if (Memory.breakingVersion === 95) { - Memory.haulRequests = {} - Memory.nukeRequests = {} - Memory.breakingVersion += 1 - } - if (Memory.breakingVersion === 118) { - Memory.players = {} - Memory.breakingVersion += 2 - } - if (Memory.breakingVersion === 120) { + if (Memory.breakingVersion === 89) { + global.killCreeps() + Memory.breakingVersion += 1 + } + if (Memory.breakingVersion === 92) { + global.killCreeps() + Memory.breakingVersion += 1 + } + if (Memory.breakingVersion === 95) { + Memory.haulRequests = {} + Memory.nukeRequests = {} + Memory.breakingVersion += 1 + } + if (Memory.breakingVersion === 118) { + Memory.players = {} + Memory.breakingVersion += 2 + } + if (Memory.breakingVersion === 120) { + global.killCreeps() + Memory.breakingVersion += 1 + } + if (Memory.breakingVersion === 121) { - global.killCreeps() - Memory.breakingVersion += 1 - } + Memory.breakingVersion += 1 + } - if (Memory.breakingVersion < global.settings.breakingVersion) { - global.killCreeps() - global.clearMemory() - global.removeCSites() - } + if (Memory.breakingVersion < global.settings.breakingVersion) { + global.killCreeps() + global.clearMemory() + global.removeCSites() } + } } export const migrationManager = new MigrationManager() diff --git a/src/international/requests.ts b/src/international/requests.ts index 0e9b052d0..fc8686b10 100644 --- a/src/international/requests.ts +++ b/src/international/requests.ts @@ -1,4 +1,4 @@ -import { findClosestRoomName, randomIntRange, randomRange } from 'utils/utils' +import { findClosestRoomName, randomIntRange, randomRange, utils } from 'utils/utils' import { collectiveManager } from './collective' import { roomNameUtils } from 'room/roomNameUtils' import { @@ -14,6 +14,9 @@ import { } from './constants' import { indexOf } from 'lodash' import { Sleepable } from 'utils/sleepable' +import { util } from 'chai' + +const runRequestInverval = randomIntRange(100, 200) // Should adsorb the request content of tickInit export class RequestsManager extends Sleepable { @@ -26,7 +29,7 @@ export class RequestsManager extends Sleepable { this.updateCombatRequests() this.updateHaulRequests() - if (this.isSleepingResponsive()) return + if (utils.isTickInterval(runRequestInverval)) return this.runWorkRequests() this.runCombatRequests() diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index 24a9849c9..e86fd61b4 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -1108,8 +1108,15 @@ export class CommuneManager { resourceTargets.min[RESOURCE_ZYNTHIUM] = storingStructuresCapacity * 0.01 resourceTargets.max[RESOURCE_ZYNTHIUM] = storingStructuresCapacity * 0.027 - resourceTargets.min[RESOURCE_CATALYST] = storingStructuresCapacity * 0.01 - resourceTargets.max[RESOURCE_CATALYST] = storingStructuresCapacity * 0.027 + if (Game.shard.name === 'swc') { + + resourceTargets.min[RESOURCE_CATALYST] = storingStructuresCapacity * 0 + resourceTargets.max[RESOURCE_CATALYST] = storingStructuresCapacity * 0.01 + } + else { + resourceTargets.min[RESOURCE_CATALYST] = storingStructuresCapacity * 0.01 + resourceTargets.max[RESOURCE_CATALYST] = storingStructuresCapacity * 0.027 + } // Boosts diff --git a/src/room/commune/terminal/terminal.ts b/src/room/commune/terminal/terminal.ts index a85c77446..7e2f1a4d9 100644 --- a/src/room/commune/terminal/terminal.ts +++ b/src/room/commune/terminal/terminal.ts @@ -53,6 +53,8 @@ export class TerminalManager { private createTerminalRequests(room: Room, resourceTargets: ResourceTargets) { + const resourcesInStoringStructures = + this.communeManager.room.roomManager.resourcesInStoringStructures for (const key in resourceTargets.min) { const resourceType = key as ResourceConstant let targetAmount = resourceTargets.min[resourceType] @@ -60,8 +62,7 @@ export class TerminalManager { // We have enough - const storedResourceAmount = - this.communeManager.room.roomManager.resourcesInStoringStructures[resourceType] || 0 + const storedResourceAmount = resourcesInStoringStructures[resourceType] || 0 if (storedResourceAmount >= targetAmount) continue targetAmount = Math.floor(targetAmount * 1.1) diff --git a/src/room/creeps/roleManagers/antifa/dynamicSquad.ts b/src/room/creeps/roleManagers/antifa/dynamicSquad.ts index 03de6ff8e..01b7a89e2 100644 --- a/src/room/creeps/roleManagers/antifa/dynamicSquad.ts +++ b/src/room/creeps/roleManagers/antifa/dynamicSquad.ts @@ -53,5 +53,35 @@ export class DynamicSquad { dismantler: this.members[0], } } + + private isInFormation() { + + const members = Object.values(this.membersByType) + /** + * The last valid index + */ + let previousIndex = 0 + + for (let i = 0; i < members.length; i++) { + + const member = members[i] + if (!member) continue + + const previousMember = members + } + } + + private getInFormation() { + + + } + + /** + * create a move request while in formation + */ + private createMoveRequest() { + + + } } diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index 58c74e76e..767262b31 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -458,6 +458,8 @@ Room.prototype.scoutMyRemote = function (scoutingRoom) { roomMemory[RoomMemoryKeys.commune] = scoutingRoom.name roomMemory[RoomMemoryKeys.type] = RoomTypes.remote + roomNameUtils.cleanMemory(this.name) + return roomMemory[RoomMemoryKeys.type] } @@ -594,6 +596,8 @@ Room.prototype.scoutMyRemote = function (scoutingRoom) { roomMemory[RoomMemoryKeys.commune] = scoutingRoom.name roomMemory[RoomMemoryKeys.type] = RoomTypes.remote + roomNameUtils.cleanMemory(this.name) + return roomMemory[RoomMemoryKeys.type] } diff --git a/src/room/roomNameUtils.ts b/src/room/roomNameUtils.ts index 49627422a..965d74a8e 100644 --- a/src/room/roomNameUtils.ts +++ b/src/room/roomNameUtils.ts @@ -19,6 +19,7 @@ import { getRange, packAsNum, packXYAsNum, + roundTo, } from 'utils/utils' import { unpackPosAt } from 'other/codec' import { CommuneManager } from './commune/commune' @@ -98,7 +99,7 @@ export class RoomNameUtils { } }) - dynamicScore += Math.round(Math.pow(closestEnemy, -0.8) * 25) + if (closestEnemy > 0) dynamicScore += Math.round(Math.pow(closestEnemy, -0.8) * 25) dynamicScore += Math.round(communeScore * 50) dynamicScore += allyScore @@ -110,6 +111,8 @@ export class RoomNameUtils { collectiveManager.mineralNodes[mineralType] - collectiveManager.avgCommunesPerMineral dynamicScore += mineralScore * 40 + dynamicScore = roundTo(dynamicScore, 2) + /* customLog('Dynamic scores', `enemy ${closestEnemy} commune ${communeScore} ally ${allyScore} mineralScore ${mineralScore} val1 ${Math.round(Math.pow(closestEnemy, -0.8) * 25)} val2 ${Math.round(communeScore * 50)} val3 ${mineralScore * 40} val4 ${dynamicScore}`) */ roomMemory[RoomMemoryKeys.dynamicScore] = dynamicScore roomMemory[RoomMemoryKeys.dynamicScoreUpdate] = Game.time diff --git a/src/settingsDefault.ts b/src/settingsDefault.ts index 70cdbcdfd..2ead15bbc 100644 --- a/src/settingsDefault.ts +++ b/src/settingsDefault.ts @@ -115,7 +115,7 @@ export interface Settings { * Default global.settings. DO NOT MODIFY for personal use; instead, include your preferences in global.settings.ts */ export const defaultSettings: Settings = { - breakingVersion: 121, + breakingVersion: 122, roomVisuals: false, baseVisuals: false, dataVisuals: false, From ea11106959870dde3ed9f9942a295a652105d258 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Wed, 3 Jan 2024 11:10:08 -0800 Subject: [PATCH 056/190] fix transactions pruning, dynamic squad work --- src/international/constants.ts | 1 + src/international/simpleAllies.ts | 315 ------------------ .../simpleAllies/simpleAllies.ts | 304 +++++++++++++++++ src/international/transactions.ts | 11 +- src/main.ts | 2 +- src/other/profilerRegister.ts | 2 +- src/room/commune/defence.ts | 2 +- src/room/commune/terminal/terminal.ts | 8 +- .../creeps/creepPrototypes/creepFunctions.ts | 14 +- .../roleManagers/antifa/dynamicSquad.ts | 125 ++++--- src/room/roomVisuals.ts | 2 +- 11 files changed, 406 insertions(+), 380 deletions(-) delete mode 100644 src/international/simpleAllies.ts create mode 100644 src/international/simpleAllies/simpleAllies.ts diff --git a/src/international/constants.ts b/src/international/constants.ts index e9bc610cd..60a502ae1 100644 --- a/src/international/constants.ts +++ b/src/international/constants.ts @@ -1405,4 +1405,5 @@ export enum FlagNames { debugMovement = 'debugMovement', debugRelay = 'debugRelay', debugRoomLogistics = 'debugRoomLogistics', + debugCreepLogistics = 'debugCreepLogistics' } diff --git a/src/international/simpleAllies.ts b/src/international/simpleAllies.ts deleted file mode 100644 index 9270f3a33..000000000 --- a/src/international/simpleAllies.ts +++ /dev/null @@ -1,315 +0,0 @@ -import { collectiveManager } from "./collective" -import { maxSegmentsOpen } from "./constants" - -export type AllyRequestTypes = 'resource' | -'defense' | -'attack' | -'player' | -'work' | -'econ' | -'room' - -export interface ResourceRequest { - priority: number - roomName: string - resourceType: ResourceConstant - /** - * How much they want of the resource. If the responder sends only a portion of what you ask for, that's fine - */ - amount: number - /** - * If the bot has no terminal, allies should instead haul the resources to us - */ - terminal?: boolean -} - -export interface DefenseRequest { - roomName: string - priority: number -} - -export interface AttackRequest { - roomName: string - priority: number -} - -export interface PlayerRequest { - playerName: string - /** - * The amount you think your team should hate the player. Hate should probably affect combat aggression and targetting - */ - hate?: number - /** - * The last time this player has attacked you - */ - lastAttackedBy?: number -} - -export type WorkRequestType = 'build' | 'upgrade' | 'repair' - -export interface WorkRequest { - roomName: string - priority: number - workType: WorkRequestType -} - -export const enum FunnelGoal { - GCL = 0, - RCL7 = 1, - RCL8 = 2 -} - -export interface FunnelRequest { - /** - * Amount of energy needed. Should be equal to energy that needs to be put into controller for achieving goal. - */ - maxAmount: number; - /** - * What energy will be spent on. Room receiving energy should focus solely on achieving the goal. - */ - goalType: FunnelGoal; - /** - * Room to which energy should be sent. If undefined resources can be sent to any of requesting player's rooms. - */ - roomName?: string; -} - -export interface EconRequest { - /** - * total credits the bot has. Should be 0 if there is no market on the server - */ - credits: number - /** - * the maximum amount of energy the bot is willing to share with allies. Should never be more than the amount of energy the bot has in storing structures - */ - sharableEnergy: number - /** - * The average energy income the bot has calculated over the last 100 ticks - * Optional, as some bots might not be able to calculate this easily. - */ - energyIncome?: number - /** - * The number of mineral nodes the bot has access to, probably used to inform expansion - */ - mineralNodes?: { [key in MineralConstant]: number } -} - -export interface RoomRequest { - roomName: string - /** - * The player who owns this room. If there is no owner, the room probably isn't worth making a request about - */ - playerName: string - /** - * The last tick your scouted this room to acquire the data you are now sharing - */ - lastScout: number - rcl: number - /** - * The amount of stored energy the room has. storage + terminal + factory should be sufficient - */ - energy: number - towers: number - avgRamprtHits: number - terminal: boolean -} - -export interface AllyRequests { - resource: ResourceRequest[] - defense: DefenseRequest[] - attack: AttackRequest[] - player: PlayerRequest[] - work: WorkRequest[] - funnel: FunnelRequest[] - econ?: EconRequest - room: RoomRequest[] -} - -export interface DefenseResponse { - roomName: string -} - -export interface AttackResponse { - roomName: string -} - -export interface WorkResponse { - roomName: string -} - -export interface AllyResponses { - // resource?: ResourceRequest[] - defense: DefenseResponse[] - attack: AttackResponse[] - work: WorkResponse[] -} - -/** - * Having data we pass into the segment being an object allows us to send additional information outside of requests - */ -export interface SimpleAlliesSegment { - /** - * Requests of the new system - */ - requests: AllyRequests - commands: any[] -} - -const requestsSekelton: AllyRequests = { - resource: [], - defense: [], - attack: [], - player: [], - work: [], - funnel: [], - room: [], -} - -const responsesSkeleton: AllyResponses = { - defense: [], - attack: [], - work: [], -} - -export class SimpleAllies { - myRequests: AllyRequests = {...requestsSekelton} - myResponses: AllyResponses = {...responsesSkeleton} - allySegmentData: Partial = {} - currentAlly?: string - - /** - * To call before any requests are made or responded to. Configures some required values and gets ally requests - */ - initRun() { - // Reset the data of myRequests - this.myRequests = { - resource: [], - defense: [], - attack: [], - player: [], - work: [], - funnel: [], - room: [], - } - this.myResponses = { - defense: [], - attack: [], - work: [], - } - - this.readAllySegment() - } - - /** - * Try to get segment data from our current ally. If successful, assign to the instane - */ - readAllySegment() { - if (!global.settings.allies.length) { - throw Error("Failed to find an ally for simpleAllies, you probably have none :(") - } - - this.currentAlly = global.settings.allies[Game.time % global.settings.allies.length] - - // Make a request to read the data of the next ally in the list, for next tick - const nextAllyName = global.settings.allies[(Game.time + 1) % global.settings.allies.length] - RawMemory.setActiveForeignSegment(nextAllyName, global.settings.allySegmentID) - - // Maybe the code didn't run last tick, so we didn't set a new read segment - if (!RawMemory.foreignSegment) return - if (RawMemory.foreignSegment.username !== this.currentAlly) return - - // Protect from errors as we try to get ally segment data - try { - this.allySegmentData = JSON.parse(RawMemory.foreignSegment.data) - } catch (err) { - console.log('Error in getting requests for simpleAllies', this.currentAlly) - } - - console.log('data',this.allySegmentData) - } - - /** - * To call after requests have been made, to assign requests to the next ally - */ - endRun() { - - // Make sure we don't have too many segments open - if (Object.keys(RawMemory.segments).length >= maxSegmentsOpen) { - throw Error('Too many segments open: simpleAllies') - } - - this.allyRequestsFromMyTerminalRequests() - - const newSegmentData: SimpleAlliesSegment = { - requests: this.myRequests as AllyRequests, - commands: collectiveManager.myCommands, - } - - RawMemory.segments[global.settings.allySegmentID] = JSON.stringify(newSegmentData) - RawMemory.setPublicSegments([global.settings.allySegmentID]) - } - - /** - * Convert unfilfilled terminal requests to ally requests, so they can respond to them. The goal is to prioritize internal sending over ally sending - */ - private allyRequestsFromMyTerminalRequests() { - for (const ID in collectiveManager.terminalRequests) { - const request = collectiveManager.terminalRequests[ID] - - this.myRequests.resource.push({ - roomName: request.roomName, - resourceType: request.resource, - amount: request.amount, - terminal: true, - priority: request.priority, - }) - } - } - - // Request methods - - requestResource(args: ResourceRequest) { - - this.myRequests.resource.push(args) - } - - requestDefense( - args: DefenseRequest - ) { - - this.myRequests.defense.push(args) - } - - requestAttack( - args: AttackRequest - ) { - - this.myRequests.attack.push(args) - } - - requestPlayer(args: PlayerRequest) { - - this.myRequests.player.push(args) - } - - requestWork(args: WorkRequest) { - - this.myRequests.work.push(args) - } - - requestFunnel(args: FunnelRequest) { - this.myRequests.funnel.push(args) - } - - requestEcon(args: EconRequest) { - - this.myRequests.econ = args - } - - requestRoom(args: RoomRequest) { - - this.myRequests.room.push(args) - } -} - -export const simpleAllies = new SimpleAllies() diff --git a/src/international/simpleAllies/simpleAllies.ts b/src/international/simpleAllies/simpleAllies.ts new file mode 100644 index 000000000..cccce0814 --- /dev/null +++ b/src/international/simpleAllies/simpleAllies.ts @@ -0,0 +1,304 @@ +import { collectiveManager } from '../collective' +import { maxSegmentsOpen } from '../constants' + +export type AllyRequestTypes = + | 'resource' + | 'defense' + | 'attack' + | 'player' + | 'work' + | 'econ' + | 'room' + +export interface ResourceRequest { + priority: number + roomName: string + resourceType: ResourceConstant + /** + * How much they want of the resource. If the responder sends only a portion of what you ask for, that's fine + */ + amount: number + /** + * If the bot has no terminal, allies should instead haul the resources to us + */ + terminal?: boolean +} + +export interface DefenseRequest { + roomName: string + priority: number +} + +export interface AttackRequest { + roomName: string + priority: number +} + +export interface PlayerRequest { + playerName: string + /** + * The amount you think your team should hate the player. Hate should probably affect combat aggression and targetting + */ + hate?: number + /** + * The last time this player has attacked you + */ + lastAttackedBy?: number +} + +export type WorkRequestType = 'build' | 'upgrade' | 'repair' + +export interface WorkRequest { + roomName: string + priority: number + workType: WorkRequestType +} + +export const enum FunnelGoal { + GCL = 0, + RCL7 = 1, + RCL8 = 2, +} + +export interface FunnelRequest { + /** + * Amount of energy needed. Should be equal to energy that needs to be put into controller for achieving goal. + */ + maxAmount: number + /** + * What energy will be spent on. Room receiving energy should focus solely on achieving the goal. + */ + goalType: FunnelGoal + /** + * Room to which energy should be sent. If undefined resources can be sent to any of requesting player's rooms. + */ + roomName?: string +} + +export interface EconRequest { + /** + * total credits the bot has. Should be 0 if there is no market on the server + */ + credits: number + /** + * the maximum amount of energy the bot is willing to share with allies. Should never be more than the amount of energy the bot has in storing structures + */ + sharableEnergy: number + /** + * The average energy income the bot has calculated over the last 100 ticks + * Optional, as some bots might not be able to calculate this easily. + */ + energyIncome?: number + /** + * The number of mineral nodes the bot has access to, probably used to inform expansion + */ + mineralNodes?: { [key in MineralConstant]: number } +} + +export interface RoomRequest { + roomName: string + /** + * The player who owns this room. If there is no owner, the room probably isn't worth making a request about + */ + playerName: string + /** + * The last tick your scouted this room to acquire the data you are now sharing + */ + lastScout: number + rcl: number + /** + * The amount of stored energy the room has. storage + terminal + factory should be sufficient + */ + energy: number + towers: number + avgRamprtHits: number + terminal: boolean +} + +export interface AllyRequests { + resource: ResourceRequest[] + defense: DefenseRequest[] + attack: AttackRequest[] + player: PlayerRequest[] + work: WorkRequest[] + funnel: FunnelRequest[] + econ?: EconRequest + room: RoomRequest[] +} + +export interface DefenseResponse { + roomName: string +} + +export interface AttackResponse { + roomName: string +} + +export interface WorkResponse { + roomName: string +} + +export interface AllyResponses { + // resource?: ResourceRequest[] + defense: DefenseResponse[] + attack: AttackResponse[] + work: WorkResponse[] +} + +/** + * Having data we pass into the segment being an object allows us to send additional information outside of requests + */ +export interface SimpleAlliesSegment { + /** + * Requests of the new system + */ + requests: AllyRequests + commands: any[] +} + +const requestsSekelton: AllyRequests = { + resource: [], + defense: [], + attack: [], + player: [], + work: [], + funnel: [], + room: [], +} + +const responsesSkeleton: AllyResponses = { + defense: [], + attack: [], + work: [], +} + +export class SimpleAllies { + myRequests: AllyRequests = { ...requestsSekelton } + myResponses: AllyResponses = { ...responsesSkeleton } + allySegmentData: Partial = {} + currentAlly?: string + + /** + * To call before any requests are made or responded to. Configures some required values and gets ally requests + */ + initRun() { + // Reset the data of myRequests + this.myRequests = { + resource: [], + defense: [], + attack: [], + player: [], + work: [], + funnel: [], + room: [], + } + this.myResponses = { + defense: [], + attack: [], + work: [], + } + + this.readAllySegment() + } + + /** + * Try to get segment data from our current ally. If successful, assign to the instane + */ + readAllySegment() { + if (!global.settings.allies.length) { + throw Error('Failed to find an ally for simpleAllies, you probably have none :(') + } + + this.currentAlly = global.settings.allies[Game.time % global.settings.allies.length] + + // Make a request to read the data of the next ally in the list, for next tick + const nextAllyName = global.settings.allies[(Game.time + 1) % global.settings.allies.length] + RawMemory.setActiveForeignSegment(nextAllyName, global.settings.allySegmentID) + + // Maybe the code didn't run last tick, so we didn't set a new read segment + if (!RawMemory.foreignSegment) return + if (RawMemory.foreignSegment.username !== this.currentAlly) return + + // Protect from errors as we try to get ally segment data + try { + this.allySegmentData = JSON.parse(RawMemory.foreignSegment.data) + } catch (err) { + console.log('Error in getting requests for simpleAllies', this.currentAlly) + } + + console.log('data', this.allySegmentData) + } + + /** + * To call after requests have been made, to assign requests to the next ally + */ + endRun() { + // Make sure we don't have too many segments open + if (Object.keys(RawMemory.segments).length >= maxSegmentsOpen) { + throw Error('Too many segments open: simpleAllies') + } + + this.allyRequestsFromMyTerminalRequests() + + const newSegmentData: SimpleAlliesSegment = { + requests: this.myRequests as AllyRequests, + commands: collectiveManager.myCommands, + } + + RawMemory.segments[global.settings.allySegmentID] = JSON.stringify(newSegmentData) + RawMemory.setPublicSegments([global.settings.allySegmentID]) + } + + /** + * Convert unfilfilled terminal requests to ally requests, so they can respond to them. The goal is to prioritize internal sending over ally sending + */ + private allyRequestsFromMyTerminalRequests() { + for (const ID in collectiveManager.terminalRequests) { + const request = collectiveManager.terminalRequests[ID] + + this.myRequests.resource.push({ + roomName: request.roomName, + resourceType: request.resource, + amount: request.amount, + terminal: true, + priority: request.priority, + }) + } + } + + // Request methods + + requestResource(args: ResourceRequest) { + this.myRequests.resource.push(args) + } + + requestDefense(args: DefenseRequest) { + this.myRequests.defense.push(args) + } + + requestAttack(args: AttackRequest) { + this.myRequests.attack.push(args) + } + + requestPlayer(args: PlayerRequest) { + this.myRequests.player.push(args) + } + + requestWork(args: WorkRequest) { + this.myRequests.work.push(args) + } + + requestFunnel(args: FunnelRequest) { + this.myRequests.funnel.push(args) + } + + requestEcon(args: EconRequest) { + this.myRequests.econ = args + } + + requestRoom(args: RoomRequest) { + this.myRequests.room.push(args) + } +} + +export const simpleAllies = new SimpleAllies() diff --git a/src/international/transactions.ts b/src/international/transactions.ts index 7989e777d..8003f9131 100644 --- a/src/international/transactions.ts +++ b/src/international/transactions.ts @@ -1,13 +1,14 @@ import { Sleepable } from "utils/sleepable" import { RoomStatsKeys } from "./constants" -import { randomIntRange } from "utils/utils" +import { randomIntRange, utils } from "utils/utils" import { collectiveManager } from "./collective" -export class TransactionsManager extends Sleepable { - sleepFor = randomIntRange(50, 100) +const processTransactionsInterval = randomIntRange(50, 100) + +export class TransactionsManager { run() { - if (this.isSleepingResponsive()) return + if (!utils.isTickInterval(processTransactionsInterval)) return const currentTransactionIDs = this.findCurrentTransactions() this.pruneRecordedTransactions(currentTransactionIDs) @@ -41,7 +42,7 @@ export class TransactionsManager extends Sleepable { // only delete if it isn't in current data if (currentTransactionIDs.has(transactionID)) continue - Memory.recordedTransactionIDs.transactionID = undefined + delete Memory.recordedTransactionIDs[transactionID] } } diff --git a/src/main.ts b/src/main.ts index d629191d2..095c279e8 100644 --- a/src/main.ts +++ b/src/main.ts @@ -17,7 +17,7 @@ import { initManager } from './international/init' import { migrationManager } from 'international/migration' import { respawnManager } from './international/respawn' import { tickInit } from './international/tickInit' -import { simpleAllies } from 'international/simpleAllies' +import { simpleAllies } from 'international/simpleAllies/simpleAllies' import { creepOrganizer } from './international/creepOrganizer' import { powerCreepOrganizer } from 'international/powerCreepOrganizer' import { ErrorMapper } from 'other/ErrorMapper' diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index b73719289..849ac3c9b 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -21,7 +21,7 @@ import { creepClasses } from 'room/creeps/creepClasses' import { Utils, outOfBucket } from 'utils/utils' import { CreepOrganizer } from 'international/creepOrganizer' import { RequestsManager } from 'international/requests' -import { SimpleAllies } from 'international/simpleAllies' +import { SimpleAllies } from 'international/simpleAllies/simpleAllies' import { PlayerManager } from 'international/players' import { FlagManager } from 'international/flags' import { RoomNameUtils } from 'room/roomNameUtils' diff --git a/src/room/commune/defence.ts b/src/room/commune/defence.ts index 32c407039..28cb8e049 100644 --- a/src/room/commune/defence.ts +++ b/src/room/commune/defence.ts @@ -12,7 +12,7 @@ import { safemodeTargets, } from 'international/constants' import { playerManager } from 'international/players' -import { simpleAllies } from 'international/simpleAllies' +import { simpleAllies } from 'international/simpleAllies/simpleAllies' import { statsManager } from 'international/statsManager' import { findObjectWithID, diff --git a/src/room/commune/terminal/terminal.ts b/src/room/commune/terminal/terminal.ts index 7e2f1a4d9..66f8bdffc 100644 --- a/src/room/commune/terminal/terminal.ts +++ b/src/room/commune/terminal/terminal.ts @@ -2,7 +2,11 @@ import { minerals, Result, RoomMemoryKeys, RoomStatsKeys } from 'international/c import { customLog } from 'utils/logging' import { newID, roundTo, utils } from 'utils/utils' import './marketUtils' -import { simpleAllies, AllyRequestTypes, ResourceRequest } from 'international/simpleAllies' +import { + simpleAllies, + AllyRequestTypes, + ResourceRequest, +} from 'international/simpleAllies/simpleAllies' import { collectiveManager } from 'international/collective' import { CommuneManager, ResourceTargets } from 'room/commune/commune' import { marketUtils } from './marketUtils' @@ -66,7 +70,7 @@ export class TerminalManager { if (storedResourceAmount >= targetAmount) continue targetAmount = Math.floor(targetAmount * 1.1) - const priority = roundTo(1 - storedResourceAmount / targetAmount, 2) + const priority = roundTo(1 - storedResourceAmount / targetAmount / 2, 2) const amount = Math.min( targetAmount - storedResourceAmount, room.terminal.store.getFreeCapacity(), diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index 488e59d79..663c19d8b 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -20,6 +20,7 @@ import { ReservedCoordTypes, WorkTypes, RoomLogisticsRequestTypes, + FlagNames, } from 'international/constants' import { areCoordsEqual, @@ -1678,7 +1679,7 @@ Creep.prototype.runRoomLogisticsRequestAdvanced = function (args) { /* log('REQUEST RESPONSE', request.T, { position: 1 }) */ const target = findObjectWithID(request[CreepRoomLogisticsRequestKeys.target]) - this.room.targetVisual(this.pos, target.pos) + if (Game.flags[FlagNames.debugCreepLogistics]) this.room.targetVisual(this.pos, target.pos, true) if (getRange(target.pos, this.pos) > 1) { const result = this.createMoveRequest({ origin: this.pos, @@ -1700,7 +1701,16 @@ Creep.prototype.runRoomLogisticsRequestAdvanced = function (args) { } // If we already moved a resource this tick, then wait (presumably) until the next one to take any resoure-moving action - if (this.movedResource) return Result.noAction + if (this.movedResource) { + + this.room.visual.text('MR', this.pos) + return Result.noAction + } + + if (Game.flags[FlagNames.debugCreepLogistics]) { + + this.room.visual.text(request[CreepRoomLogisticsRequestKeys.amount].toString(), this.pos) + } /* log( 'DOING REQUEST', diff --git a/src/room/creeps/roleManagers/antifa/dynamicSquad.ts b/src/room/creeps/roleManagers/antifa/dynamicSquad.ts index 01b7a89e2..ee09b5be2 100644 --- a/src/room/creeps/roleManagers/antifa/dynamicSquad.ts +++ b/src/room/creeps/roleManagers/antifa/dynamicSquad.ts @@ -7,15 +7,15 @@ import { roomDimensions, squadQuotas, } from 'international/constants' -import { findClosestObject, getRangeXY, getRange, isExit, isXYExit } from 'utils/utils' +import { findClosestObject, getRangeXY, getRange, isExit, isXYExit, utils } from 'utils/utils' import { Antifa } from './antifa' import { CustomPathFinderArgs } from 'international/customPathFinder' interface MembersByType { - melee: Antifa - healer: Antifa - ranger: Antifa - dismantler: Antifa + melee: Antifa + healer: Antifa + ranger: Antifa + dismantler: Antifa } /** @@ -23,65 +23,86 @@ interface MembersByType { * Accepts at most 1 of each: antifaRangedAttacker, antifaAttacker, antifaHealer, antifaDismantler */ export class DynamicSquad { - members: Antifa[] = [] - memberNames: string[] = [] - membersByType: MembersByType - - constructor(memberNames: string[]) { - for (const memberName of memberNames) { - const member = Game.creeps[memberName] - this.members.push(member) - this.memberNames.push(memberName) - - member.squad = this - member.squadRan = true - } - - const combatRequest = Memory.combatRequests[Memory.creeps[this.memberNames[0]][CreepMemoryKeys.combatRequest]] - if (combatRequest) { - - combatRequest[CombatRequestKeys.dynamicSquads] += 1 - } + members: Antifa[] = [] + memberNames: string[] = [] + membersByType: MembersByType + + constructor(memberNames: string[]) { + for (const memberName of memberNames) { + const member = Game.creeps[memberName] + this.members.push(member) + this.memberNames.push(memberName) + + member.squad = this + member.squadRan = true } - run() { - - this.membersByType = { - melee: this.members[0], - healer: this.members[0], - ranger: this.members[0], - dismantler: this.members[0], - } + const combatRequest = + Memory.combatRequests[Memory.creeps[this.memberNames[0]][CreepMemoryKeys.combatRequest]] + if (combatRequest) { + combatRequest[CombatRequestKeys.dynamicSquads] += 1 + } + } + + run() { + this.membersByType = { + melee: this.members[0], + healer: this.members[0], + ranger: this.members[0], + dismantler: this.members[0], } - private isInFormation() { - - const members = Object.values(this.membersByType) - /** - * The last valid index - */ - let previousIndex = 0 - - for (let i = 0; i < members.length; i++) { - - const member = members[i] - if (!member) continue - const previousMember = members - } - } - private getInFormation() { + if (!this.getInFormation()) return - } + } + private getInFormation() { + const members = Object.values(this.membersByType) as Antifa[] /** - * create a move request while in formation + * The last valid index */ - private createMoveRequest() { + let previousIndex = 0 + + for (let i = 0; i < members.length; i++) { + const member = members[i] + if (!member) continue + + const previousMember = members[previousIndex] + // If we are the member in question or nearby to it + if ( + utils.getInterRange( + member.pos, + member.room.name, + previousMember.pos, + previousMember.room.name, + ) <= 1 + ) { + previousIndex = i + continue + } + + // This member is not in valid formation + + member.createMoveRequest({ + origin: member.pos, + goals: [ + { + pos: previousMember.pos, + range: 1, + }, + ], + }) + } + return true + } - } + /** + * create a move request while in formation + */ + private createMoveRequest() {} } diff --git a/src/room/roomVisuals.ts b/src/room/roomVisuals.ts index 10b47f89d..bc72cf9cd 100644 --- a/src/room/roomVisuals.ts +++ b/src/room/roomVisuals.ts @@ -14,7 +14,7 @@ import { customLog } from 'utils/logging' import { findObjectWithID, unpackNumAsCoord } from 'utils/utils' import { RoomManager } from './room' import { Rectangle, Table, Dial, Grid, Bar, Dashboard, LineChart, Label } from 'screeps-viz' -import { simpleAllies, AllyRequestTypes } from 'international/simpleAllies' +import { simpleAllies, AllyRequestTypes } from 'international/simpleAllies/simpleAllies' import { collectiveManager } from 'international/collective' import { playerManager } from 'international/players' import { unpackCoord } from 'other/codec' From cc32ee7dc163e801d65baa381b7c71f672923c51 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Wed, 3 Jan 2024 20:33:23 -0800 Subject: [PATCH 057/190] organization, better funneling, DSquad progress, resolves #762 --- README.md | 7 +- design.md | 37 + src/international/collective.ts | 550 +-- src/other/profilerRegister.ts | 253 +- src/room/commune/commune.ts | 55 +- src/room/commune/communeData.ts | 1 + src/room/commune/communeProcs.ts | 46 + src/room/commune/communeUtils.ts | 143 +- src/room/commune/spawning/spawnRequests.ts | 3272 ++++++++--------- src/room/creeps/creepMoveUtils.ts | 43 +- src/room/creeps/creepProcs.ts | 356 ++ .../creepPrototypes/creepMoveFunctions.ts | 188 +- src/room/creeps/creepUtils.ts | 345 -- .../commune/controllerUpgrader.ts | 3 +- .../roleManagers/antifa/dynamicSquad.ts | 82 +- src/room/creeps/roleManagers/antifa/quad.ts | 1682 +++++---- .../commune/controllerUpgrader.ts | 3 +- .../creeps/roleManagers/commune/maintainer.ts | 5 +- src/room/room.ts | 4 +- src/types.d.ts | 478 +-- 20 files changed, 3853 insertions(+), 3700 deletions(-) create mode 100644 design.md create mode 100644 src/room/commune/communeProcs.ts create mode 100644 src/room/creeps/creepProcs.ts diff --git a/README.md b/README.md index 0cf7c3ca9..cc9812b11 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ First you'll want to download or fork the repository. Start by selecting a branc Ensure you have downloaded [Node](https://nodejs.org/en/) -**Make sure your node version is below 17.0.0** +**Consider using Node version is 20.10.0 if you have issues** You can check your node version with: @@ -64,7 +64,6 @@ After making sure you have correct node version go to the project folder (not in ```powershell npm i - ``` And that's it. Join our [discord server](https://discord.gg/5QubDsB786) if you need help. @@ -81,6 +80,8 @@ Using [rollup](https://rollupjs.org/guide/en/) we will translate the code into a First, you'll need to set up your settings. In `/src` you'll find the `settings.example.ts` file. Please copy the file and rename its clone to `settings.ts`. Then change the `settingsExample` definition to `settings`. You can then add your own prefences, including checks based on the name of the shard for server-specific settings. These same instructions with an example are included in the file. +Head to `src/other/userScript/userScript.example.ts` and follow the instructions at the top of the file. It will be very similar to settings up `settings.ts`. + Next, rename `.screeps.yaml.example` to `.screeps.yaml` and fill in the required information for each environment you want to run the bot in. For the official server, replace the `token` with an [API token](https://docs.screeps.com/auth-tokens.html) for your account. On private servers, edit _(or copy and rename)_ the `pserver` section with `host` set to your server domain or IP then complete `username` and `password` with your credentials on this server. For more information about this file, check the [screeps unified credentials file](https://github.com/screepers/screepers-standards/blob/master/SS3-Unified_Credentials_File.md) spec. Running `rollup -c` will compile your code and do a "dry run", preparing the code for upload but not actually pushing it. Running `rollup -c --environment DEST:mmo` will compile your code, and then upload it to a screeps server using the `mmo` config from `.screeps.yaml`. @@ -110,7 +111,7 @@ I'd also suggest using this less-laggy tool [steamless-client](https://github.co ### Advanced usage -If you want to run custom code without conflicting with the project's source - say, if you want to commit or make pull requests - it's recommended you use the userScript folder. Head to `src/other/userScript/userScript.example.ts` and follow the instructions at the top of the file. +If you want to run custom code without conflicting with the project's source - say, if you want to commit or make pull requests - it's recommended you use the userScript folder. ## Contribution diff --git a/design.md b/design.md new file mode 100644 index 000000000..4f83e3b44 --- /dev/null +++ b/design.md @@ -0,0 +1,37 @@ +# Overview + +This document should outline the design strategies and guidelines for the bot. + +The bot intends to implement a primarily data-oriented style, with some aspects of functional, imparative and object oriented design. + +# Data/functional structures + +## Utils +- does not contain its own data +- contains functions/methods + +Utils stands for utilities. These are functions that will generally take inputs and provide information in return. + +### Example + +CommuneUtils contains utility functions that provide often cached information on call that helps with processing + +## Procs +- does not contain its own data +- contains functions/methods + +Procs stands for processors. These are functions that will generally run logic for specified things. + +### Example + +CommuneProc runs logic for the commune to update data, make intents, and run sub processes like towers, spawning, creeps, etc. + +## Manager +- contains its own data +- contains functions/methods + +Managers can be a combination of utilities, processors and data. + +### Example + +The MarketManager handles caching market related data, updating / deleting it as needed, while pruning and optimizing existing orders that the bot controls. diff --git a/src/international/collective.ts b/src/international/collective.ts index 323e6ab55..ef1684c2d 100644 --- a/src/international/collective.ts +++ b/src/international/collective.ts @@ -1,356 +1,356 @@ import { Sleepable } from 'utils/sleepable' -import { - createPosMap, - packXYAsNum, - randomIntRange, - randomRange, - randomTick, - roundTo, -} from '../utils/utils' +import { packXYAsNum, randomIntRange, roundTo, utils } from '../utils/utils' import { - cacheAmountModifier, - WorkRequestKeys, - CPUBucketCapacity, - mmoShardNames, - customColors, - roomDimensions, - RoomMemoryKeys, - minerals, - PlayerMemoryKeys, - maxSpawnEnergyCapacity, - haulerUpdateDefault, + WorkRequestKeys, + mmoShardNames, + roomDimensions, + RoomMemoryKeys, + minerals, + haulerUpdateDefault, } from './constants' -import { customLog } from 'utils/logging' + +const periodicUpdateInterval = randomIntRange(100, 200) /** * Handles inter room and non-room matters */ export class CollectiveManager extends Sleepable { - /** - * Antifa creeps by combat request name, then by role with an array of creep names - */ - creepsByCombatRequest: { [requestName: string]: Partial<{ [key in CreepRoles]: string[] }> } - - creepsByHaulRequest: { [requestName: string]: string[] } - - unspawnedPowerCreepNames: string[] - - terminalRequests: { [ID: string]: TerminalRequest } - - tickID: number - customCreepIDs: true[] - customCreepIDIndex: number - - internationalDataVisuals: boolean - - terminalCommunes: string[] - - /** - * The aggregate number of each mineral nodes we have access to - */ - mineralNodes: Partial<{ [key in MineralConstant]: number }> - - /** - * The name of the room that is safemoded, if there is one - */ - safemodedCommuneName: string | undefined - /** - * An intra-tick collection of commands we wish to issue - */ - myCommands: any[] - /** - * Terrain binaries of wall or not wall for rooms - */ - terrainBinaries: { [roomName: string]: Uint8Array } = {} - constructionSiteCount = 0 - creepCount: number - powerCreepCount: number - /** - * A string to console log as rich text - */ - logs = '' - /** - * Room names that have controllers we own - */ - communes: Set - communesForWorkRequests: Set - communesForCombatRequests: Set - communesForHaulRequests: Set - - /** - * Updates values to be present for this tick - */ - update() { - // initalize or re-initialize - - this.creepsByCombatRequest = {} - this.creepsByHaulRequest = {} - this.unspawnedPowerCreepNames = [] - this.terminalRequests = {} - this.terminalCommunes = [] - - this.tickID = 0 - this.customCreepIDs = [] - this.customCreepIDIndex = 0 - this.mineralNodes = {} - for (const mineralType of minerals) { - this.mineralNodes[mineralType] = 0 - } - this.myCommands = [] - this.logs = '' - this.creepCount = 0 - this.powerCreepCount = 0 - this.communes = new Set() - this.communesForWorkRequests = new Set() - this.communesForCombatRequests = new Set() - this.communesForHaulRequests = new Set() - - // delete - - this.safemodedCommuneName = undefined - this._workRequestsByScore = undefined - this._defaultMinCacheAmount = undefined - this.internationalDataVisuals = undefined - - // - - this.updateMinHaulerCost() - - // Run this stuff every so often - - if (this.isSleepingResponsive()) return - - // delete - - this._funnelOrder = undefined - this._minCredits = undefined - this._resourcesInStoringStructures = undefined - this._maxCSitesPerRoom = undefined - - // + /** + * Antifa creeps by combat request name, then by role with an array of creep names + */ + creepsByCombatRequest: { [requestName: string]: Partial<{ [key in CreepRoles]: string[] }> } + + creepsByHaulRequest: { [requestName: string]: string[] } + + unspawnedPowerCreepNames: string[] + + terminalRequests: { [ID: string]: TerminalRequest } + + tickID: number + customCreepIDs: true[] + customCreepIDIndex: number + + internationalDataVisuals: boolean + + terminalCommunes: string[] + + /** + * The aggregate number of each mineral nodes we have access to + */ + mineralNodes: Partial<{ [key in MineralConstant]: number }> + + /** + * The name of the room that is safemoded, if there is one + */ + safemodedCommuneName: string | undefined + /** + * An intra-tick collection of commands we wish to issue + */ + myCommands: any[] + /** + * Terrain binaries of wall or not wall for rooms + */ + terrainBinaries: { [roomName: string]: Uint8Array } = {} + constructionSiteCount = 0 + creepCount: number + powerCreepCount: number + /** + * A string to console log as rich text + */ + logs = '' + /** + * Room names that have controllers we own + */ + communes: Set + communesForWorkRequests: Set + communesForCombatRequests: Set + communesForHaulRequests: Set + + /** + * Updates values to be present for this tick + */ + update() { + // initalize or re-initialize + + this.creepsByCombatRequest = {} + this.creepsByHaulRequest = {} + this.unspawnedPowerCreepNames = [] + this.terminalRequests = {} + this.terminalCommunes = [] + + this.tickID = 0 + this.customCreepIDs = [] + this.customCreepIDIndex = 0 + this.mineralNodes = {} + for (const mineralType of minerals) { + this.mineralNodes[mineralType] = 0 + } + this.myCommands = [] + this.logs = '' + this.creepCount = 0 + this.powerCreepCount = 0 + this.communes = new Set() + this.communesForWorkRequests = new Set() + this.communesForCombatRequests = new Set() + this.communesForHaulRequests = new Set() + // delete - } + this.safemodedCommuneName = undefined + this._workRequestsByScore = undefined + this._defaultMinCacheAmount = undefined + this.internationalDataVisuals = undefined - newCustomCreepID() { - // Try to use an existing unused ID index + // - for (; this.customCreepIDIndex < this.customCreepIDs.length; this.customCreepIDIndex++) { - if (this.customCreepIDs[this.customCreepIDIndex]) continue + this.updateMinHaulerCost() - this.customCreepIDs[this.customCreepIDIndex] = true - this.customCreepIDIndex += 1 - return this.customCreepIDIndex - 1 - } + // Run this stuff every so often - // All previous indexes are being used, add a new index + if (utils.isTickInterval(periodicUpdateInterval)) { + // delete - this.customCreepIDs.push(true) - this.customCreepIDIndex += 1 - return this.customCreepIDIndex - 1 + this._funnelOrder = undefined + this._funnelingRoomNames = undefined + this._minCredits = undefined + this._resourcesInStoringStructures = undefined + this._maxCSitesPerRoom = undefined } - advancedGeneratePixel() { - if (!global.settings.pixelGeneration) return + // + } - // Stop if the bot is not running on MMO + newCustomCreepID() { + // Try to use an existing unused ID index - if (!mmoShardNames.has(Game.shard.name)) return + for (; this.customCreepIDIndex < this.customCreepIDs.length; this.customCreepIDIndex++) { + if (this.customCreepIDs[this.customCreepIDIndex]) continue - // Stop if the cpu bucket isn't full + this.customCreepIDs[this.customCreepIDIndex] = true + this.customCreepIDIndex += 1 + return this.customCreepIDIndex - 1 + } - if (Game.cpu.bucket !== 10000) return + // All previous indexes are being used, add a new index - // Try to generate a pixel + this.customCreepIDs.push(true) + this.customCreepIDIndex += 1 + return this.customCreepIDIndex - 1 + } - Game.cpu.generatePixel() - } + advancedGeneratePixel() { + if (!global.settings.pixelGeneration) return - updateMinHaulerCost() { + // Stop if the bot is not running on MMO + if (!mmoShardNames.has(Game.shard.name)) return - if (Game.time - Memory.minHaulerCostUpdate < haulerUpdateDefault) return + // Stop if the cpu bucket isn't full + if (Game.cpu.bucket !== 10000) return - // cpu limit is potentially variable if GCL changes - const targetCPU = (Game.cpu.limit * 0.9) / Game.cpu.limit - // How far off we are from our ideal cpu usage - Memory.minHaulerCostError = roundTo(targetCPU - Memory.stats.cpu.usage / Game.cpu.limit, 4) + Game.cpu.generatePixel() + } - Memory.minHaulerCost -= Math.floor( - (Memory.minHaulerCost * Memory.minHaulerCostError) / 2, - ) + updateMinHaulerCost() { + if (Game.time - Memory.minHaulerCostUpdate < haulerUpdateDefault) return - Memory.minHaulerCost = Math.max( - Memory.minHaulerCost, - BODYPART_COST[CARRY] * 2 + BODYPART_COST[MOVE], - ) + // cpu limit is potentially variable if GCL changes + const targetCPU = (Game.cpu.limit * 0.9) / Game.cpu.limit + // How far off we are from our ideal cpu usage + Memory.minHaulerCostError = roundTo(targetCPU - Memory.stats.cpu.usage / Game.cpu.limit, 4) - // don't let it exceed the max possible cost by too much (otherwise will take awhile to match delta in some circumstances) - Memory.minHaulerCost = Math.min( - Memory.minHaulerCost, - BODYPART_COST[MOVE] * MAX_CREEP_SIZE * 1.2, - ) + Memory.minHaulerCost -= Math.floor((Memory.minHaulerCost * Memory.minHaulerCostError) / 2) - Memory.minHaulerCostUpdate = Game.time - } + Memory.minHaulerCost = Math.max( + Memory.minHaulerCost, + BODYPART_COST[CARRY] * 2 + BODYPART_COST[MOVE], + ) - /** - * Provides a cached binary of wall or not wall terrain - */ - getTerrainBinary(roomName: string) { - if (this.terrainBinaries[roomName]) return this.terrainBinaries[roomName] + // don't let it exceed the max possible cost by too much (otherwise will take awhile to match delta in some circumstances) + Memory.minHaulerCost = Math.min( + Memory.minHaulerCost, + BODYPART_COST[MOVE] * MAX_CREEP_SIZE * 1.2, + ) - this.terrainBinaries[roomName] = new Uint8Array(2500) + Memory.minHaulerCostUpdate = Game.time + } - const terrain = Game.map.getRoomTerrain(roomName) + /** + * Provides a cached binary of wall or not wall terrain + */ + getTerrainBinary(roomName: string) { + if (this.terrainBinaries[roomName]) return this.terrainBinaries[roomName] - for (let x = 0; x < roomDimensions; x += 1) { - for (let y = 0; y < roomDimensions; y += 1) { - this.terrainBinaries[roomName][packXYAsNum(x, y)] = - terrain.get(x, y) === TERRAIN_MASK_WALL ? 255 : 0 - } - } + this.terrainBinaries[roomName] = new Uint8Array(2500) - return this.terrainBinaries[roomName] - } + const terrain = Game.map.getRoomTerrain(roomName) - newTickID() { - return (this.tickID += 1).toString() + for (let x = 0; x < roomDimensions; x += 1) { + for (let y = 0; y < roomDimensions; y += 1) { + this.terrainBinaries[roomName][packXYAsNum(x, y)] = + terrain.get(x, y) === TERRAIN_MASK_WALL ? 255 : 0 + } } - _minCredits: number + return this.terrainBinaries[roomName] + } - get minCredits() { - if (this._minCredits !== undefined) return this._minCredits + newTickID() { + return (this.tickID += 1).toString() + } - return (this._minCredits = collectiveManager.communes.size * 10000) - } + _minCredits: number + get minCredits() { + if (this._minCredits !== undefined) return this._minCredits - _workRequestsByScore: (string | undefined)[] + return (this._minCredits = collectiveManager.communes.size * 10000) + } - get workRequestsByScore(): (string | undefined)[] { - if (this._workRequestsByScore) return this._workRequestsByScore + _workRequestsByScore: (string | undefined)[] + get workRequestsByScore(): (string | undefined)[] { + if (this._workRequestsByScore) return this._workRequestsByScore - return (this._workRequestsByScore = Object.keys(Memory.workRequests).sort( - (a, b) => - (Memory.workRequests[a][WorkRequestKeys.priority] ?? - Memory.rooms[a][RoomMemoryKeys.score] + - Memory.rooms[a][RoomMemoryKeys.dynamicScore]) - - (Memory.workRequests[b][WorkRequestKeys.priority] ?? - Memory.rooms[b][RoomMemoryKeys.score] + - Memory.rooms[b][RoomMemoryKeys.dynamicScore]), - )) - } + return (this._workRequestsByScore = Object.keys(Memory.workRequests).sort( + (a, b) => + (Memory.workRequests[a][WorkRequestKeys.priority] ?? + Memory.rooms[a][RoomMemoryKeys.score] + Memory.rooms[a][RoomMemoryKeys.dynamicScore]) - + (Memory.workRequests[b][WorkRequestKeys.priority] ?? + Memory.rooms[b][RoomMemoryKeys.score] + Memory.rooms[b][RoomMemoryKeys.dynamicScore]), + )) + } - _defaultMinCacheAmount: number + _defaultMinCacheAmount: number + get defaultMinPathCacheTime() { + if (this._defaultMinCacheAmount !== undefined) return this._defaultMinCacheAmount - get defaultMinPathCacheTime() { - if (this._defaultMinCacheAmount !== undefined) return this._defaultMinCacheAmount + const avgCPUUsagePercent = Memory.stats.cpu.usage / Game.cpu.limit - const avgCPUUsagePercent = Memory.stats.cpu.usage / Game.cpu.limit + return (this._defaultMinCacheAmount = Math.floor(Math.pow(avgCPUUsagePercent * 10, 2.2)) + 1) + } - return (this._defaultMinCacheAmount = - Math.floor(Math.pow(avgCPUUsagePercent * 10, 2.2)) + 1) - } + _maxCommunes: number + get maxCommunes() { + return (this._maxCommunes = Math.round(Game.cpu.limit / 10)) + } + + _avgCommunesPerMineral: number + get avgCommunesPerMineral() { + let sum = 0 - _maxCommunes: number - get maxCommunes() { - return (this._maxCommunes = Math.round(Game.cpu.limit / 10)) + for (const mineralType in this.mineralNodes) { + sum += this.mineralNodes[mineralType as MineralConstant] } - _avgCommunesPerMineral: number - get avgCommunesPerMineral() { - let sum = 0 + const avg = roundTo(sum / minerals.length, 2) + return (this._avgCommunesPerMineral = avg) + } - for (const mineralType in this.mineralNodes) { - sum += this.mineralNodes[mineralType as MineralConstant] - } + _compoundPriority: Partial<{ [key in MineralCompoundConstant]: number }> + get compoundPriority() { + if (this._compoundPriority) return this._compoundPriority - const avg = roundTo(sum / minerals.length, 2) - return (this._avgCommunesPerMineral = avg) - } + this._compoundPriority = {} - _compoundPriority: Partial<{ [key in MineralCompoundConstant]: number }> - get compoundPriority() { - if (this._compoundPriority) return this._compoundPriority + return this._compoundPriority + } - this._compoundPriority = {} + _funnelOrder: string[] + /** + * Commune names sorted by funnel priority + */ + get funnelOrder() { + if (this._funnelOrder) return this._funnelOrder - return this._compoundPriority - } + let funnelOrder: string[] = [] + + // organize RCLs 1-7 - _funnelOrder: string[] + const communesByLevel: { [level: string]: [string, number][] } = {} + for (let i = 6; i < 8; i++) communesByLevel[i] = [] - /** - * Commune names sorted by funnel priority - */ - get funnelOrder() { - if (this._funnelOrder) return this._funnelOrder + for (const roomName of collectiveManager.communes) { + const room = Game.rooms[roomName] + if (!room.terminal) continue - let funnelOrder: string[] = [] + const { controller } = room + if (!communesByLevel[controller.level]) continue - // organize RCLs 1-7 + communesByLevel[controller.level].push([ + roomName, + controller.progressTotal / controller.progress, + ]) + } + + for (const level in communesByLevel) { + // Sort by score - const communesByLevel: { [level: string]: [string, number][] } = {} - for (let i = 6; i < 8; i++) communesByLevel[i] = [] + communesByLevel[level].sort((a, b) => { + return a[1] - b[1] + }) - for (const roomName of collectiveManager.communes) { - const room = Game.rooms[roomName] - if (!room.terminal) continue + funnelOrder = funnelOrder.concat(communesByLevel[level].map(tuple => tuple[0])) + } - const { controller } = room - if (!communesByLevel[controller.level]) continue + return (this._funnelOrder = funnelOrder) + } - communesByLevel[controller.level].push([ - roomName, - controller.progressTotal / controller.progress, - ]) - } + _funnelingRoomNames: Set + /** + * The names of rooms currently being funneled + */ + get funnelingRoomNames() { + if (this._funnelingRoomNames) return this._funnelingRoomNames - for (const level in communesByLevel) { - // Sort by score + const funnelingRoomNames = new Set() + const funnelTargets = this.funnelOrder - communesByLevel[level].sort((a, b) => { - return a[1] - b[1] - }) + for (const roomName of funnelTargets) { + const room = Game.rooms[roomName] + if (!room.considerFunneled) { + funnelingRoomNames.add(roomName) + break + } - funnelOrder = funnelOrder.concat(communesByLevel[level].map(tuple => tuple[0])) - } + // Consider it funneled - return (this._funnelOrder = funnelOrder) + funnelingRoomNames.add(roomName) } - _resourcesInStoringStructures: Partial<{ [key in ResourceConstant]: number }> - get resourcesInStoringStructures() { - if (this._resourcesInStoringStructures) return this._resourcesInStoringStructures + this._funnelingRoomNames = funnelingRoomNames + return funnelingRoomNames + } - this._resourcesInStoringStructures = {} + _resourcesInStoringStructures: Partial<{ [key in ResourceConstant]: number }> + get resourcesInStoringStructures() { + if (this._resourcesInStoringStructures) return this._resourcesInStoringStructures - for (const roomName of collectiveManager.communes) { - const room = Game.rooms[roomName] - const resources = room.roomManager.resourcesInStoringStructures + this._resourcesInStoringStructures = {} - for (const key in resources) { - const resource = key as unknown as ResourceConstant + for (const roomName of collectiveManager.communes) { + const room = Game.rooms[roomName] + const resources = room.roomManager.resourcesInStoringStructures - if (!this._resourcesInStoringStructures[resource]) - this._resourcesInStoringStructures[resource] = resources[resource] - this._resourcesInStoringStructures[resource] = resources[resource] - } - } + for (const key in resources) { + const resource = key as unknown as ResourceConstant - return this._resourcesInStoringStructures + if (!this._resourcesInStoringStructures[resource]) + this._resourcesInStoringStructures[resource] = resources[resource] + this._resourcesInStoringStructures[resource] = resources[resource] + } } - _maxCSitesPerRoom: number - /** - * The largest amount of construction sites we can try to have in a room - */ - get maxCSitesPerRoom() { - if (this._maxCSitesPerRoom) return this._maxCSitesPerRoom + return this._resourcesInStoringStructures + } - return Math.max(Math.min(MAX_CONSTRUCTION_SITES / collectiveManager.communes.size, 20), 3) - } + _maxCSitesPerRoom: number + /** + * The largest amount of construction sites we can try to have in a room + */ + get maxCSitesPerRoom() { + if (this._maxCSitesPerRoom) return this._maxCSitesPerRoom + + return Math.max(Math.min(MAX_CONSTRUCTION_SITES / collectiveManager.communes.size, 20), 3) + } } export const collectiveManager = new CollectiveManager() diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index 849ac3c9b..a3c7622a1 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -68,134 +68,131 @@ import { CommuneUtils } from 'room/commune/communeUtils' import { RoomDataManager } from 'room/roomData' import { CommuneDataManager } from 'room/commune/communeData' import { MyCreepUtils } from 'room/creeps/myCreepUtils' -import { CreepMoveUtils } from 'room/creeps/creepMoveUtils' +import { CreepMoveProcs } from 'room/creeps/creepMoveUtils' export function profilerRegister() { - - // Classes - - profiler.registerClass(CollectiveManager, 'CollectiveManager') - profiler.registerClass(StatsManager, 'StatsManager') - profiler.registerClass(PlayerManager, 'PlayerManager') - profiler.registerClass(RequestsManager, 'RequestsManager') - profiler.registerClass(CreepOrganizer, 'CreepOrganizer') - profiler.registerClass(PowerCreepOrganizer, 'PowerCreepOrganizer') - profiler.registerClass(SimpleAllies, 'SimpleAllies') - profiler.registerClass(FlagManager, 'FlagManager') - profiler.registerClass(FeatureFlagManager, 'FeatureFlagManager') - profiler.registerClass(MarketManager, 'MarketOrdersManager') - profiler.registerClass(ConstructionSiteManager, 'ConstructionSiteManager') - profiler.registerClass(TransactionsManager, 'TransactionsManager') - profiler.registerClass(GarbageCollector, 'GarbageCollector') - profiler.registerClass(EndTickManager, 'EndTickManager') - profiler.registerClass(MapVisualsManager, 'MapVisualsManager') - profiler.registerClass(MigrationManager, 'MigrationManager') - profiler.registerClass(RoomPruningManager, 'RoomPruningManager') - profiler.registerClass(ErrorExporter, 'ErrorExporter') - profiler.registerClass(RespawnManager, 'RespawnManager') - profiler.registerClass(BasePlans, 'BasePlans') - profiler.registerClass(RampartPlans, 'RampartPlans') - profiler.registerClass(CustomPathFinder, 'CustomPathFinder') - profiler.registerClass(MarketUtils, 'MarketUtils') - profiler.registerClass(Utils, 'Utils') - profiler.registerClass(CreepUtils, 'CreepUtils') - profiler.registerClass(MyCreepUtils, 'MyCreepUtils') - profiler.registerClass(CreepMoveUtils, 'CreepMoveUtils') - - // Room classes - - profiler.registerClass(CommuneManager, 'CommuneManager') - profiler.registerClass(RoomManager, 'RoomManager') - profiler.registerClass(SpawningStructuresManager, 'SpawningStructuresManager') - profiler.registerClass(SpawnRequestsManager, 'SpawnRequestsManager') - profiler.registerClass(TerminalManager, 'TerminalManager') - profiler.registerClass(LabManager, 'LabManager') - profiler.registerClass(FactoryManager, 'FactoryManager') - profiler.registerClass(CommunePlanner, 'CommunePlanner') - profiler.registerClass(ConstructionManager, 'ConstructionManager') - profiler.registerClass(ObserverManager, 'ObserverManager') - profiler.registerClass(RemotesManager, 'RemotesManager') - profiler.registerClass(HaulRequestManager, 'HaulRequestManager') - profiler.registerClass(SourceManager, 'SourceManager') - profiler.registerClass(WorkRequestManager, 'WorkRequestManager') - profiler.registerClass(Quad, 'Quad') - profiler.registerClass(DynamicSquad, 'DynamicSquad') - profiler.registerClass(Duo, 'Duo') - profiler.registerClass(EndTickCreepManager, 'EndTickCreepManager') - profiler.registerClass(ContainerManager, 'ContainerManager') - profiler.registerClass(DroppedResourceManager, 'DroppedResourceManager') - profiler.registerClass(RuinsManager, 'RuinManager') - profiler.registerClass(TombstoneManager, 'TombstoneManager') - profiler.registerClass(HaulerNeedManager, 'HaulerNeedManager') - profiler.registerClass(LinkManager, 'LinkManager') - profiler.registerClass(StoringStructuresManager, 'StoringStructuresManager') - profiler.registerClass(TowerManager, 'TowerManager') - profiler.registerClass(DefenceManager, 'DefenceManager') - profiler.registerClass(PowerSpawnsManager, 'PowerSpawnsManager') - profiler.registerClass(NukerManager, 'NukerManager') - profiler.registerClass(CombatRequestManager, 'CombatRequestManager') - profiler.registerClass(HaulerSizeManager, 'HaulerSize') - profiler.registerClass(RoomVisualsManager, 'RoomVisualsManager') - profiler.registerClass(Operator, 'Operator') - profiler.registerClass(RoomNameUtils, 'RoomNameUtils') - profiler.registerClass(SpawnUtils, 'SpawnUtils') - profiler.registerClass(RoomUtils, 'RoomUtils') - profiler.registerClass(CommuneUtils, 'CommuneUtils') - profiler.registerClass(RoomDataManager, 'RoomDataManager') - profiler.registerClass(CommuneDataManager, 'CommuneDataManager') - - // Objects - - profiler.registerObject(global.debugUtils, 'debugUtils') - - // Room objects - - - - // Functions - - profiler.registerFN(originalLoop, 'loop') - profiler.registerFN(outOfBucket, 'outOfBucket') - - // codec functions - - profiler.registerFN(packId, 'packId') - profiler.registerFN(unpackId, 'unpackId') - profiler.registerFN(packIdList, 'packIdList') - profiler.registerFN(unpackIdList, 'unpackIdList') - profiler.registerFN(packCoord, 'packCoord') - profiler.registerFN(packXYAsCoord, 'packXYAsCoord') - profiler.registerFN(unpackCoord, 'unpackCoord') - profiler.registerFN(unpackCoordAsPos, 'unpackCoordAsPos') - profiler.registerFN(reversePosList, 'reversePosList') - profiler.registerFN(packCoordList, 'packCoordList') - profiler.registerFN(unpackCoordList, 'unpackCoordList') - profiler.registerFN(unpackCoordListAsPosList, 'unpackCoordListAsPosList') - profiler.registerFN(packRoomName, 'packRoomName') - profiler.registerFN(unpackRoomName, 'unpackRoomName') - profiler.registerFN(packPos, 'packPos') - profiler.registerFN(packXYAsPos, 'packXYAsPos') - profiler.registerFN(unpackPos, 'unpackPos') - profiler.registerFN(packPosList, 'packPosList') - profiler.registerFN(unpackPosList, 'unpackPosList') - profiler.registerFN(unpackPosAt, 'unpackPosAt') - profiler.registerFN(packBasePlanCoord, 'packBasePlanCoord') - profiler.registerFN(unpackBasePlanCoords, 'unpackBasePlanCoords') - profiler.registerFN(packRampartPlanCoord, 'packRampartPlanCoord') - profiler.registerFN(unpackRampartPlanCoord, 'unpackRampartPlanCoord') - profiler.registerFN(packStampAnchors, 'packStampAnchors') - profiler.registerFN(unpackStampAnchors, 'unpackStampAnchors') - - // Room functions - - profiler.registerFN(minCutToExit, 'minCutToExit') - - // conditional or complicated - - if (global.userScript) profiler.registerFN(global.userScript, 'userScript') - if (global.collectivizer) profiler.registerClass(global.collectivizer, 'collectivizer') - - for (const creepClass of new Set(Object.values(creepClasses))) { - profiler.registerClass(creepClass, creepClass.toString().match(/ (\w+)/)[1]) - } + // Classes + + profiler.registerClass(CollectiveManager, 'CollectiveManager') + profiler.registerClass(StatsManager, 'StatsManager') + profiler.registerClass(PlayerManager, 'PlayerManager') + profiler.registerClass(RequestsManager, 'RequestsManager') + profiler.registerClass(CreepOrganizer, 'CreepOrganizer') + profiler.registerClass(PowerCreepOrganizer, 'PowerCreepOrganizer') + profiler.registerClass(SimpleAllies, 'SimpleAllies') + profiler.registerClass(FlagManager, 'FlagManager') + profiler.registerClass(FeatureFlagManager, 'FeatureFlagManager') + profiler.registerClass(MarketManager, 'MarketOrdersManager') + profiler.registerClass(ConstructionSiteManager, 'ConstructionSiteManager') + profiler.registerClass(TransactionsManager, 'TransactionsManager') + profiler.registerClass(GarbageCollector, 'GarbageCollector') + profiler.registerClass(EndTickManager, 'EndTickManager') + profiler.registerClass(MapVisualsManager, 'MapVisualsManager') + profiler.registerClass(MigrationManager, 'MigrationManager') + profiler.registerClass(RoomPruningManager, 'RoomPruningManager') + profiler.registerClass(ErrorExporter, 'ErrorExporter') + profiler.registerClass(RespawnManager, 'RespawnManager') + profiler.registerClass(BasePlans, 'BasePlans') + profiler.registerClass(RampartPlans, 'RampartPlans') + profiler.registerClass(CustomPathFinder, 'CustomPathFinder') + profiler.registerClass(MarketUtils, 'MarketUtils') + profiler.registerClass(Utils, 'Utils') + profiler.registerClass(CreepUtils, 'CreepUtils') + profiler.registerClass(MyCreepUtils, 'MyCreepUtils') + profiler.registerClass(CreepMoveProcs, 'CreepMoveUtils') + + // Room classes + + profiler.registerClass(CommuneManager, 'CommuneManager') + profiler.registerClass(RoomManager, 'RoomManager') + profiler.registerClass(SpawningStructuresManager, 'SpawningStructuresManager') + profiler.registerClass(SpawnRequestsManager, 'SpawnRequestsManager') + profiler.registerClass(TerminalManager, 'TerminalManager') + profiler.registerClass(LabManager, 'LabManager') + profiler.registerClass(FactoryManager, 'FactoryManager') + profiler.registerClass(CommunePlanner, 'CommunePlanner') + profiler.registerClass(ConstructionManager, 'ConstructionManager') + profiler.registerClass(ObserverManager, 'ObserverManager') + profiler.registerClass(RemotesManager, 'RemotesManager') + profiler.registerClass(HaulRequestManager, 'HaulRequestManager') + profiler.registerClass(SourceManager, 'SourceManager') + profiler.registerClass(WorkRequestManager, 'WorkRequestManager') + profiler.registerClass(Quad, 'Quad') + profiler.registerClass(DynamicSquad, 'DynamicSquad') + profiler.registerClass(Duo, 'Duo') + profiler.registerClass(EndTickCreepManager, 'EndTickCreepManager') + profiler.registerClass(ContainerManager, 'ContainerManager') + profiler.registerClass(DroppedResourceManager, 'DroppedResourceManager') + profiler.registerClass(RuinsManager, 'RuinManager') + profiler.registerClass(TombstoneManager, 'TombstoneManager') + profiler.registerClass(HaulerNeedManager, 'HaulerNeedManager') + profiler.registerClass(LinkManager, 'LinkManager') + profiler.registerClass(StoringStructuresManager, 'StoringStructuresManager') + profiler.registerClass(TowerManager, 'TowerManager') + profiler.registerClass(DefenceManager, 'DefenceManager') + profiler.registerClass(PowerSpawnsManager, 'PowerSpawnsManager') + profiler.registerClass(NukerManager, 'NukerManager') + profiler.registerClass(CombatRequestManager, 'CombatRequestManager') + profiler.registerClass(HaulerSizeManager, 'HaulerSize') + profiler.registerClass(RoomVisualsManager, 'RoomVisualsManager') + profiler.registerClass(Operator, 'Operator') + profiler.registerClass(RoomNameUtils, 'RoomNameUtils') + profiler.registerClass(SpawnUtils, 'SpawnUtils') + profiler.registerClass(RoomUtils, 'RoomUtils') + profiler.registerClass(CommuneUtils, 'CommuneUtils') + profiler.registerClass(RoomDataManager, 'RoomDataManager') + profiler.registerClass(CommuneDataManager, 'CommuneDataManager') + + // Objects + + profiler.registerObject(global.debugUtils, 'debugUtils') + + // Room objects + + // Functions + + profiler.registerFN(originalLoop, 'loop') + profiler.registerFN(outOfBucket, 'outOfBucket') + + // codec functions + + profiler.registerFN(packId, 'packId') + profiler.registerFN(unpackId, 'unpackId') + profiler.registerFN(packIdList, 'packIdList') + profiler.registerFN(unpackIdList, 'unpackIdList') + profiler.registerFN(packCoord, 'packCoord') + profiler.registerFN(packXYAsCoord, 'packXYAsCoord') + profiler.registerFN(unpackCoord, 'unpackCoord') + profiler.registerFN(unpackCoordAsPos, 'unpackCoordAsPos') + profiler.registerFN(reversePosList, 'reversePosList') + profiler.registerFN(packCoordList, 'packCoordList') + profiler.registerFN(unpackCoordList, 'unpackCoordList') + profiler.registerFN(unpackCoordListAsPosList, 'unpackCoordListAsPosList') + profiler.registerFN(packRoomName, 'packRoomName') + profiler.registerFN(unpackRoomName, 'unpackRoomName') + profiler.registerFN(packPos, 'packPos') + profiler.registerFN(packXYAsPos, 'packXYAsPos') + profiler.registerFN(unpackPos, 'unpackPos') + profiler.registerFN(packPosList, 'packPosList') + profiler.registerFN(unpackPosList, 'unpackPosList') + profiler.registerFN(unpackPosAt, 'unpackPosAt') + profiler.registerFN(packBasePlanCoord, 'packBasePlanCoord') + profiler.registerFN(unpackBasePlanCoords, 'unpackBasePlanCoords') + profiler.registerFN(packRampartPlanCoord, 'packRampartPlanCoord') + profiler.registerFN(unpackRampartPlanCoord, 'unpackRampartPlanCoord') + profiler.registerFN(packStampAnchors, 'packStampAnchors') + profiler.registerFN(unpackStampAnchors, 'unpackStampAnchors') + + // Room functions + + profiler.registerFN(minCutToExit, 'minCutToExit') + + // conditional or complicated + + if (global.userScript) profiler.registerFN(global.userScript, 'userScript') + if (global.collectivizer) profiler.registerClass(global.collectivizer, 'collectivizer') + + for (const creepClass of new Set(Object.values(creepClasses))) { + profiler.registerClass(creepClass, creepClass.toString().match(/ (\w+)/)[1]) + } } diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index e86fd61b4..8281c74b9 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -55,6 +55,7 @@ import { ConstructionManager } from 'room/construction/construction' import { roomNameUtils } from 'room/roomNameUtils' import { LogTypes, customLog } from 'utils/logging' import { communeUtils } from './communeUtils' +import { communeProc } from './communeProcs' export type ResourceTargets = { min: Partial<{[key in ResourceConstant]: number }> @@ -166,7 +167,6 @@ export class CommuneManager { if (utils.isTickInterval(100)) { - delete this._maxUpgradeStrength delete this._upgradeStructure delete this._hasSufficientRoads delete this._resourceTargets @@ -207,7 +207,7 @@ export class CommuneManager { roomMemory[RoomMemoryKeys.greatestRCL] = room.controller.level } - communeUtils.getRCLUpdate(room) + communeProc.getRCLUpdate(room) if (!roomMemory[RoomMemoryKeys.combatRequests]) roomMemory[RoomMemoryKeys.combatRequests] = [] @@ -574,60 +574,11 @@ export class CommuneManager { ) } - private _maxUpgradeStrength: number - get maxUpgradeStrength() { - if (this._maxUpgradeStrength !== undefined) return this._maxUpgradeStrength - - const upgradeStructure = this.upgradeStructure - if (!upgradeStructure) return this.findNudeMaxUpgradeStrength() - - // Container - - if (upgradeStructure.structureType === STRUCTURE_CONTAINER) { - return (this._maxUpgradeStrength = - upgradeStructure.store.getCapacity() / - (4 + this.room.memory[RoomMemoryKeys.upgradePath].length / packedPosLength)) - } - - // Link - - const hubLink = this.room.roomManager.hubLink - const sourceLinks = this.sourceLinks - - // If there are transfer links, max out partMultiplier to their ability - - this._maxUpgradeStrength = 0 - - if (hubLink && hubLink.isRCLActionable) { - const range = getRange(upgradeStructure.pos, hubLink.pos) - - // Increase strength by throughput - - this._maxUpgradeStrength += findLinkThroughput(range) * 0.7 - } - - for (let i = 0; i < sourceLinks.length; i++) { - const sourceLink = sourceLinks[i] - - if (!sourceLink) continue - if (!sourceLink.isRCLActionable) continue - - const range = getRange(sourceLink.pos, upgradeStructure.pos) - - // Increase strength by throughput - - this._maxUpgradeStrength += - findLinkThroughput(range, this.room.estimatedSourceIncome[i]) * 0.7 - } - - return this._maxUpgradeStrength - } - /** * The max upgrade strength when we have no local storing structure */ findNudeMaxUpgradeStrength() { - return (this._maxUpgradeStrength = 100) + return 100 } private _hasSufficientRoads: boolean diff --git a/src/room/commune/communeData.ts b/src/room/commune/communeData.ts index 5ab3b06c0..066085069 100644 --- a/src/room/commune/communeData.ts +++ b/src/room/commune/communeData.ts @@ -6,6 +6,7 @@ interface CommuneData { */ registeredRCL: number generalRepairStructureCoords: Set + maxUpgradeStrength: number } /** diff --git a/src/room/commune/communeProcs.ts b/src/room/commune/communeProcs.ts new file mode 100644 index 000000000..ce8ad7d6b --- /dev/null +++ b/src/room/commune/communeProcs.ts @@ -0,0 +1,46 @@ +import { communeDataManager } from './communeData' +import { communeUtils } from './communeUtils' + +/** + * Minor processes for communes + */ +class CommuneProc { + registerFunneling(room: Room) { + // We need a terminal and for it be to active + if (!room.terminal || room.controller.level < 6) return + + const desiredStrength = communeUtils.getDesiredUpgraderStrength(room) + const maxStrength = communeUtils.getMaxUpgradeStrength(room) + // We do not have enough desire + if (desiredStrength < maxStrength) return + + // We have enough desired strength to register our room as fully funneled + room.considerFunneled = true + } + + getRCLUpdate(room: Room) { + const data = communeDataManager.data[room.name] + // If the registered RCL is the actual RCL, we're good. No need to update anything + if (data.registeredRCL === room.controller.level) { + return + } + // If things haven't been registered yet + if (data.registeredRCL === undefined) { + data.registeredRCL = room.controller.level + return + } + + this.updateRegisteredRCL(room) + } + + private updateRegisteredRCL(room: Room) { + const communeData = communeDataManager.data[room.name] + /* const roomData = roomDataManager.data[room.name] */ + + delete communeData.generalRepairStructureCoords + + communeData.registeredRCL = room.controller.level + } +} + +export const communeProc = new CommuneProc() diff --git a/src/room/commune/communeUtils.ts b/src/room/commune/communeUtils.ts index 4eaf6fd0e..06b116182 100644 --- a/src/room/commune/communeUtils.ts +++ b/src/room/commune/communeUtils.ts @@ -1,36 +1,17 @@ import { packCoord, unpackCoord } from "other/codec" import { communeDataManager } from "./communeData" import { roomDataManager } from "room/roomData" -import { packAsNum, unpackNumAsCoord } from "utils/utils" -import { Result, generalRepairStructureTypes, structureTypesToProtectSet } from "international/constants" +import { findLinkThroughput, getRange, packAsNum, unpackNumAsCoord } from 'utils/utils' +import { + Result, + RoomMemoryKeys, + generalRepairStructureTypes, + packedPosLength, + structureTypesToProtectSet, +} from 'international/constants' +import { collectiveManager } from "international/collective" export class CommuneUtils { - getRCLUpdate(room: Room) { - - const data = communeDataManager.data[room.name] - // If the registered RCL is the actual RCL, we're good. No need to update anything - if (data.registeredRCL === room.controller.level) { - return - } - // If things haven't been registered yet - if (data.registeredRCL === undefined) { - data.registeredRCL = room.controller.level - return - } - - this.updateRegisteredRCL(room) - } - - private updateRegisteredRCL(room: Room) { - - const communeData = communeDataManager.data[room.name] - /* const roomData = roomDataManager.data[room.name] */ - - delete communeData.generalRepairStructureCoords - - communeData.registeredRCL = room.controller.level - } - getGeneralRepairStructures(room: Room) { if (room.generalRepairStructures) return room.generalRepairStructures @@ -44,16 +25,23 @@ export class CommuneUtils { const basePlans = room.roomManager.basePlans for (const packedCoord in basePlans.map) { - const coordData = basePlans.map[packedCoord] for (const data of coordData) { if (data.minRCL > room.controller.level) continue - if (!generalRepairStructureTypes.has(data.structureType as (STRUCTURE_ROAD | STRUCTURE_CONTAINER))) break + if ( + !generalRepairStructureTypes.has( + data.structureType as STRUCTURE_ROAD | STRUCTURE_CONTAINER, + ) + ) + break structureCoords.add(packedCoord) const coord = unpackCoord(packedCoord) - const structure = room.findStructureAtCoord(coord, structure => generalRepairStructureTypes.has(structure.structureType)) + const structure = room.findStructureAtCoord( + coord, + structure => generalRepairStructureTypes.has(structure.structureType), + ) if (!structure) continue repairTargets.push(structure) @@ -68,16 +56,17 @@ export class CommuneUtils { } private getGeneralRepairStructuresFromCoords(room: Room) { - const repairTargets: (StructureContainer | StructureRoad)[] = [] const structureCoords = communeDataManager.data[room.name].generalRepairStructureCoords if (!structureCoords) return repairTargets for (const packedCoord of structureCoords) { - const coord = unpackCoord(packedCoord) - const structure = room.findStructureAtCoord(coord, structure => generalRepairStructureTypes.has(structure.structureType)) + const structure = room.findStructureAtCoord( + coord, + structure => generalRepairStructureTypes.has(structure.structureType), + ) if (!structure) return [] repairTargets.push(structure) @@ -100,31 +89,97 @@ export class CommuneUtils { if (data.minRCL > room.controller.level) continue if ( - data.coversStructure && - !room.coordHasStructureTypes(structure.pos, structureTypesToProtectSet) + data.coversStructure && + !room.coordHasStructureTypes(structure.pos, structureTypesToProtectSet) ) { - continue + continue } if (data.buildForNuke) { - if (!nukeTargetCoords[packAsNum(structure.pos)]) continue + if (!nukeTargetCoords[packAsNum(structure.pos)]) continue - repairTargets.push(structure) - continue + repairTargets.push(structure) + continue } if (data.buildForThreat) { - if (!buildSecondMincutLayer) continue + if (!buildSecondMincutLayer) continue - repairTargets.push(structure) - continue + repairTargets.push(structure) + continue } repairTargets.push(structure) - } + } room.rampartRepairStructures = repairTargets return repairTargets } + + /** + * The presently desired upgrader strength for the commune based on energy thresholds + */ + getDesiredUpgraderStrength(room: Room) { + const strength = Math.pow( + (room.roomManager.resourcesInStoringStructures.energy - + room.communeManager.storedEnergyUpgradeThreshold * 0.5) / + (6000 + room.controller.level * 2000), + 2, + ) + + return strength + } + + getMaxUpgradeStrength(room: Room) { + const data = communeDataManager.data[room.name] + if (data.maxUpgradeStrength !== undefined && !room.roomManager.structureUpdate) + return data.maxUpgradeStrength + + let maxUpgradeStrength = 0 + + const upgradeStructure = room.communeManager.upgradeStructure + if (!upgradeStructure) return room.communeManager.findNudeMaxUpgradeStrength() + + // Container + + if (upgradeStructure.structureType === STRUCTURE_CONTAINER) { + return (maxUpgradeStrength = + upgradeStructure.store.getCapacity() / + (4 + room.memory[RoomMemoryKeys.upgradePath].length / packedPosLength)) + } + + // Link + + const hubLink = room.roomManager.hubLink + const sourceLinks = room.communeManager.sourceLinks + + // If there are transfer links, max out partMultiplier to their ability + + maxUpgradeStrength = 0 + + if (hubLink && hubLink.isRCLActionable) { + const range = getRange(upgradeStructure.pos, hubLink.pos) + + // Increase strength by throughput + + maxUpgradeStrength += findLinkThroughput(range) * 0.7 + } + + for (let i = 0; i < sourceLinks.length; i++) { + const sourceLink = sourceLinks[i] + + if (!sourceLink) continue + if (!sourceLink.isRCLActionable) continue + + const range = getRange(sourceLink.pos, upgradeStructure.pos) + + // Increase strength by throughput + + maxUpgradeStrength += findLinkThroughput(range, room.estimatedSourceIncome[i]) * 0.7 + } + + data.maxUpgradeStrength = maxUpgradeStrength + return maxUpgradeStrength + } } export const communeUtils = new CommuneUtils() diff --git a/src/room/commune/spawning/spawnRequests.ts b/src/room/commune/spawning/spawnRequests.ts index 99d84424c..9b83afe75 100644 --- a/src/room/commune/spawning/spawnRequests.ts +++ b/src/room/commune/spawning/spawnRequests.ts @@ -1,23 +1,23 @@ import { - WorkRequestKeys, - CombatRequestKeys, - containerUpkeepCost, - customColors, - rampartUpkeepCost, - roadUpkeepCost, - packedPosLength, - decayCosts, - CreepMemoryKeys, - RoomMemoryKeys, - RoomTypes, + WorkRequestKeys, + CombatRequestKeys, + containerUpkeepCost, + customColors, + rampartUpkeepCost, + roadUpkeepCost, + packedPosLength, + decayCosts, + CreepMemoryKeys, + RoomMemoryKeys, + RoomTypes, } from 'international/constants' import { - findCarryPartsRequired, - findLinkThroughput, - getRangeXY, - getRange, - randomRange, - roundTo, + findCarryPartsRequired, + findLinkThroughput, + getRangeXY, + getRange, + randomRange, + roundTo, } from 'utils/utils' import { collectiveManager } from 'international/collective' import { packPos, unpackPosList } from 'other/codec' @@ -30,449 +30,440 @@ import { SpawnRequestConstructor, spawnRequestConstructors } from './spawnReques import { communeUtils } from '../communeUtils' export class SpawnRequestsManager { - communeManager: CommuneManager - - rawSpawnRequestsArgs: (SpawnRequestArgs | false)[] - spawnEnergyCapacity: number - minRemotePriority = 9 - /** - * The min priority to be placed after active remotes - */ - activeRemotePriority: number - minHaulerCost: number - - constructor(communeManager: CommuneManager) { - this.communeManager = communeManager - } - - run() { - this.rawSpawnRequestsArgs = [] - this.spawnEnergyCapacity = this.communeManager.room.energyCapacityAvailable - this.activeRemotePriority = this.minRemotePriority - this.minHaulerCost = Math.min( - Memory.rooms[this.communeManager.room.name][RoomMemoryKeys.minHaulerCost], - this.spawnEnergyCapacity, - ) - - this.sourceHarvester() - this.haulerForCommune() - this.remoteSourceRoles() - this.generalRemoteRoles() - this.mineralHarvester() - this.hubHauler() - this.fastFiller() - this.defenders() - this.maintainers() - this.builders() - this.controllerUpgraders() - this.scout() - this.workRequestRoles() - this.requestHauler() - this.antifa() - - const spawnRequestsArgs = this.rawSpawnRequestsArgs.filter( - args => !!args, - ) as SpawnRequestArgs[] - - // Sort in descending priority - - spawnRequestsArgs.sort((a, b) => { - return a.priority - b.priority - }) - - return spawnRequestsArgs - } - - private sourceHarvester() { - const sources = this.communeManager.room.roomManager.communeSources - for (let sourceIndex = 0; sourceIndex < sources.length; sourceIndex++) { - - const source = sources[sourceIndex] - const spawnTarget = source.pos - - // Construct requests for sourceHarvesters - - this.rawSpawnRequestsArgs.push( - ((): SpawnRequestArgs | false => { - const role = 'sourceHarvester' - const spawnGroup = this.communeManager.room.creepsOfSource[sourceIndex] - const priority = (sourceIndex === 0 ? 0 : 1) + spawnGroup.length - const maxCostPerCreep = this.communeManager.room.myCreepsByRole.sourceHarvester.length - ? this.spawnEnergyCapacity - : this.communeManager.room.energyAvailable - - if (this.spawnEnergyCapacity >= 850) { - let defaultParts: BodyPartConstant[] = [CARRY] - let workAmount = 6 - - // Account for power regenerating sources - - const effect = source.effectsData.get(PWR_REGEN_SOURCE) as PowerEffect - if (effect) { - workAmount += Math.round( - POWER_INFO[PWR_REGEN_SOURCE].effect[effect.level - 1] / - POWER_INFO[PWR_REGEN_SOURCE].period / - HARVEST_POWER, - ) - } - - if (workAmount % 2 !== 0) defaultParts.push(MOVE) - - for (let i = 1; i <= workAmount; i++) { - defaultParts.push(WORK) - if (i % 2 === 0) defaultParts.push(MOVE) - if ((i + 1) % 5 === 0) defaultParts.push(CARRY) - } - - return { - type: SpawnRequestTypes.individualUniform, - role, - defaultParts, - extraParts: [], - partsMultiplier: 1, - creepsQuota: 1, - minCostPerCreep: 300, - priority, - maxCostPerCreep, - spawnGroup: spawnGroup, - spawnTarget, - memoryAdditions: { - [CreepMemoryKeys.sourceIndex]: sourceIndex, - [CreepMemoryKeys.preferRoads]: true, - }, - } - } - - if (this.spawnEnergyCapacity >= 800) { - return { - type: SpawnRequestTypes.individualUniform, - role, - defaultParts: [CARRY], - extraParts: [WORK, MOVE, WORK], - partsMultiplier: 3, - creepsQuota: 1, - minCostPerCreep: 250, - priority, - maxCostPerCreep, - spawnGroup: spawnGroup, - spawnTarget, - memoryAdditions: { - [CreepMemoryKeys.sourceIndex]: sourceIndex, - [CreepMemoryKeys.preferRoads]: true, - }, - } - } + communeManager: CommuneManager + + rawSpawnRequestsArgs: (SpawnRequestArgs | false)[] + spawnEnergyCapacity: number + minRemotePriority = 9 + /** + * The min priority to be placed after active remotes + */ + activeRemotePriority: number + minHaulerCost: number + + constructor(communeManager: CommuneManager) { + this.communeManager = communeManager + } + + run() { + this.rawSpawnRequestsArgs = [] + this.spawnEnergyCapacity = this.communeManager.room.energyCapacityAvailable + this.activeRemotePriority = this.minRemotePriority + this.minHaulerCost = Math.min( + Memory.rooms[this.communeManager.room.name][RoomMemoryKeys.minHaulerCost], + this.spawnEnergyCapacity, + ) + + this.sourceHarvester() + this.haulerForCommune() + this.remoteSourceRoles() + this.generalRemoteRoles() + this.mineralHarvester() + this.hubHauler() + this.fastFiller() + this.defenders() + this.maintainers() + this.builders() + this.controllerUpgraders() + this.scout() + this.workRequestRoles() + this.requestHauler() + this.antifa() + + const spawnRequestsArgs = this.rawSpawnRequestsArgs.filter(args => !!args) as SpawnRequestArgs[] + + // Sort in descending priority + + spawnRequestsArgs.sort((a, b) => { + return a.priority - b.priority + }) + + return spawnRequestsArgs + } + + private sourceHarvester() { + const sources = this.communeManager.room.roomManager.communeSources + for (let sourceIndex = 0; sourceIndex < sources.length; sourceIndex++) { + const source = sources[sourceIndex] + const spawnTarget = source.pos + + // Construct requests for sourceHarvesters + + this.rawSpawnRequestsArgs.push( + ((): SpawnRequestArgs | false => { + const role = 'sourceHarvester' + const spawnGroup = this.communeManager.room.creepsOfSource[sourceIndex] + const priority = (sourceIndex === 0 ? 0 : 1) + spawnGroup.length + const maxCostPerCreep = this.communeManager.room.myCreepsByRole.sourceHarvester.length + ? this.spawnEnergyCapacity + : this.communeManager.room.energyAvailable + + if (this.spawnEnergyCapacity >= 850) { + let defaultParts: BodyPartConstant[] = [CARRY] + let workAmount = 6 + + // Account for power regenerating sources + + const effect = source.effectsData.get(PWR_REGEN_SOURCE) as PowerEffect + if (effect) { + workAmount += Math.round( + POWER_INFO[PWR_REGEN_SOURCE].effect[effect.level - 1] / + POWER_INFO[PWR_REGEN_SOURCE].period / + HARVEST_POWER, + ) + } - if (this.spawnEnergyCapacity >= 750) { - return { - type: SpawnRequestTypes.individualUniform, - role, - defaultParts: [], - extraParts: [WORK, MOVE, WORK], - partsMultiplier: 3, - creepsQuota: 1, - minCostPerCreep: 200, - priority, - maxCostPerCreep, - spawnGroup: spawnGroup, - spawnTarget, - memoryAdditions: { - [CreepMemoryKeys.sourceIndex]: sourceIndex, - [CreepMemoryKeys.preferRoads]: true, - }, - } - } + if (workAmount % 2 !== 0) defaultParts.push(MOVE) - if (this.spawnEnergyCapacity >= 600) { - return { - type: SpawnRequestTypes.individualUniform, - role, - defaultParts: [MOVE, CARRY], - extraParts: [WORK], - partsMultiplier: 6, - creepsQuota: 1, - minCostPerCreep: 300, - priority, - maxCostPerCreep, - spawnGroup: spawnGroup, - spawnTarget, - memoryAdditions: { - [CreepMemoryKeys.sourceIndex]: sourceIndex, - [CreepMemoryKeys.preferRoads]: true, - }, - } - } - - if (this.spawnEnergyCapacity >= 550) { - return { - type: SpawnRequestTypes.individualUniform, - role, - defaultParts: [MOVE], - extraParts: [WORK], - partsMultiplier: 6, - creepsQuota: 1, - minCostPerCreep: 150, - priority, - maxCostPerCreep, - spawnGroup: spawnGroup, - spawnTarget, - memoryAdditions: { - [CreepMemoryKeys.sourceIndex]: sourceIndex, - [CreepMemoryKeys.preferRoads]: true, - }, - } - } + for (let i = 1; i <= workAmount; i++) { + defaultParts.push(WORK) + if (i % 2 === 0) defaultParts.push(MOVE) + if ((i + 1) % 5 === 0) defaultParts.push(CARRY) + } - return { - type: SpawnRequestTypes.groupDiverse, - role, - defaultParts: [MOVE, CARRY], - extraParts: [WORK], - partsMultiplier: 6, - maxCreeps: Math.min( - 3, - this.communeManager.room.roomManager.communeSourceHarvestPositions[ - sourceIndex - ].length, - ), - minCostPerCreep: 200, - priority, - maxCostPerCreep, - spawnGroup: spawnGroup, - spawnTarget, - memoryAdditions: { - [CreepMemoryKeys.sourceIndex]: sourceIndex, - [CreepMemoryKeys.preferRoads]: true, - }, - } - })(), - ) - } + return { + type: SpawnRequestTypes.individualUniform, + role, + defaultParts, + extraParts: [], + partsMultiplier: 1, + creepsQuota: 1, + minCostPerCreep: 300, + priority, + maxCostPerCreep, + spawnGroup: spawnGroup, + spawnTarget, + memoryAdditions: { + [CreepMemoryKeys.sourceIndex]: sourceIndex, + [CreepMemoryKeys.preferRoads]: true, + }, + } + } + + if (this.spawnEnergyCapacity >= 800) { + return { + type: SpawnRequestTypes.individualUniform, + role, + defaultParts: [CARRY], + extraParts: [WORK, MOVE, WORK], + partsMultiplier: 3, + creepsQuota: 1, + minCostPerCreep: 250, + priority, + maxCostPerCreep, + spawnGroup: spawnGroup, + spawnTarget, + memoryAdditions: { + [CreepMemoryKeys.sourceIndex]: sourceIndex, + [CreepMemoryKeys.preferRoads]: true, + }, + } + } + + if (this.spawnEnergyCapacity >= 750) { + return { + type: SpawnRequestTypes.individualUniform, + role, + defaultParts: [], + extraParts: [WORK, MOVE, WORK], + partsMultiplier: 3, + creepsQuota: 1, + minCostPerCreep: 200, + priority, + maxCostPerCreep, + spawnGroup: spawnGroup, + spawnTarget, + memoryAdditions: { + [CreepMemoryKeys.sourceIndex]: sourceIndex, + [CreepMemoryKeys.preferRoads]: true, + }, + } + } + + if (this.spawnEnergyCapacity >= 600) { + return { + type: SpawnRequestTypes.individualUniform, + role, + defaultParts: [MOVE, CARRY], + extraParts: [WORK], + partsMultiplier: 6, + creepsQuota: 1, + minCostPerCreep: 300, + priority, + maxCostPerCreep, + spawnGroup: spawnGroup, + spawnTarget, + memoryAdditions: { + [CreepMemoryKeys.sourceIndex]: sourceIndex, + [CreepMemoryKeys.preferRoads]: true, + }, + } + } + + if (this.spawnEnergyCapacity >= 550) { + return { + type: SpawnRequestTypes.individualUniform, + role, + defaultParts: [MOVE], + extraParts: [WORK], + partsMultiplier: 6, + creepsQuota: 1, + minCostPerCreep: 150, + priority, + maxCostPerCreep, + spawnGroup: spawnGroup, + spawnTarget, + memoryAdditions: { + [CreepMemoryKeys.sourceIndex]: sourceIndex, + [CreepMemoryKeys.preferRoads]: true, + }, + } + } + + return { + type: SpawnRequestTypes.groupDiverse, + role, + defaultParts: [MOVE, CARRY], + extraParts: [WORK], + partsMultiplier: 6, + maxCreeps: Math.min( + 3, + this.communeManager.room.roomManager.communeSourceHarvestPositions[sourceIndex] + .length, + ), + minCostPerCreep: 200, + priority, + maxCostPerCreep, + spawnGroup: spawnGroup, + spawnTarget, + memoryAdditions: { + [CreepMemoryKeys.sourceIndex]: sourceIndex, + [CreepMemoryKeys.preferRoads]: true, + }, + } + })(), + ) } + } + + private haulerForCommune() { + this.rawSpawnRequestsArgs.push( + ((): SpawnRequestArgs | false => { + const priority = 0.5 + + // Construct the required carry parts + + const carryPartsNeed = + this.communeManager.communeHaulerNeed - this.communeManager.communeHaulerCarryParts + if (carryPartsNeed <= 0) return false + + const role = 'hauler' + /* const cost = this.communeManager.room.myCreeps.hauler.length ? this.minHaulerCost : this.communeManager.room.energyAvailable + */ + + // If all RCL 3 extensions are built + + if (this.communeManager.hasSufficientRoads) { + const costStep = 150 + const maxCost = this.findCommuneHaulerMaxCost(costStep) + + return { + type: SpawnRequestTypes.groupUniform, + role, + defaultParts: [], + extraParts: [CARRY, CARRY, MOVE], + partsQuota: carryPartsNeed * 3, + partsMultiplier: carryPartsNeed / 2, + minCostPerCreep: costStep, + maxCostPerCreep: maxCost, + priority, + spawnGroup: [], + memoryAdditions: { + [CreepMemoryKeys.preferRoads]: true, + }, + } + } - private haulerForCommune() { - this.rawSpawnRequestsArgs.push( - ((): SpawnRequestArgs | false => { - const priority = 0.5 - - // Construct the required carry parts - - const carryPartsNeed = this.communeManager.communeHaulerNeed - this.communeManager.communeHaulerCarryParts - if (carryPartsNeed <= 0) return false - - const role = 'hauler' - /* const cost = this.communeManager.room.myCreeps.hauler.length ? this.minHaulerCost : this.communeManager.room.energyAvailable - */ - - // If all RCL 3 extensions are built + const costStep = 100 + const maxCost = this.findCommuneHaulerMaxCost(costStep) + + return { + type: SpawnRequestTypes.groupUniform, + role, + defaultParts: [], + extraParts: [CARRY, MOVE], + partsQuota: carryPartsNeed * 2, + partsMultiplier: carryPartsNeed, + minCostPerCreep: costStep, + maxCostPerCreep: maxCost, + priority, + spawnGroup: [], + memoryAdditions: {}, + } + })(), + ) + } - if (this.communeManager.hasSufficientRoads) { - const costStep = 150 - const maxCost = this.findCommuneHaulerMaxCost(costStep) + private findCommuneHaulerMaxCost(costStep: number): number { + if (this.communeManager.room.myCreepsByRole.hauler.length) { + // have all haulers be the same size; their max allowed size - return { - type: SpawnRequestTypes.groupUniform, - role, - defaultParts: [], - extraParts: [CARRY, CARRY, MOVE], - partsQuota: carryPartsNeed * 3, - partsMultiplier: carryPartsNeed / 2, - minCostPerCreep: costStep, - maxCostPerCreep: maxCost, - priority, - spawnGroup: [], - memoryAdditions: { - [CreepMemoryKeys.preferRoads]: true, - }, - } - } - - const costStep = 100 - const maxCost = this.findCommuneHaulerMaxCost(costStep) - - return { - type: SpawnRequestTypes.groupUniform, - role, - defaultParts: [], - extraParts: [CARRY, MOVE], - partsQuota: carryPartsNeed * 2, - partsMultiplier: carryPartsNeed, - minCostPerCreep: costStep, - maxCostPerCreep: maxCost, - priority, - spawnGroup: [], - memoryAdditions: {}, - } - })(), - ) + const maxCost = Math.floor(this.minHaulerCost / costStep) * costStep + return maxCost } - private findCommuneHaulerMaxCost(costStep: number): number { - if (this.communeManager.room.myCreepsByRole.hauler.length) { - - // have all haulers be the same size; their max allowed size - - const maxCost = Math.floor(this.minHaulerCost / costStep) * costStep - return maxCost + // there are no haulers, consider that in spawning cost limitations + + const maxCost = Math.floor(this.communeManager.room.energyAvailable / costStep) * costStep + return maxCost + } + + private mineralHarvester() { + this.rawSpawnRequestsArgs.push( + ((): SpawnRequestArgs | false => { + if (this.communeManager.room.controller.level < 6) return false + if (!this.communeManager.room.roomManager.structures.extractor.length) return false + if (!this.communeManager.room.roomManager.mineralContainer) return false + if (!this.communeManager.room.storage) return false + if (this.communeManager.room.roomManager.resourcesInStoringStructures.energy < 40000) + return false + if (!this.communeManager.room.terminal) return false + if (this.communeManager.room.terminal.store.getFreeCapacity() <= 10000) return false + if (this.communeManager.room.roomManager.mineral.mineralAmount === 0) return false + + const minCost = 850 + if (this.spawnEnergyCapacity < minCost) return false + + return { + type: SpawnRequestTypes.individualUniform, + role: 'mineralHarvester', + defaultParts: [MOVE, MOVE, WORK, WORK, WORK, WORK, WORK, WORK, WORK, CARRY], + extraParts: [MOVE, MOVE, WORK, WORK, WORK, WORK, WORK, WORK, WORK, WORK], + partsMultiplier: 4, + creepsQuota: this.communeManager.room.roomManager.mineralHarvestPositions.length, + minCostPerCreep: minCost, + priority: this.activeRemotePriority + 1, + memoryAdditions: { + [CreepMemoryKeys.preferRoads]: true, + }, + } + })(), + ) + } + + private hubHauler() { + this.rawSpawnRequestsArgs.push( + ((): SpawnRequestArgs | false => { + if (this.communeManager.room.controller.level < 5) return false + if (!this.communeManager.room.storage) return false + + // There is no hubLink and another link, or no terminal + + if ( + (!this.communeManager.room.roomManager.hubLink || + this.communeManager.room.roomManager.structures.link.length < 2) && + (!this.communeManager.room.terminal || !this.communeManager.room.terminal.isRCLActionable) + ) + return false + + return { + type: SpawnRequestTypes.individualUniform, + role: 'hubHauler', + defaultParts: [MOVE], + extraParts: [CARRY], + partsMultiplier: 8, + creepsQuota: 1, + minCostPerCreep: 300, + priority: 7, + memoryAdditions: {}, } + })(), + ) + } - // there are no haulers, consider that in spawning cost limitations + private fastFiller() { + this.rawSpawnRequestsArgs.push( + ((): SpawnRequestArgs | false => { + // Get the fastFiller positions, if there are none, inform false - const maxCost = Math.floor(this.communeManager.room.energyAvailable / costStep) * costStep - return maxCost - } + const fastFillerPositionsCount = + this.communeManager.room.roomManager.fastFillerPositions.length + if (!fastFillerPositionsCount) return false - private mineralHarvester() { - this.rawSpawnRequestsArgs.push( - ((): SpawnRequestArgs | false => { - if (this.communeManager.room.controller.level < 6) return false - if (!this.communeManager.room.roomManager.structures.extractor.length) return false - if (!this.communeManager.room.roomManager.mineralContainer) return false - if (!this.communeManager.room.storage) return false - if ( - this.communeManager.room.roomManager.resourcesInStoringStructures.energy < 40000 - ) - return false - if (!this.communeManager.room.terminal) return false - if (this.communeManager.room.terminal.store.getFreeCapacity() <= 10000) return false - if (this.communeManager.room.roomManager.mineral.mineralAmount === 0) return false - - const minCost = 850 - if (this.spawnEnergyCapacity < minCost) return false - - return { - type: SpawnRequestTypes.individualUniform, - role: 'mineralHarvester', - defaultParts: [MOVE, MOVE, WORK, WORK, WORK, WORK, WORK, WORK, WORK, CARRY], - extraParts: [MOVE, MOVE, WORK, WORK, WORK, WORK, WORK, WORK, WORK, WORK], - partsMultiplier: 4, - creepsQuota: this.communeManager.room.roomManager.mineralHarvestPositions.length, - minCostPerCreep: minCost, - priority: this.activeRemotePriority + 1, - memoryAdditions: { - [CreepMemoryKeys.preferRoads]: true, - }, - } - })(), - ) - } + const anchor = this.communeManager.room.roomManager.anchor + if (!anchor) throw Error('no anchor for room ' + this.communeManager.room.name) - private hubHauler() { - this.rawSpawnRequestsArgs.push( - ((): SpawnRequestArgs | false => { - if (this.communeManager.room.controller.level < 5) return false - if (!this.communeManager.room.storage) return false + let priority = 0.75 - // There is no hubLink and another link, or no terminal + let totalFastFillerEnergy = 0 + for (const container of this.communeManager.room.roomManager.fastFillerContainers) { + totalFastFillerEnergy += container.store.energy + } - if ( - (!this.communeManager.room.roomManager.hubLink || - this.communeManager.room.roomManager.structures.link.length < 2) && - (!this.communeManager.room.terminal || - !this.communeManager.room.terminal.isRCLActionable) - ) - return false - - return { - type: SpawnRequestTypes.individualUniform, - role: 'hubHauler', - defaultParts: [MOVE], - extraParts: [CARRY], - partsMultiplier: 8, - creepsQuota: 1, - minCostPerCreep: 300, - priority: 7, - memoryAdditions: {}, - } - })(), - ) - } + if (totalFastFillerEnergy < 1000) priority = 1.25 + + let defaultParts: BodyPartConstant[] + if (this.communeManager.room.controller.level >= 8) + defaultParts = [CARRY, MOVE, CARRY, CARRY, CARRY, CARRY] + else if (this.communeManager.room.controller.level >= 7) + defaultParts = [CARRY, MOVE, CARRY, CARRY] + else defaultParts = [CARRY, MOVE, CARRY] + + return { + type: SpawnRequestTypes.individualUniform, + role: 'fastFiller', + defaultParts, + extraParts: [], + partsMultiplier: 1, + creepsQuota: fastFillerPositionsCount, + minCostPerCreep: 150, + priority, + spawnTarget: anchor, + memoryAdditions: {}, + } + })(), + ) + } - private fastFiller() { - this.rawSpawnRequestsArgs.push( - ((): SpawnRequestArgs | false => { - // Get the fastFiller positions, if there are none, inform false - - const fastFillerPositionsCount = - this.communeManager.room.roomManager.fastFillerPositions.length - if (!fastFillerPositionsCount) return false - - const anchor = this.communeManager.room.roomManager.anchor - if (!anchor) throw Error('no anchor for room ' + this.communeManager.room.name) - - let priority = 0.75 - - let totalFastFillerEnergy = 0 - for (const container of this.communeManager.room.roomManager.fastFillerContainers) { - totalFastFillerEnergy += container.store.energy - } - - if (totalFastFillerEnergy < 1000) priority = 1.25 - - let defaultParts: BodyPartConstant[] - if (this.communeManager.room.controller.level >= 8) - defaultParts = [CARRY, MOVE, CARRY, CARRY, CARRY, CARRY] - else if (this.communeManager.room.controller.level >= 7) - defaultParts = [CARRY, MOVE, CARRY, CARRY] - else defaultParts = [CARRY, MOVE, CARRY] - - return { - type: SpawnRequestTypes.individualUniform, - role: 'fastFiller', - defaultParts, - extraParts: [], - partsMultiplier: 1, - creepsQuota: fastFillerPositionsCount, - minCostPerCreep: 150, - priority, - spawnTarget: anchor, - memoryAdditions: {}, - } - })(), - ) - } + private defenders() { + // Construct requests for meleeDefenders - private defenders() { - // Construct requests for meleeDefenders + if (this.communeManager.room.towerInferiority) { + // Defenders - if (this.communeManager.room.towerInferiority) { - // Defenders + const minPriority = 6 + const maxPriority = this.minRemotePriority - 1 - const minPriority = 6 - const maxPriority = this.minRemotePriority - 1 + const enemyCreeps = this.communeManager.room.roomManager.notMyCreeps.enemy - const enemyCreeps = this.communeManager.room.roomManager.notMyCreeps.enemy + // Melee defender - // Melee defender + this.rawSpawnRequestsArgs.push( + ((): SpawnRequestArgs | false => { + const role = 'meleeDefender' - this.rawSpawnRequestsArgs.push( - ((): SpawnRequestArgs | false => { - const role = 'meleeDefender' + if (this.communeManager.room.myCreepsByRole[role].length * 1.75 > enemyCreeps.length) + return false - if (this.communeManager.room.myCreepsByRole[role].length * 1.75 > enemyCreeps.length) - return false + // If towers, spawn based on healStrength. If no towers, use attackStrength and healStrength - // If towers, spawn based on healStrength. If no towers, use attackStrength and healStrength - - let requiredStrength = 1 - if (!this.communeManager.room.controller.safeMode) { - requiredStrength += - this.communeManager.room.roomManager.totalEnemyCombatStrength.heal - if (!this.communeManager.room.roomManager.structures.tower.length) { - requiredStrength += - this.communeManager.room.roomManager.totalEnemyCombatStrength - .melee + - this.communeManager.room.roomManager.totalEnemyCombatStrength.ranged - } - } + let requiredStrength = 1 + if (!this.communeManager.room.controller.safeMode) { + requiredStrength += this.communeManager.room.roomManager.totalEnemyCombatStrength.heal + if (!this.communeManager.room.roomManager.structures.tower.length) { + requiredStrength += + this.communeManager.room.roomManager.totalEnemyCombatStrength.melee + + this.communeManager.room.roomManager.totalEnemyCombatStrength.ranged + } + } - requiredStrength *= 1.5 + requiredStrength *= 1.5 - const priority = Math.min( - minPriority + this.communeManager.room.myCreepsByRole[role].length * 0.5, - maxPriority, - ) - /* + const priority = Math.min( + minPriority + this.communeManager.room.myCreepsByRole[role].length * 0.5, + maxPriority, + ) + /* // If all RCL 3 extensions are build if (this.spawnEnergyCapacity >= 800) { @@ -491,52 +482,50 @@ export class SpawnRequestsManager { } } */ - const extraParts = [ATTACK, MOVE] - const strength = ATTACK_POWER - - return { - type: SpawnRequestTypes.groupDiverse, - role, - defaultParts: [], - extraParts, - partsMultiplier: Math.max(requiredStrength / strength, 1), - minCostPerCreep: 260, - priority, - threshold: 0.1, - memoryAdditions: {}, - } - })(), - ) - - // Ranged defender - - this.rawSpawnRequestsArgs.push( - ((): SpawnRequestArgs | false => { - const role = 'rangedDefender' - - if (this.communeManager.room.myCreepsByRole[role].length * 1.75 > enemyCreeps.length) - return false - - // If towers, spawn based on healStrength. If no towers, use attackStrength and healStrength - - let requiredStrength = 1 - if (!this.communeManager.room.controller.safeMode) { - requiredStrength += - this.communeManager.room.roomManager.totalEnemyCombatStrength.heal - if (!this.communeManager.room.roomManager.structures.tower.length) { - requiredStrength += - this.communeManager.room.roomManager.totalEnemyCombatStrength - .melee + - this.communeManager.room.roomManager.totalEnemyCombatStrength.ranged - } - } - requiredStrength *= 0.3 - - const priority = Math.min( - maxPriority - 1 + this.communeManager.room.myCreepsByRole[role].length * 1, - maxPriority, - ) - /* + const extraParts = [ATTACK, MOVE] + const strength = ATTACK_POWER + + return { + type: SpawnRequestTypes.groupDiverse, + role, + defaultParts: [], + extraParts, + partsMultiplier: Math.max(requiredStrength / strength, 1), + minCostPerCreep: 260, + priority, + threshold: 0.1, + memoryAdditions: {}, + } + })(), + ) + + // Ranged defender + + this.rawSpawnRequestsArgs.push( + ((): SpawnRequestArgs | false => { + const role = 'rangedDefender' + + if (this.communeManager.room.myCreepsByRole[role].length * 1.75 > enemyCreeps.length) + return false + + // If towers, spawn based on healStrength. If no towers, use attackStrength and healStrength + + let requiredStrength = 1 + if (!this.communeManager.room.controller.safeMode) { + requiredStrength += this.communeManager.room.roomManager.totalEnemyCombatStrength.heal + if (!this.communeManager.room.roomManager.structures.tower.length) { + requiredStrength += + this.communeManager.room.roomManager.totalEnemyCombatStrength.melee + + this.communeManager.room.roomManager.totalEnemyCombatStrength.ranged + } + } + requiredStrength *= 0.3 + + const priority = Math.min( + maxPriority - 1 + this.communeManager.room.myCreepsByRole[role].length * 1, + maxPriority, + ) + /* // If all RCL 3 extensions are build if (this.spawnEnergyCapacity >= 800) { @@ -555,719 +544,723 @@ export class SpawnRequestsManager { } } */ - const extraParts = [RANGED_ATTACK, MOVE] - const strength = RANGED_ATTACK_POWER - - return { - type: SpawnRequestTypes.groupDiverse, - role, - defaultParts: [], - extraParts, - partsMultiplier: Math.max(requiredStrength / strength, 1), - minCostPerCreep: 260, - priority, - threshold: 0.1, - memoryAdditions: {}, - } - })(), - ) - } + const extraParts = [RANGED_ATTACK, MOVE] + const strength = RANGED_ATTACK_POWER + + return { + type: SpawnRequestTypes.groupDiverse, + role, + defaultParts: [], + extraParts, + partsMultiplier: Math.max(requiredStrength / strength, 1), + minCostPerCreep: 260, + priority, + threshold: 0.1, + memoryAdditions: {}, + } + })(), + ) } + } - private maintainers() { - this.rawSpawnRequestsArgs.push( - ((): SpawnRequestArgs | false => { - const generalRepairStructures = communeUtils.getGeneralRepairStructures(this.communeManager.room) - const repairTargets = generalRepairStructures.filter( - structure => structure.hitsMax * 0.15 >= structure.hits, - ) - - // Get ramparts below their max hits - - const repairRamparts = communeUtils.getRampartRepairTargets(this.communeManager.room).filter( - rampart => - rampart.hits < this.communeManager.room.communeManager.minRampartHits, - ) - - // If there are no ramparts or repair targets - - if (!repairRamparts.length && !repairTargets.length) return false - - let priority: number - - if ( - repairTargets.length || - this.communeManager.room.towerInferiority || - !this.communeManager.storingStructures.length - ) { - priority = Math.min( - 6 + this.communeManager.room.creepsFromRoom.maintainer.length * 0.5, - this.minRemotePriority - 0.5, - ) - } else { - priority = this.activeRemotePriority - } - - // Construct the partsMultiplier - - let partsMultiplier = 1 - - for (const structure of repairTargets) { - partsMultiplier += decayCosts[structure.structureType] - } - - partsMultiplier *= 2 - - // Extra considerations if a storage is present - - let maxCreeps = Infinity - const enemyAttackers = this.communeManager.room.roomManager.enemyAttackers - - if ( - this.communeManager.room.storage && - this.communeManager.room.controller.level >= 4 - ) { - if (repairRamparts.length <= 0 && !enemyAttackers.length) { - maxCreeps = 1 - } - - // For every x energy in storage, add 1 multiplier - - partsMultiplier += Math.pow( - this.communeManager.room.roomManager.resourcesInStoringStructures.energy / - (16000 + this.communeManager.room.controller.level * 1000), - 1.8, - ) - } - - // For every attackValue, add a multiplier - - if (enemyAttackers.length) { - const totalEnemyCombatStrength = - this.communeManager.room.roomManager.totalEnemyCombatStrength - - partsMultiplier += - (totalEnemyCombatStrength.melee + - totalEnemyCombatStrength.ranged * 1.6 + - totalEnemyCombatStrength.dismantle) / - (REPAIR_POWER * 0.3) - } - - /* customLog('e', partsMultiplier) */ - const role = 'maintainer' - customLog( - 'maintainer', - partsMultiplier + ', ' + maxCreeps + ', ' + this.spawnEnergyCapacity, - ) - if (this.communeManager.hasSufficientRoads) { - return { - type: SpawnRequestTypes.groupDiverse, - role, - defaultParts: [], - extraParts: [CARRY, MOVE, WORK], - partsMultiplier, - maxCreeps, - minCostPerCreep: 200, - priority, - memoryAdditions: { - [CreepMemoryKeys.preferRoads]: true, - }, - } - } - - return { - type: SpawnRequestTypes.groupDiverse, - role, - defaultParts: [], - extraParts: [MOVE, CARRY, MOVE, WORK], - partsMultiplier, - maxCreeps, - minCostPerCreep: 250, - priority, - memoryAdditions: {}, - } - })(), + private maintainers() { + this.rawSpawnRequestsArgs.push( + ((): SpawnRequestArgs | false => { + const generalRepairStructures = communeUtils.getGeneralRepairStructures( + this.communeManager.room, ) - } - - private builders() { - this.rawSpawnRequestsArgs.push( - ((): SpawnRequestArgs | false => { - if (this.communeManager.room.towerInferiority) return false - - // Stop if there are no construction sites - - if (!this.communeManager.room.find(FIND_MY_CONSTRUCTION_SITES).length) return false - - let priority: number - if (this.communeManager.storingStructures.length) { - priority = this.activeRemotePriority + 0.1 - } else { - priority = this.minRemotePriority - 0.5 - } - - let partsMultiplier = 0 - - const actionableStoringStructure = - (this.communeManager.room.storage && - this.communeManager.room.controller.level >= 4) || - (this.communeManager.room.terminal && - this.communeManager.room.controller.level >= 6) - - // If there is an rcl actionable storage or terminal - if (actionableStoringStructure) { - // If the storage is sufficiently full, increase parts wanted porportionately - - if ( - this.communeManager.room.roomManager.resourcesInStoringStructures.energy < - this.communeManager.room.communeManager.storedEnergyBuildThreshold - ) - return false - - partsMultiplier += Math.pow( - this.communeManager.room.roomManager.resourcesInStoringStructures.energy / - (20000 + this.communeManager.room.controller.level * 1200), - 1.7, - ) - } - - // Otherwise if there is no storage - else { - partsMultiplier += this.communeManager.estimatedEnergyIncome / 5 - - // Spawn some extra builders to handle the primarily road building RCL 3 and needy storage building - - if (this.spawnEnergyCapacity >= 800) partsMultiplier *= 1.2 - } - - const role = 'builder' - const maxCreeps = 15 - - // If there is an rcl actionable storage or terminal - if (actionableStoringStructure) { - return { - type: SpawnRequestTypes.groupDiverse, - role, - defaultParts: [], - extraParts: [CARRY, WORK, MOVE], - partsMultiplier: partsMultiplier, - maxCreeps, - minCostPerCreep: 200, - priority, - memoryAdditions: { - [CreepMemoryKeys.preferRoads]: true, - }, - } - } - - // If all RCL 3 extensions are build - - if (this.spawnEnergyCapacity >= 600) { - return { - type: SpawnRequestTypes.groupDiverse, - role, - defaultParts: [], - extraParts: [CARRY, WORK, MOVE], - partsMultiplier: partsMultiplier, - maxCreeps, - minCostPerCreep: 200, - priority, - memoryAdditions: { - [CreepMemoryKeys.preferRoads]: true, - }, - } - } - - // If almost all RCL 3 extensions are build - - if (this.spawnEnergyCapacity >= 550) { - return { - type: SpawnRequestTypes.groupDiverse, - role, - defaultParts: [], - extraParts: [WORK, MOVE, CARRY, MOVE], - partsMultiplier: partsMultiplier, - maxCreeps, - minCostPerCreep: 250, - priority, - memoryAdditions: { - [CreepMemoryKeys.preferRoads]: true, - }, - } - } - - // There are no fastFiller containers - - if (!this.communeManager.room.roomManager.fastFillerContainers.length) { - return { - type: SpawnRequestTypes.groupDiverse, - role, - defaultParts: [], - extraParts: [WORK, CARRY, CARRY, MOVE], - partsMultiplier: partsMultiplier, - maxCreeps, - minCostPerCreep: 250, - priority, - memoryAdditions: { - [CreepMemoryKeys.preferRoads]: true, - }, - } - } - - return { - type: SpawnRequestTypes.groupDiverse, - role, - defaultParts: [], - extraParts: [CARRY, MOVE, WORK, CARRY, MOVE], - partsMultiplier: partsMultiplier, - maxCreeps, - minCostPerCreep: 300, - priority, - memoryAdditions: { - [CreepMemoryKeys.preferRoads]: true, - }, - } - })(), + const repairTargets = generalRepairStructures.filter( + structure => structure.hitsMax * 0.15 >= structure.hits, ) - } - private controllerUpgraders() { - this.rawSpawnRequestsArgs.push( - ((): SpawnRequestArgs | false => { - const threshold = 0.05 - const role = 'controllerUpgrader' + // Get ramparts below their max hits - // If there is a storage, prefer needed remote creeps over upgraders + const repairRamparts = communeUtils + .getRampartRepairTargets(this.communeManager.room) + .filter(rampart => rampart.hits < this.communeManager.room.communeManager.minRampartHits) - if ( - this.communeManager.room.controller.level === 1 || - this.communeManager.room.controller.ticksToDowngrade <= - this.communeManager.controllerDowngradeUpgradeThreshold - ) { - const priority = 5 + // If there are no ramparts or repair targets - if (this.communeManager.hasSufficientRoads) { - return { - type: SpawnRequestTypes.individualUniform, - role, - defaultParts: [CARRY, WORK, MOVE], - extraParts: [], - partsMultiplier: 1, - threshold, - creepsQuota: 1, - minCostPerCreep: 200, - priority, - memoryAdditions: {}, - } - } + if (!repairRamparts.length && !repairTargets.length) return false - return { - type: SpawnRequestTypes.individualUniform, - role, - defaultParts: [CARRY, MOVE, WORK, MOVE], - extraParts: [], - partsMultiplier: 1, - threshold, - creepsQuota: 1, - minCostPerCreep: 250, - priority, - memoryAdditions: {}, - } - } + let priority: number - let priority: number - if (this.communeManager.storingStructures.length) { - priority = this.activeRemotePriority + 0.2 - } else { - priority = this.minRemotePriority - 1 - } + if ( + repairTargets.length || + this.communeManager.room.towerInferiority || + !this.communeManager.storingStructures.length + ) { + priority = Math.min( + 6 + this.communeManager.room.creepsFromRoom.maintainer.length * 0.5, + this.minRemotePriority - 0.5, + ) + } else { + priority = this.activeRemotePriority + } - // If there are enemyAttackers or construction sites and the controller isn't soon to downgrade + // Construct the partsMultiplier - if ( - this.communeManager.room.towerInferiority || - this.communeManager.room.find(FIND_MY_CONSTRUCTION_SITES).length > 0 - ) - return false + let partsMultiplier = 1 - let partsMultiplier = 1 + for (const structure of repairTargets) { + partsMultiplier += decayCosts[structure.structureType] + } - // Storing structures logic + partsMultiplier *= 2 - if ( - (this.communeManager.room.storage && - this.communeManager.room.controller.level >= 4) || - (this.communeManager.room.terminal && - this.communeManager.room.controller.level >= 6) - ) { - // If storing structures are sufficiently full, provide x amount per y energy in storage + // Extra considerations if a storage is present - if ( - this.communeManager.room.roomManager.resourcesInStoringStructures.energy < - this.communeManager.room.communeManager.storedEnergyUpgradeThreshold - ) { - return false - } - partsMultiplier = Math.pow( - (this.communeManager.room.roomManager.resourcesInStoringStructures.energy - - this.communeManager.room.communeManager.storedEnergyUpgradeThreshold * - 0.5) / - (6000 + this.communeManager.room.controller.level * 2000), - 2, - ) - } + let maxCreeps = Infinity + const enemyAttackers = this.communeManager.room.roomManager.enemyAttackers - // Otherwise if there is no storing structure - else { - partsMultiplier += this.communeManager.estimatedEnergyIncome * 0.75 - } + if (this.communeManager.room.storage && this.communeManager.room.controller.level >= 4) { + if (repairRamparts.length <= 0 && !enemyAttackers.length) { + maxCreeps = 1 + } - partsMultiplier = Math.min(partsMultiplier, this.communeManager.maxUpgradeStrength) - if (partsMultiplier <= 0) return false + // For every x energy in storage, add 1 multiplier - // If the controllerContainer or controllerLink exists + partsMultiplier += Math.pow( + this.communeManager.room.roomManager.resourcesInStoringStructures.energy / + (16000 + this.communeManager.room.controller.level * 1000), + 1.8, + ) + } - const upgradeStructure = this.communeManager.upgradeStructure + // For every attackValue, add a multiplier - if (upgradeStructure) { - // If the controller is level 8 + if (enemyAttackers.length) { + const totalEnemyCombatStrength = + this.communeManager.room.roomManager.totalEnemyCombatStrength - if (this.communeManager.room.controller.level === 8) { - return { - type: SpawnRequestTypes.individualUniform, - role, - defaultParts: [], - extraParts: [ - WORK, - WORK, - WORK, - WORK, - WORK, - WORK, - WORK, - WORK, - WORK, - WORK, - WORK, - WORK, - WORK, - WORK, - WORK, - CARRY, - CARRY, - CARRY, - MOVE, - MOVE, - MOVE, - MOVE, - MOVE, - MOVE, - MOVE, - MOVE, - ], - partsMultiplier: 1, - threshold, - creepsQuota: 1, - minCostPerCreep: 300, - priority, - memoryAdditions: { - [CreepMemoryKeys.preferRoads]: true, - }, - } - } - - const controllerLink = this.communeManager.controllerLink - const maxCreeps = - controllerLink && controllerLink.isRCLActionable - ? this.communeManager.room.roomManager.upgradePositions.length - : this.communeManager.room.roomManager.upgradePositions.length - 1 + partsMultiplier += + (totalEnemyCombatStrength.melee + + totalEnemyCombatStrength.ranged * 1.6 + + totalEnemyCombatStrength.dismantle) / + (REPAIR_POWER * 0.3) + } - if (this.spawnEnergyCapacity >= 1400) { - partsMultiplier = Math.round(partsMultiplier / 12) - if (partsMultiplier === 0) return false + /* customLog('e', partsMultiplier) */ + const role = 'maintainer' + customLog( + 'maintainer', + partsMultiplier + ', ' + maxCreeps + ', ' + this.spawnEnergyCapacity, + ) + if (this.communeManager.hasSufficientRoads) { + return { + type: SpawnRequestTypes.groupDiverse, + role, + defaultParts: [], + extraParts: [CARRY, MOVE, WORK], + partsMultiplier, + maxCreeps, + minCostPerCreep: 200, + priority, + memoryAdditions: { + [CreepMemoryKeys.preferRoads]: true, + }, + } + } - return { - type: SpawnRequestTypes.groupDiverse, - role, - defaultParts: [], - extraParts: [ - MOVE, - CARRY, - WORK, - WORK, - WORK, - WORK, - MOVE, - WORK, - WORK, - WORK, - WORK, - MOVE, - WORK, - WORK, - WORK, - WORK, - ], - partsMultiplier, - threshold, - maxCreeps, - minCostPerCreep: 200, - priority, - memoryAdditions: { - [CreepMemoryKeys.preferRoads]: true, - }, - } - } + return { + type: SpawnRequestTypes.groupDiverse, + role, + defaultParts: [], + extraParts: [MOVE, CARRY, MOVE, WORK], + partsMultiplier, + maxCreeps, + minCostPerCreep: 250, + priority, + memoryAdditions: {}, + } + })(), + ) + } - if (this.spawnEnergyCapacity >= 1000) { - partsMultiplier = Math.round(partsMultiplier / 4) - if (partsMultiplier === 0) return false + private builders() { + this.rawSpawnRequestsArgs.push( + ((): SpawnRequestArgs | false => { + if (this.communeManager.room.towerInferiority) return false - return { - type: SpawnRequestTypes.groupDiverse, - role, - defaultParts: [CARRY, CARRY], - extraParts: [WORK, MOVE, WORK, WORK, WORK], - partsMultiplier, - threshold, - maxCreeps, - minCostPerCreep: 250, - priority, - memoryAdditions: { - [CreepMemoryKeys.preferRoads]: true, - }, - } - } + // Stop if there are no construction sites - // Otherwise if the this.spawnEnergyCapacity is more than 800 + if (!this.communeManager.room.find(FIND_MY_CONSTRUCTION_SITES).length) return false - if (this.spawnEnergyCapacity >= 800) { - partsMultiplier = Math.round(partsMultiplier / 6) - if (partsMultiplier === 0) return false + let priority: number + if (this.communeManager.storingStructures.length) { + priority = this.activeRemotePriority + 0.1 + } else { + priority = this.minRemotePriority - 0.5 + } - return { - type: SpawnRequestTypes.groupDiverse, - role, - defaultParts: [CARRY, CARRY], - extraParts: [WORK, MOVE, WORK, WORK, WORK, WORK, MOVE, WORK], - partsMultiplier, - threshold, - maxCreeps, - minCostPerCreep: 250, - priority, - memoryAdditions: { - [CreepMemoryKeys.preferRoads]: true, - }, - } - } + let partsMultiplier = 0 - partsMultiplier = Math.round(partsMultiplier / 4) - if (partsMultiplier === 0) return false + const actionableStoringStructure = + (this.communeManager.room.storage && this.communeManager.room.controller.level >= 4) || + (this.communeManager.room.terminal && this.communeManager.room.controller.level >= 6) - return { - type: SpawnRequestTypes.groupDiverse, - role, - defaultParts: [CARRY], - extraParts: [WORK, MOVE, WORK, WORK, WORK], - partsMultiplier, - threshold, - maxCreeps, - minCostPerCreep: 200, - priority, - memoryAdditions: { - [CreepMemoryKeys.preferRoads]: true, - }, - } - } + // If there is an rcl actionable storage or terminal + if (actionableStoringStructure) { + // If the storage is sufficiently full, increase parts wanted porportionately - if (this.communeManager.room.controller.level < 2) - partsMultiplier = Math.max(partsMultiplier, 1) + if ( + this.communeManager.room.roomManager.resourcesInStoringStructures.energy < + this.communeManager.room.communeManager.storedEnergyBuildThreshold + ) + return false - if (this.spawnEnergyCapacity >= 800) { - return { - type: SpawnRequestTypes.groupDiverse, - role, - defaultParts: [], - extraParts: [CARRY, MOVE, WORK], - partsMultiplier, - threshold, - maxCreeps: Infinity, - minCostPerCreep: 200, - priority, - memoryAdditions: { - [CreepMemoryKeys.preferRoads]: true, - }, - } - } - - return { - type: SpawnRequestTypes.groupDiverse, - role, - defaultParts: [], - extraParts: [MOVE, CARRY, MOVE, WORK], - partsMultiplier, - threshold, - maxCreeps: Infinity, - minCostPerCreep: 250, - priority, - memoryAdditions: {}, - } - })(), - ) - } + partsMultiplier += Math.pow( + this.communeManager.room.roomManager.resourcesInStoringStructures.energy / + (20000 + this.communeManager.room.controller.level * 1200), + 1.7, + ) + } - /** - * Spawn for roles that are per-source - */ - private remoteSourceRoles() { - let priorityIncrement = 0 + // Otherwise if there is no storage + else { + partsMultiplier += this.communeManager.estimatedEnergyIncome / 5 - const remoteSourceIndexesByEfficacy = - this.communeManager.room.roomManager.remoteSourceIndexesByEfficacy - for (const remoteInfo of remoteSourceIndexesByEfficacy) { - const splitRemoteInfo = remoteInfo.split(' ') - const remoteName = splitRemoteInfo[0] + // Spawn some extra builders to handle the primarily road building RCL 3 and needy storage building - const remoteMemory = Memory.rooms[remoteName] - if (remoteMemory[RoomMemoryKeys.disable]) continue - if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) continue - if (remoteMemory[RoomMemoryKeys.commune] !== this.communeManager.room.name) continue - if (remoteMemory[RoomMemoryKeys.enemyReserved]) continue - if (remoteMemory[RoomMemoryKeys.abandonRemote] > 0) continue + if (this.spawnEnergyCapacity >= 800) partsMultiplier *= 1.2 + } - priorityIncrement += 1 + const role = 'builder' + const maxCreeps = 15 + + // If there is an rcl actionable storage or terminal + if (actionableStoringStructure) { + return { + type: SpawnRequestTypes.groupDiverse, + role, + defaultParts: [], + extraParts: [CARRY, WORK, MOVE], + partsMultiplier: partsMultiplier, + maxCreeps, + minCostPerCreep: 200, + priority, + memoryAdditions: { + [CreepMemoryKeys.preferRoads]: true, + }, + } + } - const sourceIndex = parseInt(splitRemoteInfo[1]) as 0 | 1 + // If all RCL 3 extensions are build + + if (this.spawnEnergyCapacity >= 600) { + return { + type: SpawnRequestTypes.groupDiverse, + role, + defaultParts: [], + extraParts: [CARRY, WORK, MOVE], + partsMultiplier: partsMultiplier, + maxCreeps, + minCostPerCreep: 200, + priority, + memoryAdditions: { + [CreepMemoryKeys.preferRoads]: true, + }, + } + } - const harvesterPriority = this.minRemotePriority + priorityIncrement + // If almost all RCL 3 extensions are build + + if (this.spawnEnergyCapacity >= 550) { + return { + type: SpawnRequestTypes.groupDiverse, + role, + defaultParts: [], + extraParts: [WORK, MOVE, CARRY, MOVE], + partsMultiplier: partsMultiplier, + maxCreeps, + minCostPerCreep: 250, + priority, + memoryAdditions: { + [CreepMemoryKeys.preferRoads]: true, + }, + } + } - // Construct requests for remoteSourceHarvesters + // There are no fastFiller containers + + if (!this.communeManager.room.roomManager.fastFillerContainers.length) { + return { + type: SpawnRequestTypes.groupDiverse, + role, + defaultParts: [], + extraParts: [WORK, CARRY, CARRY, MOVE], + partsMultiplier: partsMultiplier, + maxCreeps, + minCostPerCreep: 250, + priority, + memoryAdditions: { + [CreepMemoryKeys.preferRoads]: true, + }, + } + } - this.rawSpawnRequestsArgs.push( - ((): SpawnRequestArgs | false => { - const partsMultiplier = - remoteMemory[RoomMemoryKeys.maxSourceIncome][sourceIndex] - - remoteMemory[RoomMemoryKeys.remoteSourceHarvesters][sourceIndex] - if (partsMultiplier <= 0) return false - - const role = 'remoteSourceHarvester' - const priority = harvesterPriority - const spawnGroup = - this.communeManager.remoteSourceHarvesters[remoteName][sourceIndex] - const sourcePositionsAmount = - remoteMemory[RoomMemoryKeys.remoteSourceHarvestPositions][sourceIndex] - .length / packedPosLength - - if (this.spawnEnergyCapacity >= 950) { - return { - type: SpawnRequestTypes.individualUniform, - role, - defaultParts: [CARRY], - extraParts: [WORK, MOVE, WORK, MOVE], - partsMultiplier: Math.ceil(partsMultiplier / 2), - spawnGroup, - threshold: 0.1, - creepsQuota: 1, - maxCreeps: sourcePositionsAmount, - maxCostPerCreep: 50 + 150 * 6, - minCostPerCreep: 350, - priority, - memoryAdditions: { - [CreepMemoryKeys.preferRoads]: true, - [CreepMemoryKeys.sourceIndex]: sourceIndex, - [CreepMemoryKeys.remote]: remoteName, - }, - } - } + return { + type: SpawnRequestTypes.groupDiverse, + role, + defaultParts: [], + extraParts: [CARRY, MOVE, WORK, CARRY, MOVE], + partsMultiplier: partsMultiplier, + maxCreeps, + minCostPerCreep: 300, + priority, + memoryAdditions: { + [CreepMemoryKeys.preferRoads]: true, + }, + } + })(), + ) + } + + private isDesperateForUpgraders() { + if (this.communeManager.room.controller.level === 1) return true + if ( + this.communeManager.room.controller.ticksToDowngrade <= + this.communeManager.controllerDowngradeUpgradeThreshold + ) + return true + + return false + } + + private controllerUpgraders() { + this.rawSpawnRequestsArgs.push( + ((): SpawnRequestArgs | false => { + const threshold = 0.05 + const role = 'controllerUpgrader' + + // If there is a storage, prefer needed remote creeps over upgraders + + if (this.isDesperateForUpgraders()) { + const priority = 5 + + if (this.communeManager.hasSufficientRoads) { + return { + type: SpawnRequestTypes.individualUniform, + role, + defaultParts: [CARRY, WORK, MOVE], + extraParts: [], + partsMultiplier: 1, + threshold, + creepsQuota: 1, + minCostPerCreep: 200, + priority, + memoryAdditions: {}, + } + } + + return { + type: SpawnRequestTypes.individualUniform, + role, + defaultParts: [CARRY, MOVE, WORK, MOVE], + extraParts: [], + partsMultiplier: 1, + threshold, + creepsQuota: 1, + minCostPerCreep: 250, + priority, + memoryAdditions: {}, + } + } - // We can start reserving + // If there is a terminal and it is sufficient RCL, and there's a funnel target and we aren't it, then don't allow upgraders to spawn + if (this.communeManager.room.terminal && this.communeManager.room.controller.level >= 6) { + const funnelingRoomNames = collectiveManager.funnelingRoomNames + if ( + funnelingRoomNames.size > 0 && + funnelingRoomNames.has(this.communeManager.room.name) + ) { + return false + } + } - if (this.spawnEnergyCapacity >= 650) { - return { - type: SpawnRequestTypes.groupDiverse, - role, - defaultParts: [CARRY], - extraParts: [WORK, WORK, MOVE], - partsMultiplier: Math.ceil(partsMultiplier / 2), - spawnGroup, - threshold: 0.1, + // If there are enemyAttackers or construction sites and the controller isn't soon to downgrade - maxCreeps: sourcePositionsAmount, - maxCostPerCreep: 50 + 250 * 3, - minCostPerCreep: 300, - priority, - memoryAdditions: { - [CreepMemoryKeys.preferRoads]: true, - [CreepMemoryKeys.sourceIndex]: sourceIndex, - [CreepMemoryKeys.remote]: remoteName, - }, - } - } + if ( + this.communeManager.room.towerInferiority || + this.communeManager.room.find(FIND_MY_CONSTRUCTION_SITES).length > 0 + ) { + return false + } - if (this.spawnEnergyCapacity >= 450) { - return { - type: SpawnRequestTypes.groupDiverse, - role, - defaultParts: [CARRY], - extraParts: [WORK, WORK, MOVE, WORK, MOVE], - partsMultiplier: Math.floor(partsMultiplier / 3), - spawnGroup, - threshold: 0.1, - maxCreeps: sourcePositionsAmount, - maxCostPerCreep: 50 + 400 * 2, - minCostPerCreep: 300, - priority, - memoryAdditions: { - [CreepMemoryKeys.preferRoads]: true, - [CreepMemoryKeys.sourceIndex]: sourceIndex, - [CreepMemoryKeys.remote]: remoteName, - }, - } - } + let priority: number + if (this.communeManager.storingStructures.length) { + priority = this.activeRemotePriority + 0.2 + } else { + priority = this.minRemotePriority - 1 + } - return { - type: SpawnRequestTypes.groupDiverse, - role, - defaultParts: [CARRY], - extraParts: [WORK, WORK, MOVE], - partsMultiplier: Math.ceil(partsMultiplier / 2), - spawnGroup, - threshold: 0.1, + let partsMultiplier = 1 - maxCreeps: sourcePositionsAmount, - maxCostPerCreep: 50 + 250 * 3, - minCostPerCreep: 300, - priority, - memoryAdditions: { - [CreepMemoryKeys.preferRoads]: true, - [CreepMemoryKeys.sourceIndex]: sourceIndex, - [CreepMemoryKeys.remote]: remoteName, - }, - } - })(), - ) + // Storing structures logic - this.rawSpawnRequestsArgs.push( - ((): SpawnRequestArgs | false => { - const role = 'hauler' - - const carryPartsNeed = - remoteMemory[RoomMemoryKeys.haulers][sourceIndex] - - this.communeManager.haulerCarryParts - this.communeManager.haulerCarryParts -= - remoteMemory[RoomMemoryKeys.haulers][sourceIndex] - if (carryPartsNeed <= 0) return false - - this.activeRemotePriority = Math.max( - this.activeRemotePriority, - harvesterPriority + 0.1, - ) + if ( + (this.communeManager.room.storage && this.communeManager.room.controller.level >= 4) || + (this.communeManager.room.terminal && this.communeManager.room.controller.level >= 6) + ) { + // If storing structures are sufficiently full, provide x amount per y energy in storage + + if ( + this.communeManager.room.roomManager.resourcesInStoringStructures.energy < + this.communeManager.room.communeManager.storedEnergyUpgradeThreshold + ) { + return false + } + partsMultiplier = communeUtils.getDesiredUpgraderStrength(this.communeManager.room) + } + + // Otherwise if there is no storing structure + else { + partsMultiplier += this.communeManager.estimatedEnergyIncome * 0.75 + } - // Lower priority - more preference - than remote harvesters + partsMultiplier = Math.min( + partsMultiplier, + communeUtils.getMaxUpgradeStrength(this.communeManager.room), + ) + if (partsMultiplier <= 0) return false + + // If the controllerContainer or controllerLink exists + + const upgradeStructure = this.communeManager.upgradeStructure + + if (upgradeStructure) { + // If the controller is level 8 + + if (this.communeManager.room.controller.level === 8) { + return { + type: SpawnRequestTypes.individualUniform, + role, + defaultParts: [], + extraParts: [ + WORK, + WORK, + WORK, + WORK, + WORK, + WORK, + WORK, + WORK, + WORK, + WORK, + WORK, + WORK, + WORK, + WORK, + WORK, + CARRY, + CARRY, + CARRY, + MOVE, + MOVE, + MOVE, + MOVE, + MOVE, + MOVE, + MOVE, + MOVE, + ], + partsMultiplier: 1, + threshold, + creepsQuota: 1, + minCostPerCreep: 300, + priority, + memoryAdditions: { + [CreepMemoryKeys.preferRoads]: true, + }, + } + } + + const controllerLink = this.communeManager.controllerLink + const maxCreeps = + controllerLink && controllerLink.isRCLActionable + ? this.communeManager.room.roomManager.upgradePositions.length + : this.communeManager.room.roomManager.upgradePositions.length - 1 + + if (this.spawnEnergyCapacity >= 1400) { + partsMultiplier = Math.round(partsMultiplier / 12) + if (partsMultiplier === 0) return false + + return { + type: SpawnRequestTypes.groupDiverse, + role, + defaultParts: [], + extraParts: [ + MOVE, + CARRY, + WORK, + WORK, + WORK, + WORK, + MOVE, + WORK, + WORK, + WORK, + WORK, + MOVE, + WORK, + WORK, + WORK, + WORK, + ], + partsMultiplier, + threshold, + maxCreeps, + minCostPerCreep: 200, + priority, + memoryAdditions: { + [CreepMemoryKeys.preferRoads]: true, + }, + } + } + + if (this.spawnEnergyCapacity >= 1000) { + partsMultiplier = Math.round(partsMultiplier / 4) + if (partsMultiplier === 0) return false + + return { + type: SpawnRequestTypes.groupDiverse, + role, + defaultParts: [CARRY, CARRY], + extraParts: [WORK, MOVE, WORK, WORK, WORK], + partsMultiplier, + threshold, + maxCreeps, + minCostPerCreep: 250, + priority, + memoryAdditions: { + [CreepMemoryKeys.preferRoads]: true, + }, + } + } + + // Otherwise if the this.spawnEnergyCapacity is more than 800 + + if (this.spawnEnergyCapacity >= 800) { + partsMultiplier = Math.round(partsMultiplier / 6) + if (partsMultiplier === 0) return false + + return { + type: SpawnRequestTypes.groupDiverse, + role, + defaultParts: [CARRY, CARRY], + extraParts: [WORK, MOVE, WORK, WORK, WORK, WORK, MOVE, WORK], + partsMultiplier, + threshold, + maxCreeps, + minCostPerCreep: 250, + priority, + memoryAdditions: { + [CreepMemoryKeys.preferRoads]: true, + }, + } + } + + partsMultiplier = Math.round(partsMultiplier / 4) + if (partsMultiplier === 0) return false + + return { + type: SpawnRequestTypes.groupDiverse, + role, + defaultParts: [CARRY], + extraParts: [WORK, MOVE, WORK, WORK, WORK], + partsMultiplier, + threshold, + maxCreeps, + minCostPerCreep: 200, + priority, + memoryAdditions: { + [CreepMemoryKeys.preferRoads]: true, + }, + } + } - const priority = this.minRemotePriority + priorityIncrement + if (this.communeManager.room.controller.level < 2) + partsMultiplier = Math.max(partsMultiplier, 1) + + if (this.spawnEnergyCapacity >= 800) { + return { + type: SpawnRequestTypes.groupDiverse, + role, + defaultParts: [], + extraParts: [CARRY, MOVE, WORK], + partsMultiplier, + threshold, + maxCreeps: Infinity, + minCostPerCreep: 200, + priority, + memoryAdditions: { + [CreepMemoryKeys.preferRoads]: true, + }, + } + } - /* + return { + type: SpawnRequestTypes.groupDiverse, + role, + defaultParts: [], + extraParts: [MOVE, CARRY, MOVE, WORK], + partsMultiplier, + threshold, + maxCreeps: Infinity, + minCostPerCreep: 250, + priority, + memoryAdditions: {}, + } + })(), + ) + } + + /** + * Spawn for roles that are per-source + */ + private remoteSourceRoles() { + let priorityIncrement = 0 + + const remoteSourceIndexesByEfficacy = + this.communeManager.room.roomManager.remoteSourceIndexesByEfficacy + for (const remoteInfo of remoteSourceIndexesByEfficacy) { + const splitRemoteInfo = remoteInfo.split(' ') + const remoteName = splitRemoteInfo[0] + + const remoteMemory = Memory.rooms[remoteName] + if (remoteMemory[RoomMemoryKeys.disable]) continue + if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) continue + if (remoteMemory[RoomMemoryKeys.commune] !== this.communeManager.room.name) continue + if (remoteMemory[RoomMemoryKeys.enemyReserved]) continue + if (remoteMemory[RoomMemoryKeys.abandonRemote] > 0) continue + + priorityIncrement += 1 + + const sourceIndex = parseInt(splitRemoteInfo[1]) as 0 | 1 + + const harvesterPriority = this.minRemotePriority + priorityIncrement + + // Construct requests for remoteSourceHarvesters + + this.rawSpawnRequestsArgs.push( + ((): SpawnRequestArgs | false => { + const partsMultiplier = + remoteMemory[RoomMemoryKeys.maxSourceIncome][sourceIndex] - + remoteMemory[RoomMemoryKeys.remoteSourceHarvesters][sourceIndex] + if (partsMultiplier <= 0) return false + + const role = 'remoteSourceHarvester' + const priority = harvesterPriority + const spawnGroup = this.communeManager.remoteSourceHarvesters[remoteName][sourceIndex] + const sourcePositionsAmount = + remoteMemory[RoomMemoryKeys.remoteSourceHarvestPositions][sourceIndex].length / + packedPosLength + + if (this.spawnEnergyCapacity >= 950) { + return { + type: SpawnRequestTypes.individualUniform, + role, + defaultParts: [CARRY], + extraParts: [WORK, MOVE, WORK, MOVE], + partsMultiplier: Math.ceil(partsMultiplier / 2), + spawnGroup, + threshold: 0.1, + creepsQuota: 1, + maxCreeps: sourcePositionsAmount, + maxCostPerCreep: 50 + 150 * 6, + minCostPerCreep: 350, + priority, + memoryAdditions: { + [CreepMemoryKeys.preferRoads]: true, + [CreepMemoryKeys.sourceIndex]: sourceIndex, + [CreepMemoryKeys.remote]: remoteName, + }, + } + } + + // We can start reserving + + if (this.spawnEnergyCapacity >= 650) { + return { + type: SpawnRequestTypes.groupDiverse, + role, + defaultParts: [CARRY], + extraParts: [WORK, WORK, MOVE], + partsMultiplier: Math.ceil(partsMultiplier / 2), + spawnGroup, + threshold: 0.1, + + maxCreeps: sourcePositionsAmount, + maxCostPerCreep: 50 + 250 * 3, + minCostPerCreep: 300, + priority, + memoryAdditions: { + [CreepMemoryKeys.preferRoads]: true, + [CreepMemoryKeys.sourceIndex]: sourceIndex, + [CreepMemoryKeys.remote]: remoteName, + }, + } + } + + if (this.spawnEnergyCapacity >= 450) { + return { + type: SpawnRequestTypes.groupDiverse, + role, + defaultParts: [CARRY], + extraParts: [WORK, WORK, MOVE, WORK, MOVE], + partsMultiplier: Math.floor(partsMultiplier / 3), + spawnGroup, + threshold: 0.1, + maxCreeps: sourcePositionsAmount, + maxCostPerCreep: 50 + 400 * 2, + minCostPerCreep: 300, + priority, + memoryAdditions: { + [CreepMemoryKeys.preferRoads]: true, + [CreepMemoryKeys.sourceIndex]: sourceIndex, + [CreepMemoryKeys.remote]: remoteName, + }, + } + } + + return { + type: SpawnRequestTypes.groupDiverse, + role, + defaultParts: [CARRY], + extraParts: [WORK, WORK, MOVE], + partsMultiplier: Math.ceil(partsMultiplier / 2), + spawnGroup, + threshold: 0.1, + + maxCreeps: sourcePositionsAmount, + maxCostPerCreep: 50 + 250 * 3, + minCostPerCreep: 300, + priority, + memoryAdditions: { + [CreepMemoryKeys.preferRoads]: true, + [CreepMemoryKeys.sourceIndex]: sourceIndex, + [CreepMemoryKeys.remote]: remoteName, + }, + } + })(), + ) + + this.rawSpawnRequestsArgs.push( + ((): SpawnRequestArgs | false => { + const role = 'hauler' + + const carryPartsNeed = + remoteMemory[RoomMemoryKeys.haulers][sourceIndex] - this.communeManager.haulerCarryParts + this.communeManager.haulerCarryParts -= remoteMemory[RoomMemoryKeys.haulers][sourceIndex] + if (carryPartsNeed <= 0) return false + + this.activeRemotePriority = Math.max(this.activeRemotePriority, harvesterPriority + 0.1) + + // Lower priority - more preference - than remote harvesters + + const priority = this.minRemotePriority + priorityIncrement + + /* // If all RCL 3 extensions are built (we're ready for roads) if (this.spawnEnergyCapacity >= 800) { @@ -1291,137 +1284,133 @@ export class SpawnRequestsManager { } */ - const costStep = 100 - const cost = Math.floor(this.minHaulerCost / costStep) * costStep - - return { - type: SpawnRequestTypes.groupUniform, - role, - defaultParts: [], - extraParts: [CARRY, MOVE], - spawnGroup: [], - threshold: 0, - partsQuota: carryPartsNeed * 2, - partsMultiplier: carryPartsNeed, - maxCostPerCreep: cost, - minCostPerCreep: costStep, - priority, - memoryAdditions: {}, - } - })(), - ) - } + const costStep = 100 + const cost = Math.floor(this.minHaulerCost / costStep) * costStep + + return { + type: SpawnRequestTypes.groupUniform, + role, + defaultParts: [], + extraParts: [CARRY, MOVE], + spawnGroup: [], + threshold: 0, + partsQuota: carryPartsNeed * 2, + partsMultiplier: carryPartsNeed, + maxCostPerCreep: cost, + minCostPerCreep: costStep, + priority, + memoryAdditions: {}, + } + })(), + ) } - - private generalRemoteRoles() { - const remoteNamesByEfficacy = this.communeManager.room.roomManager.remoteNamesByEfficacy - - for (let index = 0; index < remoteNamesByEfficacy.length; index += 1) { - const remoteName = remoteNamesByEfficacy[index] - const remoteMemory = Memory.rooms[remoteName] - - if (remoteMemory[RoomMemoryKeys.disable]) continue - if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) continue - if (remoteMemory[RoomMemoryKeys.commune] !== this.communeManager.room.name) continue - - // Add up econ data for this.communeManager.room this.communeManager.room - - const totalRemoteNeed = - Math.max(remoteMemory[RoomMemoryKeys.remoteBuilder], 0) + - Math.max(remoteMemory[RoomMemoryKeys.remoteReservers], 0) + - Math.max(remoteMemory[RoomMemoryKeys.remoteCoreAttacker], 0) + - Math.max(remoteMemory[RoomMemoryKeys.remoteDismantler], 0) - if (totalRemoteNeed <= 0) continue - - // Construct requests for remoteBuilders - - this.rawSpawnRequestsArgs.push( - ((): SpawnRequestArgs | false => { - return false - - // If there are no data for this.communeManager.room this.communeManager.room, inform false - - if (remoteMemory[RoomMemoryKeys.remoteBuilder] <= 0) return false - - // If there are insufficient harvesters for the remote's sources - - if ( - remoteMemory[RoomMemoryKeys.remoteSourceHarvesters].reduce( - (partialSum, val) => partialSum + val, - 0, - ) === 0 - ) - return false - - return { - type: SpawnRequestTypes.groupDiverse, - role: 'remoteBuilder', - defaultParts: [], - extraParts: [WORK, MOVE, CARRY, MOVE], - partsMultiplier: remoteMemory[RoomMemoryKeys.remoteBuilder], - spawnGroup: - this.communeManager.room.creepsOfRemote[remoteName].remoteBuilder, - maxCreeps: - remoteMemory[RoomMemoryKeys.remoteControllerPositions].length / - packedPosLength, - minCostPerCreep: 250, - priority: this.minRemotePriority + 0.1, - memoryAdditions: { - [CreepMemoryKeys.remote]: remoteName, - }, - } - })(), - ) - - // Construct requests for remoteReservers - - this.rawSpawnRequestsArgs.push( - ((): SpawnRequestArgs | false => { - // If there are no data for this.communeManager.room this.communeManager.room, inform false - - if (remoteMemory[RoomMemoryKeys.remoteReservers] <= 0) return false - - let cost = 650 - - // If there isn't enough this.spawnEnergyCapacity to spawn a remoteReserver, inform false - - if (this.spawnEnergyCapacity < cost) return false - - // If there are insufficient harvesters for the remote's sources - - if ( - remoteMemory[RoomMemoryKeys.remoteSourceHarvesters].reduce( - (partialSum, val) => partialSum + val, - 0, - ) === 0 - ) - return false - - const priority = this.minRemotePriority + 0.1 - this.activeRemotePriority = Math.max(this.activeRemotePriority, priority + 0.1) - - return { - type: SpawnRequestTypes.groupDiverse, - role: 'remoteReserver', - defaultParts: [], - extraParts: [MOVE, CLAIM], - partsMultiplier: remoteMemory[RoomMemoryKeys.remoteReservers], - spawnGroup: - this.communeManager.room.creepsOfRemote[remoteName].remoteReserver, - maxCreeps: - remoteMemory[RoomMemoryKeys.remoteControllerPositions].length / - packedPosLength, - minCostPerCreep: cost, - priority, - memoryAdditions: { - [CreepMemoryKeys.remote]: remoteName, - }, - } - })(), - ) - - // Construct requests for remoteDefenders - /* + } + + private generalRemoteRoles() { + const remoteNamesByEfficacy = this.communeManager.room.roomManager.remoteNamesByEfficacy + + for (let index = 0; index < remoteNamesByEfficacy.length; index += 1) { + const remoteName = remoteNamesByEfficacy[index] + const remoteMemory = Memory.rooms[remoteName] + + if (remoteMemory[RoomMemoryKeys.disable]) continue + if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) continue + if (remoteMemory[RoomMemoryKeys.commune] !== this.communeManager.room.name) continue + + // Add up econ data for this.communeManager.room this.communeManager.room + + const totalRemoteNeed = + Math.max(remoteMemory[RoomMemoryKeys.remoteBuilder], 0) + + Math.max(remoteMemory[RoomMemoryKeys.remoteReservers], 0) + + Math.max(remoteMemory[RoomMemoryKeys.remoteCoreAttacker], 0) + + Math.max(remoteMemory[RoomMemoryKeys.remoteDismantler], 0) + if (totalRemoteNeed <= 0) continue + + // Construct requests for remoteBuilders + + this.rawSpawnRequestsArgs.push( + ((): SpawnRequestArgs | false => { + return false + + // If there are no data for this.communeManager.room this.communeManager.room, inform false + + if (remoteMemory[RoomMemoryKeys.remoteBuilder] <= 0) return false + + // If there are insufficient harvesters for the remote's sources + + if ( + remoteMemory[RoomMemoryKeys.remoteSourceHarvesters].reduce( + (partialSum, val) => partialSum + val, + 0, + ) === 0 + ) + return false + + return { + type: SpawnRequestTypes.groupDiverse, + role: 'remoteBuilder', + defaultParts: [], + extraParts: [WORK, MOVE, CARRY, MOVE], + partsMultiplier: remoteMemory[RoomMemoryKeys.remoteBuilder], + spawnGroup: this.communeManager.room.creepsOfRemote[remoteName].remoteBuilder, + maxCreeps: + remoteMemory[RoomMemoryKeys.remoteControllerPositions].length / packedPosLength, + minCostPerCreep: 250, + priority: this.minRemotePriority + 0.1, + memoryAdditions: { + [CreepMemoryKeys.remote]: remoteName, + }, + } + })(), + ) + + // Construct requests for remoteReservers + + this.rawSpawnRequestsArgs.push( + ((): SpawnRequestArgs | false => { + // If there are no data for this.communeManager.room this.communeManager.room, inform false + + if (remoteMemory[RoomMemoryKeys.remoteReservers] <= 0) return false + + let cost = 650 + + // If there isn't enough this.spawnEnergyCapacity to spawn a remoteReserver, inform false + + if (this.spawnEnergyCapacity < cost) return false + + // If there are insufficient harvesters for the remote's sources + + if ( + remoteMemory[RoomMemoryKeys.remoteSourceHarvesters].reduce( + (partialSum, val) => partialSum + val, + 0, + ) === 0 + ) + return false + + const priority = this.minRemotePriority + 0.1 + this.activeRemotePriority = Math.max(this.activeRemotePriority, priority + 0.1) + + return { + type: SpawnRequestTypes.groupDiverse, + role: 'remoteReserver', + defaultParts: [], + extraParts: [MOVE, CLAIM], + partsMultiplier: remoteMemory[RoomMemoryKeys.remoteReservers], + spawnGroup: this.communeManager.room.creepsOfRemote[remoteName].remoteReserver, + maxCreeps: + remoteMemory[RoomMemoryKeys.remoteControllerPositions].length / packedPosLength, + minCostPerCreep: cost, + priority, + memoryAdditions: { + [CreepMemoryKeys.remote]: remoteName, + }, + } + })(), + ) + + // Construct requests for remoteDefenders + /* this.rawSpawnRequestsArgs.push( ((): SpawnRequestArgs | false => { // If there are no related data @@ -1487,410 +1476,399 @@ export class SpawnRequestsManager { })(), ) */ - // Construct requests for remoteCoreAttackers - - this.rawSpawnRequestsArgs.push( - ((): SpawnRequestArgs | false => { - // If there are no related data - - if (remoteMemory[RoomMemoryKeys.remoteCoreAttacker] <= 0) return false - - // Define the minCost and strength - - const cost = 130 - const extraParts = [ATTACK, MOVE] - - return { - type: SpawnRequestTypes.groupDiverse, - role: 'remoteCoreAttacker', - defaultParts: [], - extraParts, - partsMultiplier: 50 / extraParts.length, - spawnGroup: - this.communeManager.room.creepsOfRemote[remoteName].remoteCoreAttacker, - /* minCreeps: 1, */ - maxCreeps: 3, - minCostPerCreep: cost * extraParts.length, - priority: this.minRemotePriority - 2, - memoryAdditions: { - [CreepMemoryKeys.remote]: remoteName, - }, - } - })(), - ) - - // Construct requests for remoteDismantler - - this.rawSpawnRequestsArgs.push( - ((): SpawnRequestArgs | false => { - // If there are no related data - - if (remoteMemory[RoomMemoryKeys.remoteDismantler] <= 0) return false - - // Define the minCost and strength - - const cost = 150 - const extraParts = [WORK, MOVE] - - return { - type: SpawnRequestTypes.individualUniform, - role: 'remoteDismantler', - defaultParts: [], - extraParts, - partsMultiplier: 50 / extraParts.length, - spawnGroup: - this.communeManager.room.creepsOfRemote[remoteName].remoteDismantler, - creepsQuota: 1, - minCostPerCreep: cost * 2, - priority: this.minRemotePriority - 1, - memoryAdditions: { - [CreepMemoryKeys.remote]: remoteName, - }, - } - })(), - ) + // Construct requests for remoteCoreAttackers + + this.rawSpawnRequestsArgs.push( + ((): SpawnRequestArgs | false => { + // If there are no related data + + if (remoteMemory[RoomMemoryKeys.remoteCoreAttacker] <= 0) return false + + // Define the minCost and strength + + const cost = 130 + const extraParts = [ATTACK, MOVE] + + return { + type: SpawnRequestTypes.groupDiverse, + role: 'remoteCoreAttacker', + defaultParts: [], + extraParts, + partsMultiplier: 50 / extraParts.length, + spawnGroup: this.communeManager.room.creepsOfRemote[remoteName].remoteCoreAttacker, + /* minCreeps: 1, */ + maxCreeps: 3, + minCostPerCreep: cost * extraParts.length, + priority: this.minRemotePriority - 2, + memoryAdditions: { + [CreepMemoryKeys.remote]: remoteName, + }, + } + })(), + ) + + // Construct requests for remoteDismantler + + this.rawSpawnRequestsArgs.push( + ((): SpawnRequestArgs | false => { + // If there are no related data + + if (remoteMemory[RoomMemoryKeys.remoteDismantler] <= 0) return false + + // Define the minCost and strength + + const cost = 150 + const extraParts = [WORK, MOVE] + + return { + type: SpawnRequestTypes.individualUniform, + role: 'remoteDismantler', + defaultParts: [], + extraParts, + partsMultiplier: 50 / extraParts.length, + spawnGroup: this.communeManager.room.creepsOfRemote[remoteName].remoteDismantler, + creepsQuota: 1, + minCostPerCreep: cost * 2, + priority: this.minRemotePriority - 1, + memoryAdditions: { + [CreepMemoryKeys.remote]: remoteName, + }, + } + })(), + ) + } + } + + private scout() { + this.rawSpawnRequestsArgs.push( + ((): SpawnRequestArgs | false => { + let minCreeps: number + if (this.communeManager.room.roomManager.structures.observer.length) minCreeps = 1 + else minCreeps = 2 + + return { + type: SpawnRequestTypes.individualUniform, + role: 'scout', + defaultParts: [], + extraParts: [MOVE], + partsMultiplier: 1, + creepsQuota: minCreeps, + minCostPerCreep: 50, + priority: this.activeRemotePriority + 0.3, + memoryAdditions: { + [CreepMemoryKeys.signTarget]: this.communeManager.room.name, + }, } + })(), + ) + } + + private workRequestRoles() { + if (this.communeManager.room.memory[RoomMemoryKeys.workRequest]) { + const requestName = this.communeManager.room.memory[RoomMemoryKeys.workRequest] + const request = Memory.workRequests[requestName] + + // Construct requests for claimers + + this.rawSpawnRequestsArgs.push( + ((): SpawnRequestArgs | false => { + if (request[WorkRequestKeys.claimer] <= 0) return false + + return { + type: SpawnRequestTypes.individualUniform, + role: 'claimer', + defaultParts: [CLAIM, MOVE], + extraParts: [MOVE, MOVE, MOVE, MOVE], + partsMultiplier: 1, + creepsQuota: 1, + minCostPerCreep: 650, + priority: 8.1, + memoryAdditions: { + [CreepMemoryKeys.workRequest]: requestName, + }, + } + })(), + ) + + // Requests for vanguard + + this.rawSpawnRequestsArgs.push( + ((): SpawnRequestArgs | false => { + if (request[WorkRequestKeys.vanguard] <= 0) return false + + let maxCreeps = 0 + for (const packedPositions of Memory.rooms[requestName][ + RoomMemoryKeys.communeSourceHarvestPositions + ]) { + maxCreeps += packedPositions.length + } + + return { + type: SpawnRequestTypes.groupDiverse, + role: 'vanguard', + defaultParts: [], + extraParts: [WORK, CARRY, CARRY, MOVE, MOVE, MOVE], + partsMultiplier: request[WorkRequestKeys.vanguard], + maxCreeps, + minCostPerCreep: 250, + priority: 8.2, + memoryAdditions: { + [CreepMemoryKeys.workRequest]: requestName, + }, + } + })(), + ) + + // allyVanguard + + this.rawSpawnRequestsArgs.push( + ((): SpawnRequestArgs | false => { + // If there is no vanguard need + + if (request[WorkRequestKeys.allyVanguard] <= 0) return false + + return { + type: SpawnRequestTypes.groupDiverse, + role: 'allyVanguard', + defaultParts: [], + extraParts: [WORK, CARRY, CARRY, MOVE, MOVE, MOVE], + partsMultiplier: request[WorkRequestKeys.allyVanguard], + minCostPerCreep: 250, + priority: 10 + this.communeManager.room.creepsFromRoom.allyVanguard.length, + memoryAdditions: { + [CreepMemoryKeys.workRequest]: requestName, + }, + } + })(), + ) } - - private scout() { - this.rawSpawnRequestsArgs.push( - ((): SpawnRequestArgs | false => { - let minCreeps: number - if (this.communeManager.room.roomManager.structures.observer.length) minCreeps = 1 - else minCreeps = 2 - - return { - type: SpawnRequestTypes.individualUniform, - role: 'scout', - defaultParts: [], - extraParts: [MOVE], - partsMultiplier: 1, - creepsQuota: minCreeps, - minCostPerCreep: 50, - priority: this.activeRemotePriority + 0.3, - memoryAdditions: { - [CreepMemoryKeys.signTarget]: this.communeManager.room.name, - }, - } - })(), - ) + } + + private requestHauler() { + for (const requestName of this.communeManager.room.memory[RoomMemoryKeys.haulRequests]) { + const request = Memory.haulRequests[requestName] + if (!request) continue + + this.rawSpawnRequestsArgs.push( + ((): SpawnRequestArgs | false => { + const priority = Math.min( + 0.5 + this.communeManager.room.creepsFromRoom.requestHauler.length / 2, + this.minRemotePriority - 1, + ) + + return { + type: SpawnRequestTypes.groupDiverse, + role: 'requestHauler', + defaultParts: [], + extraParts: [CARRY, MOVE], + partsMultiplier: 100, + minCostPerCreep: 100, + maxCostPerCreep: this.minHaulerCost, + priority, + memoryAdditions: { + [CreepMemoryKeys.haulRequest]: requestName, + }, + } + })(), + ) } + } + + private antifa() { + let priority = this.minRemotePriority + + for ( + let i = this.communeManager.room.memory[RoomMemoryKeys.combatRequests].length - 1; + i >= 0; + i -= 1 + ) { + const requestName = + Memory.rooms[this.communeManager.room.name][RoomMemoryKeys.combatRequests][i] + const request = Memory.combatRequests[requestName] + + if (!request) continue + + if (request[CombatRequestKeys.abandon] > 0) continue + + priority -= 0.01 + + // + + const minRangedAttackCost = this.communeManager.room.communeManager.findMinRangedAttackCost( + request[CombatRequestKeys.minDamage], + ) + const rangedAttackAmount = Math.floor( + minRangedAttackCost / (BODYPART_COST[RANGED_ATTACK] + BODYPART_COST[MOVE]), + ) + + const minAttackCost = this.communeManager.room.communeManager.findMinMeleeAttackCost( + request[CombatRequestKeys.minDamage], + ) + const attackAmount = Math.floor(minAttackCost / (BODYPART_COST[ATTACK] + BODYPART_COST[MOVE])) + + const minMeleeHealCost = this.communeManager.room.communeManager.findMinHealCost( + request[CombatRequestKeys.minMeleeHeal] + (request[CombatRequestKeys.maxTowerDamage] || 0), + ) + const meleeHealAmount = Math.floor( + minMeleeHealCost / (BODYPART_COST[HEAL] + BODYPART_COST[MOVE]), + ) + + const minRangedHealCost = this.communeManager.room.communeManager.findMinHealCost( + request[CombatRequestKeys.minRangedHeal] + (request[CombatRequestKeys.maxTowerDamage] || 0), + ) + const rangedHealAmount = Math.floor( + minRangedHealCost / (BODYPART_COST[HEAL] + BODYPART_COST[MOVE]), + ) + + const minDismantleCost = + request[CombatRequestKeys.dismantle] * BODYPART_COST[WORK] + + request[CombatRequestKeys.dismantle] * BODYPART_COST[MOVE] || 0 + + if ( + request[CombatRequestKeys.type] === 'attack' || + request[CombatRequestKeys.type] === 'defend' + ) { + if ( + minRangedAttackCost + minRangedHealCost > + this.communeManager.room.energyCapacityAvailable || + minAttackCost > this.communeManager.room.energyCapacityAvailable || + (rangedAttackAmount + rangedHealAmount) * 2 > 50 || + attackAmount * 2 > 50 + ) { + this.communeManager.room.communeManager.deleteCombatRequest(requestName, i) + continue + } - private workRequestRoles() { - if (this.communeManager.room.memory[RoomMemoryKeys.workRequest]) { - const requestName = this.communeManager.room.memory[RoomMemoryKeys.workRequest] - const request = Memory.workRequests[requestName] - - // Construct requests for claimers - - this.rawSpawnRequestsArgs.push( - ((): SpawnRequestArgs | false => { - if (request[WorkRequestKeys.claimer] <= 0) return false - - return { - type: SpawnRequestTypes.individualUniform, - role: 'claimer', - defaultParts: [CLAIM, MOVE], - extraParts: [MOVE, MOVE, MOVE, MOVE], - partsMultiplier: 1, - creepsQuota: 1, - minCostPerCreep: 650, - priority: 8.1, - memoryAdditions: { - [CreepMemoryKeys.workRequest]: requestName, - }, - } - })(), - ) - - // Requests for vanguard - - this.rawSpawnRequestsArgs.push( - ((): SpawnRequestArgs | false => { - if (request[WorkRequestKeys.vanguard] <= 0) return false - - let maxCreeps = 0 - for (const packedPositions of Memory.rooms[requestName][ - RoomMemoryKeys.communeSourceHarvestPositions - ]) { - maxCreeps += packedPositions.length - } - - return { - type: SpawnRequestTypes.groupDiverse, - role: 'vanguard', - defaultParts: [], - extraParts: [WORK, CARRY, CARRY, MOVE, MOVE, MOVE], - partsMultiplier: request[WorkRequestKeys.vanguard], - maxCreeps, - minCostPerCreep: 250, - priority: 8.2, - memoryAdditions: { - [CreepMemoryKeys.workRequest]: requestName, - }, - } - })(), - ) - - // allyVanguard - - this.rawSpawnRequestsArgs.push( - ((): SpawnRequestArgs | false => { - // If there is no vanguard need + // Spawn quad - if (request[WorkRequestKeys.allyVanguard] <= 0) return false + this.rawSpawnRequestsArgs.push( + ((): SpawnRequestArgs | false => { + // We currently have enough quads - return { - type: SpawnRequestTypes.groupDiverse, - role: 'allyVanguard', - defaultParts: [], - extraParts: [WORK, CARRY, CARRY, MOVE, MOVE, MOVE], - partsMultiplier: request[WorkRequestKeys.allyVanguard], - minCostPerCreep: 250, - priority: 10 + this.communeManager.room.creepsFromRoom.allyVanguard.length, - memoryAdditions: { - [CreepMemoryKeys.workRequest]: requestName, - }, - } - })(), - ) - } - } + if (request[CombatRequestKeys.quads] >= request[CombatRequestKeys.quadQuota]) + return false - private requestHauler() { - for (const requestName of this.communeManager.room.memory[RoomMemoryKeys.haulRequests]) { - const request = Memory.haulRequests[requestName] - if (!request) continue + const role = 'antifaRangedAttacker' - this.rawSpawnRequestsArgs.push( - ((): SpawnRequestArgs | false => { - const priority = Math.min( - 0.5 + this.communeManager.room.creepsFromRoom.requestHauler.length / 2, - this.minRemotePriority - 1, - ) + let spawnGroup: string[] - return { - type: SpawnRequestTypes.groupDiverse, - role: 'requestHauler', - defaultParts: [], - extraParts: [CARRY, MOVE], - partsMultiplier: 100, - minCostPerCreep: 100, - maxCostPerCreep: this.minHaulerCost, - priority, - memoryAdditions: { - [CreepMemoryKeys.haulRequest]: requestName, - }, - } - })(), - ) - } - } + if (collectiveManager.creepsByCombatRequest[requestName]) { + spawnGroup = collectiveManager.creepsByCombatRequest[requestName][role] + } + spawnGroup = [] - private antifa() { - let priority = this.minRemotePriority + const minCost = minRangedAttackCost + minRangedHealCost + const extraParts: BodyPartConstant[] = [] - for ( - let i = this.communeManager.room.memory[RoomMemoryKeys.combatRequests].length - 1; - i >= 0; - i -= 1 - ) { - const requestName = - Memory.rooms[this.communeManager.room.name][RoomMemoryKeys.combatRequests][i] - const request = Memory.combatRequests[requestName] + interface TradeType { + amount: number + other: BodyPartConstant + } - if (!request) continue + const tradeTypes: { [key in BodyPartConstant]?: TradeType } = { + [RANGED_ATTACK]: { + amount: rangedAttackAmount, + other: HEAL, + }, + [HEAL]: { + amount: rangedHealAmount, + other: RANGED_ATTACK, + }, + } + const totalTradeableParts = rangedAttackAmount + rangedHealAmount - if (request[CombatRequestKeys.abandon] > 0) continue + let tradeAmount = Infinity - priority -= 0.01 + for (const key in tradeTypes) { + const partType = key as BodyPartConstant + const tradeType = tradeTypes[partType] + const ratio = tradeType.amount / totalTradeableParts - // + let localTradeAmount = Math.ceil(tradeType.amount * ratio * 0.75) + if (localTradeAmount >= tradeAmount) continue - const minRangedAttackCost = - this.communeManager.room.communeManager.findMinRangedAttackCost( - request[CombatRequestKeys.minDamage], + function findCost() { + return ( + (tradeType.amount + localTradeAmount) * BODYPART_COST[partType] + + (tradeTypes[tradeType.other].amount - localTradeAmount) * + BODYPART_COST[tradeType.other] + + totalTradeableParts * BODYPART_COST[MOVE] ) - const rangedAttackAmount = Math.floor( - minRangedAttackCost / (BODYPART_COST[RANGED_ATTACK] + BODYPART_COST[MOVE]), - ) - - const minAttackCost = this.communeManager.room.communeManager.findMinMeleeAttackCost( - request[CombatRequestKeys.minDamage], - ) - const attackAmount = Math.floor( - minAttackCost / (BODYPART_COST[ATTACK] + BODYPART_COST[MOVE]), - ) + } - const minMeleeHealCost = this.communeManager.room.communeManager.findMinHealCost( - request[CombatRequestKeys.minMeleeHeal] + - (request[CombatRequestKeys.maxTowerDamage] || 0), - ) - const meleeHealAmount = Math.floor( - minMeleeHealCost / (BODYPART_COST[HEAL] + BODYPART_COST[MOVE]), - ) + while (findCost() > this.spawnEnergyCapacity) { + localTradeAmount -= 1 + } - const minRangedHealCost = this.communeManager.room.communeManager.findMinHealCost( - request[CombatRequestKeys.minRangedHeal] + - (request[CombatRequestKeys.maxTowerDamage] || 0), - ) - const rangedHealAmount = Math.floor( - minRangedHealCost / (BODYPART_COST[HEAL] + BODYPART_COST[MOVE]), - ) + tradeAmount = localTradeAmount + } - const minDismantleCost = - request[CombatRequestKeys.dismantle] * BODYPART_COST[WORK] + - request[CombatRequestKeys.dismantle] * BODYPART_COST[MOVE] || 0 + // We need attack and tough oriented creeps if ( - request[CombatRequestKeys.type] === 'attack' || - request[CombatRequestKeys.type] === 'defend' + this.communeManager.room.squadRequests.size < + (request[CombatRequestKeys.quads] + 1) * 4 - 2 ) { - if ( - minRangedAttackCost + minRangedHealCost > - this.communeManager.room.energyCapacityAvailable || - minAttackCost > this.communeManager.room.energyCapacityAvailable || - (rangedAttackAmount + rangedHealAmount) * 2 > 50 || - attackAmount * 2 > 50 - ) { - this.communeManager.room.communeManager.deleteCombatRequest(requestName, i) - continue - } - - // Spawn quad - - this.rawSpawnRequestsArgs.push( - ((): SpawnRequestArgs | false => { - // We currently have enough quads - - if ( - request[CombatRequestKeys.quads] >= request[CombatRequestKeys.quadQuota] - ) - return false - - const role = 'antifaRangedAttacker' - - let spawnGroup: string[] - - if (collectiveManager.creepsByCombatRequest[requestName]) { - spawnGroup = collectiveManager.creepsByCombatRequest[requestName][role] - } - spawnGroup = [] - - const minCost = minRangedAttackCost + minRangedHealCost - const extraParts: BodyPartConstant[] = [] - - interface TradeType { - amount: number - other: BodyPartConstant - } - - const tradeTypes: { [key in BodyPartConstant]?: TradeType } = { - [RANGED_ATTACK]: { - amount: rangedAttackAmount, - other: HEAL, - }, - [HEAL]: { - amount: rangedHealAmount, - other: RANGED_ATTACK, - }, - } - const totalTradeableParts = rangedAttackAmount + rangedHealAmount - - let tradeAmount = Infinity - - for (const key in tradeTypes) { - const partType = key as BodyPartConstant - const tradeType = tradeTypes[partType] - const ratio = tradeType.amount / totalTradeableParts - - let localTradeAmount = Math.ceil(tradeType.amount * ratio * 0.75) - if (localTradeAmount >= tradeAmount) continue - - function findCost() { - return ( - (tradeType.amount + localTradeAmount) * - BODYPART_COST[partType] + - (tradeTypes[tradeType.other].amount - localTradeAmount) * - BODYPART_COST[tradeType.other] + - totalTradeableParts * BODYPART_COST[MOVE] - ) - } - - while (findCost() > this.spawnEnergyCapacity) { - localTradeAmount -= 1 - } - - tradeAmount = localTradeAmount - } - - // We need attack and tough oriented creeps - - if ( - this.communeManager.room.squadRequests.size < - (request[CombatRequestKeys.quads] + 1) * 4 - 2 - ) { - for (let i = 0; i < rangedAttackAmount + tradeAmount; i++) { - extraParts.push(RANGED_ATTACK, MOVE) - } - - for (let i = 0; i < rangedHealAmount - tradeAmount; i++) { - extraParts.push(HEAL, MOVE) - } - } - - // We need heal-oriented creeps - else { - for (let i = 0; i < rangedAttackAmount - tradeAmount; i++) { - extraParts.push(RANGED_ATTACK, MOVE) - } + for (let i = 0; i < rangedAttackAmount + tradeAmount; i++) { + extraParts.push(RANGED_ATTACK, MOVE) + } - for (let i = 0; i < rangedHealAmount + tradeAmount; i++) { - extraParts.push(HEAL, MOVE) - } - } - - if (!extraParts.length) return false - - return { - type: SpawnRequestTypes.individualUniform, - role, - defaultParts: [], - extraParts, - partsMultiplier: 1, - minCostPerCreep: minCost, - priority, - spawnGroup, - creepsQuota: request[CombatRequestKeys.quadQuota] * 4, - memoryAdditions: { - [CreepMemoryKeys.combatRequest]: requestName, - [CreepMemoryKeys.squadSize]: 4, - [CreepMemoryKeys.squadType]: 'quad', - [CreepMemoryKeys.squadCombatType]: 'rangedAttack', - [CreepMemoryKeys.squadMoveType]: 'attack', - }, - } - })(), - ) - continue + for (let i = 0; i < rangedHealAmount - tradeAmount; i++) { + extraParts.push(HEAL, MOVE) + } } - // Harass + // We need heal-oriented creeps + else { + for (let i = 0; i < rangedAttackAmount - tradeAmount; i++) { + extraParts.push(RANGED_ATTACK, MOVE) + } - if ( - minRangedAttackCost + minRangedHealCost > - this.communeManager.room.energyCapacityAvailable || - minAttackCost + minMeleeHealCost > - this.communeManager.room.energyCapacityAvailable || - minAttackCost > this.communeManager.room.energyCapacityAvailable - ) { - this.communeManager.room.communeManager.deleteCombatRequest(requestName, i) - continue + for (let i = 0; i < rangedHealAmount + tradeAmount; i++) { + extraParts.push(HEAL, MOVE) + } } - // If the request isn't an attack - // Spawn RangedAttack Heal singletons - /* + if (!extraParts.length) return false + + return { + type: SpawnRequestTypes.individualUniform, + role, + defaultParts: [], + extraParts, + partsMultiplier: 1, + minCostPerCreep: minCost, + priority, + spawnGroup, + creepsQuota: request[CombatRequestKeys.quadQuota] * 4, + memoryAdditions: { + [CreepMemoryKeys.combatRequest]: requestName, + [CreepMemoryKeys.squadSize]: 4, + [CreepMemoryKeys.squadType]: 'quad', + [CreepMemoryKeys.squadCombatType]: 'rangedAttack', + [CreepMemoryKeys.squadMoveType]: 'attack', + }, + } + })(), + ) + continue + } + + // Harass + + if ( + minRangedAttackCost + minRangedHealCost > + this.communeManager.room.energyCapacityAvailable || + minAttackCost + minMeleeHealCost > this.communeManager.room.energyCapacityAvailable || + minAttackCost > this.communeManager.room.energyCapacityAvailable + ) { + this.communeManager.room.communeManager.deleteCombatRequest(requestName, i) + continue + } + + // If the request isn't an attack + // Spawn RangedAttack Heal singletons + /* this.rawSpawnRequestsArgs.push( ((): SpawnRequestArgs | false => { role = 'antifaRangedAttacker' @@ -2018,6 +1996,6 @@ export class SpawnRequestsManager { } })(), ) */ - } } + } } diff --git a/src/room/creeps/creepMoveUtils.ts b/src/room/creeps/creepMoveUtils.ts index abe7c5dba..5f3f00d55 100644 --- a/src/room/creeps/creepMoveUtils.ts +++ b/src/room/creeps/creepMoveUtils.ts @@ -1,3 +1,4 @@ +import { collectiveManager } from 'international/collective' import { CreepMemoryKeys, FlagNames, @@ -15,7 +16,44 @@ import { areCoordsEqual, arePositionsEqual, findObjectWithID, getRange } from 'u /** * Utilities involving the movement of creeps */ -export class CreepMoveUtils { +export class CreepMoveProcs { + /** + * work in progress + */ + createMoveRequest(creep: Creep, goals: PathGoal[], args: any, opts: any) { + // Stop if the we know the creep won't move + + if (creep.moveRequest) return Result.noAction + if (creep.moved) return Result.noAction + if (creep.fatigue > 0) return Result.noAction + + if (creep.spawning) { + const spawn = findObjectWithID(creep.spawnID) + if (!spawn) return Result.noAction + + // Don't plan the path until we are nearly ready to be spawned + if (spawn.spawning.remainingTime > 1) return Result.noAction + } + if (!creep.getActiveBodyparts(MOVE)) { + creep.moved = MovedTypes.moved + return Result.noAction + } + + // Assign default args + + opts.cacheAmount ??= collectiveManager.defaultMinPathCacheTime + + if (creepMoveProcs.useExistingPath(creep, args, opts) === Result.success) { + return Result.success + } + + const path = creepMoveProcs.findNewPath(creep, args, opts) + if (path === Result.fail) return Result.fail + + creepMoveProcs.useNewPath(creep, args, opts, path) + return Result.success + } + useExistingPath(creep: Creep, args: CustomPathFinderArgs, opts: MoveRequestOpts) { if (creep.spawning) return Result.noAction @@ -60,7 +98,6 @@ export class CreepMoveUtils { creep: Creep, creepMemory: CreepMemory | PowerCreepMemory, ): Result.fail | RoomPosition { - // First index let firstIndex = 0 @@ -207,4 +244,4 @@ export class CreepMoveUtils { } } -export const creepMoveUtils = new CreepMoveUtils() +export const creepMoveProcs = new CreepMoveProcs() diff --git a/src/room/creeps/creepProcs.ts b/src/room/creeps/creepProcs.ts new file mode 100644 index 000000000..a85a368ac --- /dev/null +++ b/src/room/creeps/creepProcs.ts @@ -0,0 +1,356 @@ +import { RoomManager } from 'room/room' +import { getRange } from 'utils/utils' +import { myCreepUtils } from './myCreepUtils' +import { statsManager } from 'international/statsManager' +import { CreepMemoryKeys, Result, RoomLogisticsRequestTypes } from 'international/constants' +import { creepUtils } from './creepUtils' +import { communeUtils } from 'room/commune/communeUtils' + +class CreepProcs { + advancedUpgradeController(creep: Creep) { + const creepMemory = Memory.creeps[creep.name] + const controller = creep.room.controller + creepMemory[CreepMemoryKeys.targetID] = controller.id + + // Assign either the controllerLink or controllerContainer as the controllerStructure + + let controllerStructure: StructureLink | StructureContainer | false = + creep.room.roomManager.controllerContainer + const controllerLink = creep.room.communeManager.controllerLink + + if (!controllerStructure && controllerLink && controllerLink.isRCLActionable) + controllerStructure = controllerLink + + // If there is a controllerContainer + + if (controllerStructure) { + // If we're not on a viable upgrade pos + + const upgradePos = creepUtils.findUpgradePosWeak(creep) + if (!upgradePos) { + const upgradePos = creepUtils.findUpgradePosStrong(creep) + if (!upgradePos) return false + + if (getRange(creep.pos, upgradePos) > 0) { + creep.createMoveRequest({ + origin: creep.pos, + goals: [ + { + pos: upgradePos, + range: 0, + }, + ], + avoidEnemyRanges: true, + defaultCostMatrix(roomName) { + const roomManager = RoomManager.roomManagers[roomName] + if (!roomManager) return false + + return roomManager.defaultCostMatrix + }, + }) + + creep.message += '➡️' + } + } + + creep.actionCoord = creep.room.roomManager.centerUpgradePos + + const workPartCount = myCreepUtils.parts(creep).work + const controllerRange = getRange(creep.pos, controller.pos) + + if (controllerRange <= 3 && creep.nextStore.energy > 0) { + if (creep.upgradeController(controller) === OK) { + creep.nextStore.energy -= workPartCount + + const controlPoints = workPartCount * UPGRADE_CONTROLLER_POWER + + statsManager.updateStat(creep.room.name, 'eou', controlPoints) + creep.message += `🔋${controlPoints}` + } + } + + const controllerStructureRange = getRange(creep.pos, controllerStructure.pos) + if (controllerStructureRange <= 3) { + // If the controllerStructure is a container and is in need of repair + + if ( + controllerStructure.structureType === STRUCTURE_CONTAINER && + creep.nextStore.energy > 0 && + controllerStructure.hitsMax - controllerStructure.hits >= workPartCount * REPAIR_POWER + ) { + // If the repair worked + + if (creep.repair(controllerStructure) === OK) { + // Find the repair amount by finding the smaller of the creep's work and the progress left for the cSite divided by repair power + + const energySpentOnRepairs = Math.min( + workPartCount, + (controllerStructure.hitsMax - controllerStructure.hits) / REPAIR_POWER, + creep.nextStore.energy, + ) + + creep.nextStore.energy -= energySpentOnRepairs + + // Add control points to total controlPoints counter and say the success + + statsManager.updateStat(creep.room.name, 'eoro', energySpentOnRepairs) + creep.message += `🔧${energySpentOnRepairs * REPAIR_POWER}` + } + } + + if (controllerStructureRange <= 1 && creep.nextStore.energy <= 0) { + // Withdraw from the controllerContainer, informing false if the withdraw failed + + if (creep.withdraw(controllerStructure, RESOURCE_ENERGY) !== OK) return false + + creep.nextStore.energy += Math.min( + creep.store.getCapacity(), + controllerStructure.nextStore.energy, + ) + controllerStructure.nextStore.energy -= creep.nextStore.energy + + delete creepMemory[CreepMemoryKeys.targetID] + creep.message += `⚡` + } + } + + return true + } + + // If the creep needs resources + + if (creep.needsResources()) { + creep.runRoomLogisticsRequestsAdvanced({ + types: new Set([ + RoomLogisticsRequestTypes.withdraw, + RoomLogisticsRequestTypes.pickup, + RoomLogisticsRequestTypes.offer, + ]), + conditions: request => request.resourceType === RESOURCE_ENERGY, + }) + + if (creep.needsResources()) return false + + delete creepMemory[CreepMemoryKeys.targetID] + + creep.createMoveRequest({ + origin: creep.pos, + goals: [{ pos: controller.pos, range: 3 }], + avoidEnemyRanges: true, + defaultCostMatrix(roomName) { + const roomManager = RoomManager.roomManagers[roomName] + if (!roomManager) return false + + return roomManager.defaultCostMatrix + }, + }) + return false + } + + // Otherwise if the creep doesn't need resources + + // If the controller is out of upgrade range + + creep.actionCoord = controller.pos + + if (getRange(creep.pos, controller.pos) > 3) { + // Make a move request to it + + creep.createMoveRequest({ + origin: creep.pos, + goals: [{ pos: controller.pos, range: 3 }], + avoidEnemyRanges: true, + defaultCostMatrix(roomName) { + const roomManager = RoomManager.roomManagers[roomName] + if (!roomManager) return false + + return roomManager.defaultCostMatrix + }, + }) + + // Inform false + + return false + } + + // Try to upgrade the controller, and if it worked + + if (creep.upgradeController(controller) === OK) { + // Add control points to total controlPoints counter and say the success + + const energySpentOnUpgrades = Math.min( + creep.nextStore.energy, + myCreepUtils.parts(creep).work * UPGRADE_CONTROLLER_POWER, + ) + + statsManager.updateStat(creep.room.name, 'eou', energySpentOnUpgrades) + creep.message = `🔋${energySpentOnUpgrades}` + + // Inform true + + return true + } + + // Inform false + + return false + } + /** + * Overhead logic ran for dead creeps + */ + runDead(creepName: string) { + const creepMemory = Memory.creeps[creepName] + const role = creepUtils.roleName(creepName) + } + runRepair(creep: Creep, target: Structure) { + // If we've already schedhuled a work intent, don't try to do another + if (creep.worked) return Result.noAction + if (creep.repair(target) !== OK) return Result.fail + + const workParts = myCreepUtils.parts(creep).work + // Estimate the repair cost, assuming it goes through + const energySpentOnRepair = Math.min( + workParts, + // Sometimes hitsMax can be more than hits + Math.max((target.hitsMax - target.hits) / REPAIR_POWER, 0), + creep.store.energy, + ) + + // Record the repair attempt in different places for barricades than other structures + if (target.structureType === STRUCTURE_RAMPART || target.structureType === STRUCTURE_WALL) { + statsManager.updateStat(creep.room.name, 'eorwr', energySpentOnRepair) + creep.message = `🧱${energySpentOnRepair * REPAIR_POWER}` + } else { + statsManager.updateStat(creep.room.name, 'eoro', energySpentOnRepair) + creep.message = `🔧${energySpentOnRepair * REPAIR_POWER}` + } + + // Estimate the target's nextHits so we can target creeps accordingly + target.nextHits = Math.min(target.nextHits + workParts * REPAIR_POWER, target.hitsMax) + return Result.success + } + repairCommune(creep: Creep) { + if (creep.needsResources()) { + if ( + creep.room.communeManager.storingStructures.length && + creep.room.roomManager.resourcesInStoringStructures.energy < 3000 + ) + return Result.fail + + // Reset target so when we are full we search again + delete Memory.creeps[creep.name][CreepMemoryKeys.structureTarget] + + creep.runRoomLogisticsRequestsAdvanced({ + types: new Set([ + RoomLogisticsRequestTypes.withdraw, + RoomLogisticsRequestTypes.offer, + RoomLogisticsRequestTypes.pickup, + ]), + resourceTypes: new Set([RESOURCE_ENERGY]), + }) + + if (creep.needsResources()) return false + } + + // Otherwise if we don't need resources and can maintain + + const workPartCount = myCreepUtils.parts(creep).work + let repairTarget = creep.findRepairTarget() + + if (!repairTarget) { + creep.message = '❌🔧' + return false + } + + creep.message = '⏩🔧' + creep.room.targetVisual(creep.pos, repairTarget.pos) + + creep.actionCoord = repairTarget.pos + + // Move to target if out of range + + if (getRange(creep.pos, repairTarget.pos) > 3) { + creep.createMoveRequest({ + origin: creep.pos, + goals: [{ pos: repairTarget.pos, range: 3 }], + avoidEnemyRanges: true, + defaultCostMatrix(roomName) { + const roomManager = RoomManager.roomManagers[roomName] + if (!roomManager) return false + + return roomManager.defaultCostMatrix + }, + }) + + return false + } + + if (this.runRepair(creep, repairTarget) !== Result.success) return Result.fail + + // If the structure is a rampart, continue repairing it + + if (repairTarget.structureType === STRUCTURE_RAMPART) return true + // Otherwise if it isn't a rampart and it will be viable to repair next tick + else if (repairTarget.hitsMax - repairTarget.nextHits >= workPartCount * REPAIR_POWER) + return true + + // Otherwise we need a new target + delete Memory.creeps[creep.name][CreepMemoryKeys.structureTarget] + delete creep.actionCoord + + // We already repaired so we can only move to a target, so if we've already done that, it's not worth continueing + if (creep.moved) return true + + // Find repair targets that don't include the current target, informing true if none were found + + repairTarget = creep.findNewRepairTarget() || creep.findNewRampartRepairTarget() + if (!repairTarget) return true + + creep.actionCoord = repairTarget.pos + + // We are already in repair range, no need to move closer + if (getRange(creep.pos, repairTarget.pos) <= 3) return true + + // Make a move request to it + + creep.createMoveRequest({ + origin: creep.pos, + goals: [{ pos: repairTarget.pos, range: 3 }], + avoidEnemyRanges: true, + defaultCostMatrix(roomName) { + const roomManager = RoomManager.roomManagers[roomName] + if (!roomManager) return false + + return roomManager.defaultCostMatrix + }, + }) + + return true + } + repairCommuneStationary(creep: Creep) {} + repairNearby(creep: Creep) { + // If the this has no energy, inform false + + if (creep.nextStore.energy <= 0) return Result.noAction + + creep.message += '🗺️' + + const workPartCount = myCreepUtils.parts(creep).work + // At some point we should compare this search with flat searching positions around the creep + const structure = communeUtils.getGeneralRepairStructures(creep.room).find(structure => { + return ( + getRange(structure.pos, creep.pos) <= 3 && + structure.hitsMax - structure.hits >= workPartCount * REPAIR_POWER + ) + }) + if (!structure) return Result.noAction + + if (this.runRepair(creep, structure) !== Result.success) return Result.fail + + // Otherwise we repaired successfully + + return Result.success + } +} + +export const creepProcs = new CreepProcs() diff --git a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts index 78286fa86..d1a8cf801 100644 --- a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts @@ -45,140 +45,136 @@ import { } from 'other/codec' import { customLog } from 'utils/logging' import { creepUtils } from '../creepUtils' -import { creepMoveUtils } from '../creepMoveUtils' +import { creepMoveProcs } from '../creepMoveUtils' PowerCreep.prototype.createMoveRequestByPath = Creep.prototype.createMoveRequestByPath = function ( - args, - pathOpts, + args, + pathOpts, ) { - // Stop if the we know the creep won't move + // Stop if the we know the creep won't move - if (this.moveRequest) return Result.noAction - if (this.moved) return Result.noAction - if (this.fatigue > 0) return Result.noAction - if (this instanceof Creep) { - - if (this.spawning) { - const spawn = findObjectWithID(this.spawnID) - if (!spawn) return Result.noAction + if (this.moveRequest) return Result.noAction + if (this.moved) return Result.noAction + if (this.fatigue > 0) return Result.noAction + if (this instanceof Creep) { + if (this.spawning) { + const spawn = findObjectWithID(this.spawnID) + if (!spawn) return Result.noAction - // Don't plan the path until we are nearly ready to be spawned - if (spawn.spawning.remainingTime > 1) return Result.noAction - } - if (!this.getActiveBodyparts(MOVE)) { - this.moved = MovedTypes.moved - return Result.noAction - } + // Don't plan the path until we are nearly ready to be spawned + if (spawn.spawning.remainingTime > 1) return Result.noAction } - if (this.room.roomManager.enemyDamageThreat) return this.createMoveRequest(args) - - // const posIndex = pathOpts.packedPath.indexOf(packPos(this.pos)) + if (!this.getActiveBodyparts(MOVE)) { + this.moved = MovedTypes.moved + return Result.noAction + } + } + if (this.room.roomManager.enemyDamageThreat) return this.createMoveRequest(args) - let posIndex = -1 + // const posIndex = pathOpts.packedPath.indexOf(packPos(this.pos)) - for (let i = 0; i < pathOpts.packedPath.length - packedPosLength + 1; i += packedPosLength) { - const pos = unpackPosAt(pathOpts.packedPath, i / packedPosLength) - if (!arePositionsEqual(this.pos, pos)) continue + let posIndex = -1 - posIndex = i - break - } + for (let i = 0; i < pathOpts.packedPath.length - packedPosLength + 1; i += packedPosLength) { + const pos = unpackPosAt(pathOpts.packedPath, i / packedPosLength) + if (!arePositionsEqual(this.pos, pos)) continue - // + posIndex = i + break + } - const packedGoalPos = packPos(args.goals[0].pos) - const isOnLastPos = posIndex + packedPosLength === pathOpts.packedPath.length + // - if ( - !isOnLastPos && - posIndex !== -1 && - this.memory[CreepMemoryKeys.usedPathForGoal] !== packedGoalPos - ) { - const packedPath = pathOpts.packedPath.slice(posIndex + packedPosLength) - const pos = unpackPosAt(packedPath, 0) + const packedGoalPos = packPos(args.goals[0].pos) + const isOnLastPos = posIndex + packedPosLength === pathOpts.packedPath.length - // If we're on an exit and the next pos is in the other room, wait + if ( + !isOnLastPos && + posIndex !== -1 && + this.memory[CreepMemoryKeys.usedPathForGoal] !== packedGoalPos + ) { + const packedPath = pathOpts.packedPath.slice(posIndex + packedPosLength) + const pos = unpackPosAt(packedPath, 0) - if (pos.roomName !== this.room.name) { + // If we're on an exit and the next pos is in the other room, wait - this.memory[CreepMemoryKeys.path] = packedPath - this.moved = MovedTypes.moved - return Result.success - } + if (pos.roomName !== this.room.name) { + this.memory[CreepMemoryKeys.path] = packedPath + this.moved = MovedTypes.moved + return Result.success + } - // Give the creep a sliced version of the path it is trying to use + // Give the creep a sliced version of the path it is trying to use - this.memory[CreepMemoryKeys.path] = packedPath - this.assignMoveRequest(pos) - return Result.success - } + this.memory[CreepMemoryKeys.path] = packedPath + this.assignMoveRequest(pos) + return Result.success + } - if (isOnLastPos || this.memory[CreepMemoryKeys.usedPathForGoal]) { - this.memory[CreepMemoryKeys.usedPathForGoal] = packPos(args.goals[0].pos) - return this.createMoveRequest(args) - } + if (isOnLastPos || this.memory[CreepMemoryKeys.usedPathForGoal]) { + this.memory[CreepMemoryKeys.usedPathForGoal] = packPos(args.goals[0].pos) + return this.createMoveRequest(args) + } - // If loose is enabled, don't try to get back on the cached path - /* + // If loose is enabled, don't try to get back on the cached path + /* this.room.visual.text((pathOpts.loose || false).toString(), this.pos.x, this.pos.y + 0.5, { font: 0.4 }) */ - if (pathOpts.loose) return this.createMoveRequest(args) + if (pathOpts.loose) return this.createMoveRequest(args) - this.room.errorVisual(this.pos) + this.room.errorVisual(this.pos) - // Try to get on the path + // Try to get on the path - args.goals = [] + args.goals = [] - for (const pos of unpackPosList(pathOpts.packedPath)) { - args.goals.push({ - pos, - range: 0, - }) - } + for (const pos of unpackPosList(pathOpts.packedPath)) { + args.goals.push({ + pos, + range: 0, + }) + } - return this.createMoveRequest(args) + return this.createMoveRequest(args) } PowerCreep.prototype.createMoveRequest = Creep.prototype.createMoveRequest = function ( - args, - opts = {}, + args, + opts = {}, ) { + // Stop if the we know the creep won't move - // Stop if the we know the creep won't move - - if (this.moveRequest) return Result.noAction - if (this.moved) return Result.noAction - if (this.fatigue > 0) return Result.noAction - if (this instanceof Creep) { - - if (this.spawning) { - const spawn = findObjectWithID(this.spawnID) - if (!spawn) return Result.noAction + if (this.moveRequest) return Result.noAction + if (this.moved) return Result.noAction + if (this.fatigue > 0) return Result.noAction + if (this instanceof Creep) { + if (this.spawning) { + const spawn = findObjectWithID(this.spawnID) + if (!spawn) return Result.noAction - // Don't plan the path until we are nearly ready to be spawned - if (spawn.spawning.remainingTime > 1) return Result.noAction - } - if (!this.getActiveBodyparts(MOVE)) { - this.moved = MovedTypes.moved - return Result.noAction - } + // Don't plan the path until we are nearly ready to be spawned + if (spawn.spawning.remainingTime > 1) return Result.noAction + } + if (!this.getActiveBodyparts(MOVE)) { + this.moved = MovedTypes.moved + return Result.noAction } + } - // Assign default args + // Assign default args - args.origin ??= this.pos - opts.cacheAmount ??= collectiveManager.defaultMinPathCacheTime + args.origin ??= this.pos + opts.cacheAmount ??= collectiveManager.defaultMinPathCacheTime - if (creepMoveUtils.useExistingPath(this, args, opts) === Result.success) { - return Result.success - } + if (creepMoveProcs.useExistingPath(this, args, opts) === Result.success) { + return Result.success + } - const path = creepMoveUtils.findNewPath(this, args, opts) - if (path === Result.fail) return Result.fail + const path = creepMoveProcs.findNewPath(this, args, opts) + if (path === Result.fail) return Result.fail - creepMoveUtils.useNewPath(this, args, opts, path) - return Result.success + creepMoveProcs.useNewPath(this, args, opts, path) + return Result.success } PowerCreep.prototype.assignMoveRequest = Creep.prototype.assignMoveRequest = function (coord) { diff --git a/src/room/creeps/creepUtils.ts b/src/room/creeps/creepUtils.ts index 1852bb7b0..f163fc45d 100644 --- a/src/room/creeps/creepUtils.ts +++ b/src/room/creeps/creepUtils.ts @@ -33,162 +33,6 @@ export class CreepUtils { return (creep._role = this.roleName(creep.name)) } - /** - * Overhead logic ran for dead creeps - */ - runDead(creepName: string) { - const creepMemory = Memory.creeps[creepName] - const role = this.roleName(creepName) - } - runRepair(creep: Creep, target: Structure) { - // If we've already schedhuled a work intent, don't try to do another - if (creep.worked) return Result.noAction - if (creep.repair(target) !== OK) return Result.fail - - const workParts = myCreepUtils.parts(creep).work - // Estimate the repair cost, assuming it goes through - const energySpentOnRepair = Math.min( - workParts, - // Sometimes hitsMax can be more than hits - Math.max((target.hitsMax - target.hits) / REPAIR_POWER, 0), - creep.store.energy, - ) - - // Record the repair attempt in different places for barricades than other structures - if (target.structureType === STRUCTURE_RAMPART || target.structureType === STRUCTURE_WALL) { - statsManager.updateStat(creep.room.name, 'eorwr', energySpentOnRepair) - creep.message = `🧱${energySpentOnRepair * REPAIR_POWER}` - } else { - statsManager.updateStat(creep.room.name, 'eoro', energySpentOnRepair) - creep.message = `🔧${energySpentOnRepair * REPAIR_POWER}` - } - - // Estimate the target's nextHits so we can target creeps accordingly - target.nextHits = Math.min(target.nextHits + workParts * REPAIR_POWER, target.hitsMax) - return Result.success - } - repairCommune(creep: Creep) { - if (creep.needsResources()) { - if ( - creep.room.communeManager.storingStructures.length && - creep.room.roomManager.resourcesInStoringStructures.energy < 3000 - ) - return Result.fail - - // Reset target so when we are full we search again - delete Memory.creeps[creep.name][CreepMemoryKeys.structureTarget] - - creep.runRoomLogisticsRequestsAdvanced({ - types: new Set([ - RoomLogisticsRequestTypes.withdraw, - RoomLogisticsRequestTypes.offer, - RoomLogisticsRequestTypes.pickup, - ]), - resourceTypes: new Set([RESOURCE_ENERGY]), - }) - - if (creep.needsResources()) return false - } - - // Otherwise if we don't need resources and can maintain - - const workPartCount = myCreepUtils.parts(creep).work - let repairTarget = creep.findRepairTarget() - - if (!repairTarget) { - creep.message = '❌🔧' - return false - } - - creep.message = '⏩🔧' - creep.room.targetVisual(creep.pos, repairTarget.pos) - - creep.actionCoord = repairTarget.pos - - // Move to target if out of range - - if (getRange(creep.pos, repairTarget.pos) > 3) { - creep.createMoveRequest({ - origin: creep.pos, - goals: [{ pos: repairTarget.pos, range: 3 }], - avoidEnemyRanges: true, - defaultCostMatrix(roomName) { - const roomManager = RoomManager.roomManagers[roomName] - if (!roomManager) return false - - return roomManager.defaultCostMatrix - }, - }) - - return false - } - - if (this.runRepair(creep, repairTarget) !== Result.success) return Result.fail - - // If the structure is a rampart, continue repairing it - - if (repairTarget.structureType === STRUCTURE_RAMPART) return true - // Otherwise if it isn't a rampart and it will be viable to repair next tick - else if (repairTarget.hitsMax - repairTarget.nextHits >= workPartCount * REPAIR_POWER) - return true - - // Otherwise we need a new target - delete Memory.creeps[creep.name][CreepMemoryKeys.structureTarget] - delete creep.actionCoord - - // We already repaired so we can only move to a target, so if we've already done that, it's not worth continueing - if (creep.moved) return true - - // Find repair targets that don't include the current target, informing true if none were found - - repairTarget = creep.findNewRepairTarget() || creep.findNewRampartRepairTarget() - if (!repairTarget) return true - - creep.actionCoord = repairTarget.pos - - // We are already in repair range, no need to move closer - if (getRange(creep.pos, repairTarget.pos) <= 3) return true - - // Make a move request to it - - creep.createMoveRequest({ - origin: creep.pos, - goals: [{ pos: repairTarget.pos, range: 3 }], - avoidEnemyRanges: true, - defaultCostMatrix(roomName) { - const roomManager = RoomManager.roomManagers[roomName] - if (!roomManager) return false - - return roomManager.defaultCostMatrix - }, - }) - - return true - } - repairCommuneStationary(creep: Creep) {} - repairNearby(creep: Creep) { - // If the this has no energy, inform false - - if (creep.nextStore.energy <= 0) return Result.noAction - - creep.message += '🗺️' - - const workPartCount = myCreepUtils.parts(creep).work - // At some point we should compare this search with flat searching positions around the creep - const structure = communeUtils.getGeneralRepairStructures(creep.room).find(structure => { - return ( - getRange(structure.pos, creep.pos) <= 3 && - structure.hitsMax - structure.hits >= workPartCount * REPAIR_POWER - ) - }) - if (!structure) return Result.noAction - - if (this.runRepair(creep, structure) !== Result.success) return Result.fail - - // Otherwise we repaired successfully - - return Result.success - } findEnergySpentOnConstruction(creep: Creep, cSite: ConstructionSite, workParts: number = myCreepUtils.parts(creep).work) { const energySpent = Math.min( workParts * BUILD_POWER, @@ -199,195 +43,6 @@ export class CreepUtils { return energySpent } - advancedUpgradeController(creep: Creep) { - - const creepMemory = Memory.creeps[creep.name] - const controller = creep.room.controller - creepMemory[CreepMemoryKeys.targetID] = controller.id - - // Assign either the controllerLink or controllerContainer as the controllerStructure - - let controllerStructure: StructureLink | StructureContainer | false = creep.room.roomManager.controllerContainer - const controllerLink = creep.room.communeManager.controllerLink - - if (!controllerStructure && controllerLink && controllerLink.isRCLActionable) - controllerStructure = controllerLink - - // If there is a controllerContainer - - if (controllerStructure) { - // If we're not on a viable upgrade pos - - const upgradePos = this.findUpgradePosWeak(creep) - if (!upgradePos) { - const upgradePos = this.findUpgradePosStrong(creep) - if (!upgradePos) return false - - if (getRange(creep.pos, upgradePos) > 0) { - creep.createMoveRequest({ - origin: creep.pos, - goals: [ - { - pos: upgradePos, - range: 0, - }, - ], - avoidEnemyRanges: true, - defaultCostMatrix(roomName) { - const roomManager = RoomManager.roomManagers[roomName] - if (!roomManager) return false - - return roomManager.defaultCostMatrix - }, - }) - - creep.message += '➡️' - } - } - - creep.actionCoord = creep.room.roomManager.centerUpgradePos - - const workPartCount = myCreepUtils.parts(creep).work - const controllerRange = getRange(creep.pos, controller.pos) - - if (controllerRange <= 3 && creep.nextStore.energy > 0) { - if (creep.upgradeController(controller) === OK) { - creep.nextStore.energy -= workPartCount - - const controlPoints = workPartCount * UPGRADE_CONTROLLER_POWER - - statsManager.updateStat(creep.room.name, 'eou', controlPoints) - creep.message += `🔋${controlPoints}` - } - } - - const controllerStructureRange = getRange(creep.pos, controllerStructure.pos) - if (controllerStructureRange <= 3) { - // If the controllerStructure is a container and is in need of repair - - if ( - controllerStructure.structureType === STRUCTURE_CONTAINER && - creep.nextStore.energy > 0 && - controllerStructure.hitsMax - controllerStructure.hits >= - workPartCount * REPAIR_POWER - ) { - // If the repair worked - - if (creep.repair(controllerStructure) === OK) { - // Find the repair amount by finding the smaller of the creep's work and the progress left for the cSite divided by repair power - - const energySpentOnRepairs = Math.min( - workPartCount, - (controllerStructure.hitsMax - controllerStructure.hits) / REPAIR_POWER, - creep.nextStore.energy, - ) - - creep.nextStore.energy -= energySpentOnRepairs - - // Add control points to total controlPoints counter and say the success - - statsManager.updateStat(creep.room.name, 'eoro', energySpentOnRepairs) - creep.message += `🔧${energySpentOnRepairs * REPAIR_POWER}` - } - } - - if (controllerStructureRange <= 1 && creep.nextStore.energy <= 0) { - // Withdraw from the controllerContainer, informing false if the withdraw failed - - if (creep.withdraw(controllerStructure, RESOURCE_ENERGY) !== OK) return false - - creep.nextStore.energy += Math.min( - creep.store.getCapacity(), - controllerStructure.nextStore.energy, - ) - controllerStructure.nextStore.energy -= creep.nextStore.energy - - delete creepMemory[CreepMemoryKeys.targetID] - creep.message += `⚡` - } - } - - return true - } - - // If the creep needs resources - - if (creep.needsResources()) { - creep.runRoomLogisticsRequestsAdvanced({ - types: new Set([ - RoomLogisticsRequestTypes.withdraw, - RoomLogisticsRequestTypes.pickup, - RoomLogisticsRequestTypes.offer, - ]), - conditions: request => request.resourceType === RESOURCE_ENERGY, - }) - - if (creep.needsResources()) return false - - delete creepMemory[CreepMemoryKeys.targetID] - - creep.createMoveRequest({ - origin: creep.pos, - goals: [{ pos: controller.pos, range: 3 }], - avoidEnemyRanges: true, - defaultCostMatrix(roomName) { - const roomManager = RoomManager.roomManagers[roomName] - if (!roomManager) return false - - return roomManager.defaultCostMatrix - }, - }) - return false - } - - // Otherwise if the creep doesn't need resources - - // If the controller is out of upgrade range - - creep.actionCoord = controller.pos - - if (getRange(creep.pos, controller.pos) > 3) { - // Make a move request to it - - creep.createMoveRequest({ - origin: creep.pos, - goals: [{ pos: controller.pos, range: 3 }], - avoidEnemyRanges: true, - defaultCostMatrix(roomName) { - const roomManager = RoomManager.roomManagers[roomName] - if (!roomManager) return false - - return roomManager.defaultCostMatrix - }, - }) - - // Inform false - - return false - } - - // Try to upgrade the controller, and if it worked - - if (creep.upgradeController(controller) === OK) { - // Add control points to total controlPoints counter and say the success - - const energySpentOnUpgrades = Math.min( - creep.nextStore.energy, - myCreepUtils.parts(creep).work * UPGRADE_CONTROLLER_POWER, - ) - - statsManager.updateStat(creep.room.name, 'eou', energySpentOnUpgrades) - creep.message = `🔋${energySpentOnUpgrades}` - - // Inform true - - return true - } - - // Inform false - - return false - } findUpgradePosWeak(creep: Creep): RoomPosition | undefined { const upgradePos = creep.room.roomManager.upgradePositions.find( diff --git a/src/room/creeps/roleManager.new/commune/controllerUpgrader.ts b/src/room/creeps/roleManager.new/commune/controllerUpgrader.ts index 29a17360d..7178a24c6 100644 --- a/src/room/creeps/roleManager.new/commune/controllerUpgrader.ts +++ b/src/room/creeps/roleManager.new/commune/controllerUpgrader.ts @@ -1,4 +1,5 @@ import { RoomMemoryKeys, creepRoles, packedPosLength } from 'international/constants' +import { creepProcs } from 'room/creeps/creepProcs' import { creepUtils } from 'room/creeps/creepUtils' import { DefaultRoleManager } from 'room/creeps/defaultRoleManager' @@ -53,7 +54,7 @@ class ControllerUpgraderManager extends DefaultRoleManager { creep.advancedBuild(); return; } */ - creepUtils.advancedUpgradeController(creep) + creepProcs.advancedUpgradeController(creep) } } diff --git a/src/room/creeps/roleManagers/antifa/dynamicSquad.ts b/src/room/creeps/roleManagers/antifa/dynamicSquad.ts index ee09b5be2..722b643c0 100644 --- a/src/room/creeps/roleManagers/antifa/dynamicSquad.ts +++ b/src/room/creeps/roleManagers/antifa/dynamicSquad.ts @@ -1,15 +1,9 @@ import { CombatRequestKeys, - CreepMemoryKeys, - Result, - RoomTypes, - customColors, - roomDimensions, - squadQuotas, + CreepMemoryKeys } from 'international/constants' -import { findClosestObject, getRangeXY, getRange, isExit, isXYExit, utils } from 'utils/utils' +import { findClosestObject, getRange, utils } from 'utils/utils' import { Antifa } from './antifa' -import { CustomPathFinderArgs } from 'international/customPathFinder' interface MembersByType { melee: Antifa @@ -52,13 +46,83 @@ export class DynamicSquad { dismantler: this.members[0], } - + if (this.runCombatRoom()) return if (!this.getInFormation()) return } + private runCombatRoom() { + + this.runMelee() + this.runHealer() + this.runRanger() + this.runDismantler() + return true + } + + private runMelee() { + + const melee = this.membersByType.melee + if (!melee) return + + + } + + private runHealer() { + + const healer = this.membersByType.healer + if (!healer) return + + const melee = this.membersByType.melee + if (melee) { + + if (getRange(healer.pos, melee.pos) <= 1) { + + if (melee.hits < melee.hitsMax) { + healer.heal(melee) + healer.assignMoveRequest(melee.pos) + } + return + + healer.createMoveRequest({ + origin: healer.pos, + goals: [ + { + pos: melee.pos, + range: 1, + }, + ], + }) + } + return + } + + // There is no melee + + healer.say('no M') + } + + private runRanger() { + + const ranger = this.membersByType.ranger + if (!ranger) return + + + } + + private runDismantler() { + + const dismantler = this.membersByType.dismantler + if (!dismantler) return + /* + const structure = findClosestObject(dismantler.pos, dismantler.room.roomManager.combatStructureTargets) + if (!structure) return */ + + dismantler.advancedDismantle() + } + private getInFormation() { const members = Object.values(this.membersByType) as Antifa[] /** diff --git a/src/room/creeps/roleManagers/antifa/quad.ts b/src/room/creeps/roleManagers/antifa/quad.ts index ca77c7999..d8952d021 100644 --- a/src/room/creeps/roleManagers/antifa/quad.ts +++ b/src/room/creeps/roleManagers/antifa/quad.ts @@ -1,196 +1,182 @@ import { - CombatRequestKeys, - CreepMemoryKeys, - MovedTypes, - Result, - RoomMemoryKeys, - RoomTypes, - WorkTypes, - customColors, - packedQuadAttackMemberOffsets, - quadAttackMemberOffsets, - rangedMassAttackMultiplierByRange, - roomDimensions, + CombatRequestKeys, + CreepMemoryKeys, + MovedTypes, + Result, + RoomMemoryKeys, + RoomTypes, + WorkTypes, + customColors, + packedQuadAttackMemberOffsets, + quadAttackMemberOffsets, } from 'international/constants' import { - areCoordsEqual, - arePositionsEqual, - doesCoordExist, - doesXYExist, - findClosestObject, - findCoordsInsideRect, - findObjectWithID, - getRangeXY, - getRange, - isExit, - isXYExit, - packAsNum, - findHighestScore, - sortBy, - unpackNumAsCoord, - forCoordsInRange, - packXYAsNum, + arePositionsEqual, + doesCoordExist, + findClosestObject, + findObjectWithID, + getRangeXY, + getRange, + isExit, + packAsNum, + findHighestScore, + sortBy, + forCoordsInRange, } from 'utils/utils' import { packCoord, packXYAsCoord, unpackCoord } from 'other/codec' import { Antifa } from './antifa' import { CustomPathFinderArgs, PathGoal } from 'international/customPathFinder' -import { LogTypes, customLog } from 'utils/logging' import { RoomManager } from 'room/room' const rangedFleeRange = 5 const meleeFleeRange = 3 interface EnemyThreatData { - coords: Uint8Array - goals: PathGoal[] + coords: Uint8Array + goals: PathGoal[] } export class Quad { - /** - * - */ - moveType: SquadMoveTypes - /** - * All squad members, where index 0 is the leader - */ - members: Antifa[] = [] - /** - * @constant 1 2 - * @constant 3 4 - * @description where 1 is leader and 2, 3, 4 are squad members - */ - memberNames: string[] = [] - leader: Antifa - membersByCoord: { [packedCoord: string]: Antifa } - - target: Structure | Creep - - constructor(memberNames: string[]) { - for (const memberName of memberNames) { - const member = Game.creeps[memberName] - this.members.push(member) - this.memberNames.push(memberName) - - member.squad = this - member.squadRan = true - } - - this.leader = this.members[0] - this.moveType = this.leader.memory[CreepMemoryKeys.squadMoveType] - - this.sortMembersByCoord() - - if (Memory.combatRequests[this.leader.memory[CreepMemoryKeys.combatRequest]]) - Memory.combatRequests[this.leader.memory[CreepMemoryKeys.combatRequest]][ - CombatRequestKeys.quads - ] += 1 + /** + * + */ + moveType: SquadMoveTypes + /** + * All squad members, where index 0 is the leader + */ + members: Antifa[] = [] + /** + * @constant 1 2 + * @constant 3 4 + * @description where 1 is leader and 2, 3, 4 are squad members + */ + memberNames: string[] = [] + leader: Antifa + membersByCoord: { [packedCoord: string]: Antifa } + + target: Structure | Creep + + constructor(memberNames: string[]) { + for (const memberName of memberNames) { + const member = Game.creeps[memberName] + this.members.push(member) + this.memberNames.push(memberName) + + member.squad = this + member.squadRan = true } - sortMembersByCoord() { - const unsortedMembersByCoord: { [packedCoord: string]: Antifa } = {} - - for (const member of this.members) { - unsortedMembersByCoord[packCoord(member.pos)] = member - } + this.leader = this.members[0] + this.moveType = this.leader.memory[CreepMemoryKeys.squadMoveType] - this.membersByCoord = { - [packCoord(this.leader.pos)]: this.leader, - } + this.sortMembersByCoord() - const packedMemberCoords = [ - packXYAsCoord(this.leader.pos.x, this.leader.pos.y + 1), - packXYAsCoord(this.leader.pos.x + 1, this.leader.pos.y + 1), - packXYAsCoord(this.leader.pos.x + 1, this.leader.pos.y), - ] + if (Memory.combatRequests[this.leader.memory[CreepMemoryKeys.combatRequest]]) + Memory.combatRequests[this.leader.memory[CreepMemoryKeys.combatRequest]][ + CombatRequestKeys.quads + ] += 1 + } - for (let i = 0; i < packedMemberCoords.length; i++) { - const packedCoord = packedMemberCoords[i] - const member = unsortedMembersByCoord[packedCoord] - if (!member) continue + sortMembersByCoord() { + const unsortedMembersByCoord: { [packedCoord: string]: Antifa } = {} - this.membersByCoord[packedCoord] = member - } + for (const member of this.members) { + unsortedMembersByCoord[packCoord(member.pos)] = member } - run() { - this.leader.message = this.moveType + this.membersByCoord = { + [packCoord(this.leader.pos)]: this.leader, + } - this.passiveHealQuad() + const packedMemberCoords = [ + packXYAsCoord(this.leader.pos.x, this.leader.pos.y + 1), + packXYAsCoord(this.leader.pos.x + 1, this.leader.pos.y + 1), + packXYAsCoord(this.leader.pos.x + 1, this.leader.pos.y), + ] - if (this.runCombatRoom()) return + for (let i = 0; i < packedMemberCoords.length; i++) { + const packedCoord = packedMemberCoords[i] + const member = unsortedMembersByCoord[packedCoord] + if (!member) continue - if (!this.getInFormation()) { - this.passiveRangedAttack() - return - } - /* else this.advancedTransform() */ + this.membersByCoord[packedCoord] = member + } + } - this.leader.message = 'IF' + run() { + this.leader.message = this.moveType - if (this.leader.room.roomManager.enemyDamageThreat && this.runCombat()) return + this.passiveHealQuad() - this.passiveRangedAttack() + if (this.runCombatRoom()) return - this.createMoveRequest({ - goals: [ - { - pos: new RoomPosition( - 25, - 25, - this.leader.memory[CreepMemoryKeys.combatRequest], - ), - range: 25, - }, - ], - typeWeights: { - [RoomTypes.enemy]: Infinity, - [RoomTypes.ally]: 2, - [RoomTypes.sourceKeeper]: 5, - [RoomTypes.enemyRemote]: 3, - [RoomTypes.allyRemote]: 3, - [RoomTypes.neutral]: 2, - }, - }) + if (!this.getInFormation()) { + this.passiveRangedAttack() + return } - - runCombatRoom() { - if (this.leader.room.name !== this.leader.memory[CreepMemoryKeys.combatRequest]) - return false - /* + /* else this.advancedTransform() */ + + this.leader.message = 'IF' + + if (this.leader.room.roomManager.enemyDamageThreat && this.runCombat()) return + + this.passiveRangedAttack() + + this.createMoveRequest({ + goals: [ + { + pos: new RoomPosition(25, 25, this.leader.memory[CreepMemoryKeys.combatRequest]), + range: 25, + }, + ], + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: 2, + [RoomTypes.sourceKeeper]: 5, + [RoomTypes.enemyRemote]: 3, + [RoomTypes.allyRemote]: 3, + [RoomTypes.neutral]: 2, + }, + }) + } + + runCombatRoom() { + if (this.leader.room.name !== this.leader.memory[CreepMemoryKeys.combatRequest]) return false + /* if (!this.leader.room.roomManager.enemyDamageThreat) { for (const member of this.members) member.runCombat() return true } */ - if (!this.getInFormation()) { - this.passiveRangedAttack() - return true - } - - this.runCombat() - - return true + if (!this.getInFormation()) { + this.passiveRangedAttack() + return true } - runCombat() { - if (this.leader.memory[CreepMemoryKeys.squadCombatType] === 'rangedAttack') { - this.passiveRangedAttack() - - const nearbyThreat = this.leader.room.roomManager.enemyAttackers.find( - enemyCreep => - this.findMinRange(enemyCreep.pos) <= 6 && - (enemyCreep.combatStrength.ranged || enemyCreep.combatStrength.melee), - ) - if ( - nearbyThreat && - !nearbyThreat.room.findStructureAtCoord( - nearbyThreat.pos, - structure => structure.structureType === STRUCTURE_RAMPART, - ) - ) { - this.target = nearbyThreat - this.target.room.targetVisual(this.leader.pos, this.target.pos, true) - /* + this.runCombat() + + return true + } + + runCombat() { + if (this.leader.memory[CreepMemoryKeys.squadCombatType] === 'rangedAttack') { + this.passiveRangedAttack() + + const nearbyThreat = this.leader.room.roomManager.enemyAttackers.find( + enemyCreep => + this.findMinRange(enemyCreep.pos) <= 6 && + (enemyCreep.combatStrength.ranged || enemyCreep.combatStrength.melee), + ) + if ( + nearbyThreat && + !nearbyThreat.room.findStructureAtCoord( + nearbyThreat.pos, + structure => structure.structureType === STRUCTURE_RAMPART, + ) + ) { + this.target = nearbyThreat + this.target.room.targetVisual(this.leader.pos, this.target.pos, true) + /* // If we are not threatened, try to transform optimally const enemyThreatCoords = this.enemyThreatDataRanged.coords @@ -198,42 +184,39 @@ export class Quad { this.advancedTransform() } */ - } - - const kiteResult = this.rangedKite() - if (kiteResult === Result.action) return true - if (kiteResult === Result.stop) { - + } - return true - } - - this.advancedTransform() + const kiteResult = this.rangedKite() + if (kiteResult === Result.action) return true + if (kiteResult === Result.stop) { + return true + } - if (this.bulldoze()) return true - if (this.rangedAttackStructures()) return true - if (this.advancedRangedAttack()) return true - return false - } - if (this.leader.memory[CreepMemoryKeys.squadCombatType] === 'attack') { - if (this.advancedAttack()) return false - } + this.advancedTransform() - this.advancedDismantle() - return false + if (this.bulldoze()) return true + if (this.rangedAttackStructures()) return true + if (this.advancedRangedAttack()) return true + return false + } + if (this.leader.memory[CreepMemoryKeys.squadCombatType] === 'attack') { + if (this.advancedAttack()) return false } - getInFormation(): boolean { - if (this.leader.isOnExit) return true + this.advancedDismantle() + return false + } - /* this.leader.room.visualizeCostMatrix(this.leader.room.roomManager.quadCostMatrix) */ + getInFormation(): boolean { + if (this.leader.isOnExit) return true - if ( - this.leader.room.roomManager.quadCostMatrix.get(this.leader.pos.x, this.leader.pos.y) >= - 50 - ) { - this.leader.room.coordVisual(this.leader.pos.x, this.leader.pos.y) - /* + /* this.leader.room.visualizeCostMatrix(this.leader.room.roomManager.quadCostMatrix) */ + + if ( + this.leader.room.roomManager.quadCostMatrix.get(this.leader.pos.x, this.leader.pos.y) >= 50 + ) { + this.leader.room.coordVisual(this.leader.pos.x, this.leader.pos.y) + /* this.leader.createMoveRequest({ goals: [ { @@ -245,178 +228,176 @@ export class Quad { }) return false */ - return true - } - - let inFormation = true + return true + } - if (this.moveType === 'transport') { - let lastMember = this.leader + let inFormation = true - for (let i = 1; i < this.members.length; i++) { - const member = this.members[i] + if (this.moveType === 'transport') { + let lastMember = this.leader - if ( - getRangeXY(member.pos.x, lastMember.pos.x, member.pos.y, lastMember.pos.y) <= - 1 && - member.room.name === lastMember.room.name - ) { - lastMember = member - continue - } + for (let i = 1; i < this.members.length; i++) { + const member = this.members[i] - member.createMoveRequest({ - goals: [ - { - pos: lastMember.pos, - range: 1, - }, - ], - }) - - if (member.isOnExit) continue + if ( + getRangeXY(member.pos.x, lastMember.pos.x, member.pos.y, lastMember.pos.y) <= 1 && + member.room.name === lastMember.room.name + ) { + lastMember = member + continue + } - if (member.moveRequest === packCoord(this.leader.pos)) { - } + member.createMoveRequest({ + goals: [ + { + pos: lastMember.pos, + range: 1, + }, + ], + }) - lastMember = member - inFormation = false - } + if (member.isOnExit) continue - return inFormation + if (member.moveRequest === packCoord(this.leader.pos)) { } - let newLeader: Antifa - let newLeaderIndex: number + lastMember = member + inFormation = false + } - // Attack mode + return inFormation + } - for (let i = 1; i < this.members.length; i++) { - const offset = quadAttackMemberOffsets[i] - const goalCoord = { - x: this.leader.pos.x + offset.x, - y: this.leader.pos.y + offset.y, - } + let newLeader: Antifa + let newLeaderIndex: number - if (isExit(goalCoord)) return true - if (!doesCoordExist(goalCoord)) return true + // Attack mode - const goalPos = new RoomPosition(goalCoord.x, goalCoord.y, this.leader.room.name) + for (let i = 1; i < this.members.length; i++) { + const offset = quadAttackMemberOffsets[i] + const goalCoord = { + x: this.leader.pos.x + offset.x, + y: this.leader.pos.y + offset.y, + } - const member = this.members[i] - if (arePositionsEqual(member.pos, goalPos)) continue + if (isExit(goalCoord)) return true + if (!doesCoordExist(goalCoord)) return true - member.createMoveRequest({ - goals: [ - { - pos: goalPos, - range: 0, - }, - ], - }) + const goalPos = new RoomPosition(goalCoord.x, goalCoord.y, this.leader.room.name) - if (member.moveRequest === packCoord(this.leader.pos)) { - newLeader = member - newLeaderIndex = i - } - - inFormation = false - } + const member = this.members[i] + if (arePositionsEqual(member.pos, goalPos)) continue - if (newLeader) { - this.members[newLeaderIndex] = this.leader - this.memberNames[newLeaderIndex] = this.leader.name - this.members[0] = newLeader - this.memberNames[0] = newLeader.name - this.leader = newLeader + member.createMoveRequest({ + goals: [ + { + pos: goalPos, + range: 0, + }, + ], + }) - for (const member of this.members) { - member.memory[CreepMemoryKeys.squadMembers] = this.memberNames - } - } + if (member.moveRequest === packCoord(this.leader.pos)) { + newLeader = member + newLeaderIndex = i + } - return inFormation + inFormation = false } - holdFormation() { - for (const member of this.members) member.moved = MovedTypes.moved + if (newLeader) { + this.members[newLeaderIndex] = this.leader + this.memberNames[newLeaderIndex] = this.leader.name + this.members[0] = newLeader + this.memberNames[0] = newLeader.name + this.leader = newLeader + + for (const member of this.members) { + member.memory[CreepMemoryKeys.squadMembers] = this.memberNames + } } - createMoveRequest(opts: CustomPathFinderArgs, moveLeader = this.leader) { - if (!this.willMove) { - for (const member1 of this.members) { - if (!member1.fatigue) continue + return inFormation + } - for (const member2 of this.members) { - if (member2.name === member1.name) continue - member1.room.targetVisual(member1.pos, member2.pos, true) - member2.pull(member1) - } - } + holdFormation() { + for (const member of this.members) member.moved = MovedTypes.moved + } - /* this.holdFormation() */ - return false - } + createMoveRequest(opts: CustomPathFinderArgs, moveLeader = this.leader) { + if (!this.willMove) { + for (const member1 of this.members) { + if (!member1.fatigue) continue - if (this.moveType === 'transport') { - if (!moveLeader.createMoveRequest(opts)) return false + for (const member2 of this.members) { + if (member2.name === member1.name) continue + member1.room.targetVisual(member1.pos, member2.pos, true) + member2.pull(member1) + } + } - let lastMember = moveLeader + /* this.holdFormation() */ + return false + } - for (let i = 1; i < this.members.length; i++) { - const member = this.members[i] - member.assignMoveRequest(lastMember.pos) + if (this.moveType === 'transport') { + if (!moveLeader.createMoveRequest(opts)) return false - lastMember = member - } + let lastMember = moveLeader - return true - } + for (let i = 1; i < this.members.length; i++) { + const member = this.members[i] + member.assignMoveRequest(lastMember.pos) - // Attack mode + lastMember = member + } - opts.defaultCostMatrixes = function (roomName) { - return [RoomManager.roomManagers[roomName].quadCostMatrix] - } - moveLeader.createMoveRequest(opts) + return true + } - if (!moveLeader.moveRequest) return false - if (!this.membersAttackMove()) return false + // Attack mode - return true + opts.defaultCostMatrixes = function (roomName) { + return [RoomManager.roomManagers[roomName].quadCostMatrix] } + moveLeader.createMoveRequest(opts) - membersAttackMove(moveLeader = this.leader) { - const moveRequestCoord = unpackCoord(moveLeader.moveRequest) + if (!moveLeader.moveRequest) return false + if (!this.membersAttackMove()) return false - const moveLeaderOffset = { - x: moveLeader.pos.x - moveRequestCoord.x, - y: moveLeader.pos.y - moveRequestCoord.y, - } + return true + } - for (let i = 1; i < this.members.length; i++) { - const member = this.members[i] - const goalCoord = { - x: member.pos.x - moveLeaderOffset.x, - y: member.pos.y - moveLeaderOffset.y, - } + membersAttackMove(moveLeader = this.leader) { + const moveRequestCoord = unpackCoord(moveLeader.moveRequest) - if (!doesCoordExist(goalCoord)) continue + const moveLeaderOffset = { + x: moveLeader.pos.x - moveRequestCoord.x, + y: moveLeader.pos.y - moveRequestCoord.y, + } - if (member.room.roomManager.quadCostMatrix.get(goalCoord.x, goalCoord.y) >= 255) - continue + for (let i = 1; i < this.members.length; i++) { + const member = this.members[i] + const goalCoord = { + x: member.pos.x - moveLeaderOffset.x, + y: member.pos.y - moveLeaderOffset.y, + } - member.assignMoveRequest(goalCoord) - } + if (!doesCoordExist(goalCoord)) continue - return true + if (member.room.roomManager.quadCostMatrix.get(goalCoord.x, goalCoord.y) >= 255) continue + + member.assignMoveRequest(goalCoord) } - private scoreMemberTransform(memberName: string, coord: Coord) { - const member = Game.creeps[memberName] - let score = (1 - member.defenceStrength) * 5000 - const range = getRangeXY(this.target.pos.x, coord.x, this.target.pos.y, coord.y) - /* + return true + } + + private scoreMemberTransform(memberName: string, coord: Coord) { + const member = Game.creeps[memberName] + let score = (1 - member.defenceStrength) * 5000 + const range = getRangeXY(this.target.pos.x, coord.x, this.target.pos.y, coord.y) + /* const range = getRangeXY(this.target.pos.x, coord.x, this.target.pos.y, coord.y) if (this.leader.memory[CreepMemoryKeys.squadCombatType] === 'rangedAttack') { @@ -428,377 +409,373 @@ export class Quad { if (range > 1) return score */ - if (this.leader.memory[CreepMemoryKeys.squadCombatType] === 'rangedAttack') { - score += member.combatStrength.ranged - return score / range - } - - if (this.leader.memory[CreepMemoryKeys.squadCombatType] === 'attack') { - score += member.combatStrength.melee - return score / range - } - - // Dismantle type + if (this.leader.memory[CreepMemoryKeys.squadCombatType] === 'rangedAttack') { + score += member.combatStrength.ranged + return score / range + } - score += member.combatStrength.dismantle - return score / range + if (this.leader.memory[CreepMemoryKeys.squadCombatType] === 'attack') { + score += member.combatStrength.melee + return score / range } - /** - * Loop through every offset - * Loop through each offset and find the member which has the highest score on it - * Score each offset's sum of member scores, identifying the best offset - * implement offset - */ - private advancedTransform(): boolean { - if (!this.willMove) return false - if (!this.target) return false - - let bestTransform: string[] - let bestScore = 0 - - for (const member of this.members) { - bestScore += this.scoreMemberTransform(member.name, member.pos) - } + // Dismantle type - const originalScore = bestScore + score += member.combatStrength.dismantle + return score / range + } - for ( - let i = 0; - i < Math.min(quadAttackMemberOffsets.length, this.memberNames.length); - i++ - ) { - const transform: string[] = [] - const memberNames = new Set(this.memberNames) - let score = 0 - - const packedOffsets = sortBy( - Array.from(packedQuadAttackMemberOffsets).splice(0, this.memberNames.length), - packedOffset => { - const offset = unpackCoord(packedOffset) - const coord = { - x: this.leader.pos.x + offset.x, - y: this.leader.pos.y + offset.y, - } - - return getRange(this.target.pos, coord) - }, - ) - - for (const packedOffset of packedOffsets) { - const offset = unpackCoord(packedOffset) - const coord = { - x: this.leader.pos.x + offset.x, - y: this.leader.pos.y + offset.y, - } + /** + * Loop through every offset + * Loop through each offset and find the member which has the highest score on it + * Score each offset's sum of member scores, identifying the best offset + * implement offset + */ + private advancedTransform(): boolean { + if (!this.willMove) return false + if (!this.target) return false - const j = packedQuadAttackMemberOffsets.indexOf(packedOffset) + let bestTransform: string[] + let bestScore = 0 - let bestMemberScore = -1 - let bestMemberName: string + for (const member of this.members) { + bestScore += this.scoreMemberTransform(member.name, member.pos) + } - for (const memberName of memberNames) { - const memberScore = this.scoreMemberTransform(memberName, coord) - if (memberScore <= bestMemberScore) continue + const originalScore = bestScore + + for (let i = 0; i < Math.min(quadAttackMemberOffsets.length, this.memberNames.length); i++) { + const transform: string[] = [] + const memberNames = new Set(this.memberNames) + let score = 0 + + const packedOffsets = sortBy( + Array.from(packedQuadAttackMemberOffsets).splice(0, this.memberNames.length), + packedOffset => { + const offset = unpackCoord(packedOffset) + const coord = { + x: this.leader.pos.x + offset.x, + y: this.leader.pos.y + offset.y, + } + + return getRange(this.target.pos, coord) + }, + ) + + for (const packedOffset of packedOffsets) { + const offset = unpackCoord(packedOffset) + const coord = { + x: this.leader.pos.x + offset.x, + y: this.leader.pos.y + offset.y, + } - bestMemberScore = memberScore - bestMemberName = memberName - } + const j = packedQuadAttackMemberOffsets.indexOf(packedOffset) - score += bestMemberScore - memberNames.delete(bestMemberName) - transform[j] = bestMemberName - } + let bestMemberScore = -1 + let bestMemberName: string - if (score <= bestScore) continue + for (const memberName of memberNames) { + const memberScore = this.scoreMemberTransform(memberName, coord) + if (memberScore <= bestMemberScore) continue - bestScore = score - bestTransform = transform + bestMemberScore = memberScore + bestMemberName = memberName } - if (originalScore === bestScore) return false + score += bestMemberScore + memberNames.delete(bestMemberName) + transform[j] = bestMemberName + } - for (let i = 0; i < bestTransform.length; i++) { - const memberName = bestTransform[i] - const goal = { - x: quadAttackMemberOffsets[i].x + this.leader.pos.x, - y: quadAttackMemberOffsets[i].y + this.leader.pos.y, - } + if (score <= bestScore) continue - Game.creeps[memberName].assignMoveRequest(goal) - Memory.creeps[memberName][CreepMemoryKeys.squadMembers] = bestTransform - } - return true + bestScore = score + bestTransform = transform } - passiveHealQuad() { - let lowestHits = Infinity - let lowestHitsMember: Creep | undefined + if (originalScore === bestScore) return false + + for (let i = 0; i < bestTransform.length; i++) { + const memberName = bestTransform[i] + const goal = { + x: quadAttackMemberOffsets[i].x + this.leader.pos.x, + y: quadAttackMemberOffsets[i].y + this.leader.pos.y, + } - for (const member of this.members) { - if (member.hits === member.hitsMax) continue + Game.creeps[memberName].assignMoveRequest(goal) + Memory.creeps[memberName][CreepMemoryKeys.squadMembers] = bestTransform + } + return true + } - if (member.hits >= lowestHits) continue + passiveHealQuad() { + let lowestHits = Infinity + let lowestHitsMember: Creep | undefined - lowestHits = member.hits - lowestHitsMember = member - } + for (const member of this.members) { + if (member.hits === member.hitsMax) continue - if (lowestHitsMember) { - for (const member of this.members) { - if (member.worked) continue + if (member.hits >= lowestHits) continue - member.heal(lowestHitsMember) - member.worked = WorkTypes.heal - } + lowestHits = member.hits + lowestHitsMember = member + } - return - } + if (lowestHitsMember) { + for (const member of this.members) { + if (member.worked) continue + + member.heal(lowestHitsMember) + member.worked = WorkTypes.heal + } - if (this.preHeal()) return + return } - shouldPreHeal() { - // Inform true if there are enemy threats in range + if (this.preHeal()) return + } - if ( - this.leader.room.roomManager.enemyAttackers.find( - enemyCreep => - (enemyCreep.combatStrength.ranged && this.findMinRange(enemyCreep.pos) <= 3) || - (enemyCreep.combatStrength.melee && this.findMinRange(enemyCreep.pos) <= 1), - ) - ) - return true + shouldPreHeal() { + // Inform true if there are enemy threats in range - // Only inform true if there are enemy owned active towers + if ( + this.leader.room.roomManager.enemyAttackers.find( + enemyCreep => + (enemyCreep.combatStrength.ranged && this.findMinRange(enemyCreep.pos) <= 3) || + (enemyCreep.combatStrength.melee && this.findMinRange(enemyCreep.pos) <= 1), + ) + ) + return true - const controller = this.leader.room.controller - if (!controller) return false - if (!controller.owner) return false - if (controller.owner.username === Memory.me) return false - if (global.settings.allies.includes(controller.owner.username)) return false - if (!this.leader.room.roomManager.structures.tower.length) return false + // Only inform true if there are enemy owned active towers - return true - } + const controller = this.leader.room.controller + if (!controller) return false + if (!controller.owner) return false + if (controller.owner.username === Memory.me) return false + if (global.settings.allies.includes(controller.owner.username)) return false + if (!this.leader.room.roomManager.structures.tower.length) return false - /** - * The precogs are delighted to assist - */ - preHeal() { - if (!this.shouldPreHeal()) return false + return true + } - // Have members semi-randomly heal each other + /** + * The precogs are delighted to assist + */ + preHeal() { + if (!this.shouldPreHeal()) return false - const notHealedMembers = Array.from(this.members) + // Have members semi-randomly heal each other - for (const member of this.members) { - const memberIndex = Math.floor(Math.random() * notHealedMembers.length) - const memberHealer = notHealedMembers[memberIndex] + const notHealedMembers = Array.from(this.members) - memberHealer.heal(member) - memberHealer.worked = WorkTypes.heal + for (const member of this.members) { + const memberIndex = Math.floor(Math.random() * notHealedMembers.length) + const memberHealer = notHealedMembers[memberIndex] - notHealedMembers.splice(memberIndex, 1) - } + memberHealer.heal(member) + memberHealer.worked = WorkTypes.heal - return true + notHealedMembers.splice(memberIndex, 1) } - private rangedAttackEnemyCreeps(attackingMemberNames: Set) { - // Get enemies by damage members can deal + return true + } - const enemyTargetsWithDamage: Map, number> = new Map() - const enemyTargetsWithAntifa: Map, Id[]> = new Map() + private rangedAttackEnemyCreeps(attackingMemberNames: Set) { + // Get enemies by damage members can deal - for (const enemyCreep of this.leader.room.roomManager.unprotectedEnemyCreeps) { - const memberIDsInRange: Id[] = [] + const enemyTargetsWithDamage: Map, number> = new Map() + const enemyTargetsWithAntifa: Map, Id[]> = new Map() - let netDamage = -1 * enemyCreep.combatStrength.heal + for (const enemyCreep of this.leader.room.roomManager.unprotectedEnemyCreeps) { + const memberIDsInRange: Id[] = [] - for (const memberName of attackingMemberNames) { - const member = Game.creeps[memberName] + let netDamage = -1 * enemyCreep.combatStrength.heal - if (getRange(member.pos, enemyCreep.pos) > 3) continue + for (const memberName of attackingMemberNames) { + const member = Game.creeps[memberName] - netDamage += member.combatStrength.ranged + if (getRange(member.pos, enemyCreep.pos) > 3) continue - memberIDsInRange.push(member.id) - } + netDamage += member.combatStrength.ranged - if (!memberIDsInRange.length) continue + memberIDsInRange.push(member.id) + } - enemyTargetsWithDamage.set(enemyCreep.id, netDamage) - enemyTargetsWithAntifa.set(enemyCreep.id, memberIDsInRange) - if (memberIDsInRange.length === this.members.length) break - } + if (!memberIDsInRange.length) continue - const enemyTargetsByDamage = Array.from(enemyTargetsWithAntifa.keys()).sort((a, b) => { - return enemyTargetsWithDamage.get(a) - enemyTargetsWithDamage.get(b) - }) + enemyTargetsWithDamage.set(enemyCreep.id, netDamage) + enemyTargetsWithAntifa.set(enemyCreep.id, memberIDsInRange) + if (memberIDsInRange.length === this.members.length) break + } - // Attack enemies in order of most members that can attack them + const enemyTargetsByDamage = Array.from(enemyTargetsWithAntifa.keys()).sort((a, b) => { + return enemyTargetsWithDamage.get(a) - enemyTargetsWithDamage.get(b) + }) - for (const enemyCreepID of enemyTargetsByDamage) { - const enemyCreep = findObjectWithID(enemyCreepID) + // Attack enemies in order of most members that can attack them - for (const memberID of enemyTargetsWithAntifa.get(enemyCreepID)) { - const member = findObjectWithID(memberID) - if (!attackingMemberNames.has(member.name)) continue + for (const enemyCreepID of enemyTargetsByDamage) { + const enemyCreep = findObjectWithID(enemyCreepID) - if (getRange(member.pos, enemyCreep.pos) > 1) member.rangedAttack(enemyCreep) - else member.rangedMassAttack() - member.ranged = true + for (const memberID of enemyTargetsWithAntifa.get(enemyCreepID)) { + const member = findObjectWithID(memberID) + if (!attackingMemberNames.has(member.name)) continue - attackingMemberNames.delete(member.name) - } + if (getRange(member.pos, enemyCreep.pos) > 1) member.rangedAttack(enemyCreep) + else member.rangedMassAttack() + member.ranged = true - if (!attackingMemberNames.size) return attackingMemberNames - } + attackingMemberNames.delete(member.name) + } - return attackingMemberNames + if (!attackingMemberNames.size) return attackingMemberNames } - private rangedAttackEnemyStructures(attackingMemberNames: Set) { - if ( - Memory.rooms[this.leader.room.name][RoomMemoryKeys.type] === RoomTypes.commune || - Memory.rooms[this.leader.room.name][RoomMemoryKeys.type] === RoomTypes.remote - ) - return attackingMemberNames + return attackingMemberNames + } - for (const structure of this.leader.room.find(FIND_STRUCTURES)) { - for (const memberName of attackingMemberNames) { - const member = Game.creeps[memberName] + private rangedAttackEnemyStructures(attackingMemberNames: Set) { + if ( + Memory.rooms[this.leader.room.name][RoomMemoryKeys.type] === RoomTypes.commune || + Memory.rooms[this.leader.room.name][RoomMemoryKeys.type] === RoomTypes.remote + ) + return attackingMemberNames - const range = getRange(member.pos, structure.pos) - if (range > 3) continue + for (const structure of this.leader.room.find(FIND_STRUCTURES)) { + for (const memberName of attackingMemberNames) { + const member = Game.creeps[memberName] - if (!(structure as OwnedStructure).owner || range > 1) { - member.rangedAttack(structure) - } else member.rangedMassAttack() + const range = getRange(member.pos, structure.pos) + if (range > 3) continue - member.ranged = true - attackingMemberNames.delete(member.name) - } - if (!attackingMemberNames.size) return attackingMemberNames - } + if (!(structure as OwnedStructure).owner || range > 1) { + member.rangedAttack(structure) + } else member.rangedMassAttack() - return attackingMemberNames + member.ranged = true + attackingMemberNames.delete(member.name) + } + if (!attackingMemberNames.size) return attackingMemberNames } - private rangedAttackTarget(attackingMemberNames: Set) { - for (const memberName of attackingMemberNames) { - const member = Game.creeps[memberName] + return attackingMemberNames + } - const range = getRange(member.pos, this.target.pos) - if (range > 3) continue + private rangedAttackTarget(attackingMemberNames: Set) { + for (const memberName of attackingMemberNames) { + const member = Game.creeps[memberName] - if (!(this.target as OwnedStructure).owner || range > 1) { - member.rangedAttack(this.target) - } else member.rangedMassAttack() + const range = getRange(member.pos, this.target.pos) + if (range > 3) continue - member.ranged = true - attackingMemberNames.delete(member.name) - } + if (!(this.target as OwnedStructure).owner || range > 1) { + member.rangedAttack(this.target) + } else member.rangedMassAttack() - return attackingMemberNames + member.ranged = true + attackingMemberNames.delete(member.name) } - /** - * Attack viable targets without moving - */ - passiveRangedAttack() { - let attackingMemberNames = new Set(this.memberNames) + return attackingMemberNames + } - if (this.target && this.target instanceof Creep) { - attackingMemberNames = this.rangedAttackTarget(attackingMemberNames) - if (!attackingMemberNames.size) return - } + /** + * Attack viable targets without moving + */ + passiveRangedAttack() { + let attackingMemberNames = new Set(this.memberNames) - attackingMemberNames = this.rangedAttackEnemyCreeps(attackingMemberNames) - if (!attackingMemberNames.size) return + if (this.target && this.target instanceof Creep) { + attackingMemberNames = this.rangedAttackTarget(attackingMemberNames) + if (!attackingMemberNames.size) return + } - // If there is a target, even though it isn't a creep, try to attack it - if (this.target) { - attackingMemberNames = this.rangedAttackTarget(attackingMemberNames) - if (!attackingMemberNames.size) return - } + attackingMemberNames = this.rangedAttackEnemyCreeps(attackingMemberNames) + if (!attackingMemberNames.size) return - attackingMemberNames = this.rangedAttackEnemyStructures(attackingMemberNames) - if (!attackingMemberNames.size) return + // If there is a target, even though it isn't a creep, try to attack it + if (this.target) { + attackingMemberNames = this.rangedAttackTarget(attackingMemberNames) + if (!attackingMemberNames.size) return } - private rangedAttackAttackers() {} + attackingMemberNames = this.rangedAttackEnemyStructures(attackingMemberNames) + if (!attackingMemberNames.size) return + } - private rangedAttackEnemies() {} + private rangedAttackAttackers() {} - advancedRangedAttack() { - const { room } = this.leader + private rangedAttackEnemies() {} - let enemyCreeps = room.roomManager.enemyAttackers.filter(function (creep) { - return !creep.isOnExit - }) + advancedRangedAttack() { + const { room } = this.leader - if (!room.roomManager.enemyAttackers.length) enemyCreeps = room.roomManager.enemyAttackers + let enemyCreeps = room.roomManager.enemyAttackers.filter(function (creep) { + return !creep.isOnExit + }) - // If there are none + if (!room.roomManager.enemyAttackers.length) enemyCreeps = room.roomManager.enemyAttackers - if (!enemyCreeps.length) { - enemyCreeps = room.roomManager.notMyCreeps.enemy.filter(function (creep) { - return !creep.isOnExit - }) + // If there are none - if (!enemyCreeps.length) enemyCreeps = room.roomManager.notMyCreeps.enemy - if (!enemyCreeps.length) return false + if (!enemyCreeps.length) { + enemyCreeps = room.roomManager.notMyCreeps.enemy.filter(function (creep) { + return !creep.isOnExit + }) - this.leader.message = 'EC' + if (!enemyCreeps.length) enemyCreeps = room.roomManager.notMyCreeps.enemy + if (!enemyCreeps.length) return false - const enemyCreep = findClosestObject(this.leader.pos, enemyCreeps) - if (global.settings.roomVisuals) - this.leader.room.visual.line(this.leader.pos, enemyCreep.pos, { - color: customColors.green, - opacity: 0.3, - }) + this.leader.message = 'EC' - // Get the range between the creeps + const enemyCreep = findClosestObject(this.leader.pos, enemyCreeps) + if (global.settings.roomVisuals) + this.leader.room.visual.line(this.leader.pos, enemyCreep.pos, { + color: customColors.green, + opacity: 0.3, + }) - const range = this.findMinRange(enemyCreep.pos) - this.leader.message = range.toString() + // Get the range between the creeps - if (range <= 3) { - this.target = enemyCreep - this.passiveRangedAttack() - } + const range = this.findMinRange(enemyCreep.pos) + this.leader.message = range.toString() - // If the range is more than 1 + if (range <= 3) { + this.target = enemyCreep + this.passiveRangedAttack() + } - if (range > 1) { - // Have the create a moveRequest to the enemyAttacker and inform true + // If the range is more than 1 - this.createMoveRequest({ - origin: this.leader.pos, - goals: [{ pos: enemyCreep.pos, range: 1 }], - }) + if (range > 1) { + // Have the create a moveRequest to the enemyAttacker and inform true - return true - } + this.createMoveRequest({ + origin: this.leader.pos, + goals: [{ pos: enemyCreep.pos, range: 1 }], + }) - return true - } + return true + } - // Otherwise, get the closest enemyAttacker + return true + } - const enemyAttacker = findClosestObject(this.leader.pos, enemyCreeps) - if (global.settings.roomVisuals) - this.leader.room.visual.line(this.leader.pos, enemyAttacker.pos, { - color: customColors.green, - opacity: 0.3, - }) + // Otherwise, get the closest enemyAttacker - const range = this.findMinRange(enemyAttacker.pos) + const enemyAttacker = findClosestObject(this.leader.pos, enemyCreeps) + if (global.settings.roomVisuals) + this.leader.room.visual.line(this.leader.pos, enemyAttacker.pos, { + color: customColors.green, + opacity: 0.3, + }) - // If the squad is outmatched - /* + const range = this.findMinRange(enemyAttacker.pos) + + // If the squad is outmatched + /* if ( this.combatStrength.heal + this.combatStrength.ranged < enemyAttacker.combatStrength.heal + enemyAttacker.combatStrength.ranged @@ -821,319 +798,316 @@ export class Quad { return true } */ - // If it's more than range 3 + // If it's more than range 3 - if (range > 3) { - // Make a moveRequest to it and inform true + if (range > 3) { + // Make a moveRequest to it and inform true - this.createMoveRequest({ - origin: this.leader.pos, - goals: [{ pos: enemyAttacker.pos, range: 1 }], - }) - - return true - } - - this.leader.message = 'AEA' - - this.target = enemyAttacker - this.passiveRangedAttack() - - if (range > 1) { - this.createMoveRequest({ - origin: this.leader.pos, - goals: [{ pos: enemyAttacker.pos, range: 1 }], - }) - - return true - } + this.createMoveRequest({ + origin: this.leader.pos, + goals: [{ pos: enemyAttacker.pos, range: 1 }], + }) - return true + return true } - bulldoze() { - const request = Memory.combatRequests[this.leader.memory[CreepMemoryKeys.combatRequest]] - if (!request) return false - if (request[CombatRequestKeys.type] === 'defend') return false - if ( - Memory.rooms[this.leader.room.name][RoomMemoryKeys.type] === RoomTypes.commune || - Memory.rooms[this.leader.room.name][RoomMemoryKeys.type] === RoomTypes.remote - ) - return false - - let bulldozeTarget: Structure - this.leader.memory[CreepMemoryKeys.quadBulldozeTargets] = [] - let quadBulldozeTargetIDs = this.leader.memory[CreepMemoryKeys.quadBulldozeTargets] || [] - - for (let i = 0; i < quadBulldozeTargetIDs.length; i++) { - const ID = quadBulldozeTargetIDs[i] - const structure = findObjectWithID(ID) - if (!structure) { - quadBulldozeTargetIDs.splice(i, 1) - continue - } - - bulldozeTarget = structure - } - - if (!bulldozeTarget) { - let bulldozeTargets: Structure[] = [] - bulldozeTargets = bulldozeTargets.concat(this.leader.room.roomManager.structures.spawn) - bulldozeTargets = bulldozeTargets.concat(this.leader.room.roomManager.structures.tower) - - if (!bulldozeTargets.length) return false - - bulldozeTarget = findClosestObject(this.leader.pos, bulldozeTargets) - - quadBulldozeTargetIDs = this.leader.findQuadBulldozeTargets(bulldozeTarget.pos) - if (!quadBulldozeTargetIDs.length) return false - - bulldozeTarget = findObjectWithID(quadBulldozeTargetIDs[0]) - } - - this.leader.room.targetVisual(this.leader.pos, bulldozeTarget.pos, true) + this.leader.message = 'AEA' - const range = this.findMinRange(bulldozeTarget.pos) + this.target = enemyAttacker + this.passiveRangedAttack() - if (range > 1) { - this.createMoveRequest({ - origin: this.leader.pos, - goals: [{ pos: bulldozeTarget.pos, range: 1 }], - }) - } + if (range > 1) { + this.createMoveRequest({ + origin: this.leader.pos, + goals: [{ pos: enemyAttacker.pos, range: 1 }], + }) - if (range > 3) return true + return true + } - this.target = bulldozeTarget - this.passiveRangedAttack() - return true + return true + } + + bulldoze() { + const request = Memory.combatRequests[this.leader.memory[CreepMemoryKeys.combatRequest]] + if (!request) return false + if (request[CombatRequestKeys.type] === 'defend') return false + if ( + Memory.rooms[this.leader.room.name][RoomMemoryKeys.type] === RoomTypes.commune || + Memory.rooms[this.leader.room.name][RoomMemoryKeys.type] === RoomTypes.remote + ) + return false + + let bulldozeTarget: Structure + this.leader.memory[CreepMemoryKeys.quadBulldozeTargets] = [] + let quadBulldozeTargetIDs = this.leader.memory[CreepMemoryKeys.quadBulldozeTargets] || [] + + for (let i = 0; i < quadBulldozeTargetIDs.length; i++) { + const ID = quadBulldozeTargetIDs[i] + const structure = findObjectWithID(ID) + if (!structure) { + quadBulldozeTargetIDs.splice(i, 1) + continue + } + + bulldozeTarget = structure } - rangedAttackStructures() { - const request = Memory.combatRequests[this.leader.memory[CreepMemoryKeys.combatRequest]] - if (!request) return false - if (request[CombatRequestKeys.type] === 'defend') return false - if ( - Memory.rooms[this.leader.room.name][RoomMemoryKeys.type] === RoomTypes.commune || - Memory.rooms[this.leader.room.name][RoomMemoryKeys.type] === RoomTypes.remote - ) - return false + if (!bulldozeTarget) { + let bulldozeTargets: Structure[] = [] + bulldozeTargets = bulldozeTargets.concat(this.leader.room.roomManager.structures.spawn) + bulldozeTargets = bulldozeTargets.concat(this.leader.room.roomManager.structures.tower) - const structures = this.leader.room.roomManager.combatStructureTargets + if (!bulldozeTargets.length) return false - if (!structures.length) return false + bulldozeTarget = findClosestObject(this.leader.pos, bulldozeTargets) - let structure = findClosestObject(this.leader.pos, structures) - if (global.settings.roomVisuals) - this.leader.room.visual.line(this.leader.pos, structure.pos, { - color: customColors.green, - opacity: 0.3, - }) + quadBulldozeTargetIDs = this.leader.findQuadBulldozeTargets(bulldozeTarget.pos) + if (!quadBulldozeTargetIDs.length) return false - const range = this.findMinRange(structure.pos) + bulldozeTarget = findObjectWithID(quadBulldozeTargetIDs[0]) + } - if (range > 1) { - this.createMoveRequest({ - origin: this.leader.pos, - goals: [{ pos: structure.pos, range: 1 }], - }) - } + this.leader.room.targetVisual(this.leader.pos, bulldozeTarget.pos, true) - if (range > 3) return true + const range = this.findMinRange(bulldozeTarget.pos) - this.target = structure - this.passiveRangedAttack() - return true + if (range > 1) { + this.createMoveRequest({ + origin: this.leader.pos, + goals: [{ pos: bulldozeTarget.pos, range: 1 }], + }) } - advancedAttack() { - return true + if (range > 3) return true + + this.target = bulldozeTarget + this.passiveRangedAttack() + return true + } + + rangedAttackStructures() { + const request = Memory.combatRequests[this.leader.memory[CreepMemoryKeys.combatRequest]] + if (!request) return false + if (request[CombatRequestKeys.type] === 'defend') return false + if ( + Memory.rooms[this.leader.room.name][RoomMemoryKeys.type] === RoomTypes.commune || + Memory.rooms[this.leader.room.name][RoomMemoryKeys.type] === RoomTypes.remote + ) + return false + + const structures = this.leader.room.roomManager.combatStructureTargets + + if (!structures.length) return false + + let structure = findClosestObject(this.leader.pos, structures) + if (global.settings.roomVisuals) + this.leader.room.visual.line(this.leader.pos, structure.pos, { + color: customColors.green, + opacity: 0.3, + }) + + const range = this.findMinRange(structure.pos) + + if (range > 1) { + this.createMoveRequest({ + origin: this.leader.pos, + goals: [{ pos: structure.pos, range: 1 }], + }) } - advancedDismantle() { - return true + if (range > 3) return true + + this.target = structure + this.passiveRangedAttack() + return true + } + + advancedAttack() { + return true + } + + advancedDismantle() { + return true + } + + rangedKite() { + if (!this.willMove) return Result.noAction + + const enemyThreatDataRanged = this.enemyThreatDataRanged + let stay: undefined | true + + for (const member of this.members) { + const coordThreat = enemyThreatDataRanged.coords[packAsNum(member.pos)] + if (coordThreat === 0) continue + if (coordThreat === 1) { + stay = true + continue + } + + this.leader.room.errorVisual(member.pos, true) + /* delete this.leader.memory[CreepMemoryKeys.path] */ + this.createMoveRequest( + { + origin: this.leader.pos, + goals: enemyThreatDataRanged.goals, + flee: true, + }, + /* member, */ + ) + this.leader.room.visual.text('kited', this.leader.pos) + return Result.action } - rangedKite() { - if (!this.willMove) return Result.noAction - - const enemyThreatDataRanged = this.enemyThreatDataRanged - let stay: undefined | true - - for (const member of this.members) { - const coordThreat = enemyThreatDataRanged.coords[packAsNum(member.pos)] - if (coordThreat === 0) continue - if (coordThreat === 1) { - stay = true - continue - } + // We don't want to flee but we shouldn't move - this.leader.room.errorVisual(member.pos, true) - /* delete this.leader.memory[CreepMemoryKeys.path] */ - this.createMoveRequest( - { - origin: this.leader.pos, - goals: enemyThreatDataRanged.goals, - flee: true, - }, - /* member, */ - ) - this.leader.room.visual.text('kited', this.leader.pos) - return Result.action - } + if (stay) { + this.leader.room.visual.text('stay', this.leader.pos) - // We don't want to flee but we shouldn't move - - if (stay) { - this.leader.room.visual.text('stay', this.leader.pos) - - return Result.stop - } - - // There is no need to kite - return Result.success + return Result.stop } - findMinRange(coord: Coord) { - let minRange = Infinity + // There is no need to kite + return Result.success + } - for (const member of this.members) { - const range = getRange(member.pos, coord) - if (range < minRange) minRange = range - } + findMinRange(coord: Coord) { + let minRange = Infinity - return minRange + for (const member of this.members) { + const range = getRange(member.pos, coord) + if (range < minRange) minRange = range } - setMoveType(type: SquadMoveTypes) { - this.moveType = type - for (const memberName of this.memberNames) { - Memory.creeps[memberName][CreepMemoryKeys.squadMoveType] = type - } - } + return minRange + } - _combatStrength: CombatStrength - get combatStrength() { - if (this._combatStrength) return this._combatStrength - - const combatStrength = { - dismantle: 0, - melee: 0, - ranged: 0, - heal: 0, - } + setMoveType(type: SquadMoveTypes) { + this.moveType = type + for (const memberName of this.memberNames) { + Memory.creeps[memberName][CreepMemoryKeys.squadMoveType] = type + } + } - for (const member of this.members) { + _combatStrength: CombatStrength + get combatStrength() { + if (this._combatStrength) return this._combatStrength - const memberCombatStrength = member.combatStrength + const combatStrength = { + dismantle: 0, + melee: 0, + ranged: 0, + heal: 0, + } - for (const key in combatStrength) { - const combatType = key as keyof CombatStrength + for (const member of this.members) { + const memberCombatStrength = member.combatStrength - combatStrength[combatType] += memberCombatStrength[combatType] - } - } + for (const key in combatStrength) { + const combatType = key as keyof CombatStrength - return this._combatStrength = combatStrength + combatStrength[combatType] += memberCombatStrength[combatType] + } } - _defenceStrength: number - get defenceStrength() { - if (this._defenceStrength !== undefined) return this._defenceStrength + return (this._combatStrength = combatStrength) + } - return (this._defenceStrength = findHighestScore( - this.members, - member => member.defenceStrength, - )) - } + _defenceStrength: number + get defenceStrength() { + if (this._defenceStrength !== undefined) return this._defenceStrength - _hits: number - get hits() { - if (this._hits !== undefined) return this._hits + return (this._defenceStrength = findHighestScore( + this.members, + member => member.defenceStrength, + )) + } - return (this._hits = findHighestScore(this.members, member => member.hits)) - } + _hits: number + get hits() { + if (this._hits !== undefined) return this._hits - _enemyThreatDataRanged: EnemyThreatData + return (this._hits = findHighestScore(this.members, member => member.hits)) + } - /** - * Score identifies speed of death. Lower values are better - * Be scared of enemies we can die faster from - */ - get enemyThreatDataRanged() { - if (this._enemyThreatDataRanged) return this._enemyThreatDataRanged + _enemyThreatDataRanged: EnemyThreatData - this._enemyThreatDataRanged = { - coords: new Uint8Array(2500), - goals: [], - } + /** + * Score identifies speed of death. Lower values are better + * Be scared of enemies we can die faster from + */ + get enemyThreatDataRanged() { + if (this._enemyThreatDataRanged) return this._enemyThreatDataRanged - for (const enemyCreep of this.leader.room.roomManager.enemyAttackers) { - // Plus one to account for non-leader squad members + this._enemyThreatDataRanged = { + coords: new Uint8Array(2500), + goals: [], + } - if (getRange(enemyCreep.pos, this.leader.pos) > rangedFleeRange + 1) continue + for (const enemyCreep of this.leader.room.roomManager.enemyAttackers) { + // Plus one to account for non-leader squad members - const enemyRanged = enemyCreep.combatStrength.ranged - const enemyHeal = enemyCreep.combatStrength.heal - const enemyDefence = enemyCreep.defenceStrength - const enemyHits = enemyCreep.hits + if (getRange(enemyCreep.pos, this.leader.pos) > rangedFleeRange + 1) continue - // Ranged + const enemyRanged = enemyCreep.combatStrength.ranged + const enemyHeal = enemyCreep.combatStrength.heal + const enemyDefence = enemyCreep.defenceStrength + const enemyHits = enemyCreep.hits - let squadDeathSpeed = - enemyRanged * this.defenceStrength - this.combatStrength.heal / this.hits - let enemyDeathSpeed = - this.combatStrength.ranged * 0.9 * enemyDefence - enemyHeal / enemyHits + // Ranged - if (squadDeathSpeed > enemyDeathSpeed) { - forCoordsInRange(enemyCreep.pos, rangedFleeRange, coord => { - const packedCoord = packAsNum(coord) - const currentValue = this._enemyThreatDataRanged.coords[packedCoord] - if (currentValue === 255) return + let squadDeathSpeed = + enemyRanged * this.defenceStrength - this.combatStrength.heal / this.hits + let enemyDeathSpeed = this.combatStrength.ranged * 0.9 * enemyDefence - enemyHeal / enemyHits - if (getRange(enemyCreep.pos, coord) < rangedFleeRange) { - this._enemyThreatDataRanged.coords[packedCoord] = 255 - } else { - this._enemyThreatDataRanged.coords[packedCoord] = 1 - } - }) + if (squadDeathSpeed > enemyDeathSpeed) { + forCoordsInRange(enemyCreep.pos, rangedFleeRange, coord => { + const packedCoord = packAsNum(coord) + const currentValue = this._enemyThreatDataRanged.coords[packedCoord] + if (currentValue === 255) return - this._enemyThreatDataRanged.goals.push({ - pos: enemyCreep.pos, - range: 10, - }) - continue - } + if (getRange(enemyCreep.pos, coord) < rangedFleeRange) { + this._enemyThreatDataRanged.coords[packedCoord] = 255 + } else { + this._enemyThreatDataRanged.coords[packedCoord] = 1 + } + }) - // Melee - - squadDeathSpeed = - (enemyRanged + enemyCreep.combatStrength.melee) * this.defenceStrength - - this.combatStrength.heal / this.hits - enemyDeathSpeed = - this.combatStrength.ranged * 0.9 * enemyDefence - enemyHeal / enemyHits - - if (squadDeathSpeed > enemyDeathSpeed) { - forCoordsInRange(enemyCreep.pos, meleeFleeRange, coord => { - const packedCoord = packAsNum(coord) - const currentValue = this._enemyThreatDataRanged.coords[packedCoord] - if (currentValue === 255) return - - if (getRange(enemyCreep.pos, coord) < meleeFleeRange) { - this._enemyThreatDataRanged.coords[packedCoord] = 255 - } else { - this._enemyThreatDataRanged.coords[packedCoord] = 1 - } - }) + this._enemyThreatDataRanged.goals.push({ + pos: enemyCreep.pos, + range: 10, + }) + continue + } + + // Melee + + squadDeathSpeed = + (enemyRanged + enemyCreep.combatStrength.melee) * this.defenceStrength - + this.combatStrength.heal / this.hits + enemyDeathSpeed = this.combatStrength.ranged * 0.9 * enemyDefence - enemyHeal / enemyHits + + if (squadDeathSpeed > enemyDeathSpeed) { + forCoordsInRange(enemyCreep.pos, meleeFleeRange, coord => { + const packedCoord = packAsNum(coord) + const currentValue = this._enemyThreatDataRanged.coords[packedCoord] + if (currentValue === 255) return + + if (getRange(enemyCreep.pos, coord) < meleeFleeRange) { + this._enemyThreatDataRanged.coords[packedCoord] = 255 + } else { + this._enemyThreatDataRanged.coords[packedCoord] = 1 + } + }) - this._enemyThreatDataRanged.goals.push({ - pos: enemyCreep.pos, - range: 10, - }) - continue - } - } - /* + this._enemyThreatDataRanged.goals.push({ + pos: enemyCreep.pos, + range: 10, + }) + continue + } + } + /* for (let x = 0; x < roomDimensions; x++) { for (let y = 0; y < roomDimensions; y++) { const weight = this._enemyThreatDataRanged.coords[packXYAsNum(x, y)] @@ -1144,22 +1118,22 @@ export class Quad { } } */ - return this._enemyThreatDataRanged - } + return this._enemyThreatDataRanged + } - get canMove() { - for (const member of this.members) { - if (!member.canMove) return false - } - return true + get canMove() { + for (const member of this.members) { + if (!member.canMove) return false } + return true + } - get willMove() { - for (const member of this.members) { - if (!member.canMove) return false - if (member.moveRequest) return false - } - - return true + get willMove() { + for (const member of this.members) { + if (!member.canMove) return false + if (member.moveRequest) return false } + + return true + } } diff --git a/src/room/creeps/roleManagers/commune/controllerUpgrader.ts b/src/room/creeps/roleManagers/commune/controllerUpgrader.ts index 333b85145..47cea9033 100644 --- a/src/room/creeps/roleManagers/commune/controllerUpgrader.ts +++ b/src/room/creeps/roleManagers/commune/controllerUpgrader.ts @@ -1,4 +1,5 @@ import { CreepMemoryKeys, ReservedCoordTypes, RoomMemoryKeys, packedPosLength } from 'international/constants' +import { creepProcs } from 'room/creeps/creepProcs' import { creepUtils } from 'room/creeps/creepUtils' import { myCreepUtils } from 'room/creeps/myCreepUtils' @@ -71,7 +72,7 @@ export class ControllerUpgrader extends Creep { } } */ - creepUtils.advancedUpgradeController(creep) + creepProcs.advancedUpgradeController(creep) } } } diff --git a/src/room/creeps/roleManagers/commune/maintainer.ts b/src/room/creeps/roleManagers/commune/maintainer.ts index b3af46279..7ff9e644a 100644 --- a/src/room/creeps/roleManagers/commune/maintainer.ts +++ b/src/room/creeps/roleManagers/commune/maintainer.ts @@ -8,6 +8,7 @@ import { statsManager } from 'international/statsManager' import { findCoordsInsideRect, findObjectWithID, getRange } from 'utils/utils' import { packCoord } from 'other/codec' import { creepUtils } from 'room/creeps/creepUtils' +import { creepProcs } from 'room/creeps/creepProcs' export class Maintainer extends Creep { constructor(creepID: Id) { @@ -36,8 +37,8 @@ export class Maintainer extends Creep { const rampartCSite = this.room.find(FIND_MY_CONSTRUCTION_SITES).find(site => site.structureType === STRUCTURE_RAMPART) if (rampartCSite && this.advancedBuildCSite(rampartCSite) !== Result.fail) return */ - if (creepUtils.repairCommune(this)) return - if (creepUtils.repairNearby(this)) return + if (creepProcs.repairCommune(this)) return + if (creepProcs.repairNearby(this)) return } static roleManager(room: Room, creepsOfRole: string[]) { diff --git a/src/room/room.ts b/src/room/room.ts index 06db67774..6579721c5 100644 --- a/src/room/room.ts +++ b/src/room/room.ts @@ -950,7 +950,7 @@ export class RoomManager { communeManager.spawningStructuresByPriorityIDs = undefined communeManager._fastFillerSpawnEnergyCapacity = undefined communeManager.sourceLinkIDs = undefined - + this.fastFillerContainerIDs = undefined this._upgradePositions = undefined this._fastFillerPositions = undefined @@ -1377,6 +1377,8 @@ export class RoomManager { return (this._combatStructureTargets = []) if (controller.reservation && isAlly(controller.reservation.username)) return (this._combatStructureTargets = []) + + return this._combatStructureTargets = [] } const combatStructureTargets = this.room.find(FIND_STRUCTURES, { diff --git a/src/types.d.ts b/src/types.d.ts index eaf941314..1204a0bc9 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -431,296 +431,296 @@ declare global { } interface Room { - /** - * The names of creeps harvesting each source - */ - creepsOfSource: string[][] + /** + * The names of creeps harvesting each source + */ + creepsOfSource: string[][] - estimatedSourceIncome: number[] + estimatedSourceIncome: number[] - myCreeps: Creep[] - myPowerCreeps: PowerCreep[] - /** - * An object with keys of roles with properties of arrays of creep names belonging to the role - */ - myCreepsByRole: { [key in CreepRoles]?: string[] } + myCreeps: Creep[] + myPowerCreeps: PowerCreep[] + /** + * An object with keys of roles with properties of arrays of creep names belonging to the role + */ + myCreepsByRole: { [key in CreepRoles]?: string[] } - /** - * An object with keys of roles with properties of arrays of power creep names belonging to the role - */ - myPowerCreepsByRole: { [key in PowerClassConstant]?: string[] } + /** + * An object with keys of roles with properties of arrays of power creep names belonging to the role + */ + myPowerCreepsByRole: { [key in PowerClassConstant]?: string[] } - /** - * An object with keys of roles and properties of the number of creeps with the role from this room - */ - creepsFromRoom: Partial<{ [key in CreepRoles]: string[] }> + /** + * An object with keys of roles and properties of the number of creeps with the role from this room + */ + creepsFromRoom: Partial<{ [key in CreepRoles]: string[] }> - /** - * The cumulative amount of creeps with a communeName value of this room's name - */ - creepsFromRoomAmount: number + /** + * The cumulative amount of creeps with a communeName value of this room's name + */ + creepsFromRoomAmount: number - /** - * An object with keys of roles and properties of the number of creeps with the role from this room - */ - creepsOfRemote: { [remoteName: string]: Partial<{ [key in CreepRoles]: string[] }> } + /** + * An object with keys of roles and properties of the number of creeps with the role from this room + */ + creepsOfRemote: { [remoteName: string]: Partial<{ [key in CreepRoles]: string[] }> } - /** - * A set of roomNames representing the targets stof scouts from this commune - */ - scoutTargets: Set + /** + * A set of roomNames representing the targets stof scouts from this commune + */ + scoutTargets: Set - /** - * Tile types as defined by the rampartPlanner - */ - tileCoords: CoordMap + /** + * Tile types as defined by the rampartPlanner + */ + tileCoords: CoordMap - unprotectedCoords: CoordMap + unprotectedCoords: CoordMap - /** - * Wether the towers can sufficiently deal with the enemy threat in the room - */ - towerInferiority: boolean + /** + * Wether the towers can sufficiently deal with the enemy threat in the room + */ + towerInferiority: boolean - baseCoords: CoordMap + baseCoords: CoordMap - rampartCoords: CoordMap + rampartCoords: CoordMap - roadCoords: CoordMap + roadCoords: CoordMap - /** - * A matrix with indexes of packed coords and values of creep names - */ - creepPositions: { [packedCoord: string]: string } + /** + * A matrix with indexes of packed coords and values of creep names + */ + creepPositions: { [packedCoord: string]: string } - /** - * A matrix with indexes of packed coords and values of creep names - */ - powerCreepPositions: { [packedCoord: string]: string } + /** + * A matrix with indexes of packed coords and values of creep names + */ + powerCreepPositions: { [packedCoord: string]: string } - /** - * A matrix with indexes of packed coords and values of creep names - */ - moveRequests: { [packedCoord: string]: string[] } + /** + * A matrix with indexes of packed coords and values of creep names + */ + moveRequests: { [packedCoord: string]: string[] } - roomManager: RoomManager + roomManager: RoomManager - communeManager: CommuneManager + communeManager: CommuneManager - /** - * The names of creeps looking to join a squad - */ - squadRequests: Set + /** + * The names of creeps looking to join a squad + */ + squadRequests: Set - roomLogisticsRequests: { - [key in RoomLogisticsRequestTypes]: { [ID: string]: RoomLogisticsRequest } - } - powerTasks: { [ID: string]: PowerTask } + roomLogisticsRequests: { + [key in RoomLogisticsRequestTypes]: { [ID: string]: RoomLogisticsRequest } + } + powerTasks: { [ID: string]: PowerTask } - attackingDefenderIDs: Set> - defenderEnemyTargetsWithDamage: Map, number> - defenderEnemyTargetsWithDefender: Map, Id[]> + attackingDefenderIDs: Set> + defenderEnemyTargetsWithDamage: Map, number> + defenderEnemyTargetsWithDefender: Map, Id[]> - usedRampartIDs: Map, Id> + usedRampartIDs: Map, Id> - generalRepairStructures: (StructureRoad | StructureContainer)[] - rampartRepairStructures: StructureRampart[] + generalRepairStructures: (StructureRoad | StructureContainer)[] + rampartRepairStructures: StructureRampart[] - // Commune + considerFunneled: boolean + // Commune + // Functions - // Functions + /** + * + * @param pos1 The position of the thing performing the action + * @param pos2 The position of the thing getting intereacted with + * @param type The type of interaction, success if not provided + */ + actionVisual(pos1: RoomPosition, pos2: RoomPosition, type?: string): void - /** - * - * @param pos1 The position of the thing performing the action - * @param pos2 The position of the thing getting intereacted with - * @param type The type of interaction, success if not provided - */ - actionVisual(pos1: RoomPosition, pos2: RoomPosition, type?: string): void + targetVisual(coord1: Coord, coord2: Coord, visualize?: boolean): void - targetVisual(coord1: Coord, coord2: Coord, visualize?: boolean): void + /** + * Tries to delete a task with the provided ID and response state + */ + deleteTask(taskID: any, responder: boolean): void - /** - * Tries to delete a task with the provided ID and response state - */ - deleteTask(taskID: any, responder: boolean): void + scoutByRoomName(): number | false - scoutByRoomName(): number | false + scoutRemote(scoutingRoom?: Room): number | false + scoutEnemyReservedRemote(): number | false + scoutEnemyUnreservedRemote(): number | false + scoutMyRemote(scoutingRoom: Room): number | false - scoutRemote(scoutingRoom?: Room): number | false - scoutEnemyReservedRemote(): number | false - scoutEnemyUnreservedRemote(): number | false - scoutMyRemote(scoutingRoom: Room): number | false + scoutEnemyRoom(): number - scoutEnemyRoom(): number + basicScout(): number - basicScout(): number + /** + * Finds the type of a room and initializes its custom properties + * @param scoutingRoom The room that is performing the scout operation + */ + advancedScout(scoutingRoom: Room): number - /** - * Finds the type of a room and initializes its custom properties - * @param scoutingRoom The room that is performing the scout operation - */ - advancedScout(scoutingRoom: Room): number + makeRemote(scoutingRoom: Room): boolean - makeRemote(scoutingRoom: Room): boolean + createAttackCombatRequest(opts?: Partial): void - createAttackCombatRequest(opts?: Partial): void + createHarassCombatRequest(opts?: Partial): void - createHarassCombatRequest(opts?: Partial): void + createDefendCombatRequest(opts?: Partial): void - createDefendCombatRequest(opts?: Partial): void + /** + * Finds the score of rooms for potential communes + */ + findScore(): void + /** + * Finds open spaces in a room and records them in a cost matrix + */ + distanceTransform( + initialCoords?: CoordMap, + visuals?: boolean, /** - * Finds the score of rooms for potential communes + * The smallest number to convert into an avoid value */ - findScore(): void + minAvoid?: number, + x1?: number, + y1?: number, + x2?: number, + y2?: number, + ): CoordMap + /** + * Finds open spaces in a room without adding depth to diagonals, and records the depth results in a cost matrix + */ + diagonalDistanceTransform( + initialCoords?: CoordMap, + visuals?: boolean, /** - * Finds open spaces in a room and records them in a cost matrix + * The smallest number to convert into an avoid value */ - distanceTransform( - initialCoords?: CoordMap, - visuals?: boolean, - /** - * The smallest number to convert into an avoid value - */ - minAvoid?: number, - x1?: number, - y1?: number, - x2?: number, - y2?: number, - ): CoordMap + minAvoid?: number, + x1?: number, + y1?: number, + x2?: number, + y2?: number, + ): CoordMap - /** - * Finds open spaces in a room without adding depth to diagonals, and records the depth results in a cost matrix - */ - diagonalDistanceTransform( - initialCoords?: CoordMap, - visuals?: boolean, - /** - * The smallest number to convert into an avoid value - */ - minAvoid?: number, - x1?: number, - y1?: number, - x2?: number, - y2?: number, - ): CoordMap + /** + * Flood fills a room until it finds one of a set of positions + */ + findClosestPos(opts: FindClosestPos): RoomPosition | false - /** - * Flood fills a room until it finds one of a set of positions - */ - findClosestPos(opts: FindClosestPos): RoomPosition | false + errorVisual(coord: Coord, visualize?: boolean): void - errorVisual(coord: Coord, visualize?: boolean): void + /** + * Finds and records a construction site for builders to target + */ + findAllyCSiteTargetID(creep: Creep): boolean - /** - * Finds and records a construction site for builders to target - */ - findAllyCSiteTargetID(creep: Creep): boolean + /** + * Groups positions with contigiousness, structured similarily to a flood fill + */ + groupRampartPositions(rampartPositions: number[]): RoomPosition[][] - /** - * Groups positions with contigiousness, structured similarily to a flood fill - */ - groupRampartPositions(rampartPositions: number[]): RoomPosition[][] - - findUnprotectedCoords(visuals?: boolean): void - - /** - * - */ - findPositionsInsideRect(x1: number, y1: number, x2: number, y2: number): RoomPosition[] - - /** - * - */ - findAdjacentPositions(rx: number, ry: number): RoomPosition[] - - /** - * - */ - createPullTask(creator: Structure | Creep | Resource): void - - /** - * - */ - createPickupTasks(creator: Structure | Creep | Resource): void - - /** - * - */ - createOfferTasks(creator: Structure | Creep | Resource): void - - /** - * - */ - createTransferTasks(creator: Structure | Creep | Resource): void - - /** - * - */ - createWithdrawTasks(creator: Structure | Creep | Resource): void - - visualizeCoordMap(coordMap: CoordMap, color?: boolean, magnification?: number): void - - visualizeCostMatrix(cm: CostMatrix, color?: boolean, magnification?: number): void - - coordHasStructureTypes(coord: Coord, types: Set): boolean - - createPowerTask( - target: Structure | Source, - powerType: PowerConstant, - priority: number, - ): PowerTask | false - - highestWeightedStoringStructures(resourceType: ResourceConstant): AnyStoreStructure | false + findUnprotectedCoords(visuals?: boolean): void - createRoomLogisticsRequest(args: CreateRoomLogisticsRequestArgs): void - - partsOfRoles: Partial<{ - [key in CreepRoles]: Partial<{ [key in BodyPartConstant]: number }> - }> - - createWorkRequest(): boolean - - findSwampPlainsRatio(): number - - // Spawn functions - - // structure functions - - findStructureAtCoord( - coord: Coord, - conditions: (structure: T) => boolean, - ): T | false - findStructureAtXY( - x: number, - y: number, - conditions: (structure: T) => boolean, - ): T | false - - findCSiteAtCoord( - coord: Coord, - conditions: (cSite: T) => boolean, - ): T | false - findCSiteAtXY( - x: number, - y: number, - conditions: (cSite: T) => boolean, - ): T | false - - findStructureInRange( - startCoord: Coord, - range: number, - condition: (structure: T) => boolean, - ): T | false - - /** - * Generates a square visual at the specified coordinate - */ - coordVisual(x: number, y: number, fill?: string): void + /** + * + */ + findPositionsInsideRect(x1: number, y1: number, x2: number, y2: number): RoomPosition[] + + /** + * + */ + findAdjacentPositions(rx: number, ry: number): RoomPosition[] + + /** + * + */ + createPullTask(creator: Structure | Creep | Resource): void + + /** + * + */ + createPickupTasks(creator: Structure | Creep | Resource): void + + /** + * + */ + createOfferTasks(creator: Structure | Creep | Resource): void + + /** + * + */ + createTransferTasks(creator: Structure | Creep | Resource): void + + /** + * + */ + createWithdrawTasks(creator: Structure | Creep | Resource): void + + visualizeCoordMap(coordMap: CoordMap, color?: boolean, magnification?: number): void + + visualizeCostMatrix(cm: CostMatrix, color?: boolean, magnification?: number): void + + coordHasStructureTypes(coord: Coord, types: Set): boolean + + createPowerTask( + target: Structure | Source, + powerType: PowerConstant, + priority: number, + ): PowerTask | false + + highestWeightedStoringStructures(resourceType: ResourceConstant): AnyStoreStructure | false + + createRoomLogisticsRequest(args: CreateRoomLogisticsRequestArgs): void + + partsOfRoles: Partial<{ + [key in CreepRoles]: Partial<{ [key in BodyPartConstant]: number }> + }> + + createWorkRequest(): boolean + + findSwampPlainsRatio(): number + + // Spawn functions + + // structure functions + + findStructureAtCoord( + coord: Coord, + conditions: (structure: T) => boolean, + ): T | false + findStructureAtXY( + x: number, + y: number, + conditions: (structure: T) => boolean, + ): T | false + + findCSiteAtCoord( + coord: Coord, + conditions: (cSite: T) => boolean, + ): T | false + findCSiteAtXY( + x: number, + y: number, + conditions: (cSite: T) => boolean, + ): T | false + + findStructureInRange( + startCoord: Coord, + range: number, + condition: (structure: T) => boolean, + ): T | false + + /** + * Generates a square visual at the specified coordinate + */ + coordVisual(x: number, y: number, fill?: string): void } interface DepositRecord { From 74111939f93c8726afb7d4daa66d88eff5cb46b3 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Wed, 3 Jan 2024 22:13:24 -0800 Subject: [PATCH 058/190] logistics fixes, more debug improvements --- src/international/flags.ts | 1362 ++++++++--------- src/other/profilerRegister.ts | 2 +- src/room/commune/labs.ts | 19 +- .../{creepMoveUtils.ts => creepMoveProcs.ts} | 2 +- .../creeps/creepPrototypes/creepFunctions.ts | 29 +- .../creepPrototypes/creepMoveFunctions.ts | 2 +- .../creeps/roleManagers/commune/hauler.ts | 3 + src/room/roomFunctions.ts | 18 +- 8 files changed, 712 insertions(+), 725 deletions(-) rename src/room/creeps/{creepMoveUtils.ts => creepMoveProcs.ts} (98%) diff --git a/src/international/flags.ts b/src/international/flags.ts index 37b3a3cf1..6b3d41354 100644 --- a/src/international/flags.ts +++ b/src/international/flags.ts @@ -1,5 +1,13 @@ import { Dashboard, Rectangle, Table } from 'screeps-viz' -import { Result, RoomLogisticsRequestTypes, RoomMemoryKeys, RoomTypes, WorkRequestKeys, customColors, ourImpassibleStructuresSet } from './constants' +import { + Result, + RoomLogisticsRequestTypes, + RoomMemoryKeys, + RoomTypes, + WorkRequestKeys, + customColors, + ourImpassibleStructuresSet, +} from './constants' import { collectiveManager } from './collective' import { CombatRequestTypes } from 'types/internationalRequests' import { roomNameUtils } from 'room/roomNameUtils' @@ -10,782 +18,760 @@ import { spawnRequestConstructorsByType } from 'room/commune/spawning/spawningSt import { roomUtils } from 'room/roomUtils' export class FlagManager { - run() { - for (const flagName in Game.flags) { - const flagNameParts = flagName.split(' ') + run() { + for (const flagName in Game.flags) { + const flagNameParts = flagName.split(' ') - if (!this[flagNameParts[0] as keyof FlagManager]) continue - this[flagNameParts[0] as keyof FlagManager](flagName, flagNameParts) - } + if (!this[flagNameParts[0] as keyof FlagManager]) continue + this[flagNameParts[0] as keyof FlagManager](flagName, flagNameParts) } - - /** - * Tricks typescript into accepting the dynamic function call in run() - */ - public doNothing(flagName: string, flagNameParts: string[]) {} - - private internationalDataVisuals(flagName: string, flagNameParts: string[]) { - const flag = Game.flags[flagName] - const roomName = flagNameParts[1] || flag.pos.roomName - const room = Game.rooms[roomName] - if (!room) { - flag.setColor(COLOR_RED) - return - } - - flag.setColor(COLOR_GREEN) - room.roomManager.roomVisualsManager.internationalDataVisuals() + } + + /** + * Tricks typescript into accepting the dynamic function call in run() + */ + public doNothing(flagName: string, flagNameParts: string[]) {} + + private internationalDataVisuals(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const room = Game.rooms[roomName] + if (!room) { + flag.setColor(COLOR_RED) + return } - private incomingTransactions(flagName: string, flagNameParts: string[]) { - const flag = Game.flags[flagName] - const roomName = flagNameParts[1] || flag.pos.roomName - const room = Game.rooms[roomName] - if (!room) { - flag.setColor(COLOR_RED) - return - } - - flag.setColor(COLOR_GREEN) - - const headers = ['sender', '', 'receiver', 'resource', 'amount', 'ticks since'] - - const data: any[][] = [] - - for (const transaction of Game.market.incomingTransactions) { - const roomFromMemory = Memory.rooms[transaction.from] || {} as RoomMemory - const roomToMemory = Memory.rooms[transaction.to] || {} as RoomMemory - - data.push([ - transaction.from + - ' (' + - (roomFromMemory[RoomMemoryKeys.type] === RoomTypes.commune - ? Memory.me - : roomFromMemory[RoomMemoryKeys.owner] || 'unknown') + - ')', - '-->', - transaction.to + - ' (' + - (roomToMemory[RoomMemoryKeys.type] === RoomTypes.commune - ? Memory.me - : roomToMemory[RoomMemoryKeys.owner] || 'unknown') + - ')', - transaction.resourceType, - transaction.amount, - Game.time - transaction.time, - ]) - } - - const height = 3 + data.length - - Dashboard({ - config: { - room: room.roomManager.room.name, - }, - widgets: [ - { - pos: { - x: 1, - y: 1, - }, - width: 47, - height, - widget: Rectangle({ - data: Table(() => ({ - data, - config: { - label: 'Incoming Transactions', - headers, - }, - })), - }), - }, - ], - }) - } - - private outgoingTransactions(flagName: string, flagNameParts: string[]) { - const flag = Game.flags[flagName] - const roomName = flagNameParts[1] || flag.pos.roomName - const room = Game.rooms[roomName] - if (!room) { - flag.setColor(COLOR_RED) - return - } - - flag.setColor(COLOR_GREEN) - - const headers = ['sender', '', 'receiver', 'resource', 'amount', 'ticks since'] - - const data: any[][] = [] - - for (const transaction of Game.market.outgoingTransactions) { - const roomFromMemory = Memory.rooms[transaction.from] || {} as RoomMemory - const roomToMemory = Memory.rooms[transaction.to] || {} as RoomMemory - - data.push([ - transaction.from + - ' (' + - (roomFromMemory[RoomMemoryKeys.type] === RoomTypes.commune - ? Memory.me - : roomFromMemory[RoomMemoryKeys.owner] || 'unknown') + - ')', - '-->', - transaction.to + - ' (' + - (roomToMemory[RoomMemoryKeys.type] === RoomTypes.commune - ? Memory.me - : roomToMemory[RoomMemoryKeys.owner] || 'unknown') + - ')', - transaction.resourceType, - transaction.amount, - Game.time - transaction.time, - ]) - } - - const height = 3 + data.length - - Dashboard({ - config: { - room: room.roomManager.room.name, - }, - widgets: [ - { - pos: { - x: 1, - y: 1, - }, - width: 47, - height, - widget: Rectangle({ - data: Table(() => ({ - data, - config: { - label: 'Outgoing Transactions', - headers, - }, - })), - }), - }, - ], - }) - } - - private abandonCommune(flagName: string, flagNameParts: string[]) { - const flag = Game.flags[flagName] - const roomName = flagNameParts[1] || flag.pos.roomName - const roomMemory = Memory.rooms[roomName] - if (!roomMemory) { - flag.setColor(COLOR_RED) - return - } - - if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.commune) { - flag.setColor(COLOR_RED) - return - } - - flag.remove() - roomMemory[RoomMemoryKeys.abandonCommune] = true + flag.setColor(COLOR_GREEN) + room.roomManager.roomVisualsManager.internationalDataVisuals() + } + + private incomingTransactions(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const room = Game.rooms[roomName] + if (!room) { + flag.setColor(COLOR_RED) + return } - private claim(flagName: string, flagNameParts: string[]) { - const flag = Game.flags[flagName] - const roomName = flagNameParts[1] || flag.pos.roomName - const roomMemory = Memory.rooms[roomName] - const communeName = flagNameParts[2] || undefined - const score = flagNameParts[3] ? parseInt(flagNameParts[3]) : undefined - - if (!roomMemory) { - flag.setColor(COLOR_RED) - return - } - if (roomMemory[RoomMemoryKeys.communePlanned] !== true) { - flag.setColor(COLOR_RED) - return - } - - if (communeName) { - const communeMemory = Memory.rooms[communeName] - if (!communeMemory) { - flag.setColor(COLOR_RED) - return - } - } - - global.claim(roomName, communeName, score) - - flag.remove() - } - - private deleteClaim(flagName: string, flagNameParts: string[]) { - const flag = Game.flags[flagName] - const roomName = flagNameParts[1] || flag.pos.roomName - const roomMemory = Memory.rooms[roomName] - - if (!roomMemory) { - flag.setColor(COLOR_RED) - return - } - - global.deleteWorkRequest(roomName) - - flag.remove() + flag.setColor(COLOR_GREEN) + + const headers = ['sender', '', 'receiver', 'resource', 'amount', 'ticks since'] + + const data: any[][] = [] + + for (const transaction of Game.market.incomingTransactions) { + const roomFromMemory = Memory.rooms[transaction.from] || ({} as RoomMemory) + const roomToMemory = Memory.rooms[transaction.to] || ({} as RoomMemory) + + data.push([ + transaction.from + + ' (' + + (roomFromMemory[RoomMemoryKeys.type] === RoomTypes.commune + ? Memory.me + : roomFromMemory[RoomMemoryKeys.owner] || 'unknown') + + ')', + '-->', + transaction.to + + ' (' + + (roomToMemory[RoomMemoryKeys.type] === RoomTypes.commune + ? Memory.me + : roomToMemory[RoomMemoryKeys.owner] || 'unknown') + + ')', + transaction.resourceType, + transaction.amount, + Game.time - transaction.time, + ]) } - private combat(flagName: string, flagNameParts: string[]) { - const flag = Game.flags[flagName] - const roomName = flagNameParts[1] || flag.pos.roomName - const communeName = flagNameParts[2] || undefined - const type: CombatRequestTypes = (flagNameParts[3] as CombatRequestTypes) || 'attack' - - flag.setColor(COLOR_RED) - return - - if (communeName) { - if (!Memory.rooms[communeName]) { - flag.setColor(COLOR_RED) - return - } - } - - global.combat(roomName, type, undefined, communeName) + const height = 3 + data.length + + Dashboard({ + config: { + room: room.roomManager.room.name, + }, + widgets: [ + { + pos: { + x: 1, + y: 1, + }, + width: 47, + height, + widget: Rectangle({ + data: Table(() => ({ + data, + config: { + label: 'Incoming Transactions', + headers, + }, + })), + }), + }, + ], + }) + } + + private outgoingTransactions(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const room = Game.rooms[roomName] + if (!room) { + flag.setColor(COLOR_RED) + return } - private attack(flagName: string, flagNameParts: string[]) { - flagNameParts.push('attack') - this.combat(flagName, flagNameParts) + flag.setColor(COLOR_GREEN) + + const headers = ['sender', '', 'receiver', 'resource', 'amount', 'ticks since'] + + const data: any[][] = [] + + for (const transaction of Game.market.outgoingTransactions) { + const roomFromMemory = Memory.rooms[transaction.from] || ({} as RoomMemory) + const roomToMemory = Memory.rooms[transaction.to] || ({} as RoomMemory) + + data.push([ + transaction.from + + ' (' + + (roomFromMemory[RoomMemoryKeys.type] === RoomTypes.commune + ? Memory.me + : roomFromMemory[RoomMemoryKeys.owner] || 'unknown') + + ')', + '-->', + transaction.to + + ' (' + + (roomToMemory[RoomMemoryKeys.type] === RoomTypes.commune + ? Memory.me + : roomToMemory[RoomMemoryKeys.owner] || 'unknown') + + ')', + transaction.resourceType, + transaction.amount, + Game.time - transaction.time, + ]) } - private harass(flagName: string, flagNameParts: string[]) { - flagNameParts.push('harass') - this.combat(flagName, flagNameParts) + const height = 3 + data.length + + Dashboard({ + config: { + room: room.roomManager.room.name, + }, + widgets: [ + { + pos: { + x: 1, + y: 1, + }, + width: 47, + height, + widget: Rectangle({ + data: Table(() => ({ + data, + config: { + label: 'Outgoing Transactions', + headers, + }, + })), + }), + }, + ], + }) + } + + private abandonCommune(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const roomMemory = Memory.rooms[roomName] + if (!roomMemory) { + flag.setColor(COLOR_RED) + return } - private defend(flagName: string, flagNameParts: string[]) { - flagNameParts.push('defend') - this.combat(flagName, flagNameParts) + if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.commune) { + flag.setColor(COLOR_RED) + return } - private deleteCombat(flagName: string, flagNameParts: string[]) { - const flag = Game.flags[flagName] - const roomName = flagNameParts[1] || flag.pos.roomName + flag.remove() + roomMemory[RoomMemoryKeys.abandonCommune] = true + } - global.deleteCombatRequest(roomName) + private claim(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const roomMemory = Memory.rooms[roomName] + const communeName = flagNameParts[2] || undefined + const score = flagNameParts[3] ? parseInt(flagNameParts[3]) : undefined - flag.remove() + if (!roomMemory) { + flag.setColor(COLOR_RED) + return + } + if (roomMemory[RoomMemoryKeys.communePlanned] !== true) { + flag.setColor(COLOR_RED) + return } - private defenceFloodAnchor(flagName: string, flagNameParts: string[]) { - const flag = Game.flags[flagName] - const roomName = flagNameParts[1] || flag.pos.roomName - const room = Game.rooms[roomName] - if (!room) { - - flag.setColor(COLOR_RED) - return - } + if (communeName) { + const communeMemory = Memory.rooms[communeName] + if (!communeMemory) { + flag.setColor(COLOR_RED) + return + } + } - const anchor = room.roomManager.anchor - if (!anchor) { - throw Error('no anchor') - } + global.claim(roomName, communeName, score) - const terrain = Game.map.getRoomTerrain(room.name) - const rampartPlans = room.roomManager.rampartPlans - roomNameUtils.floodFillFor(room.name, [anchor], coord => { - // Ignore terrain that protects us - if (terrain.get(coord.x, coord.y) === TERRAIN_MASK_WALL) return false - - const planData = rampartPlans.getXY(coord.x, coord.y) - if (planData) { - // Filter out non-mincut ramparts - if (planData.buildForNuke || planData.coversStructure) { - - room.coordVisual(coord.x, coord.y) - return true - } - - // Don't flood past mincut ramparts - return false - } - room.coordVisual(coord.x, coord.y) - // See if there is an enemy creep - const enemyCreepID = room.roomManager.enemyCreepPositions[packCoord(coord)] - if (!enemyCreepID) return true - - const enemyCreep = findObjectWithID(enemyCreepID) - if (isAlly(enemyCreep.owner.username)) return true - // If it can deal damage, safemode - if ( - enemyCreep.combatStrength.ranged > 0 || - enemyCreep.combatStrength.melee > 0 || - enemyCreep.combatStrength.dismantle > 0 - ) - return Result.stop - - return true - }) - } - - private defenceFloodController(flagName: string, flagNameParts: string[]) { - const flag = Game.flags[flagName] - const roomName = flagNameParts[1] || flag.pos.roomName - const room = Game.rooms[roomName] - if (!room) { - - flag.setColor(COLOR_RED) - return - } + flag.remove() + } - const terrain = Game.map.getRoomTerrain(room.name) - roomNameUtils.floodFillFor( - room.name, - [room.controller.pos], - (coord, packedCoord, depth) => { - // See if we should even consider the coord + private deleteClaim(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const roomMemory = Memory.rooms[roomName] - // Ignore terrain that protects us - if (terrain.get(coord.x, coord.y) === TERRAIN_MASK_WALL) return false + if (!roomMemory) { + flag.setColor(COLOR_RED) + return + } - // Don't go out of range 2 from controller - if (depth > 2) return false + global.deleteWorkRequest(roomName) - // Ignore structures that protect us - if (room.coordHasStructureTypes(coord, ourImpassibleStructuresSet)) return false + flag.remove() + } - // Past this point we should always add this coord to the next generation - room.coordVisual(coord.x, coord.y) - // See if there is an enemy creep - const enemyCreepID = room.roomManager.enemyCreepPositions[packCoord(coord)] - if (!enemyCreepID) return true + private combat(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const communeName = flagNameParts[2] || undefined + const type: CombatRequestTypes = (flagNameParts[3] as CombatRequestTypes) || 'attack' - const enemyCreep = findObjectWithID(enemyCreepID) - if (isAlly(enemyCreep.owner.username)) return true - // We only need to protect our controller from claim creeps - if (!enemyCreep.parts.claim) return true + flag.setColor(COLOR_RED) + return - // We identified an enemy claimed near our controller! - return Result.stop - }, - ) + if (communeName) { + if (!Memory.rooms[communeName]) { + flag.setColor(COLOR_RED) + return + } } - private communeSourceVisuals(flagName: string, flagNameParts: string[]) { - const flag = Game.flags[flagName] - const roomName = flagNameParts[1] || flag.pos.roomName - const room = Game.rooms[roomName] - if (!room) { + global.combat(roomName, type, undefined, communeName) + } - flag.setColor(COLOR_RED) - return - } + private attack(flagName: string, flagNameParts: string[]) { + flagNameParts.push('attack') + this.combat(flagName, flagNameParts) + } - const roomMemory = Memory.rooms[room.name] - if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.commune) return + private harass(flagName: string, flagNameParts: string[]) { + flagNameParts.push('harass') + this.combat(flagName, flagNameParts) + } - const sourceIDs = roomMemory[RoomMemoryKeys.communeSources] - for (let sourceIndex = 0; sourceIndex < sourceIDs.length; sourceIndex++) { + private defend(flagName: string, flagNameParts: string[]) { + flagNameParts.push('defend') + this.combat(flagName, flagNameParts) + } - const source = findObjectWithID(sourceIDs[sourceIndex]) - room.visual.text(sourceIndex.toString(), source.pos) - } + private deleteCombat(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName - const stampAnchors = room.roomManager.stampAnchors - if (stampAnchors) { + global.deleteCombatRequest(roomName) - for (let sourceIndex = 0; sourceIndex < stampAnchors.sourceLink.length; sourceIndex++) { + flag.remove() + } - const coord = stampAnchors.sourceLink[sourceIndex] - room.visual.text(sourceIndex.toString(), coord.x, coord.y) - } - } + private defenceFloodAnchor(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const room = Game.rooms[roomName] + if (!room) { + flag.setColor(COLOR_RED) + return } - private communeSourceStructureVisuals(flagName: string, flagNameParts: string[]) { - const flag = Game.flags[flagName] - const roomName = flagNameParts[1] || flag.pos.roomName - const room = Game.rooms[roomName] - if (!room) { - - flag.setColor(COLOR_RED) - return - } - - const roomMemory = Memory.rooms[room.name] - if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.commune) return - - const containers = room.roomManager.sourceContainers - for (let sourceIndex = 0; sourceIndex < containers.length; sourceIndex++) { + const anchor = room.roomManager.anchor + if (!anchor) { + throw Error('no anchor') + } - const container = containers[sourceIndex] - room.visual.text(sourceIndex.toString(), container.pos) - } + const terrain = Game.map.getRoomTerrain(room.name) + const rampartPlans = room.roomManager.rampartPlans + roomNameUtils.floodFillFor(room.name, [anchor], coord => { + // Ignore terrain that protects us + if (terrain.get(coord.x, coord.y) === TERRAIN_MASK_WALL) return false + + const planData = rampartPlans.getXY(coord.x, coord.y) + if (planData) { + // Filter out non-mincut ramparts + if (planData.buildForNuke || planData.coversStructure) { + room.coordVisual(coord.x, coord.y) + return true + } + + // Don't flood past mincut ramparts + return false + } + room.coordVisual(coord.x, coord.y) + // See if there is an enemy creep + const enemyCreepID = room.roomManager.enemyCreepPositions[packCoord(coord)] + if (!enemyCreepID) return true + + const enemyCreep = findObjectWithID(enemyCreepID) + if (isAlly(enemyCreep.owner.username)) return true + // If it can deal damage, safemode + if ( + enemyCreep.combatStrength.ranged > 0 || + enemyCreep.combatStrength.melee > 0 || + enemyCreep.combatStrength.dismantle > 0 + ) + return Result.stop + + return true + }) + } + + private defenceFloodController(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const room = Game.rooms[roomName] + if (!room) { + flag.setColor(COLOR_RED) + return + } - const stampAnchors = room.roomManager.stampAnchors - if (!stampAnchors) return + const terrain = Game.map.getRoomTerrain(room.name) + roomNameUtils.floodFillFor(room.name, [room.controller.pos], (coord, packedCoord, depth) => { + // See if we should even consider the coord + + // Ignore terrain that protects us + if (terrain.get(coord.x, coord.y) === TERRAIN_MASK_WALL) return false + + // Don't go out of range 2 from controller + if (depth > 2) return false + + // Ignore structures that protect us + if (room.coordHasStructureTypes(coord, ourImpassibleStructuresSet)) return false + + // Past this point we should always add this coord to the next generation + room.coordVisual(coord.x, coord.y) + // See if there is an enemy creep + const enemyCreepID = room.roomManager.enemyCreepPositions[packCoord(coord)] + if (!enemyCreepID) return true + + const enemyCreep = findObjectWithID(enemyCreepID) + if (isAlly(enemyCreep.owner.username)) return true + // We only need to protect our controller from claim creeps + if (!enemyCreep.parts.claim) return true + + // We identified an enemy claimed near our controller! + return Result.stop + }) + } + + private communeSourceVisuals(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const room = Game.rooms[roomName] + if (!room) { + flag.setColor(COLOR_RED) + return + } - customLog('sourceLinks stampAnchors', JSON.stringify(stampAnchors.sourceLink)) + const roomMemory = Memory.rooms[room.name] + if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.commune) return - const links = room.communeManager.sourceLinks - customLog('sourceLinks', links) - for (let sourceIndex = 0; sourceIndex < links.length; sourceIndex++) { + const sourceIDs = roomMemory[RoomMemoryKeys.communeSources] + for (let sourceIndex = 0; sourceIndex < sourceIDs.length; sourceIndex++) { + const source = findObjectWithID(sourceIDs[sourceIndex]) + room.visual.text(sourceIndex.toString(), source.pos) + } - const link = links[sourceIndex] - if (!link) continue - room.visual.text(sourceIndex.toString(), link.pos) - } + const stampAnchors = room.roomManager.stampAnchors + if (stampAnchors) { + for (let sourceIndex = 0; sourceIndex < stampAnchors.sourceLink.length; sourceIndex++) { + const coord = stampAnchors.sourceLink[sourceIndex] + room.visual.text(sourceIndex.toString(), coord.x, coord.y) + } + } + } + + private communeSourceStructureVisuals(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const room = Game.rooms[roomName] + if (!room) { + flag.setColor(COLOR_RED) + return } - private remoteSourceVisuals(flagName: string, flagNameParts: string[]) { - const flag = Game.flags[flagName] - const roomName = flagNameParts[1] || flag.pos.roomName - const room = Game.rooms[roomName] - if (!room) { + const roomMemory = Memory.rooms[room.name] + if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.commune) return - flag.setColor(COLOR_RED) - return - } + const containers = room.roomManager.sourceContainers + for (let sourceIndex = 0; sourceIndex < containers.length; sourceIndex++) { + const container = containers[sourceIndex] + room.visual.text(sourceIndex.toString(), container.pos) + } - const roomMemory = Memory.rooms[room.name] - if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.remote) return + const stampAnchors = room.roomManager.stampAnchors + if (!stampAnchors) return - const sourceIDs = roomMemory[RoomMemoryKeys.remoteSources] - for (let sourceIndex = 0; sourceIndex < sourceIDs.length; sourceIndex++) { + customLog('sourceLinks stampAnchors', JSON.stringify(stampAnchors.sourceLink)) - const source = findObjectWithID(sourceIDs[sourceIndex]) - room.visual.text(sourceIndex.toString(), source.pos) - } + const links = room.communeManager.sourceLinks + customLog('sourceLinks', links) + for (let sourceIndex = 0; sourceIndex < links.length; sourceIndex++) { + const link = links[sourceIndex] + if (!link) continue + room.visual.text(sourceIndex.toString(), link.pos) } - - private calculateDynamicScore(flagName: string, flagNameParts: string[]) { - const flag = Game.flags[flagName] - const roomName = flagNameParts[1] || flag.pos.roomName - - const dynamicScore = roomNameUtils.findDynamicScore(roomName) - customLog('dynamic score for ' + roomName, dynamicScore) + } + + private remoteSourceVisuals(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const room = Game.rooms[roomName] + if (!room) { + flag.setColor(COLOR_RED) + return } - private spawnRequestVisuals(flagName: string, flagNameParts: string[]) { - const flag = Game.flags[flagName] - const roomName = flagNameParts[1] || flag.pos.roomName - const room = Game.rooms[roomName] - if (!room) { - - flag.setColor(COLOR_RED) - return - } + const roomMemory = Memory.rooms[room.name] + if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.remote) return - const headers = ['role', 'priority', 'cost', 'parts'] - const data: any[][] = [] + const sourceIDs = roomMemory[RoomMemoryKeys.remoteSources] + for (let sourceIndex = 0; sourceIndex < sourceIDs.length; sourceIndex++) { + const source = findObjectWithID(sourceIDs[sourceIndex]) + room.visual.text(sourceIndex.toString(), source.pos) + } + } + + private calculateDynamicScore(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + + const dynamicScore = roomNameUtils.findDynamicScore(roomName) + customLog('dynamic score for ' + roomName, dynamicScore) + } + + private spawnRequestVisuals(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const room = Game.rooms[roomName] + if (!room) { + flag.setColor(COLOR_RED) + return + } - const spawnRequestsArgs = room.communeManager.spawnRequestsManager.run() + const headers = ['role', 'priority', 'cost', 'parts'] + const data: any[][] = [] - for (const requestArgs of spawnRequestsArgs) { - const spawnRequests = spawnRequestConstructorsByType[requestArgs.type](room, requestArgs) + const spawnRequestsArgs = room.communeManager.spawnRequestsManager.run() - for (const request of spawnRequests) { - const row: any[] = [] - row.push(requestArgs.role) - row.push(requestArgs.priority) - row.push(`${request.cost} / ${room.communeManager.nextSpawnEnergyAvailable}`) + for (const requestArgs of spawnRequestsArgs) { + const spawnRequests = spawnRequestConstructorsByType[requestArgs.type](room, requestArgs) - data.push(row) - } - } + for (const request of spawnRequests) { + const row: any[] = [] + row.push(requestArgs.role) + row.push(requestArgs.priority) + row.push(`${request.cost} / ${room.communeManager.nextSpawnEnergyAvailable}`) - const height = 3 + data.length - - Dashboard({ - config: { - room: room.name, - }, - widgets: [ - { - pos: { - x: 1, - y: 1, - }, - width: 47, - height, - widget: Rectangle({ - data: Table(() => ({ - data, - config: { - label: 'Spawn Requests', - headers, - }, - })), - }), - }, - ], - }) - } - - private labDataVisuals(flagName: string, flagNameParts: string[]) { - const flag = Game.flags[flagName] - const roomName = flagNameParts[1] || flag.pos.roomName - const room = Game.rooms[roomName] - if (!room) { - - flag.setColor(COLOR_RED) - return - } - - const headers = [ - 'Lab output', - 'Lab input 1', - 'Lab input 2', - 'Lab reverse', - ] - const data: any[][] = [] - - const labManager = room.communeManager.labManager - const row = [ - labManager.outputResource, - labManager.inputResources[0], - labManager.inputResources[1], - labManager.outputResource, - ] data.push(row) + } + } - const height = 3 + data.length - - Dashboard({ - config: { - room: room.name, - }, - widgets: [ - { - pos: { - x: 1, - y: 1, - }, - width: 47, - height, - widget: Rectangle({ - data: Table(() => ({ - data, - config: { - label: 'Lab Data', - headers, - }, - })), - }), - }, - ], - }) - } - - private roomLogisticsDataVisuals(flagName: string, flagNameParts: string[]) { - const flag = Game.flags[flagName] - const roomName = flagNameParts[1] || flag.pos.roomName - const room = Game.rooms[roomName] - if (!room) { - - flag.setColor(COLOR_RED) - return - } - - const headers = [ - 'type', - 'resourceType', - 'amount', - 'priority', - 'position', - ] - const data: any[][] = [] - - for (const key in room.roomLogisticsRequests) { - - const requestType = key as unknown as RoomLogisticsRequestTypes - const requests = room.roomLogisticsRequests[requestType] - for (const ID in requests) { - - const request = requests[ID] - const row: any[] = [ - request.type, - request.resourceType, - request.amount, - request.priority, - findObjectWithID(request.targetID).pos, - ] - data.push(row) - } - } + const height = 3 + data.length + + Dashboard({ + config: { + room: room.name, + }, + widgets: [ + { + pos: { + x: 1, + y: 1, + }, + width: 47, + height, + widget: Rectangle({ + data: Table(() => ({ + data, + config: { + label: 'Spawn Requests', + headers, + }, + })), + }), + }, + ], + }) + } + + private labDataVisuals(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const room = Game.rooms[roomName] + if (!room) { + flag.setColor(COLOR_RED) + return + } - const height = 3 + data.length - - Dashboard({ - config: { - room: room.name, - }, - widgets: [ - { - pos: { - x: 1, - y: 1, - }, - width: 47, - height, - widget: Rectangle({ - data: Table(() => ({ - data, - config: { - label: 'Room Logistics Requests', - headers, - }, - })), - }), - }, - ], - }) - } - - private workRequestVisuals(flagName: string, flagNameParts: string[]) { - const flag = Game.flags[flagName] - const roomName = flagNameParts[1] || flag.pos.roomName - const room = Game.rooms[roomName] - if (!room) { - - flag.setColor(COLOR_RED) - return - } + const headers = ['output', 'input 1', 'input 2', 'reverse', 'target amount'] + const data: any[][] = [] + + const labManager = room.communeManager.labManager + const row = [ + labManager.outputResource, + labManager.inputResources[0], + labManager.inputResources[1], + labManager.isReverse, + labManager.targetAmount, + ] + data.push(row) + + const height = 3 + data.length + + Dashboard({ + config: { + room: room.name, + }, + widgets: [ + { + pos: { + x: 1, + y: 1, + }, + width: 47, + height, + widget: Rectangle({ + data: Table(() => ({ + data, + config: { + label: 'Lab Data', + headers, + }, + })), + }), + }, + ], + }) + } + + private labVisuals(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const room = Game.rooms[roomName] + if (!room) { + flag.setColor(COLOR_RED) + return + } - const headers = [ - 'roomName', - 'static score', - 'dynamic score', - 'responder', - 'abandon' - ] - const data: any[][] = [] + const labManager = room.communeManager.labManager - const workRequests = Object.keys(Memory.workRequests).sort((a, b) => { - const aScore = (Memory.rooms[a][RoomMemoryKeys.score] + - Memory.rooms[a][RoomMemoryKeys.dynamicScore]) + const inputLabs = labManager.inputLabs + for (let i = 0; i < inputLabs.length; i++) { + const lab = inputLabs[i] - const bScore = (Memory.rooms[b][RoomMemoryKeys.score] + - Memory.rooms[b][RoomMemoryKeys.dynamicScore]) + room.visual.resource(labManager.inputResources[i], lab.pos.x, lab.pos.y) + } - return aScore - bScore - }) + const outputLabs = labManager.outputLabs + for (const lab of outputLabs) { - for (const requestRoomName of workRequests) { + room.visual.resource(labManager.outputResource, lab.pos.x, lab.pos.y) + } + } + + private roomLogisticsDataVisuals(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const room = Game.rooms[roomName] + if (!room) { + flag.setColor(COLOR_RED) + return + } - const roomMemory = Memory.rooms[requestRoomName] - const request = Memory.workRequests[requestRoomName] + const headers = ['type', 'resourceType', 'amount', 'priority', 'position'] + const data: any[][] = [] + + for (const key in room.roomLogisticsRequests) { + const requestType = key as unknown as RoomLogisticsRequestTypes + const requests = room.roomLogisticsRequests[requestType] + for (const ID in requests) { + const request = requests[ID] + const row: any[] = [ + request.type, + request.resourceType, + request.amount, + request.priority, + findObjectWithID(request.targetID).pos, + ] + data.push(row) + } + } - const row = [ - requestRoomName, - roomMemory[RoomMemoryKeys.score], - roomMemory[RoomMemoryKeys.dynamicScore], - request[WorkRequestKeys.responder], - request[WorkRequestKeys.abandon], - ] - data.push(row) - } + const height = 3 + data.length + + Dashboard({ + config: { + room: room.name, + }, + widgets: [ + { + pos: { + x: 1, + y: 1, + }, + width: 47, + height, + widget: Rectangle({ + data: Table(() => ({ + data, + config: { + label: 'Room Logistics Requests', + headers, + }, + })), + }), + }, + ], + }) + } + + private workRequestVisuals(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const room = Game.rooms[roomName] + if (!room) { + flag.setColor(COLOR_RED) + return + } - const height = 3 + data.length - - Dashboard({ - config: { - room: room.name, - }, - widgets: [ - { - pos: { - x: 1, - y: 1, - }, - width: 47, - height, - widget: Rectangle({ - data: Table(() => ({ - data, - config: { - label: 'Work Requests', - headers, - }, - })), - }), - }, - ], - }) - } - - private diagonalCoords(flagName: string, flagNameParts: string[]) { - const flag = Game.flags[flagName] - const roomName = flagNameParts[1] || flag.pos.roomName - const room = Game.rooms[roomName] - if (!room) { - - flag.setColor(COLOR_RED) - return - } + const headers = ['roomName', 'static score', 'dynamic score', 'responder', 'abandon'] + const data: any[][] = [] - const roomMemory = Memory.rooms[room.name] - if (!roomMemory || !roomMemory[RoomMemoryKeys.commune]) { + const workRequests = Object.keys(Memory.workRequests).sort((a, b) => { + const aScore = + Memory.rooms[a][RoomMemoryKeys.score] + Memory.rooms[a][RoomMemoryKeys.dynamicScore] - flag.setColor(COLOR_RED) - return - } + const bScore = + Memory.rooms[b][RoomMemoryKeys.score] + Memory.rooms[b][RoomMemoryKeys.dynamicScore] - const commune = Game.rooms[roomMemory[RoomMemoryKeys.commune]] - if (!commune) { + return aScore - bScore + }) - flag.setColor(COLOR_RED) - return - } + for (const requestRoomName of workRequests) { + const roomMemory = Memory.rooms[requestRoomName] + const request = Memory.workRequests[requestRoomName] - const diagonalCoords = roomNameUtils.diagonalCoords(room.name, commune) - room.visualizeCoordMap(diagonalCoords) + const row = [ + requestRoomName, + roomMemory[RoomMemoryKeys.score], + roomMemory[RoomMemoryKeys.dynamicScore], + request[WorkRequestKeys.responder], + request[WorkRequestKeys.abandon], + ] + data.push(row) } - private controllerStructure(flagName: string, flagNameParts: string[]) { - const flag = Game.flags[flagName] - const roomName = flagNameParts[1] || flag.pos.roomName - const room = Game.rooms[roomName] - if (!room) { - - flag.setColor(COLOR_RED) - return - } - - if (!room.communeManager) { + const height = 3 + data.length + + Dashboard({ + config: { + room: room.name, + }, + widgets: [ + { + pos: { + x: 1, + y: 1, + }, + width: 47, + height, + widget: Rectangle({ + data: Table(() => ({ + data, + config: { + label: 'Work Requests', + headers, + }, + })), + }), + }, + ], + }) + } + + private diagonalCoords(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const room = Game.rooms[roomName] + if (!room) { + flag.setColor(COLOR_RED) + return + } - flag.setColor(COLOR_RED) - return - } + const roomMemory = Memory.rooms[room.name] + if (!roomMemory || !roomMemory[RoomMemoryKeys.commune]) { + flag.setColor(COLOR_RED) + return + } - const controllerStructure = room.communeManager.upgradeStructure - if (!controllerStructure) { + const commune = Game.rooms[roomMemory[RoomMemoryKeys.commune]] + if (!commune) { + flag.setColor(COLOR_RED) + return + } - const centerUpgradePos = room.roomManager.centerUpgradePos - room.visual.text('X', centerUpgradePos) - return - } + const diagonalCoords = roomNameUtils.diagonalCoords(room.name, commune) + room.visualizeCoordMap(diagonalCoords) + } + + private controllerStructure(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const room = Game.rooms[roomName] + if (!room) { + flag.setColor(COLOR_RED) + return + } - // There is a controller structure + if (!room.communeManager) { + flag.setColor(COLOR_RED) + return + } - room.visual.text('CS', controllerStructure.pos) + const controllerStructure = room.communeManager.upgradeStructure + if (!controllerStructure) { + const centerUpgradePos = room.roomManager.centerUpgradePos + room.visual.text('X', centerUpgradePos) + return } - private creepUsedStore(flagName: string, flagNameParts: string[]) { - const flag = Game.flags[flagName] - const roomName = flagNameParts[1] || flag.pos.roomName - const room = Game.rooms[roomName] - if (!room) { + // There is a controller structure - flag.setColor(COLOR_RED) - return - } + room.visual.text('CS', controllerStructure.pos) + } - for (const creep of room.myCreeps) { + private creepUsedStore(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const room = Game.rooms[roomName] + if (!room) { + flag.setColor(COLOR_RED) + return + } - room.visual.text(creep.usedNextStore.toString(), creep.pos) - } + for (const creep of room.myCreeps) { + room.visual.text(creep.usedNextStore.toString(), creep.pos) } + } } export const flagManager = new FlagManager() diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index a3c7622a1..f89b1e508 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -68,7 +68,7 @@ import { CommuneUtils } from 'room/commune/communeUtils' import { RoomDataManager } from 'room/roomData' import { CommuneDataManager } from 'room/commune/communeData' import { MyCreepUtils } from 'room/creeps/myCreepUtils' -import { CreepMoveProcs } from 'room/creeps/creepMoveUtils' +import { CreepMoveProcs } from 'room/creeps/creepMoveProcs' export function profilerRegister() { // Classes diff --git a/src/room/commune/labs.ts b/src/room/commune/labs.ts index 46a5650f5..43059fc17 100644 --- a/src/room/commune/labs.ts +++ b/src/room/commune/labs.ts @@ -231,7 +231,7 @@ export class LabManager { public get outputLabs() { if (this._outputLabs) return this._outputLabs - let boostingLabs = Object.values(this.labsByBoost) + let boostingLabs = Object.values(this.labsByBoost || {}) return (this._outputLabs = this.communeManager.room.roomManager.structures.lab.filter( lab => !this.inputLabIDs.includes(lab.id) && !boostingLabs.includes(lab.id), @@ -336,19 +336,6 @@ export class LabManager { if (this.inputLabs.length < 2) return if (!this.outputLabs.length) return - if (global.settings.roomVisuals) { - this.communeManager.room.visual.resource( - this.inputResources[0], - this.inputLabs[0].pos.x, - this.inputLabs[0].pos.y, - ) - this.communeManager.room.visual.resource( - this.inputResources[1], - this.inputLabs[1].pos.x, - this.inputLabs[1].pos.y, - ) - } - if (randomTick(100)) delete this._deficits this.setCurrentReaction() this.createRoomLogisticsRequests() @@ -634,11 +621,11 @@ export class LabManager { for (const lab of this.communeManager.room.roomManager.structures.lab) { if (lab.mineralType !== resource) continue - amount += lab.mineralAmount + amount += lab.store.getUsedCapacity(lab.mineralType) } for (const name of this.communeManager.room.myCreepsByRole.hauler) { - amount += Game.creeps[name].store[resource] + amount += Game.creeps[name].store.getUsedCapacity(resource) } return amount diff --git a/src/room/creeps/creepMoveUtils.ts b/src/room/creeps/creepMoveProcs.ts similarity index 98% rename from src/room/creeps/creepMoveUtils.ts rename to src/room/creeps/creepMoveProcs.ts index 5f3f00d55..ada0b4e1e 100644 --- a/src/room/creeps/creepMoveUtils.ts +++ b/src/room/creeps/creepMoveProcs.ts @@ -116,7 +116,7 @@ export class CreepMoveProcs { // Second index pos = unpackPosAt(creepMemory[CreepMemoryKeys.path], firstIndex) - console.log(creepMemory[CreepMemoryKeys.path].length, creepMemory[CreepMemoryKeys.path]) + if (getRange(creep.pos, pos) === 1) { return pos } diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index 663c19d8b..579504097 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -1188,6 +1188,7 @@ Creep.prototype.roomLogisticsRequestManager = function () { // Delete the request if the target is fulfilled if (target.freeNextStore < request[CreepRoomLogisticsRequestKeys.amount]) { + if (Game.flags[FlagNames.debugCreepLogistics]) customLog('not enough free store', this.name + ', ' + request[CreepRoomLogisticsRequestKeys.target] + ', ' + target.freeNextStore + ' < ' + request[CreepRoomLogisticsRequestKeys.amount]) creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) return } @@ -1200,6 +1201,7 @@ Creep.prototype.roomLogisticsRequestManager = function () { request[CreepRoomLogisticsRequestKeys.amount], ) if (request[CreepRoomLogisticsRequestKeys.amount] <= 0) { + if (Game.flags[FlagNames.debugCreepLogistics]) customLog('not enough amount', this.name + ', ' + request[CreepRoomLogisticsRequestKeys.target] + ', ' + request[CreepRoomLogisticsRequestKeys.amount]) creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) return } @@ -1293,13 +1295,15 @@ Creep.prototype.findRoomLogisticsRequest = function (args) { log('FINDING REQ', bestRequest + ', ' + Array.from(types), { position: 1 }) */ let creepRequest: CreepRoomLogisticsRequest | 0 - + customLog('no request', this.name) if (!bestRequest) { creepRequest = this.createBackupStoringStructuresRoomLogisticsRequest( types, args?.resourceTypes, ) - if (!creepRequest) return Result.fail + customLog('try to find request', this.name + ', ' + creepRequest) + if (creepRequest === Result.fail) return Result.fail + } else { creepRequest = { [CreepRoomLogisticsRequestKeys.type]: bestRequest.type, @@ -1421,7 +1425,7 @@ Creep.prototype.findRoomLogisticsRequest = function (args) { Creep.prototype.findRoomLogisticsRequestTypes = function (args) { if (args && args.types) { if (args.types.has(RoomLogisticsRequestTypes.transfer) && this.hasNonEnergyResource()) { - if (args && args.noDelivery) return Result.fail + /* if (args && args.noDelivery) return Result.fail */ this.noDelivery = true return new Set([RoomLogisticsRequestTypes.transfer]) @@ -1583,8 +1587,10 @@ Creep.prototype.createBackupStoringStructuresRoomLogisticsRequest = function ( ) { if (this.room.name !== this.commune.name) return Result.fail - if (types.has(RoomLogisticsRequestTypes.transfer)) - return this.createBackupStoringStructuresRoomLogisticsRequestTransfer() + if (types.has(RoomLogisticsRequestTypes.transfer)) { + const result = this.createBackupStoringStructuresRoomLogisticsRequestTransfer() + if (result !== Result.fail) return result + } if (this.role === 'hauler') return Result.fail return this.createBackupStoringStructuresRoomLogisticsRequestWithdraw(resourceTypes) @@ -1594,11 +1600,12 @@ Creep.prototype.createBackupStoringStructuresRoomLogisticsRequestTransfer = func const storingStructures = this.commune.communeManager.storingStructures if (!storingStructures.length) return Result.fail + const nextStore = this.nextStore let resourceType: ResourceConstant - for (const key in this.store) { + for (const key in nextStore) { if (key === RESOURCE_ENERGY) continue - if (this.nextStore[key as ResourceConstant] <= 0) continue + if (nextStore[key as ResourceConstant] <= 0) continue resourceType = key as ResourceConstant break @@ -1607,7 +1614,7 @@ Creep.prototype.createBackupStoringStructuresRoomLogisticsRequestTransfer = func if (!resourceType) return Result.fail const storingStructure = storingStructures.find( - structure => structure.freeReserveStore >= this.nextStore[resourceType], + structure => structure.freeReserveStore >= nextStore[resourceType], ) if (!storingStructure) return Result.fail /* this.room.visual.text((this.nextStore[resourceType]).toString(), this.pos.x, this.pos.y, { color: customColors.red }) */ @@ -1615,7 +1622,7 @@ Creep.prototype.createBackupStoringStructuresRoomLogisticsRequestTransfer = func [CreepRoomLogisticsRequestKeys.type]: RoomLogisticsRequestTypes.transfer, [CreepRoomLogisticsRequestKeys.target]: storingStructure.id, [CreepRoomLogisticsRequestKeys.resourceType]: resourceType, - [CreepRoomLogisticsRequestKeys.amount]: this.nextStore[resourceType], + [CreepRoomLogisticsRequestKeys.amount]: nextStore[resourceType], } } @@ -1702,8 +1709,10 @@ Creep.prototype.runRoomLogisticsRequestAdvanced = function (args) { // If we already moved a resource this tick, then wait (presumably) until the next one to take any resoure-moving action if (this.movedResource) { + if (Game.flags[FlagNames.debugCreepLogistics]) { + this.room.visual.text('MR', this.pos) + } - this.room.visual.text('MR', this.pos) return Result.noAction } diff --git a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts index d1a8cf801..d53063eca 100644 --- a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts @@ -45,7 +45,7 @@ import { } from 'other/codec' import { customLog } from 'utils/logging' import { creepUtils } from '../creepUtils' -import { creepMoveProcs } from '../creepMoveUtils' +import { creepMoveProcs } from '../creepMoveProcs' PowerCreep.prototype.createMoveRequestByPath = Creep.prototype.createMoveRequestByPath = function ( args, diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index 928c83270..80df7bf00 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -574,6 +574,9 @@ export class Hauler extends Creep { }, }) + // If we tried to respond but weren't able to do so in a single tick, then we should wait to try again next tick + if (Memory.creeps[this.name][CreepMemoryKeys.roomLogisticsRequests].length) return true + // We haven't emptied ourselves yet if (!this.needsResources()) { diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index 767262b31..0f8bf2b65 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -1682,14 +1682,14 @@ Room.prototype.createRoomLogisticsRequest = function (args) { if (Game.flags[FlagNames.debugRoomLogistics]) { if (args.type === RoomLogisticsRequestTypes.offer) { - this.visual.text('O ' + amount.toString(), args.target.pos.x, args.target.pos.y + 0.5) - this.visual.text(args.priority.toString(), args.target.pos) + this.visual.text('O ' + amount.toString(), args.target.pos.x, args.target.pos.y + 0.5, {font: '0.3'}) + this.visual.text(args.priority.toString(), args.target.pos, {font: '0.3'}) } else if (args.type === RoomLogisticsRequestTypes.transfer) { - this.visual.text('T ' + amount.toString(), args.target.pos.x, args.target.pos.y + 0.5) - this.visual.text(args.priority.toString(), args.target.pos) + this.visual.text('T ' + amount.toString(), args.target.pos.x, args.target.pos.y + 0.5, {font: '0.3'}) + this.visual.text(args.priority.toString(), args.target.pos, {font: '0.3'}) } else if (args.type === RoomLogisticsRequestTypes.withdraw) { - this.visual.text('W ' + amount.toString(), args.target.pos.x, args.target.pos.y + 0.5) - this.visual.text(args.priority.toString(), args.target.pos) + this.visual.text('W ' + amount.toString(), args.target.pos.x, args.target.pos.y + 0.5, {font: '0.3'}) + this.visual.text(args.priority.toString(), args.target.pos, {font: '0.3'}) } } @@ -1704,8 +1704,10 @@ Room.prototype.createRoomLogisticsRequest = function (args) { resourceType: args.resourceType, amount: amount, priority: args.priority, - onlyFull: true || args.onlyFull, - noReserve: !this.roomManager.advancedLogistics || undefined, // Don't reserve if advancedLogistics is disabled + // onlyFull by default true + onlyFull: args.onlyFull /* ?? true */, + // Don't reserve if advancedLogistics is disabled + noReserve: !this.roomManager.advancedLogistics || undefined, }) } From a9614db531d24692413e048a241a19a864aa4638 Mon Sep 17 00:00:00 2001 From: Pieter Date: Thu, 4 Jan 2024 09:20:33 +0000 Subject: [PATCH 059/190] EnergyOutputTransactionCosts addition instead of set --- src/room/commune/terminal/marketUtils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/room/commune/terminal/marketUtils.ts b/src/room/commune/terminal/marketUtils.ts index fc259062d..19b611e7b 100644 --- a/src/room/commune/terminal/marketUtils.ts +++ b/src/room/commune/terminal/marketUtils.ts @@ -99,7 +99,7 @@ export class MarketUtils { const roomsStats = Memory.stats.rooms[room.name] const transactionCost = Game.market.calcTransactionCost(dealAmount, room.name, order.roomName) - roomsStats[RoomStatsKeys.EnergyOutputTransactionCosts] = transactionCost + roomsStats[RoomStatsKeys.EnergyOutputTransactionCosts] += transactionCost return Result.success } From 602ecf0a3e7267833ae4789049e6b96890ba39c4 Mon Sep 17 00:00:00 2001 From: Pieter Brandsen Date: Thu, 4 Jan 2024 18:35:22 +0100 Subject: [PATCH 060/190] Use more actual deal amount --- src/room/commune/terminal/marketUtils.ts | 276 +++++++++++------------ 1 file changed, 135 insertions(+), 141 deletions(-) diff --git a/src/room/commune/terminal/marketUtils.ts b/src/room/commune/terminal/marketUtils.ts index 19b611e7b..a8d15ccee 100644 --- a/src/room/commune/terminal/marketUtils.ts +++ b/src/room/commune/terminal/marketUtils.ts @@ -6,173 +6,167 @@ import { marketManager } from 'international/market/marketOrders' import { Result, RoomStatsKeys } from 'international/constants' export class MarketUtils { - advancedSell(room: Room, resourceType: ResourceConstant, amount: number) { - const mySpecificOrders = - marketManager.myOrders[room.name]?.[ORDER_SELL][resourceType] || [] + advancedSell(room: Room, resourceType: ResourceConstant, amount: number) { + const mySpecificOrders = marketManager.myOrders[room.name]?.[ORDER_SELL][resourceType] || [] - for (const order of mySpecificOrders) amount -= order.remainingAmount + for (const order of mySpecificOrders) amount -= order.remainingAmount - if (amount <= 0) return false + if (amount <= 0) return false - const order = marketManager.getShardBuyOrder(room.name, resourceType, amount) + const order = marketManager.getShardBuyOrder(room.name, resourceType, amount) - if (order !== Result.fail) { - const dealAmount = this.findLargestTransactionAmount( - room.terminal.store.energy * 0.75, - amount, - room.name, - order.roomName, - ) - const result = Game.market.deal( - order.id, - Math.min(dealAmount, order.remainingAmount), - room.name, - ) - if (result !== OK) return Result.fail + if (order !== Result.fail) { + const dealAmount = this.findLargestTransactionAmount( + room.terminal.store.energy * 0.75, + amount, + room.name, + order.roomName, + ) + const actualDealAmount = Math.min(dealAmount, order.remainingAmount) + const result = Game.market.deal(order.id, actualDealAmount, room.name) + if (result !== OK) return Result.fail - // Success + // Success - const roomsStats = Memory.stats.rooms[room.name] + const roomsStats = Memory.stats.rooms[room.name] - const transactionCost = Game.market.calcTransactionCost(dealAmount, room.name, order.roomName) - roomsStats[RoomStatsKeys.EnergyOutputTransactionCosts] = transactionCost + const transactionCost = Game.market.calcTransactionCost( + actualDealAmount, + room.name, + order.roomName, + ) + roomsStats[RoomStatsKeys.EnergyOutputTransactionCosts] += transactionCost - return Result.success - } - - if (mySpecificOrders.length) return false - if (Game.market.credits < collectiveManager.minCredits) return false - if (marketManager.myOrdersCount === MARKET_MAX_ORDERS) return false - - const orders = marketManager.getOrders(resourceType, ORDER_SELL) - if (!orders) return false - - const price = Math.max( - Math.min(...orders.map(o => o.price)) * 0.99, - marketManager.getAvgPrice(resourceType) * 0.8, - ) - - const result = Game.market.createOrder({ - roomName: room.name, - type: ORDER_SELL, - resourceType, - price, - totalAmount: amount, - }) - if (result !== OK) return Result.fail - - // Success - - return Result.success + return Result.success } - advancedBuy(room: Room, resourceType: ResourceConstant, amount: number) { - const mySpecificOrders = - marketManager.myOrders[room.name]?.[ORDER_BUY][resourceType] || [] - for (const order of mySpecificOrders) amount -= order.remainingAmount + if (mySpecificOrders.length) return false + if (Game.market.credits < collectiveManager.minCredits) return false + if (marketManager.myOrdersCount === MARKET_MAX_ORDERS) return false - if (amount <= 0) return false + const orders = marketManager.getOrders(resourceType, ORDER_SELL) + if (!orders) return false - const order = marketManager.getShardSellOrder( - room.name, - resourceType, - amount - ) + const price = Math.max( + Math.min(...orders.map(o => o.price)) * 0.99, + marketManager.getAvgPrice(resourceType) * 0.8, + ) - if (order !== Result.fail) { - const dealAmount = this.findLargestTransactionAmount( - room.terminal.store.energy * 0.75, - amount, - room.name, - order.roomName, - ) + const result = Game.market.createOrder({ + roomName: room.name, + type: ORDER_SELL, + resourceType, + price, + totalAmount: amount, + }) + if (result !== OK) return Result.fail - const result = Game.market.deal( - order.id, - Math.min(dealAmount, order.remainingAmount), - room.name, - ) - if (result !== OK) return Result.fail + // Success - // Success + return Result.success + } + advancedBuy(room: Room, resourceType: ResourceConstant, amount: number) { + const mySpecificOrders = marketManager.myOrders[room.name]?.[ORDER_BUY][resourceType] || [] - const roomsStats = Memory.stats.rooms[room.name] + for (const order of mySpecificOrders) amount -= order.remainingAmount - const transactionCost = Game.market.calcTransactionCost(dealAmount, room.name, order.roomName) - roomsStats[RoomStatsKeys.EnergyOutputTransactionCosts] += transactionCost + if (amount <= 0) return false - return Result.success - } + const order = marketManager.getShardSellOrder(room.name, resourceType, amount) - if (mySpecificOrders.length) return false - if (marketManager.myOrdersCount === MARKET_MAX_ORDERS) return false + if (order !== Result.fail) { + const dealAmount = this.findLargestTransactionAmount( + room.terminal.store.energy * 0.75, + amount, + room.name, + order.roomName, + ) - const orders = marketManager.getOrders(resourceType, ORDER_BUY) - if (!orders) return false + const result = Game.market.deal( + order.id, + Math.min(dealAmount, order.remainingAmount), + room.name, + ) + if (result !== OK) return Result.fail - const price = Math.min( - Math.max(...orders.map(o => o.price)) * 1.01, - marketManager.getAvgPrice(resourceType) * 1.2, - ) + // Success - const result = Game.market.createOrder({ - roomName: room.name, - type: ORDER_BUY, - resourceType, - price, - totalAmount: amount, - }) - if (result !== OK) return Result.fail + const roomsStats = Memory.stats.rooms[room.name] - // Success + const transactionCost = Game.market.calcTransactionCost(dealAmount, room.name, order.roomName) + roomsStats[RoomStatsKeys.EnergyOutputTransactionCosts] += transactionCost - return Result.success - } - /** - * Finds the largest possible transaction amount given a budget and starting amount - * @param budget The number of energy willing to be invested in the trade - * @param amount The number of resources that would like to be traded - * @param roomName1 - * @param roomName2 - * @returns - */ - findLargestTransactionAmount( - budget: number, - amount: number, - roomName1: string, - roomName2: string, - ) { - budget = Math.max(budget, 1) - - // So long as the the transactions cost is more than the budget - - while (Game.market.calcTransactionCost(amount, roomName1, roomName2) >= budget) { - // Decrease amount exponentially - - amount = (amount - 1) * 0.8 - } - - return Math.floor(amount) + return Result.success } - advancedDeal(room: Room, order: Order, amount: number) { - - const dealAmount = this.findLargestTransactionAmount( - room.terminal.store.energy * 0.75, - amount, - room.name, - order.roomName, - ) - - const result = Game.market.deal( - order.id, - Math.min(dealAmount, order.remainingAmount), - room.name, - ) - if (result !== OK) return Result.fail - - // the deal was an apparent success - return Result.success + + if (mySpecificOrders.length) return false + if (marketManager.myOrdersCount === MARKET_MAX_ORDERS) return false + + const orders = marketManager.getOrders(resourceType, ORDER_BUY) + if (!orders) return false + + const price = Math.min( + Math.max(...orders.map(o => o.price)) * 1.01, + marketManager.getAvgPrice(resourceType) * 1.2, + ) + + const result = Game.market.createOrder({ + roomName: room.name, + type: ORDER_BUY, + resourceType, + price, + totalAmount: amount, + }) + if (result !== OK) return Result.fail + + // Success + + return Result.success + } + /** + * Finds the largest possible transaction amount given a budget and starting amount + * @param budget The number of energy willing to be invested in the trade + * @param amount The number of resources that would like to be traded + * @param roomName1 + * @param roomName2 + * @returns + */ + findLargestTransactionAmount( + budget: number, + amount: number, + roomName1: string, + roomName2: string, + ) { + budget = Math.max(budget, 1) + + // So long as the the transactions cost is more than the budget + + while (Game.market.calcTransactionCost(amount, roomName1, roomName2) >= budget) { + // Decrease amount exponentially + + amount = (amount - 1) * 0.8 } + + return Math.floor(amount) + } + advancedDeal(room: Room, order: Order, amount: number) { + const dealAmount = this.findLargestTransactionAmount( + room.terminal.store.energy * 0.75, + amount, + room.name, + order.roomName, + ) + + const result = Game.market.deal( + order.id, + Math.min(dealAmount, order.remainingAmount), + room.name, + ) + if (result !== OK) return Result.fail + + // the deal was an apparent success + return Result.success + } } export const marketUtils = new MarketUtils() From 22ef2998409a14c3b163220dbc867bff683180ff Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Thu, 4 Jan 2024 10:56:25 -0800 Subject: [PATCH 061/190] reverse funnel requirements oops --- src/room/commune/spawning/spawnRequests.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/room/commune/spawning/spawnRequests.ts b/src/room/commune/spawning/spawnRequests.ts index 9b83afe75..38eff807c 100644 --- a/src/room/commune/spawning/spawnRequests.ts +++ b/src/room/commune/spawning/spawnRequests.ts @@ -871,8 +871,8 @@ export class SpawnRequestsManager { if (this.communeManager.room.terminal && this.communeManager.room.controller.level >= 6) { const funnelingRoomNames = collectiveManager.funnelingRoomNames if ( - funnelingRoomNames.size > 0 && - funnelingRoomNames.has(this.communeManager.room.name) + funnelingRoomNames.size === 0 || + !funnelingRoomNames.has(this.communeManager.room.name) ) { return false } From b2e507f45f59774086ae9394dec008bb56852bcd Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Thu, 4 Jan 2024 13:37:09 -0800 Subject: [PATCH 062/190] improve hubHauler, debug visuals --- src/international/constants.ts | 1 - src/international/flags.ts | 123 +++++++++++++++++- src/international/market/marketOrders.ts | 6 +- src/room/commune/communeUtils.ts | 11 +- .../creeps/roleManagers/commune/hubHauler.ts | 37 +++--- src/room/roomFunctions.ts | 12 +- src/room/roomVisuals.ts | 115 ---------------- src/settingsDefault.ts | 12 -- src/types/roomRequests.ts | 4 + 9 files changed, 159 insertions(+), 162 deletions(-) diff --git a/src/international/constants.ts b/src/international/constants.ts index 60a502ae1..14ddaa120 100644 --- a/src/international/constants.ts +++ b/src/international/constants.ts @@ -477,7 +477,6 @@ export const roomLogisticsRoles: Set = new Set([ export const communeCreepRoles: Set = new Set([ 'sourceHarvester', - 'hauler', 'builder', 'maintainer', 'controllerUpgrader', diff --git a/src/international/flags.ts b/src/international/flags.ts index 6b3d41354..9ca3460d5 100644 --- a/src/international/flags.ts +++ b/src/international/flags.ts @@ -7,6 +7,7 @@ import { WorkRequestKeys, customColors, ourImpassibleStructuresSet, + packedPosLength, } from './constants' import { collectiveManager } from './collective' import { CombatRequestTypes } from 'types/internationalRequests' @@ -583,7 +584,6 @@ export class FlagManager { const outputLabs = labManager.outputLabs for (const lab of outputLabs) { - room.visual.resource(labManager.outputResource, lab.pos.x, lab.pos.y) } } @@ -772,6 +772,127 @@ export class FlagManager { room.visual.text(creep.usedNextStore.toString(), creep.pos) } } + + private remoteDataVisuals(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const room = Game.rooms[roomName] + if (!room || !room.communeManager) { + flag.setColor(COLOR_RED) + return + } + + const headers = [ + 'room', + 'sourceIndex', + '📈', + '⚡⛏️', + 'hauler', + '⚡', + 'Δ⚡', + '⚡Reserved', + 'reserver', + 'coreAttacker', + '❌', + '🛑', + ] + const data: any[][] = [] + + for (const remoteInfo of room.roomManager.remoteSourceIndexesByEfficacy) { + const splitRemoteInfo = remoteInfo.split(' ') + const remoteName = splitRemoteInfo[0] + + const remoteMemory = Memory.rooms[remoteName] + if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) continue + if (remoteMemory[RoomMemoryKeys.commune] !== room.roomManager.room.name) continue + + const sourceIndex = parseInt(splitRemoteInfo[1]) as 0 | 1 + const pathType = room.communeManager.remoteResourcePathType + const row: any[] = [] + + row.push(remoteName) + row.push(sourceIndex) + if (remoteMemory[pathType][sourceIndex]) + row.push(remoteMemory[pathType][sourceIndex].length / packedPosLength) + else row.push('unknown') + row.push(remoteMemory[RoomMemoryKeys.remoteSourceHarvesters][sourceIndex]) + row.push(remoteMemory[RoomMemoryKeys.haulers][sourceIndex]) + row.push(remoteMemory[RoomMemoryKeys.remoteSourceCredit][sourceIndex].toFixed(2)) + if (remoteMemory[RoomMemoryKeys.remoteSourceCreditChange][sourceIndex] !== undefined) + row.push(remoteMemory[RoomMemoryKeys.remoteSourceCreditChange][sourceIndex].toFixed(2)) + else row.push('unknown') + row.push( + remoteMemory[RoomMemoryKeys.remoteSourceCreditReservation][sourceIndex] + + '/' + + Math.round( + (remoteMemory[pathType][sourceIndex].length / packedPosLength) * + remoteMemory[RoomMemoryKeys.remoteSourceCreditChange][sourceIndex], + ) * + 2, + ) + row.push(remoteMemory[RoomMemoryKeys.remoteReservers]) + row.push( + remoteMemory[RoomMemoryKeys.remoteCoreAttacker] || + remoteMemory[RoomMemoryKeys.remoteCoreAttacker] + '', + ) + row.push( + remoteMemory[RoomMemoryKeys.abandonRemote] || + remoteMemory[RoomMemoryKeys.abandonRemote] + '', + ) + row.push(remoteMemory[RoomMemoryKeys.disable] ? 'OFF' : 'ON') + + data.push(row) + } + + const height = 3 + data.length + + Dashboard({ + config: { + room: room.name, + }, + widgets: [ + { + pos: { + x: 1, + y: 1, + }, + width: 47, + height, + widget: Rectangle({ + data: Table(() => ({ + data, + config: { + label: 'Remotes', + headers, + }, + })), + }), + }, + ], + }) + } + + private baseVisuals(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const room = Game.rooms[roomName] + if (!room || !room.communeManager) { + flag.setColor(COLOR_RED) + return + } + + const roomMemory = Memory.rooms[room.name] + if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.commune) { + flag.setColor(COLOR_RED) + return + } + if (!roomMemory[RoomMemoryKeys.communePlanned]) { + flag.setColor(COLOR_RED) + return + } + + room.communeManager.constructionManager.visualize() + } } export const flagManager = new FlagManager() diff --git a/src/international/market/marketOrders.ts b/src/international/market/marketOrders.ts index b6661a297..136d94e09 100644 --- a/src/international/market/marketOrders.ts +++ b/src/international/market/marketOrders.ts @@ -1,8 +1,10 @@ -import { findHighestScore, randomTick, utils } from 'utils/utils' +import { findHighestScore, randomIntRange, randomTick, utils } from 'utils/utils' import { PlayerMemoryKeys, Result, RoomMemoryKeys } from '../constants' import { collectiveManager } from '../collective' import { customLog } from 'utils/logging' +const optimizeOrdersInterval = randomIntRange(900, 1000) + export class MarketManager { run() { this._myOrders = undefined @@ -14,7 +16,7 @@ export class MarketManager { this.resourceHistory = {} } - if (utils.isTickInterval(1000)) { + if (utils.isTickInterval(optimizeOrdersInterval)) { this.optimizeMyOrders() } diff --git a/src/room/commune/communeUtils.ts b/src/room/commune/communeUtils.ts index 06b116182..85b78d543 100644 --- a/src/room/commune/communeUtils.ts +++ b/src/room/commune/communeUtils.ts @@ -142,9 +142,12 @@ export class CommuneUtils { // Container if (upgradeStructure.structureType === STRUCTURE_CONTAINER) { - return (maxUpgradeStrength = + maxUpgradeStrength = upgradeStructure.store.getCapacity() / - (4 + room.memory[RoomMemoryKeys.upgradePath].length / packedPosLength)) + (4 + room.memory[RoomMemoryKeys.upgradePath].length / packedPosLength) + + data.maxUpgradeStrength = maxUpgradeStrength + return maxUpgradeStrength } // Link @@ -157,10 +160,10 @@ export class CommuneUtils { maxUpgradeStrength = 0 if (hubLink && hubLink.isRCLActionable) { - const range = getRange(upgradeStructure.pos, hubLink.pos) + // Add a bit of extra range because of inherent limitations of withdrawing and transferring + const range = getRange(upgradeStructure.pos, hubLink.pos) + 3 // Increase strength by throughput - maxUpgradeStrength += findLinkThroughput(range) * 0.7 } diff --git a/src/room/creeps/roleManagers/commune/hubHauler.ts b/src/room/creeps/roleManagers/commune/hubHauler.ts index d4bc07f49..c2e8f48fc 100644 --- a/src/room/creeps/roleManagers/commune/hubHauler.ts +++ b/src/room/creeps/roleManagers/commune/hubHauler.ts @@ -139,31 +139,27 @@ export class HubHauler extends Creep { if (!terminal) return false // If the storage is sufficiently full - - if (storage.freeNextStore < this.store.getCapacity()) return false + if (storage.store.getFreeCapacity() < this.store.getCapacity()) return false // If the terminal exists and isn't power disabled - if (terminal.effectsData.get(PWR_DISRUPT_TERMINAL)) return false for (const key in terminal.store) { const resourceType = key as ResourceConstant // If there is not sufficient resources to justify moving - if (terminal.store[resourceType] < this.store.getCapacity()) continue - // If the terminal is sufficiently balanced compared to the storage - + // If the weighted storage store is more than the terminal's, stop if ( - terminal.store[resourceType] < - storage.store[resourceType] * 0.3 + this.store.getCapacity() + storage.store[resourceType] / 3 > + terminal.store[resourceType] + this.store.getCapacity() * 2 ) continue this.message += 'RST ' + resourceType - let amount = this.freeNextStore + let amount = this.store.getFreeCapacity() this.createCreepRoomLogisticsRequest( RoomLogisticsRequestTypes.withdraw, @@ -184,6 +180,7 @@ export class HubHauler extends Creep { } /** + * storage -> terminal * @returns If a reservation was made or not */ reserveTerminalTransfer?(): boolean { @@ -195,27 +192,24 @@ export class HubHauler extends Creep { if (!terminal) return false // If the terminal is sufficiently full - - if (terminal.freeNextStore < this.store.getCapacity()) return false + if (terminal.store.getFreeCapacity() < this.store.getCapacity()) return false for (const key in storage.store) { const resourceType = key as ResourceConstant // If there is not sufficient resources to justify moving - if (storage.store[resourceType] < this.store.getCapacity()) continue - // If the storage is sufficiently balanced compared to the storage - + // If the weighted storage store is less than the terminal's, stop if ( - storage.store[resourceType] * 0.3 < - terminal.store[resourceType] + this.store.getCapacity() + storage.store[resourceType] / 3 + this.store.getCapacity() * 2 < + terminal.store[resourceType] ) continue this.message += 'RTT ' + resourceType - let amount = this.freeNextStore + let amount = this.store.getFreeCapacity() this.createCreepRoomLogisticsRequest( RoomLogisticsRequestTypes.withdraw, @@ -303,13 +297,12 @@ export class HubHauler extends Creep { if (!hubLink) return false // If there is a sufficient cooldown (there is no point filling a link that can do nothing) - if (hubLink.cooldown >= 6) return false // If there is unsufficient space to justify a fill - - if (hubLink.store.getCapacity(RESOURCE_ENERGY) * linkSendThreshold < hubLink.store.energy) + if (hubLink.store.getCapacity(RESOURCE_ENERGY) * linkSendThreshold < hubLink.store.getUsedCapacity(RESOURCE_ENERGY)) { return false + } const { controllerLink } = room.communeManager const fastFillerLink = this.room.roomManager.fastFillerLink @@ -327,7 +320,7 @@ export class HubHauler extends Creep { ) return false - const amount = Math.min(this.freeNextStore, hubLink.store.getFreeCapacity(RESOURCE_ENERGY)) + const amount = Math.min(this.store.getFreeCapacity(), hubLink.store.getFreeCapacity(RESOURCE_ENERGY)) // Find a provider @@ -345,7 +338,7 @@ export class HubHauler extends Creep { RoomLogisticsRequestTypes.transfer, hubLink.id, Math.min( - this.freeNextStore + this.store.energy, + this.freeNextStore + this.store.getUsedCapacity(RESOURCE_ENERGY), hubLink.store.getFreeCapacity(RESOURCE_ENERGY), ), ) diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index 0f8bf2b65..6e2e280d2 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -1616,16 +1616,18 @@ Room.prototype.createPowerTask = function (target, powerType, priority) { } Room.prototype.highestWeightedStoringStructures = function (resourceType) { - if (!this.storage && this.terminal) return false + if (!this.storage && !this.terminal) return false if (!this.storage) return this.terminal if (!this.terminal) return this.storage if ( - this.storage.store.getUsedCapacity(resourceType) * 3 > - this.terminal.store.getUsedCapacity(resourceType) - ) - return this.storage + this.storage.store.getUsedCapacity(resourceType) / 3 > + this.terminal.store.getUsedCapacity(resourceType) + ) { + return this.storage + } + return this.terminal } diff --git a/src/room/roomVisuals.ts b/src/room/roomVisuals.ts index bc72cf9cd..f68209bc0 100644 --- a/src/room/roomVisuals.ts +++ b/src/room/roomVisuals.ts @@ -29,8 +29,6 @@ export class RoomVisualsManager { public run() { this.roomVisuals() - this.baseVisuals() - this.dataVisuals() } private roomVisuals() { @@ -197,24 +195,6 @@ export class RoomVisualsManager { } } - private baseVisuals() { - if (!global.settings.baseVisuals) return - - const roomMemory = Memory.rooms[this.roomManager.room.name] - if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.commune) return - if (!roomMemory[RoomMemoryKeys.communePlanned]) return - - this.roomManager.room.communeManager.constructionManager.visualize() - } - - private dataVisuals() { - if (!global.settings.dataVisuals) return - - if (!collectiveManager.communes.has(this.roomManager.room.name)) return - - this.remoteDataVisuals(this.statDataVisuals(this.generalDataVisuals(1))) - } - public internationalDataVisuals() { this.internationalAllyWorkRequestsDataVisuals( this.internationalAllyCombatRequestsDataVisuals( @@ -756,99 +736,4 @@ export class RoomVisualsManager { } requestDataVisuals(y: number) {} - - private remoteDataVisuals(y: number) { - const headers = [ - 'room', - 'sourceIndex', - '📈', - '⚡⛏️', - 'hauler', - '⚡', - 'Δ⚡', - '⚡Reserved', - 'reserver', - 'coreAttacker', - '❌', - '🛑', - ] - const data: any[][] = [] - - for (const remoteInfo of this.roomManager.remoteSourceIndexesByEfficacy) { - const splitRemoteInfo = remoteInfo.split(' ') - const remoteName = splitRemoteInfo[0] - - const remoteMemory = Memory.rooms[remoteName] - if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) continue - if (remoteMemory[RoomMemoryKeys.commune] !== this.roomManager.room.name) continue - - const sourceIndex = parseInt(splitRemoteInfo[1]) as 0 | 1 - const pathType = this.roomManager.room.communeManager.remoteResourcePathType - const row: any[] = [] - - row.push(remoteName) - row.push(sourceIndex) - if (remoteMemory[pathType][sourceIndex]) - row.push(remoteMemory[pathType][sourceIndex].length / packedPosLength) - else row.push('unknown') - row.push(remoteMemory[RoomMemoryKeys.remoteSourceHarvesters][sourceIndex]) - row.push(remoteMemory[RoomMemoryKeys.haulers][sourceIndex]) - row.push(remoteMemory[RoomMemoryKeys.remoteSourceCredit][sourceIndex].toFixed(2)) - if (remoteMemory[RoomMemoryKeys.remoteSourceCreditChange][sourceIndex] !== undefined) - row.push( - remoteMemory[RoomMemoryKeys.remoteSourceCreditChange][sourceIndex].toFixed(2), - ) - else row.push('unknown') - row.push( - remoteMemory[RoomMemoryKeys.remoteSourceCreditReservation][sourceIndex] + - '/' + - Math.round( - (remoteMemory[pathType][sourceIndex].length / packedPosLength) * - remoteMemory[RoomMemoryKeys.remoteSourceCreditChange][sourceIndex], - ) * - 2, - ) - row.push(remoteMemory[RoomMemoryKeys.remoteReservers]) - row.push( - remoteMemory[RoomMemoryKeys.remoteCoreAttacker] || - remoteMemory[RoomMemoryKeys.remoteCoreAttacker] + '', - ) - row.push( - remoteMemory[RoomMemoryKeys.abandonRemote] || - remoteMemory[RoomMemoryKeys.abandonRemote] + '', - ) - row.push(remoteMemory[RoomMemoryKeys.disable] ? 'OFF' : 'ON') - - data.push(row) - } - - const height = 3 + data.length - - Dashboard({ - config: { - room: this.roomManager.room.name, - }, - widgets: [ - { - pos: { - x: 1, - y, - }, - width: 47, - height, - widget: Rectangle({ - data: Table(() => ({ - data, - config: { - label: 'Remotes', - headers, - }, - })), - }), - }, - ], - }) - - return y + height - } } diff --git a/src/settingsDefault.ts b/src/settingsDefault.ts index 2ead15bbc..dc6906f6e 100644 --- a/src/settingsDefault.ts +++ b/src/settingsDefault.ts @@ -9,16 +9,6 @@ export interface Settings { */ roomVisuals: boolean - /** - * Wether the bot should generate base room visuals - */ - baseVisuals: boolean - - /** - * Wether or not to generate data visuals - */ - dataVisuals: boolean - /** * Wether the bot should generate map visuals */ @@ -117,8 +107,6 @@ export interface Settings { export const defaultSettings: Settings = { breakingVersion: 122, roomVisuals: false, - baseVisuals: false, - dataVisuals: false, mapVisuals: false, allies: [ 'MarvinTMB' diff --git a/src/types/roomRequests.ts b/src/types/roomRequests.ts index 4ef29defd..bc32290c5 100644 --- a/src/types/roomRequests.ts +++ b/src/types/roomRequests.ts @@ -42,6 +42,10 @@ export interface RoomLogisticsRequest { * Wether the responder should interact with reserveStore of the target */ noReserve?: boolean + /** + * If true, responders have to be in range 1 on acceptance of the task + */ + passive?: boolean // /** // * The estimated income, positive or negative that is expected per tick for the request target // */ From cf46a82d0b6e22cd88ab4672989c4be7f46601cc Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Thu, 4 Jan 2024 14:03:44 -0800 Subject: [PATCH 063/190] hubHauler back and forth improvement --- src/room/creeps/roleManagers/commune/hubHauler.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/room/creeps/roleManagers/commune/hubHauler.ts b/src/room/creeps/roleManagers/commune/hubHauler.ts index c2e8f48fc..891ad74f6 100644 --- a/src/room/creeps/roleManagers/commune/hubHauler.ts +++ b/src/room/creeps/roleManagers/commune/hubHauler.ts @@ -152,8 +152,8 @@ export class HubHauler extends Creep { // If the weighted storage store is more than the terminal's, stop if ( - storage.store[resourceType] / 3 > - terminal.store[resourceType] + this.store.getCapacity() * 2 + storage.store[resourceType] / 3 + this.store.getCapacity() * 2 > + terminal.store[resourceType] ) continue @@ -202,8 +202,8 @@ export class HubHauler extends Creep { // If the weighted storage store is less than the terminal's, stop if ( - storage.store[resourceType] / 3 + this.store.getCapacity() * 2 < - terminal.store[resourceType] + storage.store[resourceType] / 3 < + terminal.store[resourceType] + this.store.getCapacity() * 2 ) continue From 1fd1a6066a6cef20ebaddfd01c162d8243990292 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Thu, 4 Jan 2024 15:28:01 -0800 Subject: [PATCH 064/190] market order optimization substantialness check --- src/international/market/marketOrders.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/international/market/marketOrders.ts b/src/international/market/marketOrders.ts index 136d94e09..53f9a5ae3 100644 --- a/src/international/market/marketOrders.ts +++ b/src/international/market/marketOrders.ts @@ -60,6 +60,10 @@ export class MarketManager { ) if (order.price === newPrice) continue + const absDiff = Math.abs(order.price - newPrice) + // Make sure the difference in price is substantial enough to justify a change + if (absDiff < order.price * 0.1) continue + Game.market.changeOrderPrice(ID, newPrice) continue } @@ -74,6 +78,10 @@ export class MarketManager { ) if (order.price === newPrice) continue + const absDiff = Math.abs(order.price - newPrice) + // Make sure the difference in price is substantial enough to justify a change + if (absDiff < order.price * 0.1) continue + Game.market.changeOrderPrice(ID, newPrice) } } From b4231d208b13f248e8e59ebcd6e3e2ad0605d37f Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Fri, 5 Jan 2024 15:38:30 -0800 Subject: [PATCH 065/190] terminal and creep logistics improvements --- src/international/collective.ts | 2 +- src/international/constants.ts | 19 +- src/international/creepOrganizer.ts | 5 +- src/international/flags.ts | 62 ++- src/other/profilerRegister.ts | 35 +- src/room/commune/commune.ts | 7 +- src/room/commune/communeData.ts | 8 + src/room/commune/communeProcs.ts | 3 +- src/room/commune/communeUtils.ts | 31 +- src/room/commune/defence.ts | 2 +- src/room/commune/haulerNeed.ts | 6 +- src/room/commune/labs.ts | 13 +- src/room/commune/sourceManager.ts | 34 +- .../spawning/spawnRequestConstructors.ts | 5 + src/room/commune/spawning/spawnRequests.ts | 2 - src/room/commune/storingStructures.ts | 22 - src/room/commune/terminal/terminal.old.ts | 2 +- src/room/commune/terminal/terminal.ts | 511 ++++++++++-------- .../{marketUtils.ts => tradingUtils.ts} | 20 +- src/room/commune/towers.ts | 2 +- src/room/commune/workRequest.ts | 13 +- src/room/creeps/creepProcs.ts | 274 +++++++++- .../creeps/creepPrototypes/creepFunctions.ts | 119 +--- .../creeps/powerCreeps/powerCreepProcs.ts | 5 + .../commune/defenders/meleeDefender.ts | 1 - .../creeps/roleManagers/commune/hauler.ts | 6 +- src/room/roomData.ts | 2 +- src/room/roomFunctions.ts | 3 +- src/room/roomUtils.ts | 15 + src/types.d.ts | 6 +- src/types/internationalRequests.ts | 16 +- src/types/roomRequests.ts | 101 ++-- 32 files changed, 836 insertions(+), 516 deletions(-) rename src/room/commune/terminal/{marketUtils.ts => tradingUtils.ts} (90%) create mode 100644 src/room/creeps/powerCreeps/powerCreepProcs.ts diff --git a/src/international/collective.ts b/src/international/collective.ts index ef1684c2d..0e8b0a9bd 100644 --- a/src/international/collective.ts +++ b/src/international/collective.ts @@ -312,7 +312,7 @@ export class CollectiveManager extends Sleepable { } // Consider it funneled - + funnelingRoomNames.add(roomName) } diff --git a/src/international/constants.ts b/src/international/constants.ts index 14ddaa120..97a33b592 100644 --- a/src/international/constants.ts +++ b/src/international/constants.ts @@ -106,12 +106,16 @@ export enum CombatRequestKeys { } export enum CreepRoomLogisticsRequestKeys { - type, - target, - resourceType, - amount, - onlyFull, - noReserve, + type, + target, + resourceType, + amount, + onlyFull, + noReserve, + /** + * true if there is a delivery request. Should be the following request in the creep's logistics queue + */ + delivery, } export enum RoomLogisticsRequestTypes { @@ -1404,5 +1408,6 @@ export enum FlagNames { debugMovement = 'debugMovement', debugRelay = 'debugRelay', debugRoomLogistics = 'debugRoomLogistics', - debugCreepLogistics = 'debugCreepLogistics' + debugCreepLogistics = 'debugCreepLogistics', + debugSpawning = 'debugSpawning', } diff --git a/src/international/creepOrganizer.ts b/src/international/creepOrganizer.ts index 182157696..310cff02a 100644 --- a/src/international/creepOrganizer.ts +++ b/src/international/creepOrganizer.ts @@ -6,6 +6,7 @@ import { packCoord } from 'other/codec' import { statsManager } from './statsManager' import { creepUtils } from 'room/creeps/creepUtils' import { creepDataManager } from 'room/creeps/creepData' +import { creepProcs } from 'room/creeps/creepProcs' export class CreepOrganizer { constructor() {} @@ -60,7 +61,9 @@ export class CreepOrganizer { if (!creep.spawning) creep.room.creepPositions[packCoord(creep.pos)] = creep.name - if (roomLogisticsRoles.has(role)) creep.roomLogisticsRequestManager() + if (roomLogisticsRoles.has(role)) { + creepProcs.updateLogisticsRequests(creep) + } // Get the commune the creep is from diff --git a/src/international/flags.ts b/src/international/flags.ts index 9ca3460d5..16368c9b7 100644 --- a/src/international/flags.ts +++ b/src/international/flags.ts @@ -1,5 +1,7 @@ import { Dashboard, Rectangle, Table } from 'screeps-viz' import { + CombatRequestKeys, + HaulRequestKeys, Result, RoomLogisticsRequestTypes, RoomMemoryKeys, @@ -883,16 +885,64 @@ export class FlagManager { const roomMemory = Memory.rooms[room.name] if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.commune) { - flag.setColor(COLOR_RED) - return - } + flag.setColor(COLOR_RED) + return + } if (!roomMemory[RoomMemoryKeys.communePlanned]) { - flag.setColor(COLOR_RED) - return - } + flag.setColor(COLOR_RED) + return + } room.communeManager.constructionManager.visualize() } + + private terminalRequests(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const room = Game.rooms[roomName] + if (!room || !room.communeManager) { + flag.setColor(COLOR_RED) + return + } + + const headers = ['roomName', 'resource', 'amount', 'priority'] + + const data: any[][] = [] + + for (const ID in collectiveManager.terminalRequests) { + const request = collectiveManager.terminalRequests[ID] + + const row: any[] = [request.roomName, request.resource, request.amount, request.priority] + data.push(row) + } + + const height = 3 + data.length + + Dashboard({ + config: { + room: room.name, + }, + widgets: [ + { + pos: { + x: 1, + y: 1, + }, + width: 47, + height, + widget: Rectangle({ + data: Table(() => ({ + data, + config: { + label: 'My Terminal Requests', + headers, + }, + })), + }), + }, + ], + }) + } } export const flagManager = new FlagManager() diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index f89b1e508..ba50418f5 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -27,7 +27,7 @@ import { FlagManager } from 'international/flags' import { RoomNameUtils } from 'room/roomNameUtils' import { CreepUtils } from 'room/creeps/creepUtils' import { SpawnUtils } from 'room/commune/spawning/spawnUtils' -import { MarketUtils } from 'room/commune/terminal/marketUtils' +import { TradingUtils } from 'room/commune/terminal/tradingUtils' import { CollectiveManager } from 'international/collective' import { MarketManager } from 'international/market/marketOrders' import { GarbageCollector } from 'international/garbageCollector' @@ -61,7 +61,34 @@ import { FeatureFlagManager } from 'international/featureFlags' import { ConstructionSiteManager } from 'international/constructionSiteManager' import { TransactionsManager } from 'international/transactions' import { CommunePlanner } from 'room/construction/communePlanner' -import { packBasePlanCoord, packCoord, packCoordList, packId, packIdList, packPos, packPosList, packRampartPlanCoord, packRoomName, packStampAnchors, packXYAsCoord, packXYAsPos, reversePosList, unpackBasePlanCoords, unpackCoord, unpackCoordAsPos, unpackCoordList, unpackCoordListAsPosList, unpackId, unpackIdList, unpackPos, unpackPosAt, unpackPosList, unpackRampartPlanCoord, unpackRoomName, unpackStampAnchors } from './codec' +import { + packBasePlanCoord, + packCoord, + packCoordList, + packId, + packIdList, + packPos, + packPosList, + packRampartPlanCoord, + packRoomName, + packStampAnchors, + packXYAsCoord, + packXYAsPos, + reversePosList, + unpackBasePlanCoords, + unpackCoord, + unpackCoordAsPos, + unpackCoordList, + unpackCoordListAsPosList, + unpackId, + unpackIdList, + unpackPos, + unpackPosAt, + unpackPosList, + unpackRampartPlanCoord, + unpackRoomName, + unpackStampAnchors, +} from './codec' import { CustomPathFinder } from 'international/customPathFinder' import { RoomUtils } from 'room/roomUtils' import { CommuneUtils } from 'room/commune/communeUtils' @@ -69,6 +96,7 @@ import { RoomDataManager } from 'room/roomData' import { CommuneDataManager } from 'room/commune/communeData' import { MyCreepUtils } from 'room/creeps/myCreepUtils' import { CreepMoveProcs } from 'room/creeps/creepMoveProcs' +import { CommuneProc } from 'room/commune/communeProcs' export function profilerRegister() { // Classes @@ -95,7 +123,7 @@ export function profilerRegister() { profiler.registerClass(BasePlans, 'BasePlans') profiler.registerClass(RampartPlans, 'RampartPlans') profiler.registerClass(CustomPathFinder, 'CustomPathFinder') - profiler.registerClass(MarketUtils, 'MarketUtils') + profiler.registerClass(TradingUtils, 'MarketUtils') profiler.registerClass(Utils, 'Utils') profiler.registerClass(CreepUtils, 'CreepUtils') profiler.registerClass(MyCreepUtils, 'MyCreepUtils') @@ -142,6 +170,7 @@ export function profilerRegister() { profiler.registerClass(CommuneUtils, 'CommuneUtils') profiler.registerClass(RoomDataManager, 'RoomDataManager') profiler.registerClass(CommuneDataManager, 'CommuneDataManager') + profiler.registerClass(CommuneProc, 'CommuneProc') // Objects diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index 8281c74b9..5fee24a49 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -207,6 +207,7 @@ export class CommuneManager { roomMemory[RoomMemoryKeys.greatestRCL] = room.controller.level } + communeProc.registerFunneling(room) communeProc.getRCLUpdate(room) if (!roomMemory[RoomMemoryKeys.combatRequests]) @@ -268,7 +269,6 @@ export class CommuneManager { this.terminalManager.preTickRun() this.remotesManager.initRun() this.haulRequestManager.preTickRun() - this.sourceManager.preTickRun() this.workRequestManager.preTickRun() } @@ -1031,13 +1031,12 @@ export class CommuneManager { } const storingStructuresCapacity = this.storingStructuresCapacity let min: number - let resourceType: ResourceConstant resourceTargets.min[RESOURCE_BATTERY] = this.room.roomManager.factory ? storingStructuresCapacity * 0.005 : 0 resourceTargets.max[RESOURCE_BATTERY] = storingStructuresCapacity * 0.015 - min = resourceTargets.min[RESOURCE_ENERGY] = this.energyMinResourceTarget(storingStructuresCapacity) - resourceTargets.max[RESOURCE_ENERGY] = Math.max(storingStructuresCapacity * 0.2, this.minStoredEnergy, min) + min = resourceTargets.min[RESOURCE_ENERGY] = this.storingStructuresCapacity * 0.9/* this.energyMinResourceTarget(storingStructuresCapacity) */ + resourceTargets.max[RESOURCE_ENERGY] = Math.max(storingStructuresCapacity * 0.5, this.minStoredEnergy, min) // minerals diff --git a/src/room/commune/communeData.ts b/src/room/commune/communeData.ts index 066085069..6389aa92b 100644 --- a/src/room/commune/communeData.ts +++ b/src/room/commune/communeData.ts @@ -1,4 +1,5 @@ import { collectiveManager } from "international/collective"; +import { utils } from "utils/utils"; interface CommuneData { /** @@ -7,6 +8,7 @@ interface CommuneData { registeredRCL: number generalRepairStructureCoords: Set maxUpgradeStrength: number + estimatedCommuneSourceIncome: number[] } /** @@ -21,6 +23,12 @@ export class CommuneDataManager { updateCommune(room: Room) { this.data[room.name] ??= {} + const data = this.data[room.name] + + if (utils.isTickInterval(10)) { + + delete data.estimatedCommuneSourceIncome + } } } diff --git a/src/room/commune/communeProcs.ts b/src/room/commune/communeProcs.ts index ce8ad7d6b..4d7a81531 100644 --- a/src/room/commune/communeProcs.ts +++ b/src/room/commune/communeProcs.ts @@ -1,10 +1,11 @@ +import { roomUtils } from 'room/roomUtils' import { communeDataManager } from './communeData' import { communeUtils } from './communeUtils' /** * Minor processes for communes */ -class CommuneProc { +export class CommuneProc { registerFunneling(room: Room) { // We need a terminal and for it be to active if (!room.terminal || room.controller.level < 6) return diff --git a/src/room/commune/communeUtils.ts b/src/room/commune/communeUtils.ts index 85b78d543..ca648718e 100644 --- a/src/room/commune/communeUtils.ts +++ b/src/room/commune/communeUtils.ts @@ -10,6 +10,7 @@ import { structureTypesToProtectSet, } from 'international/constants' import { collectiveManager } from "international/collective" +import { roomUtils } from "room/roomUtils" export class CommuneUtils { getGeneralRepairStructures(room: Room) { @@ -177,12 +178,40 @@ export class CommuneUtils { // Increase strength by throughput - maxUpgradeStrength += findLinkThroughput(range, room.estimatedSourceIncome[i]) * 0.7 + maxUpgradeStrength += findLinkThroughput(range, this.getEstimatedSourceIncome(room)[i]) * 0.7 } data.maxUpgradeStrength = maxUpgradeStrength return maxUpgradeStrength } + + getEstimatedSourceIncome(room: Room) { + const data = communeDataManager.data[room.name] + if (data.estimatedCommuneSourceIncome !== undefined) return data.estimatedCommuneSourceIncome + + const sources = roomUtils.getSources(room) + const estimatedIncome: number[] = [] + + for (let i = 0; i < sources.length; i += 1) { + const source = sources[i] + + let effect = source.effectsData.get(PWR_DISRUPT_SOURCE) as PowerEffect + if (effect) continue + + let income = SOURCE_ENERGY_CAPACITY / ENERGY_REGEN_TIME + + effect = source.effectsData.get(PWR_REGEN_SOURCE) as PowerEffect + if (effect) + income += + POWER_INFO[PWR_REGEN_SOURCE].effect[effect.level - 1] / + POWER_INFO[PWR_REGEN_SOURCE].period + + estimatedIncome[i] = income + } + + data.estimatedCommuneSourceIncome = estimatedIncome + return estimatedIncome + } } export const communeUtils = new CommuneUtils() diff --git a/src/room/commune/defence.ts b/src/room/commune/defence.ts index 28cb8e049..4d60ad67c 100644 --- a/src/room/commune/defence.ts +++ b/src/room/commune/defence.ts @@ -318,7 +318,7 @@ export class DefenceManager { playerManager.initPlayer(enemyCreep.owner.username) const weight = playerMemory[PlayerMemoryKeys.rangeFromExitWeight] - if (findWeightedRangeFromExit(enemyCreep.pos, weight) * damage < enemyCreep.hits) + if (/* findWeightedRangeFromExit(enemyCreep.pos, weight) * */damage < enemyCreep.hits) continue } diff --git a/src/room/commune/haulerNeed.ts b/src/room/commune/haulerNeed.ts index e8282da5b..bc9e911f4 100644 --- a/src/room/commune/haulerNeed.ts +++ b/src/room/commune/haulerNeed.ts @@ -2,6 +2,7 @@ import { RoomMemoryKeys, packedPosLength, stamps } from 'international/constants import { customLog } from 'utils/logging' import { findCarryPartsRequired } from 'utils/utils' import { CommuneManager } from './commune' +import { communeUtils } from './communeUtils' export class HaulerNeedManager { communeManager: CommuneManager @@ -44,6 +45,7 @@ export class HaulerNeedManager { private sourceNeed() { const room = this.communeManager.room const packedSourcePaths = Memory.rooms[room.name][RoomMemoryKeys.communeSourcePaths] + const estimatedSourceIncome = communeUtils.getEstimatedSourceIncome(room) const hubLink = room.roomManager.hubLink if (hubLink && hubLink.isRCLActionable) { @@ -55,7 +57,7 @@ export class HaulerNeedManager { this.communeManager.communeHaulerNeed += findCarryPartsRequired( packedSourcePaths[index].length / packedPosLength + 3, - room.estimatedSourceIncome[index] * 1.1, + estimatedSourceIncome[index] * 1.1, ) } @@ -67,7 +69,7 @@ export class HaulerNeedManager { for (let index in room.find(FIND_SOURCES)) { this.communeManager.communeHaulerNeed += findCarryPartsRequired( packedSourcePaths[index].length / packedPosLength + 3, - room.estimatedSourceIncome[index] * 1.1, + estimatedSourceIncome[index] * 1.1, ) } } diff --git a/src/room/commune/labs.ts b/src/room/commune/labs.ts index 43059fc17..b206663ad 100644 --- a/src/room/commune/labs.ts +++ b/src/room/commune/labs.ts @@ -643,14 +643,11 @@ export class LabManager { const lab = inputLabs[i] const resourceType = this.inputResources[i] - // We have the right resource or no resource - + // If we have the right resource or no resource if (this.outputResource && (!lab.mineralType || lab.mineralType === resourceType)) { - // We have enough - + // If we have enough if ( - lab.mineralType && - lab.reserveStore[lab.mineralType] > lab.store.getCapacity(lab.mineralType) * 0.5 + lab.reserveStore[resourceType] > lab.store.getCapacity(resourceType) * 0.5 ) continue @@ -663,8 +660,8 @@ export class LabManager { priority: 50 + scalePriority( - lab.store.getCapacity(lab.mineralType), - lab.reserveStore[lab.mineralType], + lab.store.getCapacity(resourceType), + lab.reserveStore[resourceType], 20, ), }) diff --git a/src/room/commune/sourceManager.ts b/src/room/commune/sourceManager.ts index ad442ba6c..7ab234b1b 100644 --- a/src/room/commune/sourceManager.ts +++ b/src/room/commune/sourceManager.ts @@ -1,51 +1,23 @@ import { customLog } from 'utils/logging' import { CommuneManager } from './commune' +import { roomUtils } from 'room/roomUtils' export class SourceManager { communeManager: CommuneManager - sources: Source[] constructor(communeManager: CommuneManager) { this.communeManager = communeManager } - preTickRun() { - this.sources = this.communeManager.room.find(FIND_SOURCES) - - this.estimateIncome() - } - run() { this.createPowerTasks() } - private estimateIncome() { - const { room } = this.communeManager - - room.estimatedSourceIncome = [] - - for (let i = 0; i < this.sources.length; i += 1) { - const source = this.sources[i] - - let effect = source.effectsData.get(PWR_DISRUPT_SOURCE) as PowerEffect - if (effect) continue - - let income = SOURCE_ENERGY_CAPACITY / ENERGY_REGEN_TIME - - effect = source.effectsData.get(PWR_REGEN_SOURCE) as PowerEffect - if (effect) - income += - POWER_INFO[PWR_REGEN_SOURCE].effect[effect.level - 1] / - POWER_INFO[PWR_REGEN_SOURCE].period - - room.estimatedSourceIncome[i] = income - } - } - private createPowerTasks() { if (!this.communeManager.room.myPowerCreeps.length) return - for (const source of this.sources) { + const sources = roomUtils.getSources(this.communeManager.room) + for (const source of sources) { this.communeManager.room.createPowerTask(source, PWR_REGEN_SOURCE, 10) } } diff --git a/src/room/commune/spawning/spawnRequestConstructors.ts b/src/room/commune/spawning/spawnRequestConstructors.ts index 5f4cf0ec7..b7dda20e6 100644 --- a/src/room/commune/spawning/spawnRequestConstructors.ts +++ b/src/room/commune/spawning/spawnRequestConstructors.ts @@ -1,6 +1,7 @@ import { SpawnRequest } from 'types/spawnRequest' import { LogTypes, customLog } from 'utils/logging' import { SpawnRequestArgs } from 'types/spawnRequest' +import { FlagNames } from 'international/constants' export type SpawnRequestConstructor = (room: Room, args: SpawnRequestArgs) => SpawnRequest[] @@ -296,6 +297,10 @@ export class SpawnRequestConstructors { spawnRequestGroupUniform(room: Room, args: SpawnRequestArgs) { const spawnRequests: SpawnRequest[] = [] + if (Game.flags[FlagNames.debugSpawning]) { + console.log('role', args.role, 'parts', args.partsQuota) + } + // Guard against bad arguments, otherwise it can cause the block below to get into an infinate loop and crash. if (args.extraParts.length == 0) { throw Error('extraParts of length 0 for ' + room.name + ' and role ' + args.role) diff --git a/src/room/commune/spawning/spawnRequests.ts b/src/room/commune/spawning/spawnRequests.ts index 38eff807c..339550683 100644 --- a/src/room/commune/spawning/spawnRequests.ts +++ b/src/room/commune/spawning/spawnRequests.ts @@ -871,7 +871,6 @@ export class SpawnRequestsManager { if (this.communeManager.room.terminal && this.communeManager.room.controller.level >= 6) { const funnelingRoomNames = collectiveManager.funnelingRoomNames if ( - funnelingRoomNames.size === 0 || !funnelingRoomNames.has(this.communeManager.room.name) ) { return false @@ -879,7 +878,6 @@ export class SpawnRequestsManager { } // If there are enemyAttackers or construction sites and the controller isn't soon to downgrade - if ( this.communeManager.room.towerInferiority || this.communeManager.room.find(FIND_MY_CONSTRUCTION_SITES).length > 0 diff --git a/src/room/commune/storingStructures.ts b/src/room/commune/storingStructures.ts index 8bd4a2967..248ce414c 100644 --- a/src/room/commune/storingStructures.ts +++ b/src/room/commune/storingStructures.ts @@ -43,28 +43,6 @@ export class StoringStructuresManager { type: RoomLogisticsRequestTypes.transfer, priority: 100, }) - - /* - for (const resourceType of RESOURCES_ALL) { - this.communeManager.room.createRoomLogisticsRequest({ - target: structure, - resourceType, - onlyFull: true, - type: 'offer', - priority: 0, - }) - - if (!createTransfer) continue - - this.communeManager.room.createRoomLogisticsRequest({ - target: structure, - resourceType, - onlyFull: true, - type: 'transfer', - priority: 10, - }) - } - */ } } } diff --git a/src/room/commune/terminal/terminal.old.ts b/src/room/commune/terminal/terminal.old.ts index 94ced913f..c997e9a87 100644 --- a/src/room/commune/terminal/terminal.old.ts +++ b/src/room/commune/terminal/terminal.old.ts @@ -1,7 +1,7 @@ import { minerals, Result, RoomMemoryKeys } from 'international/constants' import { customLog } from 'utils/logging' import { newID, roundTo } from 'utils/utils' -import './marketUtils' +import './tradingUtils' import { collectiveManager } from 'international/collective' import { CommuneManager } from 'room/commune/commune' diff --git a/src/room/commune/terminal/terminal.ts b/src/room/commune/terminal/terminal.ts index 66f8bdffc..33e41ed5e 100644 --- a/src/room/commune/terminal/terminal.ts +++ b/src/room/commune/terminal/terminal.ts @@ -1,7 +1,7 @@ import { minerals, Result, RoomMemoryKeys, RoomStatsKeys } from 'international/constants' import { customLog } from 'utils/logging' import { newID, roundTo, utils } from 'utils/utils' -import './marketUtils' +import './tradingUtils' import { simpleAllies, AllyRequestTypes, @@ -9,287 +9,324 @@ import { } from 'international/simpleAllies/simpleAllies' import { collectiveManager } from 'international/collective' import { CommuneManager, ResourceTargets } from 'room/commune/commune' -import { marketUtils } from './marketUtils' +import { tradingUtils } from './tradingUtils' import { marketManager } from 'international/market/marketOrders' export class TerminalManager { - communeManager: CommuneManager - room: Room - terminal: StructureTerminal + communeManager: CommuneManager + room: Room + terminal: StructureTerminal - constructor(communeManager: CommuneManager) { - this.communeManager = communeManager - } - - preTickRun() { - const room = this.communeManager.room - if (!room.terminal) return - if (!room.terminal.isRCLActionable) return - - const resourceTargets = this.communeManager.resourceTargets + constructor(communeManager: CommuneManager) { + this.communeManager = communeManager + } - this.createTerminalRequests(room, resourceTargets) - } + preTickRun() { + const room = this.communeManager.room + if (!room.terminal) return + if (!room.terminal.isRCLActionable) return - run() { - const { room } = this.communeManager + const resourceTargets = this.communeManager.resourceTargets - // Stop if there is no terminal + this.createTerminalRequests(room, resourceTargets) + } - if (!room.terminal) return - if (!room.terminal.isRCLActionable) return - if (room.terminal.cooldown > 0) return + run() { + const { room } = this.communeManager - const resourceTargets = this.communeManager.resourceTargets + // Stop if there is no terminal + if (!room.terminal) return + if (!room.terminal.isRCLActionable) return + if (room.terminal.cooldown > 0) return - if (this.respondToTerminalRequests(room, resourceTargets) === Result.action) return - if (this.respondToAllyRequests(room, resourceTargets) === Result.action) return + const resourceTargets = this.communeManager.resourceTargets - // Check if the market is disabled by us or the server + if (this.respondToTerminalRequests(room, resourceTargets) === Result.action) return + if (this.respondToAllyRequests(room, resourceTargets) === Result.action) return - if (!global.settings.marketUsage) return - // only run every terminal cooldown interval, to have every terminal share the same required data (reduces CPU costs) - if (utils.isTickInterval(TERMINAL_COOLDOWN)) return - if (!marketManager.isMarketFunctional) return + // Check if the market is disabled by us or the server - if (this.manageResources(room, resourceTargets) === Result.action) return - } + if (!global.settings.marketUsage) return + // only run every terminal cooldown interval, to have every terminal share the same required data (reduces CPU costs) + if (utils.isTickInterval(TERMINAL_COOLDOWN)) return + if (!marketManager.isMarketFunctional) return - private createTerminalRequests(room: Room, resourceTargets: ResourceTargets) { + if (this.manageResources(room, resourceTargets) === Result.action) return + } - const resourcesInStoringStructures = - this.communeManager.room.roomManager.resourcesInStoringStructures - for (const key in resourceTargets.min) { - const resourceType = key as ResourceConstant - let targetAmount = resourceTargets.min[resourceType] - if (targetAmount <= 0) continue + private createTerminalRequests(room: Room, resourceTargets: ResourceTargets) { + const resourcesInStoringStructures = + this.communeManager.room.roomManager.resourcesInStoringStructures + for (const key in resourceTargets.min) { + const resourceType = key as ResourceConstant + let targetAmount = resourceTargets.min[resourceType] + if (targetAmount <= 0) continue - // We have enough + // We have enough - const storedResourceAmount = resourcesInStoringStructures[resourceType] || 0 - if (storedResourceAmount >= targetAmount) continue + const storedResourceAmount = resourcesInStoringStructures[resourceType] || 0 + if (storedResourceAmount >= targetAmount) continue - targetAmount = Math.floor(targetAmount * 1.1) - const priority = roundTo(1 - storedResourceAmount / targetAmount / 2, 2) - const amount = Math.min( - targetAmount - storedResourceAmount, - room.terminal.store.getFreeCapacity(), - ) + targetAmount = Math.floor(targetAmount * 1.1) + const priority = tradingUtils.getPriority(storedResourceAmount, targetAmount) + const amount = Math.min( + targetAmount - storedResourceAmount, + room.terminal.store.getFreeCapacity(), + ) - const ID = newID() + const ID = newID() - collectiveManager.terminalRequests[ID] = { - priority, - resource: resourceType, - amount, - roomName: room.name, - } - } + collectiveManager.terminalRequests[ID] = { + priority, + resource: resourceType, + amount, + roomName: room.name, + } } - - private findBestTerminalRequest(room: Room, resourceTargets: ResourceTargets): [TerminalRequest, string, number] { - const resourcesInStoringStructures = - this.communeManager.room.roomManager.resourcesInStoringStructures - const minStoredEnergy = - resourceTargets.min[RESOURCE_ENERGY] * 1.1 - const storedEnergy = resourcesInStoringStructures[RESOURCE_ENERGY] - const budget = Math.min( - storedEnergy - minStoredEnergy, - this.communeManager.room.terminal.store[RESOURCE_ENERGY], - ) - - let lowestScore = Infinity - let bestRequestID: string - let bestRequest: TerminalRequest - let amount: number - - for (const ID in collectiveManager.terminalRequests) { - const request = collectiveManager.terminalRequests[ID] - - // Don't respond to requests for this room - if (request.roomName === this.communeManager.room.name) continue - if (resourceTargets.min[request.resource] === undefined) continue - - const minStoredResource = - resourceTargets.min[request.resource] * 1.1 - const storedResource = resourcesInStoringStructures[request.resource] || 0 - if (storedResource <= minStoredResource) continue - - const sendAmount = marketUtils.findLargestTransactionAmount( - budget, - Math.min(request.amount, storedResource - minStoredResource), - this.communeManager.room.name, - request.roomName, - ) - - // Make sure we are fulfilling at least 10% of the request - if (request.amount * 0.1 > sendAmount) continue - - const score = - Game.map.getRoomLinearDistance(this.communeManager.room.name, request.roomName) + - request.priority * 100 - if (score >= lowestScore) continue - - amount = sendAmount - bestRequest = request - bestRequestID = ID - lowestScore = score - } - - return [bestRequest, bestRequestID, amount] + } + + private findBestTerminalRequest( + room: Room, + resourceTargets: ResourceTargets, + ): [TerminalRequest, string, number] { + const resourcesInStoringStructures = + this.communeManager.room.roomManager.resourcesInStoringStructures + const storedEnergy = resourcesInStoringStructures[RESOURCE_ENERGY] + const budget = Math.min( + storedEnergy - this.communeManager.minStoredEnergy, + this.communeManager.room.terminal.store.getUsedCapacity(RESOURCE_ENERGY), + ) + + let lowestScore = Infinity + let bestRequestID: string + let bestRequest: TerminalRequest + let amount: number + + for (const ID in collectiveManager.terminalRequests) { + const request = collectiveManager.terminalRequests[ID] + + // Don't respond to requests for this room + if (request.roomName === this.communeManager.room.name) continue + if (resourceTargets.min[request.resource] === undefined) continue + + const storedResource = resourcesInStoringStructures[request.resource] || 0 + /* const minStoredResource = resourceTargets.min[request.resource] * 1.1 + if (storedResource <= minStoredResource) continue */ + + const ourPriority = tradingUtils.getPriority( + storedResource, + resourceTargets.min[request.resource], + ) + // Our priority should be lower + if (ourPriority >= request.priority) continue + const priorityDiff = request.priority - ourPriority + // The request's priority must be 10% greater than our own + if (priorityDiff < 0.1) continue + + const maxSendAmount = Math.floor( + Math.min( + storedResource * priorityDiff, + request.amount, + room.terminal.store.getUsedCapacity(request.resource) / 2, + ), + ) + + const sendAmount = tradingUtils.findLargestTransactionAmount( + budget, + maxSendAmount, + this.communeManager.room.name, + request.roomName, + ) + customLog( + 'TERMINAL REQUEST ' + request.resource, + maxSendAmount + + ' ,' + + sendAmount + + ', ' + + storedResource * priorityDiff + + ', ' + + priorityDiff + + ', ' + + (storedResource - request.amount) + + ', ' + + (storedResource - request.amount) * priorityDiff + ', ' + + tradingUtils.getTargetAmountFromPriority(priorityDiff, storedResource) + ) + // Make sure we are fulfilling at least 10% of the request + if (request.amount * 0.1 > sendAmount) continue + + const score = + Game.map.getRoomLinearDistance(this.communeManager.room.name, request.roomName) + + request.priority * 100 + if (score >= lowestScore) continue + + amount = sendAmount + bestRequest = request + bestRequestID = ID + lowestScore = score } - private respondToTerminalRequests(room: Room, resourceTargets: ResourceTargets) { - // We don't have enough energy to help other rooms - - if ( - this.communeManager.room.roomManager.resourcesInStoringStructures.energy < - this.communeManager.minStoredEnergy - ) - return Result.noAction - - const [request, ID, amount] = this.findBestTerminalRequest(room, resourceTargets) - if (!request) return Result.noAction - - this.communeManager.room.terminal.send( - request.resource, - amount, - request.roomName, - 'Terminal request', - ) - - // Consequences - - request.amount -= amount - - delete collectiveManager.terminalRequests[ID] - this.communeManager.room.terminal.intended = true - return Result.action - } - - private findBestAllyRequest(room: Room, resourceTargets: ResourceTargets): [ResourceRequest, number] { - const resourcesInStoringStructures = - this.communeManager.room.roomManager.resourcesInStoringStructures - const minStoredEnergy = - resourceTargets.min[RESOURCE_ENERGY] * 1.1 - const storedEnergy = resourcesInStoringStructures[RESOURCE_ENERGY] - const budget = Math.min( - storedEnergy - minStoredEnergy, - this.communeManager.room.terminal.store[RESOURCE_ENERGY], - ) - - let lowestScore = Infinity - let bestRequestID: string - let bestRequest: ResourceRequest - let amount: number - - const allyResourceRequests = simpleAllies.allySegmentData.requests.resource - for (const request of allyResourceRequests) { - - // Don't respond to requests for this room - if (request.roomName === this.communeManager.room.name) continue - if (resourceTargets.min[request.resourceType] === undefined) continue - if (Math.floor(request.amount) <= 0) continue - - const minStoredResource = - resourceTargets.min[request.resourceType] * 1.1 - const storedResource = resourcesInStoringStructures[request.resourceType] || 0 - if (storedResource <= minStoredResource) continue - - const sendAmount = marketUtils.findLargestTransactionAmount( - budget, - Math.min(request.amount, storedResource - minStoredResource), - this.communeManager.room.name, - request.roomName, - ) - - // Make sure we are fulfilling at least 10% of the request - if (request.amount * 0.1 > sendAmount) continue - - const score = - Game.map.getRoomLinearDistance(this.communeManager.room.name, request.roomName) + - request.priority * 100 - if (score >= lowestScore) continue - - amount = sendAmount - bestRequest = request - lowestScore = score - } - - return [bestRequest, amount] + return [bestRequest, bestRequestID, amount] + } + + private respondToTerminalRequests(room: Room, resourceTargets: ResourceTargets) { + // We don't have enough energy to help other rooms + if ( + this.communeManager.room.roomManager.resourcesInStoringStructures.energy < + this.communeManager.minStoredEnergy + ) + return Result.noAction + + const [request, ID, amount] = this.findBestTerminalRequest(room, resourceTargets) + if (!request) return Result.noAction + + this.communeManager.room.terminal.send( + request.resource, + amount, + request.roomName, + 'Terminal request', + ) + + // Consequences + + request.amount -= amount + + delete collectiveManager.terminalRequests[ID] + this.communeManager.room.terminal.intended = true + return Result.action + } + + private findBestAllyRequest( + room: Room, + resourceTargets: ResourceTargets, + ): [ResourceRequest, number] { + const resourcesInStoringStructures = + this.communeManager.room.roomManager.resourcesInStoringStructures + const minStoredEnergy = resourceTargets.min[RESOURCE_ENERGY] * 1.1 + const storedEnergy = resourcesInStoringStructures[RESOURCE_ENERGY] + const budget = Math.min( + storedEnergy - minStoredEnergy, + this.communeManager.room.terminal.store[RESOURCE_ENERGY], + ) + + let lowestScore = Infinity + let bestRequestID: string + let bestRequest: ResourceRequest + let amount: number + + const allyResourceRequests = simpleAllies.allySegmentData.requests.resource + for (const request of allyResourceRequests) { + // Don't respond to requests for this room + if (request.roomName === this.communeManager.room.name) continue + if (resourceTargets.min[request.resourceType] === undefined) continue + if (Math.floor(request.amount) <= 0) continue + + const minStoredResource = resourceTargets.min[request.resourceType] * 1.1 + const storedResource = resourcesInStoringStructures[request.resourceType] || 0 + if (storedResource <= minStoredResource) continue + + const sendAmount = tradingUtils.findLargestTransactionAmount( + budget, + Math.min(request.amount, storedResource - minStoredResource), + this.communeManager.room.name, + request.roomName, + ) + + // Make sure we are fulfilling at least 10% of the request + if (request.amount * 0.1 > sendAmount) continue + + const score = + Game.map.getRoomLinearDistance(this.communeManager.room.name, request.roomName) + + request.priority * 100 + if (score >= lowestScore) continue + + amount = sendAmount + bestRequest = request + lowestScore = score } - private respondToAllyRequests(room: Room, resourceTargets: ResourceTargets) { - if (!global.settings.allyCommunication) return Result.noAction - if (!simpleAllies.allySegmentData) return Result.noAction - if (!simpleAllies.allySegmentData.requests) return Result.noAction + return [bestRequest, amount] + } - // We don't have enough energy to help other rooms + private respondToAllyRequests(room: Room, resourceTargets: ResourceTargets) { + if (!global.settings.allyCommunication) return Result.noAction + if (!simpleAllies.allySegmentData) return Result.noAction + if (!simpleAllies.allySegmentData.requests) return Result.noAction - if ( - this.communeManager.room.roomManager.resourcesInStoringStructures.energy < - this.communeManager.minStoredEnergy - ) - return false + // We don't have enough energy to help other rooms - const [request, amount] = this.findBestAllyRequest(room, resourceTargets) - if (!request) return Result.noAction + if ( + this.communeManager.room.roomManager.resourcesInStoringStructures.energy < + this.communeManager.minStoredEnergy + ) + return false - this.communeManager.room.terminal.send( - request.resourceType, - amount, - request.roomName, - 'Ally request', - ) + const [request, amount] = this.findBestAllyRequest(room, resourceTargets) + if (!request) return Result.noAction - // Consequences + this.communeManager.room.terminal.send( + request.resourceType, + amount, + request.roomName, + 'Ally request', + ) - this.communeManager.room.terminal.intended = true - - request.amount -= amount - return Result.action - } + // Consequences - private manageResources(room: Room, resourceTargets: ResourceTargets) { + this.communeManager.room.terminal.intended = true - for (const key in resourceTargets.min) { - const resourceType = key as ResourceConstant + request.amount -= amount + return Result.action + } - if (this.manageResource(room, resourceType, resourceTargets) === Result.action) { - return Result.action - } - } + private manageResources(room: Room, resourceTargets: ResourceTargets) { + for (const key in resourceTargets.min) { + const resourceType = key as ResourceConstant - return Result.noAction + if (this.manageResource(room, resourceType, resourceTargets) === Result.action) { + return Result.action + } } - private manageResource(room: Room, resourceType: ResourceConstant, resourceTargets: ResourceTargets) { - - let min = resourceTargets.min[resourceType] + return Result.noAction + } - // We don't have enough + private manageResource( + room: Room, + resourceType: ResourceConstant, + resourceTargets: ResourceTargets, + ) { + let min = resourceTargets.min[resourceType] - if (room.terminal.store[resourceType] < min * 1.1) { - if (Game.market.credits < collectiveManager.minCredits) return Result.noAction + // We don't have enough - if (marketUtils.advancedBuy(room, resourceType, min - room.terminal.store[resourceType]) === Result.success) { - return Result.action - } + if (room.terminal.store[resourceType] < min * 1.1) { + if (Game.market.credits < collectiveManager.minCredits) return Result.noAction - return Result.noAction - } + if ( + tradingUtils.advancedBuy(room, resourceType, min - room.terminal.store[resourceType]) === + Result.success + ) { + return Result.action + } - let max = resourceTargets.max[resourceType] + return Result.noAction + } - // If we don't have too much, stop + let max = resourceTargets.max[resourceType] - if (room.terminal.store[resourceType] * 1.1 < max) return Result.noAction + // If we don't have too much, stop - // Try to sell the excess amount - if (marketUtils.advancedSell(room, resourceType, room.terminal.store[resourceType] - max) === Result.success) { - return Result.action - } + if (room.terminal.store[resourceType] * 1.1 < max) return Result.noAction - return Result.noAction + // Try to sell the excess amount + if ( + tradingUtils.advancedSell(room, resourceType, room.terminal.store[resourceType] - max) === + Result.success + ) { + return Result.action } + + return Result.noAction + } } diff --git a/src/room/commune/terminal/marketUtils.ts b/src/room/commune/terminal/tradingUtils.ts similarity index 90% rename from src/room/commune/terminal/marketUtils.ts rename to src/room/commune/terminal/tradingUtils.ts index a8d15ccee..8828ec050 100644 --- a/src/room/commune/terminal/marketUtils.ts +++ b/src/room/commune/terminal/tradingUtils.ts @@ -1,11 +1,11 @@ import { customLog } from 'utils/logging' -import { findLowestScore } from 'utils/utils' +import { findLowestScore, roundTo } from 'utils/utils' import { collectiveManager } from 'international/collective' import { statsManager } from 'international/statsManager' import { marketManager } from 'international/market/marketOrders' import { Result, RoomStatsKeys } from 'international/constants' -export class MarketUtils { +export class TradingUtils { advancedSell(room: Room, resourceType: ResourceConstant, amount: number) { const mySpecificOrders = marketManager.myOrders[room.name]?.[ORDER_SELL][resourceType] || [] @@ -167,6 +167,20 @@ export class MarketUtils { // the deal was an apparent success return Result.success } + + getPriority(currentAmount: number, targetAmount: number) { + + // the / 2 is temporary + const priority = roundTo((1 - currentAmount / targetAmount) / 2, 2) + return priority + } + + /** + * Inverse function of priority + */ + getTargetAmountFromPriority(priority: number, currentAmount: number) { + return currentAmount / -((2 * priority) - 1) + } } -export const marketUtils = new MarketUtils() +export const tradingUtils = new TradingUtils() diff --git a/src/room/commune/towers.ts b/src/room/commune/towers.ts index 4e29443f3..2a1688f36 100644 --- a/src/room/commune/towers.ts +++ b/src/room/commune/towers.ts @@ -90,7 +90,7 @@ export class TowerManager { const weight = playerMemory[PlayerMemoryKeys.rangeFromExitWeight] if ( - findWeightedRangeFromExit(enemyCreep.pos, weight) * damage < + /* findWeightedRangeFromExit(enemyCreep.pos, weight) * */damage < enemyCreep.hits ) { if (room.towerInferiority) return false diff --git a/src/room/commune/workRequest.ts b/src/room/commune/workRequest.ts index 1b128e23f..43b4ec5a2 100644 --- a/src/room/commune/workRequest.ts +++ b/src/room/commune/workRequest.ts @@ -5,10 +5,13 @@ import { RoomTypes, customColors, } from 'international/constants' -import { randomTick } from 'utils/utils' +import { randomIntRange, randomTick, utils } from 'utils/utils' import { collectiveManager } from 'international/collective' import { CommuneManager } from './commune' import { statsManager } from 'international/statsManager' +import { WorkRequest } from 'types/internationalRequests' + +const checkRoomStatusInverval = randomIntRange(200, 500) export class WorkRequestManager { communeManager: CommuneManager @@ -66,10 +69,10 @@ export class WorkRequestManager { // The room is closed or is now a respawn or novice zone if ( - randomTick(20) && + utils.isTickInterval(checkRoomStatusInverval) && Game.map.getRoomStatus(requestName).status !== Game.map.getRoomStatus(room.name).status ) { - this.delete() + this.delete(requestName, request) return } @@ -97,7 +100,7 @@ export class WorkRequestManager { requestRoom.roomManager.structures.spawn.length && requestRoom.roomManager.structures.spawn.find(spawn => spawn.my) ) { - this.delete() + this.delete(requestName, request) return } @@ -159,7 +162,7 @@ export class WorkRequestManager { delete roomMemory[RoomMemoryKeys.workRequest] } - private delete() { + private delete(requestName: string, request: WorkRequest) { const roomMemory = this.communeManager.room.memory this.deleteCombat() diff --git a/src/room/creeps/creepProcs.ts b/src/room/creeps/creepProcs.ts index a85a368ac..bc2e9f1a6 100644 --- a/src/room/creeps/creepProcs.ts +++ b/src/room/creeps/creepProcs.ts @@ -1,10 +1,22 @@ import { RoomManager } from 'room/room' -import { getRange } from 'utils/utils' +import { findObjectWithID, getRange } from 'utils/utils' import { myCreepUtils } from './myCreepUtils' import { statsManager } from 'international/statsManager' -import { CreepMemoryKeys, Result, RoomLogisticsRequestTypes } from 'international/constants' +import { + CreepMemoryKeys, + CreepRoomLogisticsRequestKeys, + FlagNames, + Result, + RoomLogisticsRequestTypes, +} from 'international/constants' import { creepUtils } from './creepUtils' import { communeUtils } from 'room/commune/communeUtils' +import { + CreepRoomLogisticsRequest, + RoomLogisticsRequest, + RoomLogisticsTargets, +} from 'types/roomRequests' +import { customLog } from 'utils/logging' class CreepProcs { advancedUpgradeController(creep: Creep) { @@ -351,6 +363,264 @@ class CreepProcs { return Result.success } + + updateLogisticsRequests(creep: Creep) { + const creepMemory = Memory.creeps[creep.name] + if (!creepMemory[CreepMemoryKeys.roomLogisticsRequests]) { + creepMemory[CreepMemoryKeys.roomLogisticsRequests] = [] + return + } + if (!creepMemory[CreepMemoryKeys.roomLogisticsRequests].length) return +/* + for (let i = creepMemory[CreepMemoryKeys.roomLogisticsRequests].length - 1; i >= 0; i--) { + const request = creepMemory[CreepMemoryKeys.roomLogisticsRequests][i] + const target = findObjectWithID(request[CreepRoomLogisticsRequestKeys.target]) + if (target) continue + + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(i, 1) + } + */ + const request = creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] + if (!request) return + + const target = findObjectWithID(request[CreepRoomLogisticsRequestKeys.target]) + if (!target) { + + if (request[CreepRoomLogisticsRequestKeys.delivery]) { + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 2) + return + } + + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return + } + + // requests where they are delivering + if (request[CreepRoomLogisticsRequestKeys.delivery]) { + this.updateDeliverLogisticsRequest( + creep, + request, + creepMemory[CreepMemoryKeys.roomLogisticsRequests][1], + target + ) + return + } + + // transfer requests + if (request[CreepRoomLogisticsRequestKeys.type] === RoomLogisticsRequestTypes.transfer) { + this.updateTransferLogisticsRequest(creep, request) + return + } + + // If pickup type + if (target instanceof Resource) { + this.updatePickupLogisticsRequest(creep, request, target) + return + } + + // Withdraw or offer type + this.updateWithdrawLogisticsRequest(creep, request, target) + return + } + + /** + * + * @returns false if the request was deleted + */ + private updateTransferLogisticsRequest(creep: Creep, request: CreepRoomLogisticsRequest) { + const creepMemory = Memory.creeps[creep.name] + const target = findObjectWithID(request[CreepRoomLogisticsRequestKeys.target]) + + // Delete the request if the target is fulfilled + + if (target.freeNextStore < request[CreepRoomLogisticsRequestKeys.amount]) { + if (Game.flags[FlagNames.debugCreepLogistics]) + customLog( + 'not enough free store', + creep.name + + ', ' + + request[CreepRoomLogisticsRequestKeys.target] + + ', ' + + target.freeNextStore + + ' < ' + + request[CreepRoomLogisticsRequestKeys.amount], + ) + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return false + } + + request[CreepRoomLogisticsRequestKeys.amount] = Math.min( + Math.min( + creep.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]], + target.freeNextStore, + ), + request[CreepRoomLogisticsRequestKeys.amount], + ) + if (request[CreepRoomLogisticsRequestKeys.amount] <= 0) { + if (Game.flags[FlagNames.debugCreepLogistics]) + customLog( + 'not enough amount', + creep.name + + ', ' + + request[CreepRoomLogisticsRequestKeys.target] + + ', ' + + request[CreepRoomLogisticsRequestKeys.amount], + ) + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return false + } + + if (!request[CreepRoomLogisticsRequestKeys.noReserve]) { + target.reserveStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += + request[CreepRoomLogisticsRequestKeys.amount] + } + + return true + } + + /** + * + * @returns false if the request was deleted + */ + private updatePickupLogisticsRequest( + creep: Creep, + request: CreepRoomLogisticsRequest, + target: Resource, + ) { + const creepMemory = Memory.creeps[creep.name] + + // Update in accordance to potential resource decay + + request[CreepRoomLogisticsRequestKeys.amount] = Math.min( + Math.min(creep.freeNextStore, target.nextAmount), + request[CreepRoomLogisticsRequestKeys.amount], + ) + if (request[CreepRoomLogisticsRequestKeys.amount] <= 0) { + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return false + } + + if (!request[CreepRoomLogisticsRequestKeys.noReserve]) { + target.reserveAmount -= request[CreepRoomLogisticsRequestKeys.amount] + } + + return true + } + + /** + * + * @returns false if the request was deleted + */ + private updateWithdrawLogisticsRequest( + creep: Creep, + request: CreepRoomLogisticsRequest, + target: RoomLogisticsTargets, + ) { + const creepMemory = Memory.creeps[creep.name] + + // Delete the request if the target doesn't have what we need + if ( + target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] < + request[CreepRoomLogisticsRequestKeys.amount] + ) { + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return false + } + + request[CreepRoomLogisticsRequestKeys.amount] = Math.min( + Math.min( + creep.freeNextStore, + target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]], + ), + request[CreepRoomLogisticsRequestKeys.amount], + ) + if (request[CreepRoomLogisticsRequestKeys.amount] <= 0) { + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return false + } + + if (!request[CreepRoomLogisticsRequestKeys.noReserve]) { + target.reserveStore[request[CreepRoomLogisticsRequestKeys.resourceType]] -= + request[CreepRoomLogisticsRequestKeys.amount] + } + + return true + } + + /** + * update both request pairs of the deliver request + * @param creep + * @param request pickup, withdraw or offer to get sufficient resources + * @param deliverToRequest transfer to delivery target + */ + private updateDeliverLogisticsRequest( + creep: Creep, + request: CreepRoomLogisticsRequest, + deliverToRequest: CreepRoomLogisticsRequest, + target: RoomLogisticsTargets + ) { + const creepMemory = Memory.creeps[creep.name] + + const deliverTarget = findObjectWithID(deliverToRequest[CreepRoomLogisticsRequestKeys.target]) + if (!deliverTarget) { + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 2) + return false + } + + // If pickup type + if (target instanceof Resource) { + // Update in accordance to potential resource decay + + request[CreepRoomLogisticsRequestKeys.amount] = Math.min( + Math.min(creep.freeNextStore, target.nextAmount), + request[CreepRoomLogisticsRequestKeys.amount], + ) + if (request[CreepRoomLogisticsRequestKeys.amount] <= 0) { + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 2) + return false + } + + if (!request[CreepRoomLogisticsRequestKeys.noReserve]) { + target.reserveAmount -= request[CreepRoomLogisticsRequestKeys.amount] + deliverTarget.reserveStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += + request[CreepRoomLogisticsRequestKeys.amount] + } + + return true + } + + // Withdraw or offer + + // Delete the request if the target doesn't have what we need + if ( + target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] < + request[CreepRoomLogisticsRequestKeys.amount] + ) { + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 2) + return false + } + + request[CreepRoomLogisticsRequestKeys.amount] = Math.min( + Math.min( + creep.freeNextStore, + target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]], + ), + request[CreepRoomLogisticsRequestKeys.amount], + ) + if (request[CreepRoomLogisticsRequestKeys.amount] <= 0) { + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 2) + return false + } + + if (!request[CreepRoomLogisticsRequestKeys.noReserve]) { + target.reserveStore[request[CreepRoomLogisticsRequestKeys.resourceType]] -= + request[CreepRoomLogisticsRequestKeys.amount] + deliverTarget.reserveStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += + request[CreepRoomLogisticsRequestKeys.amount] + } + + return true + } } export const creepProcs = new CreepProcs() diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index 579504097..c634b67d2 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -1144,105 +1144,6 @@ Creep.prototype.manageSpawning = function (spawn: StructureSpawn) { this.assignMoveRequest(coord) } -Creep.prototype.roomLogisticsRequestManager = function () { - const creepMemory = Memory.creeps[this.name] - if (!creepMemory[CreepMemoryKeys.roomLogisticsRequests]) { - creepMemory[CreepMemoryKeys.roomLogisticsRequests] = [] - return - } - if (!creepMemory[CreepMemoryKeys.roomLogisticsRequests].length) return - - for (let i = creepMemory[CreepMemoryKeys.roomLogisticsRequests].length - 1; i >= 0; i--) { - const request = creepMemory[CreepMemoryKeys.roomLogisticsRequests][i] - const target = findObjectWithID(request[CreepRoomLogisticsRequestKeys.target]) - if (target) continue - - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(i, 1) - } - - const request = creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] - if (!request) return - - const target = findObjectWithID(request[CreepRoomLogisticsRequestKeys.target]) - - // If pickup type - if (target instanceof Resource) { - // Update in accordance to potential resource decay - - request[CreepRoomLogisticsRequestKeys.amount] = Math.min( - Math.min(this.freeNextStore, target.nextAmount), - request[CreepRoomLogisticsRequestKeys.amount], - ) - if (request[CreepRoomLogisticsRequestKeys.amount] <= 0) { - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return - } - - if (!request[CreepRoomLogisticsRequestKeys.noReserve]) { - target.reserveAmount -= request[CreepRoomLogisticsRequestKeys.amount] - } - return - } - - if (request[CreepRoomLogisticsRequestKeys.type] === RoomLogisticsRequestTypes.transfer) { - // Delete the request if the target is fulfilled - - if (target.freeNextStore < request[CreepRoomLogisticsRequestKeys.amount]) { - if (Game.flags[FlagNames.debugCreepLogistics]) customLog('not enough free store', this.name + ', ' + request[CreepRoomLogisticsRequestKeys.target] + ', ' + target.freeNextStore + ' < ' + request[CreepRoomLogisticsRequestKeys.amount]) - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return - } - - request[CreepRoomLogisticsRequestKeys.amount] = Math.min( - Math.min( - this.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]], - target.freeNextStore, - ), - request[CreepRoomLogisticsRequestKeys.amount], - ) - if (request[CreepRoomLogisticsRequestKeys.amount] <= 0) { - if (Game.flags[FlagNames.debugCreepLogistics]) customLog('not enough amount', this.name + ', ' + request[CreepRoomLogisticsRequestKeys.target] + ', ' + request[CreepRoomLogisticsRequestKeys.amount]) - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return - } - - if (!request[CreepRoomLogisticsRequestKeys.noReserve]) { - target.reserveStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += - request[CreepRoomLogisticsRequestKeys.amount] - } - return - } - - // Withdraw or offer type - - // Delete the request if the target doesn't have what we need - - if ( - target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] < - request[CreepRoomLogisticsRequestKeys.amount] - ) { - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return - } - - request[CreepRoomLogisticsRequestKeys.amount] = Math.min( - Math.min( - this.freeNextStore, - target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]], - ), - request[CreepRoomLogisticsRequestKeys.amount], - ) - if (request[CreepRoomLogisticsRequestKeys.amount] <= 0) { - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return - } - - if (!request[CreepRoomLogisticsRequestKeys.noReserve]) { - target.reserveStore[request[CreepRoomLogisticsRequestKeys.resourceType]] -= - request[CreepRoomLogisticsRequestKeys.amount] - } -} - Creep.prototype.findRoomLogisticsRequest = function (args) { const creepMemory = Memory.creeps[this.name] if (creepMemory[CreepMemoryKeys.roomLogisticsRequests][0]) { @@ -1283,7 +1184,7 @@ Creep.prototype.findRoomLogisticsRequest = function (args) { if (!this.canAcceptRoomLogisticsRequest(request.type, request.ID)) continue const targetPos = findObjectWithID(request.targetID).pos - const score = request.priority + getRange(targetPos, this.pos) / 20 + const score = request.priority + getRange(targetPos, this.pos) if (score >= lowestScore) continue @@ -1295,15 +1196,14 @@ Creep.prototype.findRoomLogisticsRequest = function (args) { log('FINDING REQ', bestRequest + ', ' + Array.from(types), { position: 1 }) */ let creepRequest: CreepRoomLogisticsRequest | 0 - customLog('no request', this.name) + if (!bestRequest) { creepRequest = this.createBackupStoringStructuresRoomLogisticsRequest( types, args?.resourceTypes, ) - customLog('try to find request', this.name + ', ' + creepRequest) - if (creepRequest === Result.fail) return Result.fail + if (creepRequest === Result.fail) return Result.fail } else { creepRequest = { [CreepRoomLogisticsRequestKeys.type]: bestRequest.type, @@ -1314,7 +1214,7 @@ Creep.prototype.findRoomLogisticsRequest = function (args) { } if (bestRequest.delivery) { - // This request will proceed the one we've accepted to provide for the delivery + // This request will preceed the one we've accepted to provide for the delivery let nextCreepRequest: CreepRoomLogisticsRequest const storingStructure = findObjectWithID(bestRequest.delivery as Id) @@ -1328,6 +1228,7 @@ Creep.prototype.findRoomLogisticsRequest = function (args) { creepRequest[CreepRoomLogisticsRequestKeys.amount], ), [CreepRoomLogisticsRequestKeys.noReserve]: bestRequest.noReserve, + [CreepRoomLogisticsRequestKeys.delivery]: true, } } else { // The delivery provider is @@ -1349,6 +1250,7 @@ Creep.prototype.findRoomLogisticsRequest = function (args) { ), [CreepRoomLogisticsRequestKeys.noReserve]: creepRequest[CreepRoomLogisticsRequestKeys.noReserve], + [CreepRoomLogisticsRequestKeys.delivery]: true, } // Handle reservations for nextRequest @@ -1527,12 +1429,16 @@ Creep.prototype.canAcceptRoomLogisticsRequest = function (requestType, requestID // If energy, make sure there is enough to fill us to full if (request.resourceType === RESOURCE_ENERGY) { + const minAmount = this.freeNextStore + storingStructure = this.commune.communeManager.storingStructures.find( - structure => structure.reserveStore[request.resourceType] >= this.freeNextStore, + structure => structure.reserveStore[request.resourceType] >= minAmount, ) } else { + const minAmount = Math.min(this.freeNextStore, request.amount) + storingStructure = this.commune.communeManager.storingStructures.find( - structure => structure.reserveStore[request.resourceType] >= request.amount, + structure => structure.reserveStore[request.resourceType] >= minAmount, ) } @@ -1717,7 +1623,6 @@ Creep.prototype.runRoomLogisticsRequestAdvanced = function (args) { } if (Game.flags[FlagNames.debugCreepLogistics]) { - this.room.visual.text(request[CreepRoomLogisticsRequestKeys.amount].toString(), this.pos) } diff --git a/src/room/creeps/powerCreeps/powerCreepProcs.ts b/src/room/creeps/powerCreeps/powerCreepProcs.ts new file mode 100644 index 000000000..7f0ea404b --- /dev/null +++ b/src/room/creeps/powerCreeps/powerCreepProcs.ts @@ -0,0 +1,5 @@ +export class PowerCreepProcs { + +} + +export const powerCreepProcs = new PowerCreepProcs() diff --git a/src/room/creeps/roleManagers/commune/defenders/meleeDefender.ts b/src/room/creeps/roleManagers/commune/defenders/meleeDefender.ts index 0af4752bf..9707fada7 100644 --- a/src/room/creeps/roleManagers/commune/defenders/meleeDefender.ts +++ b/src/room/creeps/roleManagers/commune/defenders/meleeDefender.ts @@ -18,7 +18,6 @@ import { randomTick, randomVal, getRangeEuc, - findWeightedRangeFromExit, } from 'utils/utils' import { packCoord } from 'other/codec' diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index 80df7bf00..10493e639 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -846,10 +846,8 @@ export class Hauler extends Creep { // Trade room logistics requests - const creepAtPosRequests = Array.from(creepAtPosMemory[CreepMemoryKeys.roomLogisticsRequests]) - creepAtPosMemory[CreepMemoryKeys.roomLogisticsRequests] = Array.from( - creepMemory[CreepMemoryKeys.roomLogisticsRequests], - ) + const creepAtPosRequests = [...(creepAtPosMemory[CreepMemoryKeys.roomLogisticsRequests])] + creepAtPosMemory[CreepMemoryKeys.roomLogisticsRequests] = [...creepMemory[CreepMemoryKeys.roomLogisticsRequests]] creepMemory[CreepMemoryKeys.roomLogisticsRequests] = creepAtPosRequests // Trade remotes and sourceIndexes diff --git a/src/room/roomData.ts b/src/room/roomData.ts index 2d2164e5a..0e1616a48 100644 --- a/src/room/roomData.ts +++ b/src/room/roomData.ts @@ -1,7 +1,7 @@ import { communeDataManager } from "./commune/communeData" interface RoomData { - + sourceIDs: Id[] } /** diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index 6e2e280d2..e31560721 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -46,6 +46,7 @@ import { findClosestObjectInRange, findClosestObject, randomIntRange, + roundTo, } from 'utils/utils' import { collectiveManager } from 'international/collective' import { @@ -1678,7 +1679,7 @@ Room.prototype.createRoomLogisticsRequest = function (args) { } if (args.priority === undefined) args.priority = 1 - else args.priority = Math.round(args.priority * 100) / 100 + else args.priority = roundTo(args.priority / 20, 2) const ID = collectiveManager.newTickID() diff --git a/src/room/roomUtils.ts b/src/room/roomUtils.ts index 24cbb1187..b41e213e4 100644 --- a/src/room/roomUtils.ts +++ b/src/room/roomUtils.ts @@ -1,11 +1,26 @@ import { RoomMemoryKeys, RoomTypes } from "international/constants" import { packCoord } from "other/codec" +import { roomDataManager } from "./roomData" +import { findObjectWithID } from "utils/utils" export class RoomUtils { getRemoteRepairStructures(room: Room) { const repairStructures: (StructureContainer | StructureRoad)[] = [] } + + getSources(room: Room): Source[] { + const data = roomDataManager.data[room.name] + if (data.sourceIDs !== undefined) { + return data.sourceIDs.map(ID => findObjectWithID(ID)) + } + + const sources = room.find(FIND_SOURCES) + const sourceIDs = sources.map(source => source.id) + + data.sourceIDs = sourceIDs + return sources + } } export const roomUtils = new RoomUtils() diff --git a/src/types.d.ts b/src/types.d.ts index 1204a0bc9..3568c6298 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -350,7 +350,7 @@ declare global { /** * */ - workRequests: { [roomName: string]: Partial } + workRequests: { [roomName: string]: WorkRequest } combatRequests: { [roomName: string]: Partial } @@ -436,8 +436,6 @@ declare global { */ creepsOfSource: string[][] - estimatedSourceIncome: number[] - myCreeps: Creep[] myPowerCreeps: PowerCreep[] /** @@ -985,8 +983,6 @@ declare global { manageSpawning(spawn: StructureSpawn): void - roomLogisticsRequestManager(): void - findRoomLogisticsRequest( args?: FindNewRoomLogisticsRequestArgs, ): CreepRoomLogisticsRequest | 0 diff --git a/src/types/internationalRequests.ts b/src/types/internationalRequests.ts index 0d58eb191..4e0409fde 100644 --- a/src/types/internationalRequests.ts +++ b/src/types/internationalRequests.ts @@ -1,14 +1,14 @@ import { CombatRequestKeys, DepositRequestKeys, HaulRequestKeys, NukeRequestKeys, WorkRequestKeys } from "international/constants" export interface WorkRequest { - [WorkRequestKeys.claimer]: number - [WorkRequestKeys.vanguard]: number - [WorkRequestKeys.abandon]: number - [WorkRequestKeys.responder]: string - [WorkRequestKeys.priority]: number - [WorkRequestKeys.allyVanguard]: number - [WorkRequestKeys.forAlly]: boolean - [WorkRequestKeys.hauler]: boolean + [WorkRequestKeys.claimer]?: number + [WorkRequestKeys.vanguard]?: number + [WorkRequestKeys.abandon]?: number + [WorkRequestKeys.responder]?: string + [WorkRequestKeys.priority]?: number + [WorkRequestKeys.allyVanguard]?: number + [WorkRequestKeys.forAlly]?: boolean + [WorkRequestKeys.hauler]?: boolean } export type CombatRequestTypes = 'attack' | 'harass' | 'defend' diff --git a/src/types/roomRequests.ts b/src/types/roomRequests.ts index bc32290c5..f092e5964 100644 --- a/src/types/roomRequests.ts +++ b/src/types/roomRequests.ts @@ -9,63 +9,64 @@ import { WorkRequestKeys, } from 'international/constants' +export type RoomLogisticsTargets = AnyStoreStructure | Creep | Tombstone | Ruin | Resource + export interface CreepRoomLogisticsRequest { - [CreepRoomLogisticsRequestKeys.type]: RoomLogisticsRequestTypes - [CreepRoomLogisticsRequestKeys.target]: Id< - AnyStoreStructure | Creep | Tombstone | Ruin | Resource - > - [CreepRoomLogisticsRequestKeys.resourceType]: ResourceConstant - [CreepRoomLogisticsRequestKeys.amount]: number - [CreepRoomLogisticsRequestKeys.onlyFull]?: boolean - [CreepRoomLogisticsRequestKeys.noReserve]?: boolean + [CreepRoomLogisticsRequestKeys.type]: RoomLogisticsRequestTypes + [CreepRoomLogisticsRequestKeys.target]: Id + [CreepRoomLogisticsRequestKeys.resourceType]: ResourceConstant + [CreepRoomLogisticsRequestKeys.amount]: number + [CreepRoomLogisticsRequestKeys.onlyFull]?: boolean + [CreepRoomLogisticsRequestKeys.noReserve]?: boolean + [CreepRoomLogisticsRequestKeys.delivery]?: boolean } export interface RoomLogisticsRequest { - ID: string - type: RoomLogisticsRequestTypes - /** - * Consider in weighting the task, lower is more preffered - */ - priority?: number - targetID: Id - resourceType: ResourceConstant - amount: number - /** - * If the responder should only take the task if it will use its full capacity. Default is true - */ - onlyFull?: boolean - /** - * The ID of a roomLogisticsTask or store structure - */ - delivery?: Id | string - /** - * Wether the responder should interact with reserveStore of the target - */ - noReserve?: boolean - /** - * If true, responders have to be in range 1 on acceptance of the task - */ - passive?: boolean - // /** - // * The estimated income, positive or negative that is expected per tick for the request target - // */ - // income?: number - // /** - // * The amount for the potential or actual responding creep - // */ - // personalAmount?: number + ID: string + type: RoomLogisticsRequestTypes + /** + * Consider in weighting the task, lower is more preffered + */ + priority?: number + targetID: Id + resourceType: ResourceConstant + amount: number + /** + * If the responder should only take the task if it will use its full capacity. Default is true + */ + onlyFull?: boolean + /** + * The ID of a roomLogisticsTask or store structure + */ + delivery?: Id | string + /** + * Wether the responder should interact with reserveStore of the target + */ + noReserve?: boolean + /** + * If true, responders have to be in range 1 on acceptance of the task + */ + passive?: boolean + // /** + // * The estimated income, positive or negative that is expected per tick for the request target + // */ + // income?: number + // /** + // * The amount for the potential or actual responding creep + // */ + // personalAmount?: number } export interface CreateRoomLogisticsRequestArgs { - type: RoomLogisticsRequestTypes - target: AnyStoreStructure | Creep | Tombstone | Ruin | Resource - resourceType?: ResourceConstant - onlyFull?: boolean - /** - * Lower priority is more preferable - */ - priority?: number - maxAmount?: number + type: RoomLogisticsRequestTypes + target: RoomLogisticsTargets + resourceType?: ResourceConstant + onlyFull?: boolean + /** + * Lower priority is more preferable. Priority infleunces preference for one request over another. 1 priority = 1 more range consideration + */ + priority?: number + maxAmount?: number } export interface FindNewRoomLogisticsRequestArgs { From 0b587177024c1be9f999950af87ba7cd6893f654 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 6 Jan 2024 14:26:39 -0800 Subject: [PATCH 066/190] (migration) segments for caching some IDs, general improvements --- src/international/constants.ts | 13 +- src/international/constructionSiteManager.ts | 71 +- src/international/creepOrganizer.ts | 3 +- src/international/init.ts | 109 +- src/international/migration.ts | 6 + src/international/segments.ts | 47 +- src/international/transactions.ts | 31 +- src/other/ErrorExporter.ts | 38 +- src/other/profilerRegister.ts | 29 +- src/room/commune/commune.ts | 1739 +++++++++-------- src/room/commune/communeProcs.ts | 4 +- src/room/creeps/creepLogiProcs.ts | 270 +++ src/room/creeps/creepProcs.ts | 260 +-- .../remote/remoteSourceHarvester.ts | 4 - src/settingsDefault.ts | 2 +- src/types.d.ts | 10 - src/types/roomRequests.ts | 10 +- src/types/segments.ts | 13 + 18 files changed, 1361 insertions(+), 1298 deletions(-) create mode 100644 src/room/creeps/creepLogiProcs.ts diff --git a/src/international/constants.ts b/src/international/constants.ts index 97a33b592..595df2e0d 100644 --- a/src/international/constants.ts +++ b/src/international/constants.ts @@ -1,6 +1,7 @@ import { packCoord } from 'other/codec' import { collectiveManager } from './collective' import { CommuneManager } from 'room/commune/commune' +import { randomIntRange } from 'utils/utils' export enum PlayerMemoryKeys { /** @@ -1394,9 +1395,13 @@ export enum WorkTypes { } export enum SegmentIDs { - General = 0, - BasePlans = 1, - Errors = 10, + general = 0, + basePlans = 1, + /** + * contains significant IDs such as construction sites and transaction IDs + */ + IDs = 2, + errors = 10, } export enum MovedTypes { @@ -1411,3 +1416,5 @@ export enum FlagNames { debugCreepLogistics = 'debugCreepLogistics', debugSpawning = 'debugSpawning', } + +export const IDUpdateInterval = randomIntRange(50, 100) diff --git a/src/international/constructionSiteManager.ts b/src/international/constructionSiteManager.ts index 62ac7f6d1..88742ca1e 100644 --- a/src/international/constructionSiteManager.ts +++ b/src/international/constructionSiteManager.ts @@ -1,56 +1,63 @@ import { Sleepable } from 'utils/sleepable' import { CollectiveManager, collectiveManager } from './collective' +import { utils } from 'utils/utils' +import { IDUpdateInterval } from './constants' +import { segmentsManager } from './segments' /** * Tracks and records constructionSites and thier age, deleting old sites */ -export class ConstructionSiteManager extends Sleepable { - run() { - if (this.isSleepingResponsive()) return +export class ConstructionSiteManager { + run() { + if (!utils.isTickInterval(IDUpdateInterval)) return - collectiveManager.constructionSiteCount = 0 + const recordedIDs = segmentsManager.IDs.constructionSites - // Initialize uninitialized construction sites + collectiveManager.constructionSiteCount = 0 - for (const cSiteID in Game.constructionSites) { - // If the site's ID is stored in Memory's constructionSites, iterate - if (Memory.constructionSites[cSiteID]) continue + // Initialize uninitialized construction sites - // Otherwise store it in Memory's constructionSties - Memory.constructionSites[cSiteID] = 0 - } + for (const cSiteID in Game.constructionSites) { + // If the site's ID is stored in Memory's constructionSites, iterate + if (recordedIDs[cSiteID]) continue - // Update and manage construction sites - - for (const cSiteID in Memory.constructionSites) { + // Otherwise store it in Memory's constructionSties + recordedIDs[cSiteID] = 0 + } - // Try to find the site using the recorded ID - const cSite = Game.constructionSites[cSiteID] + // Update and manage construction sites - // If the site with the recorded ID doesn't exist, remove it + for (const cSiteID in recordedIDs) { + // Try to find the site using the recorded ID + const cSite = Game.constructionSites[cSiteID] - if (!cSite) { - Memory.constructionSites[cSiteID] = undefined - continue - } + // If the site with the recorded ID doesn't exist, remove it - const cSiteAge = Memory.constructionSites[cSiteID] + if (!cSite) { + recordedIDs[cSiteID] = undefined + continue + } - // If the site is past a certain age with respect to progress, delete it + const cSiteAge = recordedIDs[cSiteID] - if (cSiteAge > 20000 + cSiteAge * cSite.progress) { - // Remove the site from the world + // If the site is past a certain age with respect to progress, delete it - Game.constructionSites[cSiteID].remove() - Memory.constructionSites[cSiteID] = undefined - } + if (cSiteAge > this.getMaxCSiteAge(cSite)) { + // Remove the site from the world - // Otherwise increase the constructionSite's age - Memory.constructionSites[cSiteID] += 1 * this.sleepFor + Game.constructionSites[cSiteID].remove() + recordedIDs[cSiteID] = undefined + } - collectiveManager.constructionSiteCount += 1 - } + // Otherwise increase the constructionSite's age + recordedIDs[cSiteID] += 1 * IDUpdateInterval + collectiveManager.constructionSiteCount += 1 } + } + + getMaxCSiteAge(cSite: ConstructionSite) { + return 20000 + (cSite.progress * 5) + } } export const constructionSiteManager = new ConstructionSiteManager() diff --git a/src/international/creepOrganizer.ts b/src/international/creepOrganizer.ts index 310cff02a..f661f8739 100644 --- a/src/international/creepOrganizer.ts +++ b/src/international/creepOrganizer.ts @@ -7,6 +7,7 @@ import { statsManager } from './statsManager' import { creepUtils } from 'room/creeps/creepUtils' import { creepDataManager } from 'room/creeps/creepData' import { creepProcs } from 'room/creeps/creepProcs' +import { creepLogiProcs } from 'room/creeps/creepLogiProcs' export class CreepOrganizer { constructor() {} @@ -62,7 +63,7 @@ export class CreepOrganizer { if (!creep.spawning) creep.room.creepPositions[packCoord(creep.pos)] = creep.name if (roomLogisticsRoles.has(role)) { - creepProcs.updateLogisticsRequests(creep) + creepLogiProcs.updateLogisticsRequests(creep) } // Get the commune the creep is from diff --git a/src/international/init.ts b/src/international/init.ts index 6e007f1cc..afe46a6fb 100644 --- a/src/international/init.ts +++ b/src/international/init.ts @@ -1,72 +1,85 @@ import { getMe } from 'utils/utils' import { playerManager } from './players' import { statsManager } from './statsManager' -import { PlayerMemoryKeys } from './constants' +import { PlayerMemoryKeys, SegmentIDs } from './constants' import { PlayerRelationships } from 'types/players' /** * Configures variables to align with the bot's expectations, to ensure proper function */ class InitManager { - public run() { - this.initMemory() - this.initGlobal() - } + public run() { + this.initMemory() + this.initGlobal() + } + + /** + * Construct Memory if it isn't constructed yet + */ + private initMemory() { + if (Memory.breakingVersion) return - /** - * Construct Memory if it isn't constructed yet - */ - private initMemory() { - if (Memory.breakingVersion) return + this.initSegments() - Memory.breakingVersion = global.settings.breakingVersion - Memory.me = getMe() - /* (Object.values(Game.structures)[0] as OwnedStructure)?.owner?.username || + Memory.breakingVersion = global.settings.breakingVersion + Memory.me = getMe() + /* (Object.values(Game.structures)[0] as OwnedStructure)?.owner?.username || Object.values(Game.creeps)[0]?.owner?.username || 'username' */ - // Construct foundation - - Memory.ID = 0 - Memory.chantIndex = 0 - Memory.lastConfig = Game.time - Memory.constructionSites = {} - Memory.recordedTransactionIDs = {} - Memory.minHaulerCostError = 0 - Memory.minHaulerCost = BODYPART_COST[CARRY] * 2 + BODYPART_COST[MOVE] - Memory.minHaulerCostUpdate = Game.time - Memory.players = {} - Memory.workRequests = {} - Memory.combatRequests = {} - Memory.haulRequests = {} - Memory.nukeRequests = {} - statsManager.internationalConfig() - } - /** - * Construct global if it isn't constructed yet - */ - private initGlobal() { - if (global.constructed) return + // Construct foundation - global.constructed = true + Memory.ID = 0 + Memory.chantIndex = 0 + Memory.lastConfig = Game.time + Memory.minHaulerCostError = 0 + Memory.minHaulerCost = BODYPART_COST[CARRY] * 2 + BODYPART_COST[MOVE] + Memory.minHaulerCostUpdate = Game.time + Memory.players = {} + Memory.workRequests = {} + Memory.combatRequests = {} + Memory.haulRequests = {} + Memory.nukeRequests = {} + statsManager.internationalConfig() + } + /** + * Construct global if it isn't constructed yet + */ + private initGlobal() { + if (global.constructed) return - global.packedRoomNames = {} - global.unpackedRoomNames = {} + global.constructed = true - this.initPlayers() - } - private initPlayers() { + global.packedRoomNames = {} + global.unpackedRoomNames = {} - for (const playerName of global.settings.allies) { + this.initPlayers() + } - const playerMemory = Memory.players[playerName] - if (!playerMemory) { - playerManager.initPlayer(playerName) - } + private initPlayers() { + for (const playerName of global.settings.allies) { + const playerMemory = Memory.players[playerName] + if (!playerMemory) { + playerManager.initPlayer(playerName) + } - playerMemory[PlayerMemoryKeys.relationship] = PlayerRelationships.ally - } + playerMemory[PlayerMemoryKeys.relationship] = PlayerRelationships.ally } + } + + private initSegments() { + + RawMemory.segments[SegmentIDs.basePlans] = JSON.stringify({ + + } as BasePlansSegment) + + RawMemory.segments[SegmentIDs.IDs] = JSON.stringify({ + constructionSites: {}, + recordedTransactionIDs: {}, + } as IDsSegment) + + + } } export const initManager = new InitManager() diff --git a/src/international/migration.ts b/src/international/migration.ts index 8b64009e5..447be7514 100644 --- a/src/international/migration.ts +++ b/src/international/migration.ts @@ -33,6 +33,12 @@ export class MigrationManager { Memory.breakingVersion += 1 } + if (Memory.breakingVersion === 122) { + + delete (Memory as any).recordedTransactionIDs + delete (Memory as any).constructionSites + Memory.breakingVersion += 1 + } if (Memory.breakingVersion < global.settings.breakingVersion) { global.killCreeps() diff --git a/src/international/segments.ts b/src/international/segments.ts index 2ad7b7063..390e464c6 100644 --- a/src/international/segments.ts +++ b/src/international/segments.ts @@ -1,43 +1,52 @@ -import { Result, SegmentIDs } from "./constants" +import { Result, SegmentIDs } from './constants' class SegmentsManager { - run() { // See if our dumby segment is alive - const sampleSegment = RawMemory.segments[SegmentIDs.General] + const sampleSegment = RawMemory.segments[SegmentIDs.general] if (sampleSegment === undefined) { - - // We can assume that no segments are alive: set them alive and ask the bot to stop everything else for the current tick - - RawMemory.setActiveSegments( - [ - SegmentIDs.General, - SegmentIDs.BasePlans, - SegmentIDs.Errors - ]) - - console.log('activating segments, should take one tick') + this.setSegments() return Result.stop } return Result.success } - endRun() { + private setSegments() { + // We can assume that no segments are alive: set them alive and ask the bot to stop everything else for the current tick - if (this._basePlans) RawMemory.segments[SegmentIDs.BasePlans] = JSON.stringify(this._basePlans) + RawMemory.setActiveSegments([ + SegmentIDs.general, + SegmentIDs.basePlans, + SegmentIDs.IDs, + SegmentIDs.errors, + ]) - // reset intra-tick values + console.log('activating segments, should take one tick') + } + endRun() { + if (this._basePlans) RawMemory.segments[SegmentIDs.basePlans] = JSON.stringify(this._basePlans) + // reset intra-tick values this._basePlans = undefined + + if (this._IDs) RawMemory.segments[SegmentIDs.IDs] = JSON.stringify(this._IDs) + this._IDs = undefined } private _basePlans: BasePlansSegment - get basePlans() { + get basePlans(): BasePlansSegment { if (this._basePlans) return this._basePlans - return this._basePlans = JSON.parse(RawMemory.segments[SegmentIDs.BasePlans]) + return (this._basePlans = JSON.parse(RawMemory.segments[SegmentIDs.basePlans])) + } + + private _IDs: IDsSegment + get IDs(): IDsSegment { + if (this._IDs) return this._IDs + + return (this._IDs = JSON.parse(RawMemory.segments[SegmentIDs.IDs])) } } diff --git a/src/international/transactions.ts b/src/international/transactions.ts index 8003f9131..a6f344034 100644 --- a/src/international/transactions.ts +++ b/src/international/transactions.ts @@ -1,33 +1,34 @@ import { Sleepable } from "utils/sleepable" -import { RoomStatsKeys } from "./constants" +import { IDUpdateInterval, RoomStatsKeys } from "./constants" import { randomIntRange, utils } from "utils/utils" import { collectiveManager } from "./collective" - -const processTransactionsInterval = randomIntRange(50, 100) +import { segmentsManager } from "./segments" export class TransactionsManager { run() { - if (!utils.isTickInterval(processTransactionsInterval)) return + if (!utils.isTickInterval(IDUpdateInterval)) return + + const recordedTransactionIDs = segmentsManager.IDs.recordedTransactionIDs - const currentTransactionIDs = this.findCurrentTransactions() - this.pruneRecordedTransactions(currentTransactionIDs) + const currentTransactionIDs = this.registerCurrentTransactions(recordedTransactionIDs) + this.pruneRecordedTransactions(recordedTransactionIDs, currentTransactionIDs) } - private findCurrentTransactions() { + private registerCurrentTransactions(recordedTransactionIDs: RecordedTransactionIDs) { const currentTransactionIDs = new Set() for (const transaction of Game.market.outgoingTransactions) { currentTransactionIDs.add(transaction.transactionId) - this.registerTransaction(transaction) + this.registerTransaction(recordedTransactionIDs, transaction) } for (const transaction of Game.market.incomingTransactions) { currentTransactionIDs.add(transaction.transactionId) - this.registerTransaction(transaction) + this.registerTransaction(recordedTransactionIDs, transaction) } return currentTransactionIDs @@ -36,22 +37,22 @@ export class TransactionsManager { /** * Remove recorded transaction IDs that are no longer present in current data */ - private pruneRecordedTransactions(currentTransactionIDs: Set) { + private pruneRecordedTransactions(recordedTransactionIDs: RecordedTransactionIDs, currentTransactionIDs: Set) { - for (const transactionID in Memory.recordedTransactionIDs) { + for (const transactionID in recordedTransactionIDs) { // only delete if it isn't in current data if (currentTransactionIDs.has(transactionID)) continue - delete Memory.recordedTransactionIDs[transactionID] + delete recordedTransactionIDs[transactionID] } } - private registerTransaction(transaction: Transaction) { + private registerTransaction(recordedTransactionIDs: RecordedTransactionIDs, transaction: Transaction) { // don't register already registered orders - if (Memory.recordedTransactionIDs[transaction.transactionId]) return + if (recordedTransactionIDs[transaction.transactionId]) return - Memory.recordedTransactionIDs[transaction.transactionId] = 1 + recordedTransactionIDs[transaction.transactionId] = 1 this.processTransaction(transaction) } diff --git a/src/other/ErrorExporter.ts b/src/other/ErrorExporter.ts index fc69105b1..4fea82ec7 100644 --- a/src/other/ErrorExporter.ts +++ b/src/other/ErrorExporter.ts @@ -1,32 +1,32 @@ import { SegmentIDs } from "international/constants" -RawMemory.setActiveSegments([SegmentIDs.Errors]) +RawMemory.setActiveSegments([SegmentIDs.errors]) /** * Rather cpu intensive and unavoidably inefficient. Try to avoid this needing to ba called */ export class ErrorExporter { - public getSegmentData(): ErrorsSegment { - const segment = RawMemory.segments[SegmentIDs.Errors] - if (segment === undefined || segment.length === 0) return { errors: [] } - else return JSON.parse(RawMemory.segments[SegmentIDs.Errors]) - } - - public setSegmentData(data: ErrorsSegment): void { - RawMemory.segments[SegmentIDs.Errors] = JSON.stringify(data) - } + public getSegmentData(): ErrorsSegment { + const segment = RawMemory.segments[SegmentIDs.errors] + if (segment === undefined || segment.length === 0) return { errors: [] } + else return JSON.parse(RawMemory.segments[SegmentIDs.errors]) + } - public addErrorToSegment(stack: string, version?: number): void { - const data = this.getSegmentData() - if (JSON.stringify(data).length > 90000) { - Game.notify(`Error segment (${SegmentIDs.Errors}) is almost full`) - return - } + public setSegmentData(data: ErrorsSegment): void { + RawMemory.segments[SegmentIDs.errors] = JSON.stringify(data) + } - data.errors.push(stack) - if (version) data.version = version - this.setSegmentData(data) + public addErrorToSegment(stack: string, version?: number): void { + const data = this.getSegmentData() + if (JSON.stringify(data).length > 90000) { + Game.notify(`Error segment (${SegmentIDs.errors}) is almost full`) + return } + + data.errors.push(stack) + if (version) data.version = version + this.setSegmentData(data) + } } export const errorExporter = new ErrorExporter() diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index ba50418f5..ccdbd2fc0 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -96,7 +96,11 @@ import { RoomDataManager } from 'room/roomData' import { CommuneDataManager } from 'room/commune/communeData' import { MyCreepUtils } from 'room/creeps/myCreepUtils' import { CreepMoveProcs } from 'room/creeps/creepMoveProcs' -import { CommuneProc } from 'room/commune/communeProcs' +import { CommuneProcs } from 'room/commune/communeProcs' +import { PowerCreepProcs } from 'room/creeps/powerCreeps/powerCreepProcs' +import { PowerCreepUtils } from 'room/creeps/powerCreeps/powerCreepUtils' +import { CreepProcs } from 'room/creeps/creepProcs' +import { CreepLogiProcs } from 'room/creeps/creepLogiProcs' export function profilerRegister() { // Classes @@ -125,9 +129,6 @@ export function profilerRegister() { profiler.registerClass(CustomPathFinder, 'CustomPathFinder') profiler.registerClass(TradingUtils, 'MarketUtils') profiler.registerClass(Utils, 'Utils') - profiler.registerClass(CreepUtils, 'CreepUtils') - profiler.registerClass(MyCreepUtils, 'MyCreepUtils') - profiler.registerClass(CreepMoveProcs, 'CreepMoveUtils') // Room classes @@ -145,9 +146,6 @@ export function profilerRegister() { profiler.registerClass(HaulRequestManager, 'HaulRequestManager') profiler.registerClass(SourceManager, 'SourceManager') profiler.registerClass(WorkRequestManager, 'WorkRequestManager') - profiler.registerClass(Quad, 'Quad') - profiler.registerClass(DynamicSquad, 'DynamicSquad') - profiler.registerClass(Duo, 'Duo') profiler.registerClass(EndTickCreepManager, 'EndTickCreepManager') profiler.registerClass(ContainerManager, 'ContainerManager') profiler.registerClass(DroppedResourceManager, 'DroppedResourceManager') @@ -170,7 +168,22 @@ export function profilerRegister() { profiler.registerClass(CommuneUtils, 'CommuneUtils') profiler.registerClass(RoomDataManager, 'RoomDataManager') profiler.registerClass(CommuneDataManager, 'CommuneDataManager') - profiler.registerClass(CommuneProc, 'CommuneProc') + profiler.registerClass(CommuneProcs, 'CommuneProc') + + // Creep classes + + profiler.registerClass(PowerCreepProcs, 'PowerCreepProcs') + profiler.registerClass(PowerCreepUtils, 'PowerCreepUtils') + + profiler.registerClass(CreepProcs, 'CreepProcs') + profiler.registerClass(CreepMoveProcs, 'CreepMoveProcs') + profiler.registerClass(CreepLogiProcs, 'CreepLogiProcs') + profiler.registerClass(CreepUtils, 'CreepUtils') + profiler.registerClass(MyCreepUtils, 'MyCreepUtils') + + profiler.registerClass(Quad, 'Quad') + profiler.registerClass(DynamicSquad, 'DynamicSquad') + profiler.registerClass(Duo, 'Duo') // Objects diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index 5fee24a49..1f61f5136 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -55,281 +55,277 @@ import { ConstructionManager } from 'room/construction/construction' import { roomNameUtils } from 'room/roomNameUtils' import { LogTypes, customLog } from 'utils/logging' import { communeUtils } from './communeUtils' -import { communeProc } from './communeProcs' +import { communeProcs } from './communeProcs' export type ResourceTargets = { - min: Partial<{[key in ResourceConstant]: number }> - max: Partial<{[key in ResourceConstant]: number }> + min: Partial<{ [key in ResourceConstant]: number }> + max: Partial<{ [key in ResourceConstant]: number }> } export class CommuneManager { - static communeManagers: { [roomName: string]: CommuneManager } = {} - - // Managers - - constructionManager: ConstructionManager - defenceManager: DefenceManager - - towerManager: TowerManager - storingStructuresManager: StoringStructuresManager - linkManager: LinkManager - labManager: LabManager - powerSpawningStructuresManager: PowerSpawnsManager - spawnRequestsManager: SpawnRequestsManager - spawningStructuresManager: SpawningStructuresManager - sourceManager: SourceManager - - observerManager: ObserverManager - terminalManager: TerminalManager - remotesManager: RemotesManager - haulerSizeManager: HaulerSizeManager - - workRequestManager: WorkRequestManager - combatRequestManager: CombatRequestManager - haulRequestManager: HaulRequestManager - haulerNeedManager: HaulerNeedManager - - factoryManager: FactoryManager + static communeManagers: { [roomName: string]: CommuneManager } = {} + + // Managers + + constructionManager: ConstructionManager + defenceManager: DefenceManager + + towerManager: TowerManager + storingStructuresManager: StoringStructuresManager + linkManager: LinkManager + labManager: LabManager + powerSpawningStructuresManager: PowerSpawnsManager + spawnRequestsManager: SpawnRequestsManager + spawningStructuresManager: SpawningStructuresManager + sourceManager: SourceManager + + observerManager: ObserverManager + terminalManager: TerminalManager + remotesManager: RemotesManager + haulerSizeManager: HaulerSizeManager + + workRequestManager: WorkRequestManager + combatRequestManager: CombatRequestManager + haulRequestManager: HaulRequestManager + haulerNeedManager: HaulerNeedManager + + factoryManager: FactoryManager + + // + + room: Room + nextSpawnEnergyAvailable: number + /** + * Organized by remote and sourceIndex + */ + remoteSourceHarvesters: { [remote: string]: string[][] } + communeHaulers: string[] + /** + * The total amount of carry parts for haulers + */ + haulerCarryParts: number + /** + * The total amount of carry parts for haulers presently responding to requests in the commune + */ + communeHaulerCarryParts: number + towerAttackTarget: Creep + /** + * The carry parts needed to effectively run the commune + */ + communeHaulerNeed: number + mineralHarvestStrength: number + upgradeStrength: number + remoteResourcePathType: RemoteResourcePathTypes + + constructor() { + this.constructionManager = new ConstructionManager(this) + this.defenceManager = new DefenceManager(this) + + this.towerManager = new TowerManager(this) + this.storingStructuresManager = new StoringStructuresManager(this) + this.linkManager = new LinkManager(this) + this.labManager = new LabManager(this) + this.powerSpawningStructuresManager = new PowerSpawnsManager(this) + this.spawnRequestsManager = new SpawnRequestsManager(this) + this.spawningStructuresManager = new SpawningStructuresManager(this) + this.sourceManager = new SourceManager(this) + + this.observerManager = new ObserverManager(this) + this.terminalManager = new TerminalManager(this) + this.remotesManager = new RemotesManager(this) + this.haulerSizeManager = new HaulerSizeManager(this) + + this.workRequestManager = new WorkRequestManager(this) + this.combatRequestManager = new CombatRequestManager(this) + this.haulRequestManager = new HaulRequestManager(this) + this.haulerNeedManager = new HaulerNeedManager(this) + + this.factoryManager = new FactoryManager(this) + } + + update(room: Room) { + // non manager // - room: Room - nextSpawnEnergyAvailable: number - /** - * Organized by remote and sourceIndex - */ - remoteSourceHarvesters: { [remote: string]: string[][] } - communeHaulers: string[] - /** - * The total amount of carry parts for haulers - */ - haulerCarryParts: number - /** - * The total amount of carry parts for haulers presently responding to requests in the commune - */ - communeHaulerCarryParts: number - towerAttackTarget: Creep - /** - * The carry parts needed to effectively run the commune - */ - communeHaulerNeed: number - mineralHarvestStrength: number - upgradeStrength: number - remoteResourcePathType: RemoteResourcePathTypes - - constructor() { - this.constructionManager = new ConstructionManager(this) - this.defenceManager = new DefenceManager(this) - - this.towerManager = new TowerManager(this) - this.storingStructuresManager = new StoringStructuresManager(this) - this.linkManager = new LinkManager(this) - this.labManager = new LabManager(this) - this.powerSpawningStructuresManager = new PowerSpawnsManager(this) - this.spawnRequestsManager = new SpawnRequestsManager(this) - this.spawningStructuresManager = new SpawningStructuresManager(this) - this.sourceManager = new SourceManager(this) - - this.observerManager = new ObserverManager(this) - this.terminalManager = new TerminalManager(this) - this.remotesManager = new RemotesManager(this) - this.haulerSizeManager = new HaulerSizeManager(this) - - this.workRequestManager = new WorkRequestManager(this) - this.combatRequestManager = new CombatRequestManager(this) - this.haulRequestManager = new HaulRequestManager(this) - this.haulerNeedManager = new HaulerNeedManager(this) - - this.factoryManager = new FactoryManager(this) + delete this._minStoredEnergy + delete this._storingStructures + delete this._maxCombatRequests + delete this._defensiveRamparts + delete this._sourceLinks + delete this._controllerLink + delete this.towerAttackTarget + delete this._actionableSpawningStructures + delete this._spawningStructuresByPriority + delete this._spawningStructuresByNeed + + if (randomTick()) { + delete this._minRampartHits + delete this._storedEnergyBuildThreshold } - update(room: Room) { - - // non manager - - // - - delete this._minStoredEnergy - delete this._storingStructures - delete this._maxCombatRequests - delete this._defensiveRamparts - delete this._sourceLinks - delete this._controllerLink - delete this.towerAttackTarget - delete this._actionableSpawningStructures - delete this._spawningStructuresByPriority - delete this._spawningStructuresByNeed - - if (randomTick()) { - delete this._minRampartHits - delete this._storedEnergyBuildThreshold - } - - if (utils.isTickInterval(100)) { - - delete this._upgradeStructure - delete this._hasSufficientRoads - delete this._resourceTargets - } + if (utils.isTickInterval(100)) { + delete this._upgradeStructure + delete this._hasSufficientRoads + delete this._resourceTargets + } - this.room = room - const roomMemory = Memory.rooms[room.name] + this.room = room + const roomMemory = Memory.rooms[room.name] - // If we should abandon the room + // If we should abandon the room - if (roomMemory[RoomMemoryKeys.abandonCommune] === true) { - room.controller.unclaim() - roomMemory[RoomMemoryKeys.type] = RoomTypes.neutral - roomNameUtils.cleanMemory(room.name) + if (roomMemory[RoomMemoryKeys.abandonCommune] === true) { + room.controller.unclaim() + roomMemory[RoomMemoryKeys.type] = RoomTypes.neutral + roomNameUtils.cleanMemory(room.name) - for (const cSite of room.find(FIND_MY_CONSTRUCTION_SITES)) { - cSite.remove() - } - return - } + for (const cSite of room.find(FIND_MY_CONSTRUCTION_SITES)) { + cSite.remove() + } + return + } - collectiveManager.communes.add(room.name) - - if (this.room.controller.safeMode) collectiveManager.safemodedCommuneName = this.room.name - - if (!roomMemory[RoomMemoryKeys.greatestRCL]) { - if (collectiveManager.communes.size <= 1) - roomMemory[RoomMemoryKeys.greatestRCL] = room.controller.level - else if ( - room.controller.progress > room.controller.progressTotal || - room.find(FIND_MY_STRUCTURES, { - filter: structure => structure.structureType !== STRUCTURE_CONTROLLER, - }).length - ) { - roomMemory[RoomMemoryKeys.greatestRCL] = 8 - } else roomMemory[RoomMemoryKeys.greatestRCL] = room.controller.level - } else if (room.controller.level > roomMemory[RoomMemoryKeys.greatestRCL]) { - roomMemory[RoomMemoryKeys.greatestRCL] = room.controller.level - } + collectiveManager.communes.add(room.name) + + if (this.room.controller.safeMode) collectiveManager.safemodedCommuneName = this.room.name + + if (!roomMemory[RoomMemoryKeys.greatestRCL]) { + if (collectiveManager.communes.size <= 1) + roomMemory[RoomMemoryKeys.greatestRCL] = room.controller.level + else if ( + room.controller.progress > room.controller.progressTotal || + room.find(FIND_MY_STRUCTURES, { + filter: structure => structure.structureType !== STRUCTURE_CONTROLLER, + }).length + ) { + roomMemory[RoomMemoryKeys.greatestRCL] = 8 + } else roomMemory[RoomMemoryKeys.greatestRCL] = room.controller.level + } else if (room.controller.level > roomMemory[RoomMemoryKeys.greatestRCL]) { + roomMemory[RoomMemoryKeys.greatestRCL] = room.controller.level + } - communeProc.registerFunneling(room) - communeProc.getRCLUpdate(room) + communeProcs.registerFunneling(room) + communeProcs.getRCLUpdate(room) - if (!roomMemory[RoomMemoryKeys.combatRequests]) - roomMemory[RoomMemoryKeys.combatRequests] = [] - if (!roomMemory[RoomMemoryKeys.haulRequests]) roomMemory[RoomMemoryKeys.haulRequests] = [] + if (!roomMemory[RoomMemoryKeys.combatRequests]) roomMemory[RoomMemoryKeys.combatRequests] = [] + if (!roomMemory[RoomMemoryKeys.haulRequests]) roomMemory[RoomMemoryKeys.haulRequests] = [] - this.upgradeStrength = 0 - this.mineralHarvestStrength = 0 - this.communeHaulerNeed = 0 - this.nextSpawnEnergyAvailable = room.energyAvailable + this.upgradeStrength = 0 + this.mineralHarvestStrength = 0 + this.communeHaulerNeed = 0 + this.nextSpawnEnergyAvailable = room.energyAvailable - if (!roomMemory[RoomMemoryKeys.remotes]) roomMemory[RoomMemoryKeys.remotes] = [] - if (roomMemory[RoomMemoryKeys.threatened] == undefined) { - roomMemory[RoomMemoryKeys.threatened] = 0 - } - - room.usedRampartIDs = new Map() + if (!roomMemory[RoomMemoryKeys.remotes]) roomMemory[RoomMemoryKeys.remotes] = [] + if (roomMemory[RoomMemoryKeys.threatened] == undefined) { + roomMemory[RoomMemoryKeys.threatened] = 0 + } - room.creepsOfRemote = {} - this.haulerCarryParts = 0 - this.communeHaulerCarryParts = 0 - this.remoteSourceHarvesters = {} - this.communeHaulers = [] + room.usedRampartIDs = new Map() - this.remotesManager.update() + room.creepsOfRemote = {} + this.haulerCarryParts = 0 + this.communeHaulerCarryParts = 0 + this.remoteSourceHarvesters = {} + this.communeHaulers = [] - // For each role, construct an array for creepsFromRoom + this.remotesManager.update() - room.creepsFromRoom = {} - for (const role of creepRoles) room.creepsFromRoom[role] = [] + // For each role, construct an array for creepsFromRoom - room.creepsFromRoomAmount = 0 + room.creepsFromRoom = {} + for (const role of creepRoles) room.creepsFromRoom[role] = [] - room.scoutTargets = new Set() + room.creepsFromRoomAmount = 0 - if (!roomMemory[RoomMemoryKeys.deposits]) roomMemory[RoomMemoryKeys.deposits] = {} + room.scoutTargets = new Set() - room.attackingDefenderIDs = new Set() - room.defenderEnemyTargetsWithDamage = new Map() - room.defenderEnemyTargetsWithDefender = new Map() + if (!roomMemory[RoomMemoryKeys.deposits]) roomMemory[RoomMemoryKeys.deposits] = {} - if (room.terminal && room.controller.level >= 6) { - collectiveManager.terminalCommunes.push(room.name) - } + room.attackingDefenderIDs = new Set() + room.defenderEnemyTargetsWithDamage = new Map() + room.defenderEnemyTargetsWithDefender = new Map() - collectiveManager.mineralNodes[this.room.roomManager.mineral.mineralType] += 1 + if (room.terminal && room.controller.level >= 6) { + collectiveManager.terminalCommunes.push(room.name) } - initRun() { - this.preTickTest() + collectiveManager.mineralNodes[this.room.roomManager.mineral.mineralType] += 1 + } - this.room.roomManager.communePlanner.preTickRun(this.room) + initRun() { + this.preTickTest() - const roomMemory = Memory.rooms[this.room.name] - if (!roomMemory[RoomMemoryKeys.communePlanned]) return + this.room.roomManager.communePlanner.preTickRun(this.room) - this.constructionManager.preTickRun() - this.observerManager.preTickRun() - this.terminalManager.preTickRun() - this.remotesManager.initRun() - this.haulRequestManager.preTickRun() - this.workRequestManager.preTickRun() - } + const roomMemory = Memory.rooms[this.room.name] + if (!roomMemory[RoomMemoryKeys.communePlanned]) return - run() { - if (!this.room.memory[RoomMemoryKeys.communePlanned]) return + this.constructionManager.preTickRun() + this.observerManager.preTickRun() + this.terminalManager.preTickRun() + this.remotesManager.initRun() + this.haulRequestManager.preTickRun() + this.workRequestManager.preTickRun() + } - this.defenceManager.run() - this.towerManager.run() - this.defenceManager.manageThreat() - this.defenceManager.manageDefenceRequests() + run() { + if (!this.room.memory[RoomMemoryKeys.communePlanned]) return - this.terminalManager.run() + this.defenceManager.run() + this.towerManager.run() + this.defenceManager.manageThreat() + this.defenceManager.manageDefenceRequests() - this.workRequestManager.run() - this.combatRequestManager.run() - this.haulRequestManager.run() + this.terminalManager.run() - this.sourceManager.run() - this.remotesManager.run() - this.haulerNeedManager.run() + this.workRequestManager.run() + this.combatRequestManager.run() + this.haulRequestManager.run() - this.spawningStructuresManager.createRoomLogisticsRequests() - this.storingStructuresManager.run() - this.factoryManager.run() - this.room.roomManager.containerManager.runCommune() - this.room.roomManager.droppedResourceManager.runCommune() - this.room.roomManager.tombstoneManager.runCommune() - this.room.roomManager.ruinManager.runCommune() - this.linkManager.run() - this.labManager.run() - this.powerSpawningStructuresManager.run() - this.spawningStructuresManager.organizeSpawns() - this.spawningStructuresManager.createPowerTasks() + this.sourceManager.run() + this.remotesManager.run() + this.haulerNeedManager.run() - this.room.roomManager.creepRoleManager.run() - this.room.roomManager.powerCreepRoleManager.run() + this.spawningStructuresManager.createRoomLogisticsRequests() + this.storingStructuresManager.run() + this.factoryManager.run() + this.room.roomManager.containerManager.runCommune() + this.room.roomManager.droppedResourceManager.runCommune() + this.room.roomManager.tombstoneManager.runCommune() + this.room.roomManager.ruinManager.runCommune() + this.linkManager.run() + this.labManager.run() + this.powerSpawningStructuresManager.run() + this.spawningStructuresManager.organizeSpawns() + this.spawningStructuresManager.createPowerTasks() - this.haulerSizeManager.run() - this.spawningStructuresManager.run() + this.room.roomManager.creepRoleManager.run() + this.room.roomManager.powerCreepRoleManager.run() - this.room.roomManager.endTickCreepManager.run() - this.room.roomManager.roomVisualsManager.run() + this.haulerSizeManager.run() + this.spawningStructuresManager.run() - this.test() - } + this.room.roomManager.endTickCreepManager.run() + this.room.roomManager.roomVisualsManager.run() - private preTickTest() { - return + this.test() + } - let CPUUsed = Game.cpu.getUsed() + private preTickTest() { + return - customLog('CPU TEST 1 ' + this.room.name, Game.cpu.getUsed() - CPUUsed, { - type: LogTypes.info, - }) - } + let CPUUsed = Game.cpu.getUsed() - private test() { + customLog('CPU TEST 1 ' + this.room.name, Game.cpu.getUsed() - CPUUsed, { + type: LogTypes.info, + }) + } - /* this.room.visualizeCostMatrix(this.room.defaultCostMatrix) */ + private test() { + /* this.room.visualizeCostMatrix(this.room.defaultCostMatrix) */ - /* + /* const array = new Array(2500) for (let i = 0; i < array.length; i++) { @@ -337,596 +333,592 @@ export class CommuneManager { } */ - return - - let CPUUsed = Game.cpu.getUsed() + return - customLog('CPU TEST 1 ' + this.room.name, Game.cpu.getUsed() - CPUUsed, { - type: LogTypes.info, - }) - } + let CPUUsed = Game.cpu.getUsed() - /** - * Debug - */ - private visualizeSpawningStructuresByNeed() { - customLog('spawningStructuresByNeed', this.spawningStructuresByNeed, { - type: LogTypes.error, - }) - for (const structure of this.spawningStructuresByNeed) { - this.room.coordVisual(structure.pos.x, structure.pos.y) - } - } + customLog('CPU TEST 1 ' + this.room.name, Game.cpu.getUsed() - CPUUsed, { + type: LogTypes.info, + }) + } - deleteCombatRequest(requestName: string, index: number) { - delete Memory.combatRequests[requestName] - Memory.rooms[this.room.name][RoomMemoryKeys.combatRequests].splice(index, 1) + /** + * Debug + */ + private visualizeSpawningStructuresByNeed() { + customLog('spawningStructuresByNeed', this.spawningStructuresByNeed, { + type: LogTypes.error, + }) + for (const structure of this.spawningStructuresByNeed) { + this.room.coordVisual(structure.pos.x, structure.pos.y) } - - removeRemote(remoteName: string, index: number) { - Memory.rooms[this.room.name][RoomMemoryKeys.remotes].splice(index, 1) - - const remoteMemory = Memory.rooms[remoteName] - - remoteMemory[RoomMemoryKeys.type] = RoomTypes.neutral - roomNameUtils.cleanMemory(remoteName) + } + + deleteCombatRequest(requestName: string, index: number) { + delete Memory.combatRequests[requestName] + Memory.rooms[this.room.name][RoomMemoryKeys.combatRequests].splice(index, 1) + } + + removeRemote(remoteName: string, index: number) { + Memory.rooms[this.room.name][RoomMemoryKeys.remotes].splice(index, 1) + + const remoteMemory = Memory.rooms[remoteName] + + remoteMemory[RoomMemoryKeys.type] = RoomTypes.neutral + roomNameUtils.cleanMemory(remoteName) + } + + findMinRangedAttackCost(minDamage: number = 10) { + const rawCost = + (minDamage / RANGED_ATTACK_POWER) * BODYPART_COST[RANGED_ATTACK] + + (minDamage / RANGED_ATTACK_POWER) * BODYPART_COST[MOVE] + const combinedCost = BODYPART_COST[RANGED_ATTACK] + BODYPART_COST[MOVE] + + return Math.ceil(rawCost / combinedCost) * combinedCost + } + + findMinMeleeAttackCost(minDamage: number = 30) { + const rawCost = + (minDamage / ATTACK_POWER) * BODYPART_COST[ATTACK] + + (minDamage / ATTACK_POWER) * BODYPART_COST[MOVE] + const combinedCost = BODYPART_COST[ATTACK] + BODYPART_COST[MOVE] + + return Math.ceil(rawCost / combinedCost) * combinedCost + } + + /** + * Finds how expensive it will be to provide enough heal parts to withstand attacks + */ + findMinHealCost(minHeal: number = 12) { + const rawCost = + (minHeal / HEAL_POWER) * BODYPART_COST[HEAL] + (minHeal / HEAL_POWER) * BODYPART_COST[MOVE] + const combinedCost = BODYPART_COST[HEAL] + BODYPART_COST[MOVE] + + return Math.ceil(rawCost / combinedCost) * combinedCost + } + + findMinDismantleCost(minDismantle: number = 0) { + const rawCost = minDismantle * BODYPART_COST[WORK] + minDismantle * BODYPART_COST[MOVE] + const combinedCost = BODYPART_COST[WORK] + BODYPART_COST[MOVE] + + return Math.ceil(rawCost / combinedCost) * combinedCost + } + + get estimatedEnergyIncome() { + const roomStats = Memory.stats.rooms[this.room.name] + + return roundTo( + roomStats[RoomStatsKeys.EnergyInputHarvest] + + roomStats[RoomStatsKeys.RemoteEnergyInputHarvest] + + roomStats[RoomStatsKeys.EnergyInputBought], + 2, + ) + } + + private _minStoredEnergy: number + + /** + * The minimum amount of stored energy the room should only use in emergencies + */ + get minStoredEnergy() { + if (this._minStoredEnergy !== undefined) return this._minStoredEnergy + + // Consider the controller level to an exponent and this room's attack threat + + this._minStoredEnergy = + Math.pow(this.room.controller.level * 6000, 1.06) + + this.room.memory[RoomMemoryKeys.threatened] * 20 + + // If there is a next RCL, Take away some minimum based on how close we are to the next RCL + + const RClCost = this.room.controller.progressTotal + if (RClCost) { + this._minStoredEnergy -= Math.pow( + (Math.min(this.room.controller.progress, RClCost) / RClCost) * 20, + 3.35, + ) } - - findMinRangedAttackCost(minDamage: number = 10) { - const rawCost = - (minDamage / RANGED_ATTACK_POWER) * BODYPART_COST[RANGED_ATTACK] + - (minDamage / RANGED_ATTACK_POWER) * BODYPART_COST[MOVE] - const combinedCost = BODYPART_COST[RANGED_ATTACK] + BODYPART_COST[MOVE] - - return Math.ceil(rawCost / combinedCost) * combinedCost + return (this._minStoredEnergy = Math.floor(this._minStoredEnergy)) + } + + private _targetEnergy: number + /** + * The amount of energy the room wants to have + */ + get targetEnergy() { + // Consider the controller level to an exponent and this room's attack threat + + this._targetEnergy = + Math.pow(this.room.controller.level * 6000, 1.06) + + this.room.memory[RoomMemoryKeys.threatened] * 20 + + // If there is a next RCL, Take away some minimum based on how close we are to the next RCL + + const RClCost = this.room.controller.progressTotal + if (RClCost) { + this._targetEnergy -= Math.pow( + (Math.min(this.room.controller.progress, RClCost) / RClCost) * 20, + 3.35, + ) } - findMinMeleeAttackCost(minDamage: number = 30) { - const rawCost = - (minDamage / ATTACK_POWER) * BODYPART_COST[ATTACK] + - (minDamage / ATTACK_POWER) * BODYPART_COST[MOVE] - const combinedCost = BODYPART_COST[ATTACK] + BODYPART_COST[MOVE] - - return Math.ceil(rawCost / combinedCost) * combinedCost - } + return this._targetEnergy + } - /** - * Finds how expensive it will be to provide enough heal parts to withstand attacks - */ - findMinHealCost(minHeal: number = 12) { - const rawCost = - (minHeal / HEAL_POWER) * BODYPART_COST[HEAL] + - (minHeal / HEAL_POWER) * BODYPART_COST[MOVE] - const combinedCost = BODYPART_COST[HEAL] + BODYPART_COST[MOVE] - - return Math.ceil(rawCost / combinedCost) * combinedCost - } - - findMinDismantleCost(minDismantle: number = 0) { - const rawCost = minDismantle * BODYPART_COST[WORK] + minDismantle * BODYPART_COST[MOVE] - const combinedCost = BODYPART_COST[WORK] + BODYPART_COST[MOVE] - - return Math.ceil(rawCost / combinedCost) * combinedCost - } - - get estimatedEnergyIncome() { - const roomStats = Memory.stats.rooms[this.room.name] - - return roundTo( - roomStats[RoomStatsKeys.EnergyInputHarvest] + - roomStats[RoomStatsKeys.RemoteEnergyInputHarvest] + - roomStats[RoomStatsKeys.EnergyInputBought], - 2, - ) - } - - private _minStoredEnergy: number - - /** - * The minimum amount of stored energy the room should only use in emergencies - */ - get minStoredEnergy() { - if (this._minStoredEnergy !== undefined) return this._minStoredEnergy - - // Consider the controller level to an exponent and this room's attack threat - - this._minStoredEnergy = - Math.pow(this.room.controller.level * 6000, 1.06) + - this.room.memory[RoomMemoryKeys.threatened] * 20 - - // If there is a next RCL, Take away some minimum based on how close we are to the next RCL - - const RClCost = this.room.controller.progressTotal - if (RClCost) { - this._minStoredEnergy -= Math.pow( - (Math.min(this.room.controller.progress, RClCost) / RClCost) * 20, - 3.35, - ) - } - return (this._minStoredEnergy = Math.floor(this._minStoredEnergy)) - } - - private _targetEnergy: number - /** - * The amount of energy the room wants to have - */ - get targetEnergy() { - // Consider the controller level to an exponent and this room's attack threat - - this._targetEnergy = - Math.pow(this.room.controller.level * 6000, 1.06) + - this.room.memory[RoomMemoryKeys.threatened] * 20 - - // If there is a next RCL, Take away some minimum based on how close we are to the next RCL - - const RClCost = this.room.controller.progressTotal - if (RClCost) { - this._targetEnergy -= Math.pow( - (Math.min(this.room.controller.progress, RClCost) / RClCost) * 20, - 3.35, - ) - } - - return this._targetEnergy - } - - get storedEnergyUpgradeThreshold() { -/* + get storedEnergyUpgradeThreshold() { + /* if (this.room.terminal && this.room.controller.level >= 6) { } */ - return Math.floor(this.minStoredEnergy * 1.3) - } - - private _storedEnergyBuildThreshold: number - get storedEnergyBuildThreshold() { - this._storedEnergyBuildThreshold = Math.floor( - Math.min( - 1000 + - findLowestScore( - this.room.find(FIND_MY_CONSTRUCTION_SITES), - cSite => cSite.progressTotal - cSite.progress, - ) * - 10, - this.minStoredEnergy * 1.2, - ), - ) - - return this._storedEnergyBuildThreshold - } - - get rampartsMaintenanceCost() { - return roundTo(this.room.roomManager.structures.rampart.length * rampartUpkeepCost, 2) - } - - private _minRampartHits: number - - get minRampartHits() { - if (this._minRampartHits !== undefined) return this._minRampartHits - - const level = this.room.controller.level - - return (this._minRampartHits = - Math.min( - Math.floor( - Math.pow((level - 3) * 50, 2.5) + - Memory.rooms[this.room.name][RoomMemoryKeys.threatened] * - 5 * - Math.pow(level, 2), - ), - RAMPART_HITS_MAX[level] * 0.9, - ) || 20000) - } - - private _storingStructures: (StructureStorage | StructureTerminal)[] - - /** - * Storing structures - storage or teirmal - filtered to for defined and RCL active - */ - get storingStructures() { - if (this._storingStructures) return this._storingStructures - - const storingStructures: (StructureStorage | StructureTerminal)[] = [] - - if (this.room.storage && this.room.controller.level >= 4) - storingStructures.push(this.room.storage) - if (this.room.terminal && this.room.controller.level >= 6) - storingStructures.push(this.room.terminal) - - return (this._storingStructures = storingStructures) - } - - get storingStructuresCapacity() { - let capacity = 0 - if (this.room.storage) capacity += this.room.storage.store.getCapacity() - if (this.room.terminal) capacity += this.room.terminal.store.getCapacity() - return capacity - } - - private _maxCombatRequests: number - - /** - * The largest amount of combat requests the room can respond to - */ - get maxCombatRequests() { - if (this._maxCombatRequests !== undefined) return this._maxCombatRequests - - /* return (this._maxCombatRequests = + return Math.floor(this.minStoredEnergy * 1.3) + } + + private _storedEnergyBuildThreshold: number + get storedEnergyBuildThreshold() { + this._storedEnergyBuildThreshold = Math.floor( + Math.min( + 1000 + + findLowestScore( + this.room.find(FIND_MY_CONSTRUCTION_SITES), + cSite => cSite.progressTotal - cSite.progress, + ) * + 10, + this.minStoredEnergy * 1.2, + ), + ) + + return this._storedEnergyBuildThreshold + } + + get rampartsMaintenanceCost() { + return roundTo(this.room.roomManager.structures.rampart.length * rampartUpkeepCost, 2) + } + + private _minRampartHits: number + + get minRampartHits() { + if (this._minRampartHits !== undefined) return this._minRampartHits + + const level = this.room.controller.level + + return (this._minRampartHits = + Math.min( + Math.floor( + Math.pow((level - 3) * 50, 2.5) + + Memory.rooms[this.room.name][RoomMemoryKeys.threatened] * 5 * Math.pow(level, 2), + ), + RAMPART_HITS_MAX[level] * 0.9, + ) || 20000) + } + + private _storingStructures: (StructureStorage | StructureTerminal)[] + + /** + * Storing structures - storage or teirmal - filtered to for defined and RCL active + */ + get storingStructures() { + if (this._storingStructures) return this._storingStructures + + const storingStructures: (StructureStorage | StructureTerminal)[] = [] + + if (this.room.storage && this.room.controller.level >= 4) + storingStructures.push(this.room.storage) + if (this.room.terminal && this.room.controller.level >= 6) + storingStructures.push(this.room.terminal) + + return (this._storingStructures = storingStructures) + } + + get storingStructuresCapacity() { + let capacity = 0 + if (this.room.storage) capacity += this.room.storage.store.getCapacity() + if (this.room.terminal) capacity += this.room.terminal.store.getCapacity() + return capacity + } + + private _maxCombatRequests: number + + /** + * The largest amount of combat requests the room can respond to + */ + get maxCombatRequests() { + if (this._maxCombatRequests !== undefined) return this._maxCombatRequests + + /* return (this._maxCombatRequests = (this.room.roomManager.resourcesInStoringStructures.energy - this.minStoredEnergy) / (5000 + this.room.controller.level * 1000)) */ - return (this._maxCombatRequests = - this.room.roomManager.resourcesInStoringStructures.energy / - (10000 + this.room.controller.level * 3000)) + return (this._maxCombatRequests = + this.room.roomManager.resourcesInStoringStructures.energy / + (10000 + this.room.controller.level * 3000)) + } + + /** + * Wether builders should ask for resources instead of seeking them out themselves + */ + get buildersMakeRequests() { + // Only set true if there are no viable storing structures + + return ( + !this.room.roomManager.fastFillerContainers.length && + !this.room.storage && + !this.room.terminal + ) + } + + /** + * The max upgrade strength when we have no local storing structure + */ + findNudeMaxUpgradeStrength() { + return 100 + } + + private _hasSufficientRoads: boolean + /** + * Informs wether we have sufficient roads compared to the roadQuota for our RCL + */ + get hasSufficientRoads() { + /* if (this._hasSufficientRoads !== undefined) return this._hasSufficientRoads */ + + const roomMemory = Memory.rooms[this.room.name] + const RCLIndex = this.room.controller.level - 1 + // Try one RCL below, though propagate to the present RCL if there is no roadQuota for the previous RCL + const minRoads = + roomMemory[RoomMemoryKeys.roadQuota][RCLIndex - 1] || + roomMemory[RoomMemoryKeys.roadQuota][RCLIndex] + if (minRoads === 0) return false + + const roads = this.room.roomManager.structures.road.length + + // Make sure we have 90% of the intended roads amount + return (this._hasSufficientRoads = roads >= minRoads * 0.9) + } + + private _upgradeStructure: AnyStoreStructure | false + get upgradeStructure() { + if (this._upgradeStructure !== undefined) return this._upgradeStructure + + // We can't use a structure + + const controllerLevel = this.room.controller.level + if (controllerLevel < 2) return (this._upgradeStructure = false) + + // We can use containers + + if (controllerLevel < 5) { + return (this._upgradeStructure = this.room.roomManager.controllerContainer) } - /** - * Wether builders should ask for resources instead of seeking them out themselves - */ - get buildersMakeRequests() { - // Only set true if there are no viable storing structures - - return ( - !this.room.roomManager.fastFillerContainers.length && - !this.room.storage && - !this.room.terminal - ) + // We can use links + + const controllerLink = this.controllerLink + if (!controllerLink || !controllerLink.isRCLActionable) return false + + const hubLink = this.room.roomManager.hubLink + if (!hubLink || !hubLink.isRCLActionable) return false + + return (this._upgradeStructure = controllerLink) + } + + private _structureTypesByBuildPriority: BuildableStructureConstant[] + get structureTypesByBuildPriority() { + if (this._structureTypesByBuildPriority) return this._structureTypesByBuildPriority + + if (!this.room.roomManager.fastFillerContainers.length) { + return (this._structureTypesByBuildPriority = [ + STRUCTURE_RAMPART, + STRUCTURE_WALL, + STRUCTURE_SPAWN, + STRUCTURE_CONTAINER, + STRUCTURE_EXTENSION, + STRUCTURE_ROAD, + STRUCTURE_STORAGE, + STRUCTURE_TOWER, + STRUCTURE_TERMINAL, + STRUCTURE_LINK, + STRUCTURE_EXTRACTOR, + STRUCTURE_LAB, + STRUCTURE_FACTORY, + STRUCTURE_POWER_SPAWN, + STRUCTURE_NUKER, + STRUCTURE_OBSERVER, + ]) } - /** - * The max upgrade strength when we have no local storing structure - */ - findNudeMaxUpgradeStrength() { - return 100 + this._structureTypesByBuildPriority = [ + STRUCTURE_RAMPART, + STRUCTURE_WALL, + STRUCTURE_SPAWN, + STRUCTURE_EXTENSION, + STRUCTURE_CONTAINER, + STRUCTURE_ROAD, + STRUCTURE_STORAGE, + STRUCTURE_TOWER, + STRUCTURE_TERMINAL, + STRUCTURE_LINK, + STRUCTURE_EXTRACTOR, + STRUCTURE_LAB, + STRUCTURE_FACTORY, + STRUCTURE_POWER_SPAWN, + STRUCTURE_NUKER, + STRUCTURE_OBSERVER, + ] + + return this._structureTypesByBuildPriority + } + + /** + * When the room needs to upgrade at high priority to remove the downgrade timer + */ + get controllerDowngradeUpgradeThreshold() { + return Math.floor(CONTROLLER_DOWNGRADE[this.room.controller.level] * 0.75) + } + + private _defensiveRamparts: StructureRampart[] + get defensiveRamparts() { + if (this._defensiveRamparts) return this._defensiveRamparts + + const ramparts: StructureRampart[] = [] + + const stampAnchors = this.room.roomManager.stampAnchors + if (!stampAnchors) throw Error('No stampAnchors for defensive ramparts') + + const minCutCoords = new Set(stampAnchors.minCutRampart.map(coord => packCoord(coord))) + + for (const structure of this.room.roomManager.structures.rampart) { + if (!minCutCoords.has(packCoord(structure.pos))) continue + + ramparts.push(structure) } - private _hasSufficientRoads: boolean - /** - * Informs wether we have sufficient roads compared to the roadQuota for our RCL - */ - get hasSufficientRoads() { - /* if (this._hasSufficientRoads !== undefined) return this._hasSufficientRoads */ - - const roomMemory = Memory.rooms[this.room.name] - const RCLIndex = this.room.controller.level - 1 - // Try one RCL below, though propagate to the present RCL if there is no roadQuota for the previous RCL - const minRoads = - roomMemory[RoomMemoryKeys.roadQuota][RCLIndex - 1] || - roomMemory[RoomMemoryKeys.roadQuota][RCLIndex] - if (minRoads === 0) return false - - const roads = this.room.roomManager.structures.road.length - - // Make sure we have 90% of the intended roads amount - return (this._hasSufficientRoads = roads >= minRoads * 0.9) - } - - private _upgradeStructure: AnyStoreStructure | false - get upgradeStructure() { - if (this._upgradeStructure !== undefined) return this._upgradeStructure - - // We can't use a structure - - const controllerLevel = this.room.controller.level - if (controllerLevel < 2) return (this._upgradeStructure = false) - - // We can use containers - - if (controllerLevel < 5) { - return (this._upgradeStructure = this.room.roomManager.controllerContainer) + return (this._defensiveRamparts = ramparts) + } + + /** + * Prescriptive of if we desire a second mincut layer + */ + get buildSecondMincutLayer() { + const buildSecondMincutLayer = + Memory.rooms[this.room.name][RoomMemoryKeys.threatened] > + Math.floor(Math.pow(this.room.controller.level * 30, 1.63)) && + this.room.towerInferiority !== true + + return buildSecondMincutLayer + } + + sourceLinkIDs: (Id | false)[] + private _sourceLinks: (StructureLink | false)[] + get sourceLinks() { + if (this._sourceLinks) return this._sourceLinks + + // If we have cached links, convert them into false | StructureLink + if (this.sourceLinkIDs) { + const links: (StructureLink | false)[] = [] + for (const ID of this.sourceLinkIDs) { + if (!ID) { + links.push(false) + continue } - // We can use links - - const controllerLink = this.controllerLink - if (!controllerLink || !controllerLink.isRCLActionable) return false - - const hubLink = this.room.roomManager.hubLink - if (!hubLink || !hubLink.isRCLActionable) return false + const link = findObjectWithID(ID) + links.push(link) + } - return (this._upgradeStructure = controllerLink) + return (this._sourceLinks = links) } - private _structureTypesByBuildPriority: BuildableStructureConstant[] - get structureTypesByBuildPriority() { - if (this._structureTypesByBuildPriority) return this._structureTypesByBuildPriority - - if (!this.room.roomManager.fastFillerContainers.length) { - return (this._structureTypesByBuildPriority = [ - STRUCTURE_RAMPART, - STRUCTURE_WALL, - STRUCTURE_SPAWN, - STRUCTURE_CONTAINER, - STRUCTURE_EXTENSION, - STRUCTURE_ROAD, - STRUCTURE_STORAGE, - STRUCTURE_TOWER, - STRUCTURE_TERMINAL, - STRUCTURE_LINK, - STRUCTURE_EXTRACTOR, - STRUCTURE_LAB, - STRUCTURE_FACTORY, - STRUCTURE_POWER_SPAWN, - STRUCTURE_NUKER, - STRUCTURE_OBSERVER, - ]) - } - - this._structureTypesByBuildPriority = [ - STRUCTURE_RAMPART, - STRUCTURE_WALL, - STRUCTURE_SPAWN, - STRUCTURE_EXTENSION, - STRUCTURE_CONTAINER, - STRUCTURE_ROAD, - STRUCTURE_STORAGE, - STRUCTURE_TOWER, - STRUCTURE_TERMINAL, - STRUCTURE_LINK, - STRUCTURE_EXTRACTOR, - STRUCTURE_LAB, - STRUCTURE_FACTORY, - STRUCTURE_POWER_SPAWN, - STRUCTURE_NUKER, - STRUCTURE_OBSERVER, - ] - - return this._structureTypesByBuildPriority - } - - /** - * When the room needs to upgrade at high priority to remove the downgrade timer - */ - get controllerDowngradeUpgradeThreshold() { - return Math.floor(CONTROLLER_DOWNGRADE[this.room.controller.level] * 0.75) - } + const stampAnchors = this.room.roomManager.stampAnchors + if (!stampAnchors) throw Error('no stampAnchors for sourceLinks in ' + this.room.name) - private _defensiveRamparts: StructureRampart[] - get defensiveRamparts() { - if (this._defensiveRamparts) return this._defensiveRamparts + const links: (StructureLink | false)[] = [] + this.sourceLinkIDs = [] - const ramparts: StructureRampart[] = [] + for (const coord of stampAnchors.sourceLink) { + const structure = this.room.findStructureAtCoord( + coord, + structure => structure.structureType === STRUCTURE_LINK, + ) as StructureLink | false - const stampAnchors = this.room.roomManager.stampAnchors - if (!stampAnchors) throw Error('No stampAnchors for defensive ramparts') + if (structure) { + links.push(structure) + this.sourceLinkIDs.push(structure.id) + continue + } - const minCutCoords = new Set(stampAnchors.minCutRampart.map(coord => packCoord(coord))) + links.push(false) + this.sourceLinkIDs.push(false) + } - for (const structure of this.room.roomManager.structures.rampart) { - if (!minCutCoords.has(packCoord(structure.pos))) continue + return (this._sourceLinks = links) + } - ramparts.push(structure) - } + controllerLinkID: Id + private _controllerLink: StructureLink | false + get controllerLink() { + if (this._controllerLink !== undefined) return this._controllerLink - return (this._defensiveRamparts = ramparts) + if (this.controllerLinkID) { + const structure = findObjectWithID(this.controllerLinkID) + if (structure) return (this._controllerLink = structure) } - /** - * Prescriptive of if we desire a second mincut layer - */ - get buildSecondMincutLayer() { - const buildSecondMincutLayer = - Memory.rooms[this.room.name][RoomMemoryKeys.threatened] > - Math.floor(Math.pow(this.room.controller.level * 30, 1.63)) && - this.room.towerInferiority !== true - - return buildSecondMincutLayer + this._controllerLink = this.room.findStructureAtCoord( + this.room.roomManager.centerUpgradePos, + structure => structure.structureType === STRUCTURE_LINK, + ) as StructureLink | false + if (!this._controllerLink) { + return this._controllerLink } - sourceLinkIDs: (Id | false)[] - private _sourceLinks: (StructureLink | false)[] - get sourceLinks() { - if (this._sourceLinks) return this._sourceLinks - - // If we have cached links, convert them into false | StructureLink - if (this.sourceLinkIDs) { - const links: (StructureLink | false)[] = [] - for (const ID of this.sourceLinkIDs) { - if (!ID) { - links.push(false) - continue - } - - const link = findObjectWithID(ID) - links.push(link) - } - - return (this._sourceLinks = links) - } - - const stampAnchors = this.room.roomManager.stampAnchors - if (!stampAnchors) throw Error('no stampAnchors for sourceLinks in ' + this.room.name) - - const links: (StructureLink | false)[] = [] - this.sourceLinkIDs = [] + this.controllerLinkID = this._controllerLink.id + return this._controllerLink + } - for (const coord of stampAnchors.sourceLink) { - const structure = this.room.findStructureAtCoord( - coord, - structure => structure.structureType === STRUCTURE_LINK, - ) as StructureLink | false + _fastFillerSpawnEnergyCapacity: number + get fastFillerSpawnEnergyCapacity() { + if (this._fastFillerSpawnEnergyCapacity && !this.room.roomManager.structureUpdate) + return this._fastFillerSpawnEnergyCapacity - if (structure) { + const anchor = this.room.roomManager.anchor + if (!anchor) throw Error('no anchor for fastFillerSpawnEnergyCapacity ' + this.room) - links.push(structure) - this.sourceLinkIDs.push(structure.id) - continue - } + let fastFillerSpawnEnergyCapacity = 0 - links.push(false) - this.sourceLinkIDs.push(false) - } + for (const structure of this.actionableSpawningStructures) { + if (!structure.isRCLActionable) continue + // Outside of the fastFiller + if (getRange(structure.pos, anchor) > 2) continue - return (this._sourceLinks = links) + fastFillerSpawnEnergyCapacity += structure.store.getCapacity(RESOURCE_ENERGY) } - controllerLinkID: Id - private _controllerLink: StructureLink | false - get controllerLink() { - if (this._controllerLink !== undefined) return this._controllerLink - - if (this.controllerLinkID) { - const structure = findObjectWithID(this.controllerLinkID) - if (structure) return (this._controllerLink = structure) - } - - this._controllerLink = this.room.findStructureAtCoord( - this.room.roomManager.centerUpgradePos, - structure => structure.structureType === STRUCTURE_LINK, - ) as StructureLink | false - if (!this._controllerLink) { - return this._controllerLink - } - - this.controllerLinkID = this._controllerLink.id - return this._controllerLink + return (this._fastFillerSpawnEnergyCapacity = fastFillerSpawnEnergyCapacity) + } + + actionableSpawningStructuresIDs: Id[] + _actionableSpawningStructures: SpawningStructures + /** + * RCL actionable spawns and extensions + */ + get actionableSpawningStructures() { + if (this._actionableSpawningStructures) return this._actionableSpawningStructures + + if (this.actionableSpawningStructuresIDs) { + return (this._actionableSpawningStructures = this.actionableSpawningStructuresIDs.map(ID => + findObjectWithID(ID), + )) } - _fastFillerSpawnEnergyCapacity: number - get fastFillerSpawnEnergyCapacity() { - if (this._fastFillerSpawnEnergyCapacity && !this.room.roomManager.structureUpdate) - return this._fastFillerSpawnEnergyCapacity - - const anchor = this.room.roomManager.anchor - if (!anchor) throw Error('no anchor for fastFillerSpawnEnergyCapacity ' + this.room) - - let fastFillerSpawnEnergyCapacity = 0 - - for (const structure of this.actionableSpawningStructures) { - if (!structure.isRCLActionable) continue - // Outside of the fastFiller - if (getRange(structure.pos, anchor) > 2) continue - - fastFillerSpawnEnergyCapacity += structure.store.getCapacity(RESOURCE_ENERGY) - } - - return (this._fastFillerSpawnEnergyCapacity = fastFillerSpawnEnergyCapacity) + const structures = this.room.roomManager.structures + + let actionableSpawningStructures: SpawningStructures = structures.spawn + actionableSpawningStructures = actionableSpawningStructures.concat(structures.extension) + actionableSpawningStructures = actionableSpawningStructures.filter( + structure => structure.isRCLActionable, + ) + + this.actionableSpawningStructuresIDs = actionableSpawningStructures.map( + structure => structure.id, + ) + return (this._actionableSpawningStructures = actionableSpawningStructures) + } + + spawningStructuresByPriorityIDs: Id[] + _spawningStructuresByPriority: SpawningStructures + get spawningStructuresByPriority() { + if (this._spawningStructuresByPriority) return this._spawningStructuresByPriority + + if (this.spawningStructuresByPriorityIDs && !this.room.roomManager.structureUpdate) { + return (this._spawningStructuresByPriority = this.spawningStructuresByPriorityIDs.map(ID => + findObjectWithID(ID), + )) } - actionableSpawningStructuresIDs: Id[] - _actionableSpawningStructures: SpawningStructures - /** - * RCL actionable spawns and extensions - */ - get actionableSpawningStructures() { - if (this._actionableSpawningStructures) return this._actionableSpawningStructures - - if (this.actionableSpawningStructuresIDs) { - return (this._actionableSpawningStructures = this.actionableSpawningStructuresIDs.map( - ID => findObjectWithID(ID), - )) - } + const anchor = this.room.roomManager.anchor + if (!anchor) throw Error('no anchor') - const structures = this.room.roomManager.structures + let spawningStructuresByPriority: SpawningStructures = [] + const structuresToSort: SpawningStructures = [] - let actionableSpawningStructures: SpawningStructures = structures.spawn - actionableSpawningStructures = actionableSpawningStructures.concat(structures.extension) - actionableSpawningStructures = actionableSpawningStructures.filter( - structure => structure.isRCLActionable, - ) + for (const structure of this.actionableSpawningStructures) { + if (roomNameUtils.isSourceSpawningStructure(this.room.name, structure)) { + spawningStructuresByPriority.push(structure) + } - this.actionableSpawningStructuresIDs = actionableSpawningStructures.map( - structure => structure.id, - ) - return (this._actionableSpawningStructures = actionableSpawningStructures) + structuresToSort.push(structure) } - spawningStructuresByPriorityIDs: Id[] - _spawningStructuresByPriority: SpawningStructures - get spawningStructuresByPriority() { - if (this._spawningStructuresByPriority) return this._spawningStructuresByPriority - - if (this.spawningStructuresByPriorityIDs && !this.room.roomManager.structureUpdate) { - return (this._spawningStructuresByPriority = this.spawningStructuresByPriorityIDs.map( - ID => findObjectWithID(ID), - )) - } - - const anchor = this.room.roomManager.anchor - if (!anchor) throw Error('no anchor') - - let spawningStructuresByPriority: SpawningStructures = [] - const structuresToSort: SpawningStructures = [] + spawningStructuresByPriority = spawningStructuresByPriority.concat( + structuresToSort.sort((a, b) => getRange(a.pos, anchor) - getRange(b.pos, anchor)), + ) - for (const structure of this.actionableSpawningStructures) { - if (roomNameUtils.isSourceSpawningStructure(this.room.name, structure)) { - spawningStructuresByPriority.push(structure) - } + this.spawningStructuresByPriorityIDs = spawningStructuresByPriority.map( + structure => structure.id, + ) + return (this._spawningStructuresByPriority = spawningStructuresByPriority) + } - structuresToSort.push(structure) - } + spawningStructuresByNeedCoords: Id[] + _spawningStructuresByNeed: SpawningStructures + get spawningStructuresByNeed() { + if (this._spawningStructuresByNeed) return this._spawningStructuresByNeed - spawningStructuresByPriority = spawningStructuresByPriority.concat( - structuresToSort.sort((a, b) => getRange(a.pos, anchor) - getRange(b.pos, anchor)), - ) + // mark coords in range 1 of reserved source harvest positions + // mark coords in range of valid fastFiller position - this.spawningStructuresByPriorityIDs = spawningStructuresByPriority.map( - structure => structure.id, - ) - return (this._spawningStructuresByPriority = spawningStructuresByPriority) - } + let ignoreCoords = new Set() - spawningStructuresByNeedCoords: Id[] - _spawningStructuresByNeed: SpawningStructures - get spawningStructuresByNeed() { - if (this._spawningStructuresByNeed) return this._spawningStructuresByNeed + // source extensions - // mark coords in range 1 of reserved source harvest positions - // mark coords in range of valid fastFiller position + const packedHarvestPositions = + Memory.rooms[this.room.name][RoomMemoryKeys.communeSourceHarvestPositions] + for (const packedPositions of packedHarvestPositions) { + const pos = unpackPosAt(packedPositions, 0) - let ignoreCoords = new Set() + // Make sure the position is reserved (presumably by a harvester) - // source extensions + const reserveType = this.room.roomManager.reservedCoords.get(packCoord(pos)) + if (!reserveType) continue + if (reserveType < ReservedCoordTypes.dying) continue - const packedHarvestPositions = - Memory.rooms[this.room.name][RoomMemoryKeys.communeSourceHarvestPositions] - for (const packedPositions of packedHarvestPositions) { - const pos = unpackPosAt(packedPositions, 0) + forCoordsAroundRange(pos, 1, coord => { + const structure = this.room.findStructureAtCoord(coord, structure => { + return structure.structureType === STRUCTURE_EXTENSION + }) + if (!structure) return - // Make sure the position is reserved (presumably by a harvester) + ignoreCoords.add(packAsNum(coord)) + }) + } - const reserveType = this.room.roomManager.reservedCoords.get(packCoord(pos)) - if (!reserveType) continue - if (reserveType < ReservedCoordTypes.dying) continue + ignoreCoords = this.findFastFillerIgnoreCoords(ignoreCoords) - forCoordsAroundRange(pos, 1, coord => { - const structure = this.room.findStructureAtCoord(coord, structure => { - return structure.structureType === STRUCTURE_EXTENSION - }) - if (!structure) return + // Filter out structures that have ignored coords + const spawningStructuresByNeed = this.actionableSpawningStructures.filter(structure => { + return !ignoreCoords.has(packAsNum(structure.pos)) + }) - ignoreCoords.add(packAsNum(coord)) - }) - } + return (this._spawningStructuresByNeed = spawningStructuresByNeed) + } - ignoreCoords = this.findFastFillerIgnoreCoords(ignoreCoords) + private findFastFillerIgnoreCoords(ignoreCoords: Set) { + const fastFillerPositions = this.room.roomManager.fastFillerPositions + for (const pos of fastFillerPositions) { + // Make sure the position is reserved (presumably by a fastFiller) - // Filter out structures that have ignored coords - const spawningStructuresByNeed = this.actionableSpawningStructures.filter(structure => { - return !ignoreCoords.has(packAsNum(structure.pos)) - }) + const reserveType = this.room.roomManager.reservedCoords.get(packCoord(pos)) + if (!reserveType) continue + if (reserveType < ReservedCoordTypes.dying) continue - return (this._spawningStructuresByNeed = spawningStructuresByNeed) + // register structures the fastFiller should be able to fill + forCoordsAroundRange(pos, 1, coord => { + ignoreCoords.add(packAsNum(coord)) + }) } - private findFastFillerIgnoreCoords(ignoreCoords: Set) { - const fastFillerPositions = this.room.roomManager.fastFillerPositions - for (const pos of fastFillerPositions) { - // Make sure the position is reserved (presumably by a fastFiller) - - const reserveType = this.room.roomManager.reservedCoords.get(packCoord(pos)) - if (!reserveType) continue - if (reserveType < ReservedCoordTypes.dying) continue - - // register structures the fastFiller should be able to fill - forCoordsAroundRange(pos, 1, coord => { - ignoreCoords.add(packAsNum(coord)) - }) - } - - return ignoreCoords - /* const fastFillerLink = this.room.roomManager.fastFillerLink + return ignoreCoords + /* const fastFillerLink = this.room.roomManager.fastFillerLink if ( fastFillerLink && fastFillerLink.RCLActionable && @@ -993,184 +985,193 @@ export class CommuneManager { return ignoreCoords */ - } - - /** - * Presciption on if we should be trying to build remote contianers - */ - get shouldRemoteContainers() { - return this.room.energyCapacityAvailable >= 650 - } - - // /** - // * Wether or not the barricade damage was recorded / updated for this tick - // */ - // barricadeDamageOverTimeRecorded: boolean - // _barricadeDamageOverTime: Uint16Array - // get barricadeDamageOverTime() { - - // if (this._barricadeDamageOverTime) return this._barricadeDamageOverTime + } - // const barricadeDamageOverTime: Uint16Array = new Uint16Array(2500) + /** + * Presciption on if we should be trying to build remote contianers + */ + get shouldRemoteContainers() { + return this.room.energyCapacityAvailable >= 650 + } - // for (const rampart of this.room.roomManager.structures.rampart) { + // /** + // * Wether or not the barricade damage was recorded / updated for this tick + // */ + // barricadeDamageOverTimeRecorded: boolean + // _barricadeDamageOverTime: Uint16Array + // get barricadeDamageOverTime() { - // const packedCoord = packAsNum(rampart.pos) + // if (this._barricadeDamageOverTime) return this._barricadeDamageOverTime - // barricadeDamageOverTime[packedCoord] = rampart.hits - // } - // } + // const barricadeDamageOverTime: Uint16Array = new Uint16Array(2500) - _resourceTargets: ResourceTargets - get resourceTargets() { - if (this._resourceTargets) return this._resourceTargets + // for (const rampart of this.room.roomManager.structures.rampart) { - const resourceTargets: ResourceTargets = { - min: {}, - max: {}, - } - const storingStructuresCapacity = this.storingStructuresCapacity - let min: number + // const packedCoord = packAsNum(rampart.pos) - resourceTargets.min[RESOURCE_BATTERY] = this.room.roomManager.factory ? storingStructuresCapacity * 0.005 : 0 - resourceTargets.max[RESOURCE_BATTERY] = storingStructuresCapacity * 0.015 + // barricadeDamageOverTime[packedCoord] = rampart.hits + // } + // } - min = resourceTargets.min[RESOURCE_ENERGY] = this.storingStructuresCapacity * 0.9/* this.energyMinResourceTarget(storingStructuresCapacity) */ - resourceTargets.max[RESOURCE_ENERGY] = Math.max(storingStructuresCapacity * 0.5, this.minStoredEnergy, min) + _resourceTargets: ResourceTargets + get resourceTargets() { + if (this._resourceTargets) return this._resourceTargets - // minerals + const resourceTargets: ResourceTargets = { + min: {}, + max: {}, + } + const storingStructuresCapacity = this.storingStructuresCapacity + let min: number - resourceTargets.min[RESOURCE_HYDROGEN] = storingStructuresCapacity * 0.01 - resourceTargets.max[RESOURCE_HYDROGEN] = storingStructuresCapacity * 0.027 + resourceTargets.min[RESOURCE_BATTERY] = this.room.roomManager.factory + ? storingStructuresCapacity * 0.005 + : 0 + resourceTargets.max[RESOURCE_BATTERY] = storingStructuresCapacity * 0.015 - resourceTargets.min[RESOURCE_OXYGEN] = storingStructuresCapacity * 0.01 - resourceTargets.max[RESOURCE_OXYGEN] = storingStructuresCapacity * 0.027 + min = resourceTargets.min[RESOURCE_ENERGY] = + this.storingStructuresCapacity * + 0.9 /* this.energyMinResourceTarget(storingStructuresCapacity) */ + resourceTargets.max[RESOURCE_ENERGY] = Math.max( + storingStructuresCapacity * 0.5, + this.minStoredEnergy, + min, + ) - resourceTargets.min[RESOURCE_UTRIUM] = storingStructuresCapacity * 0.01 - resourceTargets.max[RESOURCE_UTRIUM] = storingStructuresCapacity * 0.027 + // minerals - resourceTargets.min[RESOURCE_KEANIUM] = storingStructuresCapacity * 0.01 - resourceTargets.max[RESOURCE_KEANIUM] = storingStructuresCapacity * 0.027 + resourceTargets.min[RESOURCE_HYDROGEN] = storingStructuresCapacity * 0.01 + resourceTargets.max[RESOURCE_HYDROGEN] = storingStructuresCapacity * 0.027 - resourceTargets.min[RESOURCE_LEMERGIUM] = storingStructuresCapacity * 0.01 - resourceTargets.max[RESOURCE_LEMERGIUM] = storingStructuresCapacity * 0.027 + resourceTargets.min[RESOURCE_OXYGEN] = storingStructuresCapacity * 0.01 + resourceTargets.max[RESOURCE_OXYGEN] = storingStructuresCapacity * 0.027 - resourceTargets.min[RESOURCE_ZYNTHIUM] = storingStructuresCapacity * 0.01 - resourceTargets.max[RESOURCE_ZYNTHIUM] = storingStructuresCapacity * 0.027 + resourceTargets.min[RESOURCE_UTRIUM] = storingStructuresCapacity * 0.01 + resourceTargets.max[RESOURCE_UTRIUM] = storingStructuresCapacity * 0.027 - if (Game.shard.name === 'swc') { + resourceTargets.min[RESOURCE_KEANIUM] = storingStructuresCapacity * 0.01 + resourceTargets.max[RESOURCE_KEANIUM] = storingStructuresCapacity * 0.027 - resourceTargets.min[RESOURCE_CATALYST] = storingStructuresCapacity * 0 - resourceTargets.max[RESOURCE_CATALYST] = storingStructuresCapacity * 0.01 - } - else { - resourceTargets.min[RESOURCE_CATALYST] = storingStructuresCapacity * 0.01 - resourceTargets.max[RESOURCE_CATALYST] = storingStructuresCapacity * 0.027 - } + resourceTargets.min[RESOURCE_LEMERGIUM] = storingStructuresCapacity * 0.01 + resourceTargets.max[RESOURCE_LEMERGIUM] = storingStructuresCapacity * 0.027 - // Boosts + resourceTargets.min[RESOURCE_ZYNTHIUM] = storingStructuresCapacity * 0.01 + resourceTargets.max[RESOURCE_ZYNTHIUM] = storingStructuresCapacity * 0.027 - resourceTargets.min[RESOURCE_UTRIUM_HYDRIDE] = 0 - resourceTargets.max[RESOURCE_UTRIUM_HYDRIDE] = storingStructuresCapacity * 0.01 + if (Game.shard.name === 'swc') { + resourceTargets.min[RESOURCE_CATALYST] = storingStructuresCapacity * 0 + resourceTargets.max[RESOURCE_CATALYST] = storingStructuresCapacity * 0.01 + } else { + resourceTargets.min[RESOURCE_CATALYST] = storingStructuresCapacity * 0.01 + resourceTargets.max[RESOURCE_CATALYST] = storingStructuresCapacity * 0.027 + } - resourceTargets.min[RESOURCE_UTRIUM_OXIDE] = 0 - resourceTargets.max[RESOURCE_UTRIUM_OXIDE] = storingStructuresCapacity * 0.01 + // Boosts - resourceTargets.min[RESOURCE_KEANIUM_HYDRIDE] = 0 - resourceTargets.max[RESOURCE_KEANIUM_HYDRIDE] = storingStructuresCapacity * 0.01 + resourceTargets.min[RESOURCE_UTRIUM_HYDRIDE] = 0 + resourceTargets.max[RESOURCE_UTRIUM_HYDRIDE] = storingStructuresCapacity * 0.01 - resourceTargets.min[RESOURCE_KEANIUM_OXIDE] = 0 - resourceTargets.max[RESOURCE_KEANIUM_OXIDE] = storingStructuresCapacity * 0.01 + resourceTargets.min[RESOURCE_UTRIUM_OXIDE] = 0 + resourceTargets.max[RESOURCE_UTRIUM_OXIDE] = storingStructuresCapacity * 0.01 - resourceTargets.min[RESOURCE_LEMERGIUM_HYDRIDE] = 0 - resourceTargets.max[RESOURCE_LEMERGIUM_HYDRIDE] = storingStructuresCapacity * 0.01 + resourceTargets.min[RESOURCE_KEANIUM_HYDRIDE] = 0 + resourceTargets.max[RESOURCE_KEANIUM_HYDRIDE] = storingStructuresCapacity * 0.01 - resourceTargets.min[RESOURCE_LEMERGIUM_OXIDE] = 0 - resourceTargets.max[RESOURCE_LEMERGIUM_OXIDE] = storingStructuresCapacity * 0.01 + resourceTargets.min[RESOURCE_KEANIUM_OXIDE] = 0 + resourceTargets.max[RESOURCE_KEANIUM_OXIDE] = storingStructuresCapacity * 0.01 - resourceTargets.min[RESOURCE_ZYNTHIUM_HYDRIDE] = 0 - resourceTargets.max[RESOURCE_ZYNTHIUM_HYDRIDE] = storingStructuresCapacity * 0.01 + resourceTargets.min[RESOURCE_LEMERGIUM_HYDRIDE] = 0 + resourceTargets.max[RESOURCE_LEMERGIUM_HYDRIDE] = storingStructuresCapacity * 0.01 - resourceTargets.min[RESOURCE_ZYNTHIUM_OXIDE] = 0 - resourceTargets.max[RESOURCE_ZYNTHIUM_OXIDE] = storingStructuresCapacity * 0.01 + resourceTargets.min[RESOURCE_LEMERGIUM_OXIDE] = 0 + resourceTargets.max[RESOURCE_LEMERGIUM_OXIDE] = storingStructuresCapacity * 0.01 - resourceTargets.min[RESOURCE_GHODIUM_HYDRIDE] = 0 - resourceTargets.max[RESOURCE_GHODIUM_HYDRIDE] = storingStructuresCapacity * 0.01 + resourceTargets.min[RESOURCE_ZYNTHIUM_HYDRIDE] = 0 + resourceTargets.max[RESOURCE_ZYNTHIUM_HYDRIDE] = storingStructuresCapacity * 0.01 - // other raw + resourceTargets.min[RESOURCE_ZYNTHIUM_OXIDE] = 0 + resourceTargets.max[RESOURCE_ZYNTHIUM_OXIDE] = storingStructuresCapacity * 0.01 - resourceTargets.min[RESOURCE_POWER] = this.room.roomManager.powerSpawn ? storingStructuresCapacity * 0.002 : 0 - resourceTargets.max[RESOURCE_POWER] = storingStructuresCapacity * 0.015 + resourceTargets.min[RESOURCE_GHODIUM_HYDRIDE] = 0 + resourceTargets.max[RESOURCE_GHODIUM_HYDRIDE] = storingStructuresCapacity * 0.01 - resourceTargets.min[RESOURCE_OPS] = storingStructuresCapacity * 0.01 - resourceTargets.max[RESOURCE_OPS] = storingStructuresCapacity * 0.02 + // other raw - resourceTargets.min[RESOURCE_METAL] = 0 - resourceTargets.max[RESOURCE_METAL] = 0 + resourceTargets.min[RESOURCE_POWER] = this.room.roomManager.powerSpawn + ? storingStructuresCapacity * 0.002 + : 0 + resourceTargets.max[RESOURCE_POWER] = storingStructuresCapacity * 0.015 - resourceTargets.min[RESOURCE_BIOMASS] = 0 - resourceTargets.max[RESOURCE_BIOMASS] = 0 + resourceTargets.min[RESOURCE_OPS] = storingStructuresCapacity * 0.01 + resourceTargets.max[RESOURCE_OPS] = storingStructuresCapacity * 0.02 - resourceTargets.min[RESOURCE_SILICON] = 0 - resourceTargets.max[RESOURCE_SILICON] = 0 + resourceTargets.min[RESOURCE_METAL] = 0 + resourceTargets.max[RESOURCE_METAL] = 0 - resourceTargets.min[RESOURCE_MIST] = 0 - resourceTargets.max[RESOURCE_MIST] = 0 + resourceTargets.min[RESOURCE_BIOMASS] = 0 + resourceTargets.max[RESOURCE_BIOMASS] = 0 - // commodities - // low level + resourceTargets.min[RESOURCE_SILICON] = 0 + resourceTargets.max[RESOURCE_SILICON] = 0 - resourceTargets.min[RESOURCE_GHODIUM_MELT] = 0 - resourceTargets.max[RESOURCE_GHODIUM_MELT] = 0 + resourceTargets.min[RESOURCE_MIST] = 0 + resourceTargets.max[RESOURCE_MIST] = 0 - resourceTargets.min[RESOURCE_COMPOSITE] = 0 - resourceTargets.max[RESOURCE_COMPOSITE] = 0 + // commodities + // low level - resourceTargets.min[RESOURCE_CRYSTAL] = 0 - resourceTargets.max[RESOURCE_CRYSTAL] = 0 + resourceTargets.min[RESOURCE_GHODIUM_MELT] = 0 + resourceTargets.max[RESOURCE_GHODIUM_MELT] = 0 - resourceTargets.min[RESOURCE_LIQUID] = 0 - resourceTargets.max[RESOURCE_LIQUID] = 0 + resourceTargets.min[RESOURCE_COMPOSITE] = 0 + resourceTargets.max[RESOURCE_COMPOSITE] = 0 - // tier 1 commodities + resourceTargets.min[RESOURCE_CRYSTAL] = 0 + resourceTargets.max[RESOURCE_CRYSTAL] = 0 - resourceTargets.min[RESOURCE_ALLOY] = 0 - resourceTargets.max[RESOURCE_ALLOY] = 0 + resourceTargets.min[RESOURCE_LIQUID] = 0 + resourceTargets.max[RESOURCE_LIQUID] = 0 - resourceTargets.min[RESOURCE_CELL] = 0 - resourceTargets.max[RESOURCE_CELL] = 0 + // tier 1 commodities - resourceTargets.min[RESOURCE_WIRE] = 0 - resourceTargets.max[RESOURCE_WIRE] = 0 + resourceTargets.min[RESOURCE_ALLOY] = 0 + resourceTargets.max[RESOURCE_ALLOY] = 0 - resourceTargets.min[RESOURCE_CONDENSATE] = 0 - resourceTargets.max[RESOURCE_CONDENSATE] = 0 + resourceTargets.min[RESOURCE_CELL] = 0 + resourceTargets.max[RESOURCE_CELL] = 0 - // tier 2 + resourceTargets.min[RESOURCE_WIRE] = 0 + resourceTargets.max[RESOURCE_WIRE] = 0 - // tier 3 + resourceTargets.min[RESOURCE_CONDENSATE] = 0 + resourceTargets.max[RESOURCE_CONDENSATE] = 0 - // tier 4 + // tier 2 - // tier 5 + // tier 3 - return this._resourceTargets = resourceTargets - } + // tier 4 - private energyMinResourceTarget(storingStructuresCapacity: number) { + // tier 5 - if (this.room.controller.level < 8) { - if (collectiveManager.funnelOrder[0] === this.room.name) { - return Math.min(this.storedEnergyUpgradeThreshold * 1.2 + this.upgradeTargetDistance(), storingStructuresCapacity / 2) - } - return Math.min(this.storedEnergyUpgradeThreshold * 1.2, storingStructuresCapacity / 2) - } + return (this._resourceTargets = resourceTargets) + } - return this.minStoredEnergy + private energyMinResourceTarget(storingStructuresCapacity: number) { + if (this.room.controller.level < 8) { + if (collectiveManager.funnelOrder[0] === this.room.name) { + return Math.min( + this.storedEnergyUpgradeThreshold * 1.2 + this.upgradeTargetDistance(), + storingStructuresCapacity / 2, + ) + } + return Math.min(this.storedEnergyUpgradeThreshold * 1.2, storingStructuresCapacity / 2) } - private upgradeTargetDistance() { + return this.minStoredEnergy + } - return this.room.controller.progressTotal - this.room.controller.progress - } + private upgradeTargetDistance() { + return this.room.controller.progressTotal - this.room.controller.progress + } } diff --git a/src/room/commune/communeProcs.ts b/src/room/commune/communeProcs.ts index 4d7a81531..678f8b920 100644 --- a/src/room/commune/communeProcs.ts +++ b/src/room/commune/communeProcs.ts @@ -5,7 +5,7 @@ import { communeUtils } from './communeUtils' /** * Minor processes for communes */ -export class CommuneProc { +export class CommuneProcs { registerFunneling(room: Room) { // We need a terminal and for it be to active if (!room.terminal || room.controller.level < 6) return @@ -44,4 +44,4 @@ export class CommuneProc { } } -export const communeProc = new CommuneProc() +export const communeProcs = new CommuneProcs() diff --git a/src/room/creeps/creepLogiProcs.ts b/src/room/creeps/creepLogiProcs.ts new file mode 100644 index 000000000..ea4f17b00 --- /dev/null +++ b/src/room/creeps/creepLogiProcs.ts @@ -0,0 +1,270 @@ +import { CreepMemoryKeys, CreepRoomLogisticsRequestKeys, RoomLogisticsRequestTypes, FlagNames } from "international/constants" +import { CreepRoomLogisticsRequest, RoomLogisticsTargets } from "types/roomRequests" +import { customLog } from "utils/logging" +import { findObjectWithID } from "utils/utils" + +export class CreepLogiProcs { + updateLogisticsRequests(creep: Creep) { + const creepMemory = Memory.creeps[creep.name] + if (!creepMemory[CreepMemoryKeys.roomLogisticsRequests]) { + creepMemory[CreepMemoryKeys.roomLogisticsRequests] = [] + return + } + if (!creepMemory[CreepMemoryKeys.roomLogisticsRequests].length) return +/* + for (let i = creepMemory[CreepMemoryKeys.roomLogisticsRequests].length - 1; i >= 0; i--) { + const request = creepMemory[CreepMemoryKeys.roomLogisticsRequests][i] + const target = findObjectWithID(request[CreepRoomLogisticsRequestKeys.target]) + if (target) continue + + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(i, 1) + } + */ + const request = creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] + if (!request) return + + const target = findObjectWithID(request[CreepRoomLogisticsRequestKeys.target]) + if (!target) { + + if (request[CreepRoomLogisticsRequestKeys.delivery]) { + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 2) + return + } + + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return + } + + // requests where they are delivering + if (request[CreepRoomLogisticsRequestKeys.delivery]) { + this.updateDeliverLogisticsRequest( + creep, + request, + creepMemory[CreepMemoryKeys.roomLogisticsRequests][1], + target + ) + return + } + + // transfer requests + if (request[CreepRoomLogisticsRequestKeys.type] === RoomLogisticsRequestTypes.transfer) { + this.updateTransferLogisticsRequest(creep, request) + return + } + + // If pickup type + if (target instanceof Resource) { + this.updatePickupLogisticsRequest(creep, request, target) + return + } + + // Withdraw or offer type + this.updateWithdrawLogisticsRequest(creep, request, target) + return + } + + /** + * + * @returns false if the request was deleted + */ + private updateTransferLogisticsRequest(creep: Creep, request: CreepRoomLogisticsRequest) { + const creepMemory = Memory.creeps[creep.name] + const target = findObjectWithID(request[CreepRoomLogisticsRequestKeys.target]) + + // Delete the request if the target is fulfilled + + if (target.freeNextStore < request[CreepRoomLogisticsRequestKeys.amount]) { + if (Game.flags[FlagNames.debugCreepLogistics]) + customLog( + 'not enough free store', + creep.name + + ', ' + + request[CreepRoomLogisticsRequestKeys.target] + + ', ' + + target.freeNextStore + + ' < ' + + request[CreepRoomLogisticsRequestKeys.amount], + ) + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return false + } + + request[CreepRoomLogisticsRequestKeys.amount] = Math.min( + Math.min( + creep.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]], + target.freeNextStore, + ), + request[CreepRoomLogisticsRequestKeys.amount], + ) + if (request[CreepRoomLogisticsRequestKeys.amount] <= 0) { + if (Game.flags[FlagNames.debugCreepLogistics]) + customLog( + 'not enough amount', + creep.name + + ', ' + + request[CreepRoomLogisticsRequestKeys.target] + + ', ' + + request[CreepRoomLogisticsRequestKeys.amount], + ) + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return false + } + + if (!request[CreepRoomLogisticsRequestKeys.noReserve]) { + target.reserveStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += + request[CreepRoomLogisticsRequestKeys.amount] + } + + return true + } + + /** + * + * @returns false if the request was deleted + */ + private updatePickupLogisticsRequest( + creep: Creep, + request: CreepRoomLogisticsRequest, + target: Resource, + ) { + const creepMemory = Memory.creeps[creep.name] + + // Update in accordance to potential resource decay + + request[CreepRoomLogisticsRequestKeys.amount] = Math.min( + Math.min(creep.freeNextStore, target.nextAmount), + request[CreepRoomLogisticsRequestKeys.amount], + ) + if (request[CreepRoomLogisticsRequestKeys.amount] <= 0) { + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return false + } + + if (!request[CreepRoomLogisticsRequestKeys.noReserve]) { + target.reserveAmount -= request[CreepRoomLogisticsRequestKeys.amount] + } + + return true + } + + /** + * + * @returns false if the request was deleted + */ + private updateWithdrawLogisticsRequest( + creep: Creep, + request: CreepRoomLogisticsRequest, + target: RoomLogisticsTargets, + ) { + const creepMemory = Memory.creeps[creep.name] + + // Delete the request if the target doesn't have what we need + if ( + target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] < + request[CreepRoomLogisticsRequestKeys.amount] + ) { + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return false + } + + request[CreepRoomLogisticsRequestKeys.amount] = Math.min( + Math.min( + creep.freeNextStore, + target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]], + ), + request[CreepRoomLogisticsRequestKeys.amount], + ) + if (request[CreepRoomLogisticsRequestKeys.amount] <= 0) { + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return false + } + + if (!request[CreepRoomLogisticsRequestKeys.noReserve]) { + target.reserveStore[request[CreepRoomLogisticsRequestKeys.resourceType]] -= + request[CreepRoomLogisticsRequestKeys.amount] + } + + return true + } + + /** + * update both request pairs of the deliver request + * @param creep + * @param request pickup, withdraw or offer to get sufficient resources + * @param deliverToRequest transfer to delivery target + */ + private updateDeliverLogisticsRequest( + creep: Creep, + request: CreepRoomLogisticsRequest, + deliverToRequest: CreepRoomLogisticsRequest, + target: RoomLogisticsTargets + ) { + const creepMemory = Memory.creeps[creep.name] + + const deliverTarget = findObjectWithID(deliverToRequest[CreepRoomLogisticsRequestKeys.target]) + if (!deliverTarget) { + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 2) + return false + } + + // If pickup type + if (target instanceof Resource) { + // Update in accordance to potential resource decay + + request[CreepRoomLogisticsRequestKeys.amount] = Math.min( + Math.min(creep.freeNextStore, target.nextAmount), + request[CreepRoomLogisticsRequestKeys.amount], + ) + if (request[CreepRoomLogisticsRequestKeys.amount] <= 0) { + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 2) + return false + } + + if (!request[CreepRoomLogisticsRequestKeys.noReserve]) { + target.reserveAmount -= request[CreepRoomLogisticsRequestKeys.amount] + deliverTarget.reserveStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += Math.min( + deliverToRequest[CreepRoomLogisticsRequestKeys.amount], + request[CreepRoomLogisticsRequestKeys.amount], + ) + } + + return true + } + + // Withdraw or offer + + // Delete the request if the target doesn't have what we need + if ( + target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] < + request[CreepRoomLogisticsRequestKeys.amount] + ) { + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 2) + return false + } + + request[CreepRoomLogisticsRequestKeys.amount] = Math.min( + Math.min( + creep.freeNextStore, + target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]], + ), + request[CreepRoomLogisticsRequestKeys.amount], + ) + if (request[CreepRoomLogisticsRequestKeys.amount] <= 0) { + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 2) + return false + } + + if (!request[CreepRoomLogisticsRequestKeys.noReserve]) { + target.reserveStore[request[CreepRoomLogisticsRequestKeys.resourceType]] -= + request[CreepRoomLogisticsRequestKeys.amount] + deliverTarget.reserveStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += Math.min( + deliverToRequest[CreepRoomLogisticsRequestKeys.amount], + request[CreepRoomLogisticsRequestKeys.amount], + ) + } + + return true + } +} + +export const creepLogiProcs = new CreepLogiProcs() diff --git a/src/room/creeps/creepProcs.ts b/src/room/creeps/creepProcs.ts index bc2e9f1a6..8b4a3f49c 100644 --- a/src/room/creeps/creepProcs.ts +++ b/src/room/creeps/creepProcs.ts @@ -18,7 +18,7 @@ import { } from 'types/roomRequests' import { customLog } from 'utils/logging' -class CreepProcs { +export class CreepProcs { advancedUpgradeController(creep: Creep) { const creepMemory = Memory.creeps[creep.name] const controller = creep.room.controller @@ -363,264 +363,6 @@ class CreepProcs { return Result.success } - - updateLogisticsRequests(creep: Creep) { - const creepMemory = Memory.creeps[creep.name] - if (!creepMemory[CreepMemoryKeys.roomLogisticsRequests]) { - creepMemory[CreepMemoryKeys.roomLogisticsRequests] = [] - return - } - if (!creepMemory[CreepMemoryKeys.roomLogisticsRequests].length) return -/* - for (let i = creepMemory[CreepMemoryKeys.roomLogisticsRequests].length - 1; i >= 0; i--) { - const request = creepMemory[CreepMemoryKeys.roomLogisticsRequests][i] - const target = findObjectWithID(request[CreepRoomLogisticsRequestKeys.target]) - if (target) continue - - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(i, 1) - } - */ - const request = creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] - if (!request) return - - const target = findObjectWithID(request[CreepRoomLogisticsRequestKeys.target]) - if (!target) { - - if (request[CreepRoomLogisticsRequestKeys.delivery]) { - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 2) - return - } - - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return - } - - // requests where they are delivering - if (request[CreepRoomLogisticsRequestKeys.delivery]) { - this.updateDeliverLogisticsRequest( - creep, - request, - creepMemory[CreepMemoryKeys.roomLogisticsRequests][1], - target - ) - return - } - - // transfer requests - if (request[CreepRoomLogisticsRequestKeys.type] === RoomLogisticsRequestTypes.transfer) { - this.updateTransferLogisticsRequest(creep, request) - return - } - - // If pickup type - if (target instanceof Resource) { - this.updatePickupLogisticsRequest(creep, request, target) - return - } - - // Withdraw or offer type - this.updateWithdrawLogisticsRequest(creep, request, target) - return - } - - /** - * - * @returns false if the request was deleted - */ - private updateTransferLogisticsRequest(creep: Creep, request: CreepRoomLogisticsRequest) { - const creepMemory = Memory.creeps[creep.name] - const target = findObjectWithID(request[CreepRoomLogisticsRequestKeys.target]) - - // Delete the request if the target is fulfilled - - if (target.freeNextStore < request[CreepRoomLogisticsRequestKeys.amount]) { - if (Game.flags[FlagNames.debugCreepLogistics]) - customLog( - 'not enough free store', - creep.name + - ', ' + - request[CreepRoomLogisticsRequestKeys.target] + - ', ' + - target.freeNextStore + - ' < ' + - request[CreepRoomLogisticsRequestKeys.amount], - ) - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return false - } - - request[CreepRoomLogisticsRequestKeys.amount] = Math.min( - Math.min( - creep.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]], - target.freeNextStore, - ), - request[CreepRoomLogisticsRequestKeys.amount], - ) - if (request[CreepRoomLogisticsRequestKeys.amount] <= 0) { - if (Game.flags[FlagNames.debugCreepLogistics]) - customLog( - 'not enough amount', - creep.name + - ', ' + - request[CreepRoomLogisticsRequestKeys.target] + - ', ' + - request[CreepRoomLogisticsRequestKeys.amount], - ) - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return false - } - - if (!request[CreepRoomLogisticsRequestKeys.noReserve]) { - target.reserveStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += - request[CreepRoomLogisticsRequestKeys.amount] - } - - return true - } - - /** - * - * @returns false if the request was deleted - */ - private updatePickupLogisticsRequest( - creep: Creep, - request: CreepRoomLogisticsRequest, - target: Resource, - ) { - const creepMemory = Memory.creeps[creep.name] - - // Update in accordance to potential resource decay - - request[CreepRoomLogisticsRequestKeys.amount] = Math.min( - Math.min(creep.freeNextStore, target.nextAmount), - request[CreepRoomLogisticsRequestKeys.amount], - ) - if (request[CreepRoomLogisticsRequestKeys.amount] <= 0) { - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return false - } - - if (!request[CreepRoomLogisticsRequestKeys.noReserve]) { - target.reserveAmount -= request[CreepRoomLogisticsRequestKeys.amount] - } - - return true - } - - /** - * - * @returns false if the request was deleted - */ - private updateWithdrawLogisticsRequest( - creep: Creep, - request: CreepRoomLogisticsRequest, - target: RoomLogisticsTargets, - ) { - const creepMemory = Memory.creeps[creep.name] - - // Delete the request if the target doesn't have what we need - if ( - target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] < - request[CreepRoomLogisticsRequestKeys.amount] - ) { - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return false - } - - request[CreepRoomLogisticsRequestKeys.amount] = Math.min( - Math.min( - creep.freeNextStore, - target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]], - ), - request[CreepRoomLogisticsRequestKeys.amount], - ) - if (request[CreepRoomLogisticsRequestKeys.amount] <= 0) { - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return false - } - - if (!request[CreepRoomLogisticsRequestKeys.noReserve]) { - target.reserveStore[request[CreepRoomLogisticsRequestKeys.resourceType]] -= - request[CreepRoomLogisticsRequestKeys.amount] - } - - return true - } - - /** - * update both request pairs of the deliver request - * @param creep - * @param request pickup, withdraw or offer to get sufficient resources - * @param deliverToRequest transfer to delivery target - */ - private updateDeliverLogisticsRequest( - creep: Creep, - request: CreepRoomLogisticsRequest, - deliverToRequest: CreepRoomLogisticsRequest, - target: RoomLogisticsTargets - ) { - const creepMemory = Memory.creeps[creep.name] - - const deliverTarget = findObjectWithID(deliverToRequest[CreepRoomLogisticsRequestKeys.target]) - if (!deliverTarget) { - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 2) - return false - } - - // If pickup type - if (target instanceof Resource) { - // Update in accordance to potential resource decay - - request[CreepRoomLogisticsRequestKeys.amount] = Math.min( - Math.min(creep.freeNextStore, target.nextAmount), - request[CreepRoomLogisticsRequestKeys.amount], - ) - if (request[CreepRoomLogisticsRequestKeys.amount] <= 0) { - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 2) - return false - } - - if (!request[CreepRoomLogisticsRequestKeys.noReserve]) { - target.reserveAmount -= request[CreepRoomLogisticsRequestKeys.amount] - deliverTarget.reserveStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += - request[CreepRoomLogisticsRequestKeys.amount] - } - - return true - } - - // Withdraw or offer - - // Delete the request if the target doesn't have what we need - if ( - target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] < - request[CreepRoomLogisticsRequestKeys.amount] - ) { - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 2) - return false - } - - request[CreepRoomLogisticsRequestKeys.amount] = Math.min( - Math.min( - creep.freeNextStore, - target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]], - ), - request[CreepRoomLogisticsRequestKeys.amount], - ) - if (request[CreepRoomLogisticsRequestKeys.amount] <= 0) { - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 2) - return false - } - - if (!request[CreepRoomLogisticsRequestKeys.noReserve]) { - target.reserveStore[request[CreepRoomLogisticsRequestKeys.resourceType]] -= - request[CreepRoomLogisticsRequestKeys.amount] - deliverTarget.reserveStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += - request[CreepRoomLogisticsRequestKeys.amount] - } - - return true - } } export const creepProcs = new CreepProcs() diff --git a/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts b/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts index 346c2b530..e6650f9af 100644 --- a/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts +++ b/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts @@ -392,10 +392,6 @@ export class RemoteHarvester extends Creep { if (this.obtainEnergyIfNeeded() !== Result.success) return Result.noAction - // Don't allow the construction site manager to remove the site for while we're building - - Memory.constructionSites[cSite.id] = 0 - this.build(cSite) this.worked = WorkTypes.build diff --git a/src/settingsDefault.ts b/src/settingsDefault.ts index dc6906f6e..f77c1190e 100644 --- a/src/settingsDefault.ts +++ b/src/settingsDefault.ts @@ -105,7 +105,7 @@ export interface Settings { * Default global.settings. DO NOT MODIFY for personal use; instead, include your preferences in global.settings.ts */ export const defaultSettings: Settings = { - breakingVersion: 122, + breakingVersion: 123, roomVisuals: false, mapVisuals: false, allies: [ diff --git a/src/types.d.ts b/src/types.d.ts index 3568c6298..3290ac8f8 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -333,16 +333,6 @@ declare global { */ lastConfig: number - /** - * An object of constrctionsSites with keys of site IDs and properties of the site's age - */ - constructionSites: { [ID: string]: number } - - /** - * keys of the transactions' IDs - */ - recordedTransactionIDs: {[ID: string]: 1} - minHaulerCostError: number minHaulerCost: number minHaulerCostUpdate: number diff --git a/src/types/roomRequests.ts b/src/types/roomRequests.ts index f092e5964..0ce8f9931 100644 --- a/src/types/roomRequests.ts +++ b/src/types/roomRequests.ts @@ -1,12 +1,6 @@ import { - CombatRequestKeys, - CreepRoomLogisticsRequestKeys, - DepositRequestKeys, - HaulRequestKeys, - NukeRequestKeys, - PowerRequestKeys, - RoomLogisticsRequestTypes, - WorkRequestKeys, + CreepRoomLogisticsRequestKeys, PowerRequestKeys, + RoomLogisticsRequestTypes } from 'international/constants' export type RoomLogisticsTargets = AnyStoreStructure | Creep | Tombstone | Ruin | Resource diff --git a/src/types/segments.ts b/src/types/segments.ts index e46725e6d..f7a154da0 100644 --- a/src/types/segments.ts +++ b/src/types/segments.ts @@ -6,3 +6,16 @@ interface ErrorsSegment { errors: string[] version?: number } + +type RecordedTransactionIDs = { [ID: string]: 1 } + +interface IDsSegment { + /** + * An object of constrctionsSites with keys of site IDs and properties of the site's age + */ + constructionSites: { [ID: string]: number } + /** + * keys of the transactions' IDs + */ + recordedTransactionIDs: RecordedTransactionIDs +} From c7f9b9a166d8f409bf9b19681d90db0658765bd6 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 6 Jan 2024 14:41:44 -0800 Subject: [PATCH 067/190] remove dead error segment activation --- src/other/ErrorExporter.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/other/ErrorExporter.ts b/src/other/ErrorExporter.ts index 4fea82ec7..2e0e8b71b 100644 --- a/src/other/ErrorExporter.ts +++ b/src/other/ErrorExporter.ts @@ -1,7 +1,5 @@ import { SegmentIDs } from "international/constants" -RawMemory.setActiveSegments([SegmentIDs.errors]) - /** * Rather cpu intensive and unavoidably inefficient. Try to avoid this needing to ba called */ From f97908e2ba3c7bc614afe44124c92a305df3212f Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 6 Jan 2024 14:53:24 -0800 Subject: [PATCH 068/190] proper registering of terminal stats --- src/international/transactions.ts | 9 +++++---- src/room/commune/terminal/tradingUtils.ts | 8 ++------ 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/international/transactions.ts b/src/international/transactions.ts index a6f344034..7fe475891 100644 --- a/src/international/transactions.ts +++ b/src/international/transactions.ts @@ -3,6 +3,7 @@ import { IDUpdateInterval, RoomStatsKeys } from "./constants" import { randomIntRange, utils } from "utils/utils" import { collectiveManager } from "./collective" import { segmentsManager } from "./segments" +import { statsManager } from "./statsManager" export class TransactionsManager { @@ -76,18 +77,18 @@ export class TransactionsManager { if (transaction.order) { - Memory.stats.rooms[transaction.from][RoomStatsKeys.EnergyOutputSold] += transaction.amount + statsManager.updateCommuneStat(transaction.from, RoomStatsKeys.EnergyOutputSold, transaction.amount) return } const isDomestic = this.isDomestic(transaction.from, transaction.to) if (isDomestic) { - Memory.stats.rooms[transaction.from][RoomStatsKeys.EnergyTerminalSentDomestic] += transaction.amount + statsManager.updateCommuneStat(transaction.from, RoomStatsKeys.EnergyTerminalSentDomestic, transaction.amount) } // Not a domestic trade else { - Memory.stats.rooms[transaction.from][RoomStatsKeys.EnergyTerminalSentOther] += transaction.amount + statsManager.updateCommuneStat(transaction.from, RoomStatsKeys.EnergyTerminalSentOther, transaction.amount) } } @@ -96,7 +97,7 @@ export class TransactionsManager { if (transaction.order) { - Memory.stats.rooms[transaction.to][RoomStatsKeys.EnergyInputBought] += transaction.amount + statsManager.updateCommuneStat(transaction.to, RoomStatsKeys.EnergyInputBought, transaction.amount) return } } diff --git a/src/room/commune/terminal/tradingUtils.ts b/src/room/commune/terminal/tradingUtils.ts index 8828ec050..6ad7a1a9b 100644 --- a/src/room/commune/terminal/tradingUtils.ts +++ b/src/room/commune/terminal/tradingUtils.ts @@ -28,15 +28,13 @@ export class TradingUtils { // Success - const roomsStats = Memory.stats.rooms[room.name] - const transactionCost = Game.market.calcTransactionCost( actualDealAmount, room.name, order.roomName, ) - roomsStats[RoomStatsKeys.EnergyOutputTransactionCosts] += transactionCost + statsManager.updateCommuneStat(room.name, RoomStatsKeys.EnergyOutputTransactionCosts, transactionCost) return Result.success } @@ -91,10 +89,8 @@ export class TradingUtils { // Success - const roomsStats = Memory.stats.rooms[room.name] - const transactionCost = Game.market.calcTransactionCost(dealAmount, room.name, order.roomName) - roomsStats[RoomStatsKeys.EnergyOutputTransactionCosts] += transactionCost + statsManager.updateCommuneStat(room.name, RoomStatsKeys.EnergyOutputTransactionCosts, transactionCost) return Result.success } From 3344898821825a83511f841c7551ed94ae9ad57d Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 6 Jan 2024 14:58:56 -0800 Subject: [PATCH 069/190] (migration) segments initialization for persistent users --- src/international/migration.ts | 14 +++++++++++++- src/settingsDefault.ts | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/international/migration.ts b/src/international/migration.ts index 447be7514..b4dbd4374 100644 --- a/src/international/migration.ts +++ b/src/international/migration.ts @@ -1,5 +1,5 @@ import { roomNameUtils } from 'room/roomNameUtils' -import { RoomMemoryKeys, RoomTypes } from './constants' +import { RoomMemoryKeys, RoomTypes, SegmentIDs } from './constants' /** * Migrate version by performing actions, if required @@ -39,6 +39,18 @@ export class MigrationManager { delete (Memory as any).constructionSites Memory.breakingVersion += 1 } + if (Memory.breakingVersion === 123) { + + RawMemory.segments[SegmentIDs.basePlans] = JSON.stringify({ + + } as BasePlansSegment) + + RawMemory.segments[SegmentIDs.IDs] = JSON.stringify({ + constructionSites: {}, + recordedTransactionIDs: {}, + } as IDsSegment) + Memory.breakingVersion += 1 + } if (Memory.breakingVersion < global.settings.breakingVersion) { global.killCreeps() diff --git a/src/settingsDefault.ts b/src/settingsDefault.ts index f77c1190e..d382e395e 100644 --- a/src/settingsDefault.ts +++ b/src/settingsDefault.ts @@ -105,7 +105,7 @@ export interface Settings { * Default global.settings. DO NOT MODIFY for personal use; instead, include your preferences in global.settings.ts */ export const defaultSettings: Settings = { - breakingVersion: 123, + breakingVersion: 124, roomVisuals: false, mapVisuals: false, allies: [ From 16b8e9dc5a81d8073bab8e24dd8906e2e070e470 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 6 Jan 2024 17:09:50 -0800 Subject: [PATCH 070/190] terminal request improvements --- src/room/commune/terminal/terminal.ts | 33 +++++-- src/room/commune/terminal/tradingUtils.ts | 28 ++++-- src/settingsDefault.ts | 106 +--------------------- src/types/players.ts | 1 + 4 files changed, 53 insertions(+), 115 deletions(-) diff --git a/src/room/commune/terminal/terminal.ts b/src/room/commune/terminal/terminal.ts index 33e41ed5e..81da819e6 100644 --- a/src/room/commune/terminal/terminal.ts +++ b/src/room/commune/terminal/terminal.ts @@ -113,9 +113,9 @@ export class TerminalManager { /* const minStoredResource = resourceTargets.min[request.resource] * 1.1 if (storedResource <= minStoredResource) continue */ - const ourPriority = tradingUtils.getPriority( - storedResource, - resourceTargets.min[request.resource], + const ourPriority = Math.max( + tradingUtils.getPriority(storedResource, resourceTargets.min[request.resource]), + 0, ) // Our priority should be lower if (ourPriority >= request.priority) continue @@ -123,6 +123,24 @@ export class TerminalManager { // The request's priority must be 10% greater than our own if (priorityDiff < 0.1) continue + const equivalentAmount = tradingUtils.getAmountFromPriority( + request.priority, + resourceTargets.min[request.resource], + ) + const equivalentPriority = tradingUtils.getPriority( + equivalentAmount, + resourceTargets.min[request.resource], + ) + + const consequentSend = storedResource - equivalentAmount + + customLog( + 'TERMINAL SEND SPECIAL VALUES', + `${equivalentAmount} vs ${storedResource} vs ${ + Game.rooms[request.roomName].roomManager.resourcesInStoringStructures[request.resource] + }, ${request.amount}, ${equivalentPriority} vs ${request.priority}, ${consequentSend}`, + ) + const maxSendAmount = Math.floor( Math.min( storedResource * priorityDiff, @@ -147,10 +165,13 @@ export class TerminalManager { ', ' + priorityDiff + ', ' + + ourPriority + + ', ' + (storedResource - request.amount) + ', ' + - (storedResource - request.amount) * priorityDiff + ', ' + - tradingUtils.getTargetAmountFromPriority(priorityDiff, storedResource) + (storedResource - request.amount) * priorityDiff + + ', ' + + tradingUtils.getTargetAmountFromPriority(priorityDiff, storedResource), ) // Make sure we are fulfilling at least 10% of the request if (request.amount * 0.1 > sendAmount) continue @@ -189,8 +210,6 @@ export class TerminalManager { // Consequences - request.amount -= amount - delete collectiveManager.terminalRequests[ID] this.communeManager.room.terminal.intended = true return Result.action diff --git a/src/room/commune/terminal/tradingUtils.ts b/src/room/commune/terminal/tradingUtils.ts index 6ad7a1a9b..5e2ecd428 100644 --- a/src/room/commune/terminal/tradingUtils.ts +++ b/src/room/commune/terminal/tradingUtils.ts @@ -34,7 +34,11 @@ export class TradingUtils { order.roomName, ) - statsManager.updateCommuneStat(room.name, RoomStatsKeys.EnergyOutputTransactionCosts, transactionCost) + statsManager.updateCommuneStat( + room.name, + RoomStatsKeys.EnergyOutputTransactionCosts, + transactionCost, + ) return Result.success } @@ -90,7 +94,11 @@ export class TradingUtils { // Success const transactionCost = Game.market.calcTransactionCost(dealAmount, room.name, order.roomName) - statsManager.updateCommuneStat(room.name, RoomStatsKeys.EnergyOutputTransactionCosts, transactionCost) + statsManager.updateCommuneStat( + room.name, + RoomStatsKeys.EnergyOutputTransactionCosts, + transactionCost, + ) return Result.success } @@ -164,18 +172,24 @@ export class TradingUtils { return Result.success } - getPriority(currentAmount: number, targetAmount: number) { - + getPriority(amount: number, targetAmount: number) { // the / 2 is temporary - const priority = roundTo((1 - currentAmount / targetAmount) / 2, 2) + const priority = roundTo(1 - amount / targetAmount, 2) return priority } /** * Inverse function of priority */ - getTargetAmountFromPriority(priority: number, currentAmount: number) { - return currentAmount / -((2 * priority) - 1) + getTargetAmountFromPriority(priority: number, amount: number) { + return amount / -(priority - 1) + } + + /** + * Inverse function of priority + */ + getAmountFromPriority(priority: number, targetAmount: number) { + return targetAmount * -(priority - 1) } } diff --git a/src/settingsDefault.ts b/src/settingsDefault.ts index d382e395e..1cc3b6a91 100644 --- a/src/settingsDefault.ts +++ b/src/settingsDefault.ts @@ -1,105 +1,6 @@ -export interface Settings { - /** - * The current breaking version of the bot. - * Increment to induce migrations which can be controlled with the migration manager - */ - breakingVersion: number | undefined - /** - * Wether the bot should generate any room visuals - */ - roomVisuals: boolean +import { PlayerRelationships } from "types/players"; +import { Settings } from "types/settings"; - /** - * Wether the bot should generate map visuals - */ - mapVisuals: boolean - - /** - * A list of usernames to treat as allies - */ - allies: string[] - - /** - * A list of usernames to treat as neutral - */ - nonAggressionPlayers: string[] - - /** - * A list of usernames to not trade with - */ - tradeBlacklist: string[] - - /** - * Wether the bot should sell pixels - */ - pixelSelling: boolean - - /** - * Wether the bot should generate pixels - */ - pixelGeneration: boolean - - /** - * Wether the bot should automatically respond to workRequests - */ - autoClaim: boolean - - /** - * Wether or not to automatically create attack requests for viable targets - */ - autoAttack: boolean - - /** - * Wether the bot should enable ramparts when there is no enemy present - */ - publicRamparts: boolean - - /** - * Wether the bot should try trading with its allies - */ - allyCommunication: boolean - - /** - * Wether or not the bot should be using the market - */ - marketUsage: boolean - - /** - * The number of ticks to publish customLogs for. 0 disabled logging. Cannot be more than 100 - */ - logging: number - - /** - * Wether or not creeps should use .say - */ - creepSay: boolean - - /** - * Wether or not creeps should chant slogans - */ - creepChant: string[] - - /** - * The public segment number (0-99) that you and your allies are using - */ - allySegmentID: number - /** - * Wether or not to send errors, if set up, to the error storer - */ - errorExporting: boolean - /** - * Wether or not to try to migrate existing structures to planned positions - */ - structureMigration: boolean - /** - * Wether or not to generate visuals for room logistics requests - */ - roomLogisticsVisuals: boolean - /** - * Wether or not to generate and display logs for debugging purposes - */ - debugLogging: boolean -} /** * Default global.settings. DO NOT MODIFY for personal use; instead, include your preferences in global.settings.ts @@ -150,4 +51,7 @@ export const defaultSettings: Settings = { structureMigration: true, roomLogisticsVisuals: false, debugLogging: false, + relationships: { + MarvinTMB: PlayerRelationships.ally + } } diff --git a/src/types/players.ts b/src/types/players.ts index dd2592fd4..fcecb060e 100644 --- a/src/types/players.ts +++ b/src/types/players.ts @@ -3,6 +3,7 @@ import { PlayerMemoryKeys } from "international/constants" export enum PlayerRelationships { ally, enemy, + noAggression } export interface PlayerMemory { From d25881e8836c7691374506c7c2c88c87045d3b13 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 6 Jan 2024 18:41:35 -0800 Subject: [PATCH 071/190] temporary fix to terminal transfer loop --- src/international/constants.ts | 6 + src/international/init.ts | 2 +- src/international/players.ts | 4 +- src/main.ts | 5 +- src/other/profilerRegister.ts | 5 +- src/room/commune/terminal/terminal.ts | 12 +- src/settingsDefault.ts | 98 +- src/types.d.ts | 2572 ++++++++++++------------- src/types/players.ts | 25 +- src/utils/procs.ts | 20 + src/utils/utils.ts | 35 +- 11 files changed, 1390 insertions(+), 1394 deletions(-) create mode 100644 src/utils/procs.ts diff --git a/src/international/constants.ts b/src/international/constants.ts index 595df2e0d..fc41d70df 100644 --- a/src/international/constants.ts +++ b/src/international/constants.ts @@ -3,6 +3,12 @@ import { collectiveManager } from './collective' import { CommuneManager } from 'room/commune/commune' import { randomIntRange } from 'utils/utils' +export enum PlayerRelationships { + ally, + enemy, + noAggression +} + export enum PlayerMemoryKeys { /** * Generally how good their offense is diff --git a/src/international/init.ts b/src/international/init.ts index afe46a6fb..d91c56a5a 100644 --- a/src/international/init.ts +++ b/src/international/init.ts @@ -2,7 +2,7 @@ import { getMe } from 'utils/utils' import { playerManager } from './players' import { statsManager } from './statsManager' import { PlayerMemoryKeys, SegmentIDs } from './constants' -import { PlayerRelationships } from 'types/players' +import { PlayerRelationships } from './constants' /** * Configures variables to align with the bot's expectations, to ensure proper function diff --git a/src/international/players.ts b/src/international/players.ts index 51d4132e2..ab3c08c83 100644 --- a/src/international/players.ts +++ b/src/international/players.ts @@ -2,7 +2,7 @@ import { isNumber } from 'lodash' import { PlayerMemoryKeys, defaultDataDecay, playerDecayKeys } from './constants' import { randomTick } from '../utils/utils' import { Sleepable } from '../utils/sleepable' -import { PlayerRelationships } from 'types/players' +import { PlayerRelationships } from './constants' export class PlayerManager extends Sleepable { /** @@ -38,7 +38,7 @@ export class PlayerManager extends Sleepable { this.highestThreat = threat } - + } } diff --git a/src/main.ts b/src/main.ts index 095c279e8..2044c5a5a 100644 --- a/src/main.ts +++ b/src/main.ts @@ -11,7 +11,6 @@ import './room/structureAdditions' import './room/creeps/creepAdditions' import './other/profilerRegister' import { memHack } from 'other/memHack' -import { outOfBucket } from 'utils/utils' import { CPUMaxPerTick, Result } from 'international/constants' import { initManager } from './international/init' import { migrationManager } from 'international/migration' @@ -37,6 +36,8 @@ import { transactionsManager } from 'international/transactions' import { segmentsManager } from 'international/segments' import { creepDataManager } from 'room/creeps/creepData' import { roomDataManager } from 'room/roomData' +import { utils } from 'utils/utils' +import { procs } from 'utils/procs' export function originalLoop() { @@ -45,7 +46,7 @@ export function originalLoop() { if (Game.flags.deactivate) return if (Game.cpu.bucket < CPUMaxPerTick) { - outOfBucket() + procs.outOfBucket() return } if (global.userScript) global.userScript.initialRun() diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index ccdbd2fc0..62fc9892e 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -18,7 +18,7 @@ import { DynamicSquad } from 'room/creeps/roleManagers/antifa/dynamicSquad' import { Duo } from 'room/creeps/roleManagers/antifa/duo' import { originalLoop } from 'main' import { creepClasses } from 'room/creeps/creepClasses' -import { Utils, outOfBucket } from 'utils/utils' +import { Utils } from 'utils/utils' import { CreepOrganizer } from 'international/creepOrganizer' import { RequestsManager } from 'international/requests' import { SimpleAllies } from 'international/simpleAllies/simpleAllies' @@ -101,6 +101,7 @@ import { PowerCreepProcs } from 'room/creeps/powerCreeps/powerCreepProcs' import { PowerCreepUtils } from 'room/creeps/powerCreeps/powerCreepUtils' import { CreepProcs } from 'room/creeps/creepProcs' import { CreepLogiProcs } from 'room/creeps/creepLogiProcs' +import { Procs } from 'utils/procs' export function profilerRegister() { // Classes @@ -129,6 +130,7 @@ export function profilerRegister() { profiler.registerClass(CustomPathFinder, 'CustomPathFinder') profiler.registerClass(TradingUtils, 'MarketUtils') profiler.registerClass(Utils, 'Utils') + profiler.registerClass(Procs, 'Procs') // Room classes @@ -194,7 +196,6 @@ export function profilerRegister() { // Functions profiler.registerFN(originalLoop, 'loop') - profiler.registerFN(outOfBucket, 'outOfBucket') // codec functions diff --git a/src/room/commune/terminal/terminal.ts b/src/room/commune/terminal/terminal.ts index 81da819e6..34dfffaf1 100644 --- a/src/room/commune/terminal/terminal.ts +++ b/src/room/commune/terminal/terminal.ts @@ -121,12 +121,13 @@ export class TerminalManager { if (ourPriority >= request.priority) continue const priorityDiff = request.priority - ourPriority // The request's priority must be 10% greater than our own - if (priorityDiff < 0.1) continue + if (priorityDiff < 0.15) continue const equivalentAmount = tradingUtils.getAmountFromPriority( request.priority, resourceTargets.min[request.resource], ) + const equivalentPriority = tradingUtils.getPriority( equivalentAmount, resourceTargets.min[request.resource], @@ -141,11 +142,14 @@ export class TerminalManager { }, ${request.amount}, ${equivalentPriority} vs ${request.priority}, ${consequentSend}`, ) + if (consequentSend < request.amount) continue + const maxSendAmount = Math.floor( Math.min( storedResource * priorityDiff, request.amount, - room.terminal.store.getUsedCapacity(request.resource) / 2, + room.terminal.store.getUsedCapacity(request.resource), + equivalentAmount, ), ) @@ -154,7 +158,7 @@ export class TerminalManager { maxSendAmount, this.communeManager.room.name, request.roomName, - ) + ) / 2 customLog( 'TERMINAL REQUEST ' + request.resource, maxSendAmount + @@ -171,7 +175,7 @@ export class TerminalManager { ', ' + (storedResource - request.amount) * priorityDiff + ', ' + - tradingUtils.getTargetAmountFromPriority(priorityDiff, storedResource), + tradingUtils.getAmountFromPriority(priorityDiff, resourceTargets.min[request.resource]), ) // Make sure we are fulfilling at least 10% of the request if (request.amount * 0.1 > sendAmount) continue diff --git a/src/settingsDefault.ts b/src/settingsDefault.ts index 1cc3b6a91..5de931169 100644 --- a/src/settingsDefault.ts +++ b/src/settingsDefault.ts @@ -1,57 +1,53 @@ -import { PlayerRelationships } from "types/players"; -import { Settings } from "types/settings"; - +import { Settings } from 'types/settings' /** * Default global.settings. DO NOT MODIFY for personal use; instead, include your preferences in global.settings.ts */ export const defaultSettings: Settings = { - breakingVersion: 124, - roomVisuals: false, - mapVisuals: false, - allies: [ - 'MarvinTMB' - ], - nonAggressionPlayers: [], - tradeBlacklist: [], - pixelSelling: false, - pixelGeneration: false, - autoClaim: true, - autoAttack: false, - publicRamparts: false, - allyCommunication: true, - marketUsage: true, - logging: Game.shard.name === 'performanceServer' ? 0 : 1, - creepSay: true, - creepChant: [ - 'Creeps', - 'of', - Game.shard.name, - 'unite,', - 'you', - 'have', - 'nothing', - 'to', - 'lose', - 'but', - 'your', - 'chains!', - undefined, - 'PEACE', - 'LAND', - 'ENERGY', - undefined, - 'Democracy', - 'is non-', - 'negotiable!', - undefined, - ], - allySegmentID: 90, - errorExporting: true, - structureMigration: true, - roomLogisticsVisuals: false, - debugLogging: false, - relationships: { - MarvinTMB: PlayerRelationships.ally - } + breakingVersion: 124, + roomVisuals: false, + mapVisuals: false, + allies: ['MarvinTMB'], + nonAggressionPlayers: [], + tradeBlacklist: [], + pixelSelling: false, + pixelGeneration: false, + autoClaim: true, + autoAttack: false, + publicRamparts: false, + allyCommunication: true, + marketUsage: true, + logging: Game.shard.name === 'performanceServer' ? 0 : 1, + creepSay: true, + creepChant: [ + 'Creeps', + 'of', + Game.shard.name, + 'unite,', + 'you', + 'have', + 'nothing', + 'to', + 'lose', + 'but', + 'your', + 'chains!', + undefined, + 'PEACE', + 'LAND', + 'ENERGY', + undefined, + 'Democracy', + 'is non-', + 'negotiable!', + undefined, + ], + allySegmentID: 90, + errorExporting: true, + structureMigration: true, + roomLogisticsVisuals: false, + debugLogging: false, + /* relationships: { + MarvinTMB: PlayerRelationships.ally, + }, */ } diff --git a/src/types.d.ts b/src/types.d.ts index 3290ac8f8..76a390ddb 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -3,27 +3,27 @@ import { RoomManager } from './room/room' import { Duo } from './room/creeps/roleManagers/antifa/duo' import { Quad } from './room/creeps/roleManagers/antifa/quad' import { - WorkRequestKeys, - CombatRequestKeys, - CreepMemoryKeys, - CreepRoomLogisticsRequestKeys, - DepositRequestKeys, - HaulRequestKeys, - NukeRequestKeys, - PlayerMemoryKeys, - PowerCreepMemoryKeys, - PowerRequestKeys, - RoomMemoryKeys, - RoomTypes, - SleepFor, - Result, - PlayerRelationship, - ReservedCoordTypes, - WorkTypes, - creepRoles, - PowerCreepTasks, - RoomLogisticsRequestTypes, - MovedTypes, + WorkRequestKeys, + CombatRequestKeys, + CreepMemoryKeys, + CreepRoomLogisticsRequestKeys, + DepositRequestKeys, + HaulRequestKeys, + NukeRequestKeys, + PlayerMemoryKeys, + PowerCreepMemoryKeys, + PowerRequestKeys, + RoomMemoryKeys, + RoomTypes, + SleepFor, + Result, + PlayerRelationship, + ReservedCoordTypes, + WorkTypes, + creepRoles, + PowerCreepTasks, + RoomLogisticsRequestTypes, + MovedTypes, } from 'international/constants' import { Operator } from 'room/creeps/powerCreeps/operator' import { MeleeDefender } from 'room/creeps/roleManagers/commune/defenders/meleeDefender' @@ -34,1494 +34,1492 @@ import { CustomPathFinderArgs } from 'international/customPathFinder' import { CombatRequest, HaulRequest, NukeRequest, WorkRequest } from 'types/internationalRequests' import { PlayerMemory } from 'types/players' import { - CreepRoomLogisticsRequest, - PowerTask, - RoomLogisticsRequest, - FindNewRoomLogisticsRequestArgs, - CreateRoomLogisticsRequestArgs, + CreepRoomLogisticsRequest, + PowerTask, + RoomLogisticsRequest, + FindNewRoomLogisticsRequestArgs, + CreateRoomLogisticsRequestArgs, } from 'types/roomRequests' import { UserScriptTemplate } from 'other/userScript/userScript.example' import { StatsMemory } from 'types/stats' import { WeightLayers, WeightsByID } from 'room/construction/neuralNetwork/network' declare global { - interface ProfilerData { - calls: number - time: number - } + interface ProfilerData { + calls: number + time: number + } + + interface Profiler { + clear(): void + output(): void + start(): void + status(): void + stop(): void + toString(): string + } + + interface Collaborator { + run(): void + } + + interface Coord { + x: number + y: number + } + + interface RoomCoord extends Coord {} + + interface Rect { + x1: number + y1: number + x2: number + y2: number + } + + interface CostMatrix { + _bits: Uint8Array + } + + interface Colors { + white: string + lightGrey: string + lightBlue: string + darkBlue: string + black: string + yellow: string + red: string + green: string + brown: string + } + + type PartsByPriority = + | 'tough' + | 'claim' + | 'attack' + | 'ranged_attack' + | 'secondaryTough' + | 'work' + | 'carry' + | 'move' + | 'secondaryAttack' + | 'heal' + + type SquadTypes = 'duo' | 'quad' | 'dynamic' + type SquadCombatTypes = 'rangedAttack' | 'attack' | 'dismantle' + type SquadMoveTypes = 'transport' | 'attack' + + type RemoteStampTypes = 'road' | 'container' + + type StampTypes = + | 'fastFiller' + | 'hub' + | 'inputLab' + | 'outputLab' + | 'tower' + | 'observer' + | 'sourceLink' + | 'sourceExtension' + | 'container' + | 'extractor' + | 'road' + | 'minCutRampart' + | 'onboardingRampart' + | 'shieldRampart' + | 'gridExtension' + | 'nuker' + | 'powerSpawn' + + interface Stamp { + offset: number - interface Profiler { - clear(): void - output(): void - start(): void - status(): void - stop(): void - toString(): string - } + /** + * The range of protection from the anchor to provide when deciding rampart placement + */ + protectionOffset: number + size: number + structures: { [structureType: string]: Coord[] } + asymmetry?: number + } + + type StampAnchors = Partial> + /** + * key of packed stamp type with values of packed coord list + */ + type PackedStampAnchors = Partial<{ [packedStampType: string]: string }> + + type PosMap = T[] + + type CoordMap = Uint8Array + + type CreepRoles = + | 'sourceHarvester' + | 'hauler' + | 'requestHauler' + | 'controllerUpgrader' + | 'builder' + | 'maintainer' + | 'mineralHarvester' + | 'hubHauler' + | 'fastFiller' + | 'meleeDefender' + | 'rangedDefender' + | 'remoteSourceHarvester' + | 'remoteReserver' + | 'remoteDefender' + | 'remoteCoreAttacker' + | 'remoteDismantler' + | 'remoteBuilder' + | 'scout' + | 'claimer' + | 'vanguard' + | 'allyVanguard' + | 'antifaRangedAttacker' + | 'antifaAttacker' + | 'antifaHealer' + | 'antifaDismantler' + | 'antifaDowngrader' + + interface TerminalRequest { + /** + * Preference from 0-1 where 1 is least prefered + */ + priority: number + amount: number + resource: ResourceConstant + roomName: string + } + + interface BasePlanCoord { + structureType: BuildableStructureConstant + minRCL: number + } + + interface RampartPlanCoord { + minRCL: number + /** + * A boolean integer + */ + coversStructure: number + /** + * A boolean integer. buildForNuke cannot be true if buildForThreat is true + */ + buildForNuke: number + /** + * A boolean integer. buildForThreat cannot be true if buildForNuke is true + */ + buildForThreat: number + /** + * A boolean integer + */ + needsStoringStructure: number + } + + type QuadTransformTypes = + | 'none' + | 'rotateLeft' + | 'rotateRight' + | 'tradeHorizontal' + | 'tradeVertical' + + interface BasePlanAttempt { + score: number + stampAnchors: PackedStampAnchors + basePlans: string + rampartPlans: string + roadQuota: number[] + communeSources: Id[] + sourceHarvestPositions: string[] + sourcePaths: string[] + mineralHarvestPositions: string + mineralPath: string + centerUpgradePos: string + upgradePath: string + } + + interface RCLPlannedStructureType { + structures: number + minRCL: number + } + + interface CombatStrength { + dismantle: number + melee: number + ranged: number + heal: number + } + + interface FindClosestPos { + coordMap: CoordMap + sources: Coord[] + targetCondition(coord: Coord): boolean + /** + * Wether or not to attempt a cardinal flood + */ + cardinalFlood?: boolean + visuals?: boolean + } + + interface FindClosestPosOfValueOpts { + coordMap: CoordMap + startCoords: Coord[] + requiredValue: number + reduceIterations: number + initialWeight?: number + adjacentToRoads?: boolean + roadCoords?: CoordMap + visuals?: boolean + /** + * Wether or not to attempt a cardinal flood + */ + cardinalFlood?: boolean + /** + * The protection offset of the stamp + */ + protectionOffset?: number + } - interface Collaborator { - run(): void - } + interface FindClosestPosOfValueOptsAsym extends FindClosestPosOfValueOpts { + /** + * The x and y offset from the top left of the stamp + */ + offset: number + /** + * The asymmetrical x and y offset from the top left of the stamp + */ + asymOffset: number + } - interface Coord { - x: number - y: number - } + interface MoveRequestOpts { + cacheAmount?: number + /** + * Allow for assigning reservedCoord of a type on successful pathfind + */ + reserveCoord?: ReservedCoordTypes + } - interface RoomCoord extends Coord {} + interface MoveRequestByPathOpts { + packedPath: string + loose?: boolean + remoteName?: string + } - interface Rect { - x1: number - y1: number - x2: number - y2: number - } + type OrderedStructurePlans = BuildObj[] - interface CostMatrix { - _bits: Uint8Array - } + interface BuildObj { + structureType: BuildableStructureConstant + x: number + y: number + } - interface Colors { - white: string - lightGrey: string - lightBlue: string - darkBlue: string - black: string - yellow: string - red: string - green: string - brown: string - } + type FlagNames = 'disableTowerAttacks' | 'internationalDataVisuals' | 'spawnRequestVisuals' - type PartsByPriority = - | 'tough' - | 'claim' - | 'attack' - | 'ranged_attack' - | 'secondaryTough' - | 'work' - | 'carry' - | 'move' - | 'secondaryAttack' - | 'heal' - - type SquadTypes = 'duo' | 'quad' | 'dynamic' - type SquadCombatTypes = 'rangedAttack' | 'attack' | 'dismantle' - type SquadMoveTypes = 'transport' | 'attack' - - type RemoteStampTypes = 'road' | 'container' - - type StampTypes = - | 'fastFiller' - | 'hub' - | 'inputLab' - | 'outputLab' - | 'tower' - | 'observer' - | 'sourceLink' - | 'sourceExtension' - | 'container' - | 'extractor' - | 'road' - | 'minCutRampart' - | 'onboardingRampart' - | 'shieldRampart' - | 'gridExtension' - | 'nuker' - | 'powerSpawn' - - interface Stamp { - offset: number - - /** - * The range of protection from the anchor to provide when deciding rampart placement - */ - protectionOffset: number - size: number - structures: { [structureType: string]: Coord[] } - asymmetry?: number - } + interface Memory { + breakingVersion: number + /** + * The name of the user + */ + me: string - type StampAnchors = Partial> - /** - * key of packed stamp type with values of packed coord list - */ - type PackedStampAnchors = Partial<{ [packedStampType: string]: string }> - - type PosMap = T[] - - type CoordMap = Uint8Array - - type CreepRoles = - | 'sourceHarvester' - | 'hauler' - | 'requestHauler' - | 'controllerUpgrader' - | 'builder' - | 'maintainer' - | 'mineralHarvester' - | 'hubHauler' - | 'fastFiller' - | 'meleeDefender' - | 'rangedDefender' - | 'remoteSourceHarvester' - | 'remoteReserver' - | 'remoteDefender' - | 'remoteCoreAttacker' - | 'remoteDismantler' - | 'remoteBuilder' - | 'scout' - | 'claimer' - | 'vanguard' - | 'allyVanguard' - | 'antifaRangedAttacker' - | 'antifaAttacker' - | 'antifaHealer' - | 'antifaDismantler' - | 'antifaDowngrader' - - interface TerminalRequest { - /** - * Preference from 0-1 where 1 is least prefered - */ - priority: number - amount: number - resource: ResourceConstant - roomName: string - } + /** + * An ongoing record of the latest ID assigned by the bot + */ + ID: number - interface BasePlanCoord { - structureType: BuildableStructureConstant - minRCL: number - } + chantIndex: number - interface RampartPlanCoord { - minRCL: number - /** - * A boolean integer - */ - coversStructure: number - /** - * A boolean integer. buildForNuke cannot be true if buildForThreat is true - */ - buildForNuke: number - /** - * A boolean integer. buildForThreat cannot be true if buildForNuke is true - */ - buildForThreat: number - /** - * A boolean integer - */ - needsStoringStructure: number - } + /** + * the tick of the last holistic configuration opperation + */ + lastConfig: number - type QuadTransformTypes = - | 'none' - | 'rotateLeft' - | 'rotateRight' - | 'tradeHorizontal' - | 'tradeVertical' - - interface BasePlanAttempt { - score: number - stampAnchors: PackedStampAnchors - basePlans: string - rampartPlans: string - roadQuota: number[] - communeSources: Id[] - sourceHarvestPositions: string[] - sourcePaths: string[] - mineralHarvestPositions: string - mineralPath: string - centerUpgradePos: string - upgradePath: string - } + minHaulerCostError: number + minHaulerCost: number + minHaulerCostUpdate: number - interface RCLPlannedStructureType { - structures: number - minRCL: number - } + /** + * + */ + workRequests: { [roomName: string]: WorkRequest } - interface CombatStrength { - dismantle: number - melee: number - ranged: number - heal: number - } + combatRequests: { [roomName: string]: Partial } - interface FindClosestPos { - coordMap: CoordMap - sources: Coord[] - targetCondition(coord: Coord): boolean - /** - * Wether or not to attempt a cardinal flood - */ - cardinalFlood?: boolean - visuals?: boolean - } + haulRequests: { [roomName: string]: Partial } - interface FindClosestPosOfValueOpts { - coordMap: CoordMap - startCoords: Coord[] - requiredValue: number - reduceIterations: number - initialWeight?: number - adjacentToRoads?: boolean - roadCoords?: CoordMap - visuals?: boolean - /** - * Wether or not to attempt a cardinal flood - */ - cardinalFlood?: boolean - /** - * The protection offset of the stamp - */ - protectionOffset?: number - } + nukeRequests: { [roomName: string]: Partial } - interface FindClosestPosOfValueOptsAsym extends FindClosestPosOfValueOpts { - /** - * The x and y offset from the top left of the stamp - */ - offset: number - /** - * The asymmetrical x and y offset from the top left of the stamp - */ - asymOffset: number - } + stats: Partial - interface MoveRequestOpts { - cacheAmount?: number - /** - * Allow for assigning reservedCoord of a type on successful pathfind - */ - reserveCoord?: ReservedCoordTypes - } + players: { [playerName: string]: Partial } + + masterPlan: { resources?: { [key in ResourceConstant]?: number } } - interface MoveRequestByPathOpts { - packedPath: string - loose?: boolean - remoteName?: string + networks: { + towers: { + weightLayers: WeightLayers + weightsByID: WeightsByID + } } - type OrderedStructurePlans = BuildObj[] + // Other + + profiler: ProfilerMemory + } + + interface RawMemory { + _parsed: Memory + } + + type SpawningStructures = (StructureSpawn | StructureExtension)[] + + interface OrganizedStructures { + spawn: StructureSpawn[] + extension: StructureExtension[] + road: StructureRoad[] + constructedWall: StructureWall[] + rampart: StructureRampart[] + keeperLair: StructureKeeperLair[] + portal: StructurePortal[] + controller: StructureController[] + link: StructureLink[] + storage: StructureStorage[] + tower: StructureTower[] + observer: StructureObserver[] + powerBank: StructurePowerBank[] + powerSpawn: StructurePowerSpawn[] + extractor: StructureExtractor[] + lab: StructureLab[] + terminal: StructureTerminal[] + container: StructureContainer[] + nuker: StructureNuker[] + factory: StructureFactory[] + invaderCore: StructureInvaderCore[] + } + + type InterfaceToKV = { + [K in keyof T]: { key: K; value: T[K] } + }[keyof T] + + interface EnemySquadData { + /** + * enemy attack + rangedAttack damage + */ + highestMeleeDamage: number + highestRangedDamage: number + /** + * Accounts for defence + */ + highestHeal: number + highestDismantle: number + } + + interface TotalEnemyCombatStrength { + melee: number + ranged: number + heal: number + dismantle: number + } + + interface Room { + /** + * The names of creeps harvesting each source + */ + creepsOfSource: string[][] - interface BuildObj { - structureType: BuildableStructureConstant - x: number - y: number - } + myCreeps: Creep[] + myPowerCreeps: PowerCreep[] + /** + * An object with keys of roles with properties of arrays of creep names belonging to the role + */ + myCreepsByRole: { [key in CreepRoles]?: string[] } - type FlagNames = 'disableTowerAttacks' | 'internationalDataVisuals' | 'spawnRequestVisuals' + /** + * An object with keys of roles with properties of arrays of power creep names belonging to the role + */ + myPowerCreepsByRole: { [key in PowerClassConstant]?: string[] } - interface Memory { - breakingVersion: number - /** - * The name of the user - */ - me: string + /** + * An object with keys of roles and properties of the number of creeps with the role from this room + */ + creepsFromRoom: Partial<{ [key in CreepRoles]: string[] }> - /** - * An ongoing record of the latest ID assigned by the bot - */ - ID: number + /** + * The cumulative amount of creeps with a communeName value of this room's name + */ + creepsFromRoomAmount: number - chantIndex: number + /** + * An object with keys of roles and properties of the number of creeps with the role from this room + */ + creepsOfRemote: { [remoteName: string]: Partial<{ [key in CreepRoles]: string[] }> } - /** - * the tick of the last holistic configuration opperation - */ - lastConfig: number + /** + * A set of roomNames representing the targets stof scouts from this commune + */ + scoutTargets: Set - minHaulerCostError: number - minHaulerCost: number - minHaulerCostUpdate: number + /** + * Tile types as defined by the rampartPlanner + */ + tileCoords: CoordMap - /** - * - */ - workRequests: { [roomName: string]: WorkRequest } + unprotectedCoords: CoordMap - combatRequests: { [roomName: string]: Partial } + /** + * Wether the towers can sufficiently deal with the enemy threat in the room + */ + towerInferiority: boolean - haulRequests: { [roomName: string]: Partial } + baseCoords: CoordMap - nukeRequests: { [roomName: string]: Partial } + rampartCoords: CoordMap - stats: Partial + roadCoords: CoordMap - players: { [playerName: string]: Partial } + /** + * A matrix with indexes of packed coords and values of creep names + */ + creepPositions: { [packedCoord: string]: string } - masterPlan: { resources?: { [key in ResourceConstant]?: number } } + /** + * A matrix with indexes of packed coords and values of creep names + */ + powerCreepPositions: { [packedCoord: string]: string } - networks: { - towers: { - weightLayers: WeightLayers - weightsByID: WeightsByID - } - } + /** + * A matrix with indexes of packed coords and values of creep names + */ + moveRequests: { [packedCoord: string]: string[] } - // Other + roomManager: RoomManager - profiler: ProfilerMemory - } + communeManager: CommuneManager - interface RawMemory { - _parsed: Memory - } + /** + * The names of creeps looking to join a squad + */ + squadRequests: Set - type SpawningStructures = (StructureSpawn | StructureExtension)[] - - interface OrganizedStructures { - spawn: StructureSpawn[] - extension: StructureExtension[] - road: StructureRoad[] - constructedWall: StructureWall[] - rampart: StructureRampart[] - keeperLair: StructureKeeperLair[] - portal: StructurePortal[] - controller: StructureController[] - link: StructureLink[] - storage: StructureStorage[] - tower: StructureTower[] - observer: StructureObserver[] - powerBank: StructurePowerBank[] - powerSpawn: StructurePowerSpawn[] - extractor: StructureExtractor[] - lab: StructureLab[] - terminal: StructureTerminal[] - container: StructureContainer[] - nuker: StructureNuker[] - factory: StructureFactory[] - invaderCore: StructureInvaderCore[] + roomLogisticsRequests: { + [key in RoomLogisticsRequestTypes]: { [ID: string]: RoomLogisticsRequest } } + powerTasks: { [ID: string]: PowerTask } - type InterfaceToKV = { - [K in keyof T]: { key: K; value: T[K] } - }[keyof T] - - interface EnemySquadData { - /** - * enemy attack + rangedAttack damage - */ - highestMeleeDamage: number - highestRangedDamage: number - /** - * Accounts for defence - */ - highestHeal: number - highestDismantle: number - } + attackingDefenderIDs: Set> + defenderEnemyTargetsWithDamage: Map, number> + defenderEnemyTargetsWithDefender: Map, Id[]> - interface TotalEnemyCombatStrength { - melee: number - ranged: number - heal: number - dismantle: number - } + usedRampartIDs: Map, Id> - interface Room { - /** - * The names of creeps harvesting each source - */ - creepsOfSource: string[][] + generalRepairStructures: (StructureRoad | StructureContainer)[] + rampartRepairStructures: StructureRampart[] - myCreeps: Creep[] - myPowerCreeps: PowerCreep[] - /** - * An object with keys of roles with properties of arrays of creep names belonging to the role - */ - myCreepsByRole: { [key in CreepRoles]?: string[] } + considerFunneled: boolean - /** - * An object with keys of roles with properties of arrays of power creep names belonging to the role - */ - myPowerCreepsByRole: { [key in PowerClassConstant]?: string[] } + // Commune - /** - * An object with keys of roles and properties of the number of creeps with the role from this room - */ - creepsFromRoom: Partial<{ [key in CreepRoles]: string[] }> + // Functions - /** - * The cumulative amount of creeps with a communeName value of this room's name - */ - creepsFromRoomAmount: number + /** + * + * @param pos1 The position of the thing performing the action + * @param pos2 The position of the thing getting intereacted with + * @param type The type of interaction, success if not provided + */ + actionVisual(pos1: RoomPosition, pos2: RoomPosition, type?: string): void - /** - * An object with keys of roles and properties of the number of creeps with the role from this room - */ - creepsOfRemote: { [remoteName: string]: Partial<{ [key in CreepRoles]: string[] }> } + targetVisual(coord1: Coord, coord2: Coord, visualize?: boolean): void - /** - * A set of roomNames representing the targets stof scouts from this commune - */ - scoutTargets: Set + /** + * Tries to delete a task with the provided ID and response state + */ + deleteTask(taskID: any, responder: boolean): void - /** - * Tile types as defined by the rampartPlanner - */ - tileCoords: CoordMap + scoutByRoomName(): number | false - unprotectedCoords: CoordMap + scoutRemote(scoutingRoom?: Room): number | false + scoutEnemyReservedRemote(): number | false + scoutEnemyUnreservedRemote(): number | false + scoutMyRemote(scoutingRoom: Room): number | false - /** - * Wether the towers can sufficiently deal with the enemy threat in the room - */ - towerInferiority: boolean + scoutEnemyRoom(): number - baseCoords: CoordMap + basicScout(): number - rampartCoords: CoordMap + /** + * Finds the type of a room and initializes its custom properties + * @param scoutingRoom The room that is performing the scout operation + */ + advancedScout(scoutingRoom: Room): number - roadCoords: CoordMap + makeRemote(scoutingRoom: Room): boolean - /** - * A matrix with indexes of packed coords and values of creep names - */ - creepPositions: { [packedCoord: string]: string } + createAttackCombatRequest(opts?: Partial): void + + createHarassCombatRequest(opts?: Partial): void + createDefendCombatRequest(opts?: Partial): void + + /** + * Finds the score of rooms for potential communes + */ + findScore(): void + + /** + * Finds open spaces in a room and records them in a cost matrix + */ + distanceTransform( + initialCoords?: CoordMap, + visuals?: boolean, /** - * A matrix with indexes of packed coords and values of creep names + * The smallest number to convert into an avoid value */ - powerCreepPositions: { [packedCoord: string]: string } + minAvoid?: number, + x1?: number, + y1?: number, + x2?: number, + y2?: number, + ): CoordMap + /** + * Finds open spaces in a room without adding depth to diagonals, and records the depth results in a cost matrix + */ + diagonalDistanceTransform( + initialCoords?: CoordMap, + visuals?: boolean, /** - * A matrix with indexes of packed coords and values of creep names + * The smallest number to convert into an avoid value */ - moveRequests: { [packedCoord: string]: string[] } + minAvoid?: number, + x1?: number, + y1?: number, + x2?: number, + y2?: number, + ): CoordMap - roomManager: RoomManager + /** + * Flood fills a room until it finds one of a set of positions + */ + findClosestPos(opts: FindClosestPos): RoomPosition | false - communeManager: CommuneManager + errorVisual(coord: Coord, visualize?: boolean): void - /** - * The names of creeps looking to join a squad - */ - squadRequests: Set + /** + * Finds and records a construction site for builders to target + */ + findAllyCSiteTargetID(creep: Creep): boolean - roomLogisticsRequests: { - [key in RoomLogisticsRequestTypes]: { [ID: string]: RoomLogisticsRequest } - } - powerTasks: { [ID: string]: PowerTask } + /** + * Groups positions with contigiousness, structured similarily to a flood fill + */ + groupRampartPositions(rampartPositions: number[]): RoomPosition[][] - attackingDefenderIDs: Set> - defenderEnemyTargetsWithDamage: Map, number> - defenderEnemyTargetsWithDefender: Map, Id[]> + findUnprotectedCoords(visuals?: boolean): void - usedRampartIDs: Map, Id> + /** + * + */ + findPositionsInsideRect(x1: number, y1: number, x2: number, y2: number): RoomPosition[] - generalRepairStructures: (StructureRoad | StructureContainer)[] - rampartRepairStructures: StructureRampart[] + /** + * + */ + findAdjacentPositions(rx: number, ry: number): RoomPosition[] - considerFunneled: boolean + /** + * + */ + createPullTask(creator: Structure | Creep | Resource): void - // Commune + /** + * + */ + createPickupTasks(creator: Structure | Creep | Resource): void - // Functions + /** + * + */ + createOfferTasks(creator: Structure | Creep | Resource): void - /** - * - * @param pos1 The position of the thing performing the action - * @param pos2 The position of the thing getting intereacted with - * @param type The type of interaction, success if not provided - */ - actionVisual(pos1: RoomPosition, pos2: RoomPosition, type?: string): void + /** + * + */ + createTransferTasks(creator: Structure | Creep | Resource): void - targetVisual(coord1: Coord, coord2: Coord, visualize?: boolean): void + /** + * + */ + createWithdrawTasks(creator: Structure | Creep | Resource): void - /** - * Tries to delete a task with the provided ID and response state - */ - deleteTask(taskID: any, responder: boolean): void + visualizeCoordMap(coordMap: CoordMap, color?: boolean, magnification?: number): void - scoutByRoomName(): number | false + visualizeCostMatrix(cm: CostMatrix, color?: boolean, magnification?: number): void - scoutRemote(scoutingRoom?: Room): number | false - scoutEnemyReservedRemote(): number | false - scoutEnemyUnreservedRemote(): number | false - scoutMyRemote(scoutingRoom: Room): number | false + coordHasStructureTypes(coord: Coord, types: Set): boolean - scoutEnemyRoom(): number + createPowerTask( + target: Structure | Source, + powerType: PowerConstant, + priority: number, + ): PowerTask | false - basicScout(): number + highestWeightedStoringStructures(resourceType: ResourceConstant): AnyStoreStructure | false - /** - * Finds the type of a room and initializes its custom properties - * @param scoutingRoom The room that is performing the scout operation - */ - advancedScout(scoutingRoom: Room): number + createRoomLogisticsRequest(args: CreateRoomLogisticsRequestArgs): void - makeRemote(scoutingRoom: Room): boolean + partsOfRoles: Partial<{ + [key in CreepRoles]: Partial<{ [key in BodyPartConstant]: number }> + }> - createAttackCombatRequest(opts?: Partial): void + createWorkRequest(): boolean - createHarassCombatRequest(opts?: Partial): void + findSwampPlainsRatio(): number - createDefendCombatRequest(opts?: Partial): void + // Spawn functions - /** - * Finds the score of rooms for potential communes - */ - findScore(): void + // structure functions - /** - * Finds open spaces in a room and records them in a cost matrix - */ - distanceTransform( - initialCoords?: CoordMap, - visuals?: boolean, - /** - * The smallest number to convert into an avoid value - */ - minAvoid?: number, - x1?: number, - y1?: number, - x2?: number, - y2?: number, - ): CoordMap + findStructureAtCoord( + coord: Coord, + conditions: (structure: T) => boolean, + ): T | false + findStructureAtXY( + x: number, + y: number, + conditions: (structure: T) => boolean, + ): T | false - /** - * Finds open spaces in a room without adding depth to diagonals, and records the depth results in a cost matrix - */ - diagonalDistanceTransform( - initialCoords?: CoordMap, - visuals?: boolean, - /** - * The smallest number to convert into an avoid value - */ - minAvoid?: number, - x1?: number, - y1?: number, - x2?: number, - y2?: number, - ): CoordMap + findCSiteAtCoord( + coord: Coord, + conditions: (cSite: T) => boolean, + ): T | false + findCSiteAtXY( + x: number, + y: number, + conditions: (cSite: T) => boolean, + ): T | false - /** - * Flood fills a room until it finds one of a set of positions - */ - findClosestPos(opts: FindClosestPos): RoomPosition | false + findStructureInRange( + startCoord: Coord, + range: number, + condition: (structure: T) => boolean, + ): T | false - errorVisual(coord: Coord, visualize?: boolean): void + /** + * Generates a square visual at the specified coordinate + */ + coordVisual(x: number, y: number, fill?: string): void + } - /** - * Finds and records a construction site for builders to target - */ - findAllyCSiteTargetID(creep: Creep): boolean + interface DepositRecord { + decay: number + needs: number[] + } - /** - * Groups positions with contigiousness, structured similarily to a flood fill - */ - groupRampartPositions(rampartPositions: number[]): RoomPosition[][] + interface IdealSquadMembers {} - findUnprotectedCoords(visuals?: boolean): void + interface CreepFunctions { + update(): void - /** - * - */ - findPositionsInsideRect(x1: number, y1: number, x2: number, y2: number): RoomPosition[] + initRun(): void - /** - * - */ - findAdjacentPositions(rx: number, ry: number): RoomPosition[] + endRun(): void - /** - * - */ - createPullTask(creator: Structure | Creep | Resource): void + isDying(): boolean - /** - * - */ - createPickupTasks(creator: Structure | Creep | Resource): void + advancedPickup(target: Resource): boolean - /** - * - */ - createOfferTasks(creator: Structure | Creep | Resource): void + advancedTransfer( + target: Creep | AnyStoreStructure, + resourceType?: ResourceConstant, + amount?: number, + ): boolean - /** - * - */ - createTransferTasks(creator: Structure | Creep | Resource): void + advancedWithdraw( + target: Creep | AnyStoreStructure | Tombstone | Ruin, + resourceType?: ResourceConstant, + amount?: number, + ): boolean - /** - * - */ - createWithdrawTasks(creator: Structure | Creep | Resource): void + advancedBuild(): number + builderGetEnergy(): number - visualizeCoordMap(coordMap: CoordMap, color?: boolean, magnification?: number): void + /** + * Attempts multiple methods to build one of our construction sites + */ + advancedBuildCSite(cSite: ConstructionSite): number - visualizeCostMatrix(cm: CostMatrix, color?: boolean, magnification?: number): void + /** + * Attempts multiple methods to build an ally construction site + */ + advancedBuildAllyCSite(): boolean - coordHasStructureTypes(coord: Coord, types: Set): boolean + /** + * + */ + findNewRampartRepairTarget(): StructureRampart | false + /** + * + */ + findNewRepairTarget(): Structure | false + /** + * + */ + findRepairTarget(): Structure | false - createPowerTask( - target: Structure | Source, - powerType: PowerConstant, - priority: number, - ): PowerTask | false + /** + * Find a source index when not necessarily in a commune or remote + */ + findSourceIndex(): boolean + findCommuneSourceIndex(): boolean + findRemoteSourceIndex(): boolean - highestWeightedStoringStructures(resourceType: ResourceConstant): AnyStoreStructure | false + /** + * Find a source harvest pos when not necessarily in a commune or remote + */ + findSourceHarvestPos(sourceIndex: number): RoomPosition | false + findCommuneSourceHarvestPos(sourceIndex: number): false | RoomPosition + findRemoteSourceHarvestPos(sourceIndex: number): false | RoomPosition - createRoomLogisticsRequest(args: CreateRoomLogisticsRequestArgs): void + findMineralHarvestPos(): false | RoomPosition - partsOfRoles: Partial<{ - [key in CreepRoles]: Partial<{ [key in BodyPartConstant]: number }> - }> + /** + * + */ + createMoveRequestByPath(args: CustomPathFinderArgs, pathOpts: MoveRequestByPathOpts): number - createWorkRequest(): boolean + /** + * + */ + createMoveRequest(args: CustomPathFinderArgs, opts?: MoveRequestOpts): number - findSwampPlainsRatio(): number + assignMoveRequest(coord: Coord): void - // Spawn functions + findShoveCoord(avoidPackedCoords: Set, targetCoord?: Coord): Coord - // structure functions + shove(avoidPackedCoords?: Set): boolean - findStructureAtCoord( - coord: Coord, - conditions: (structure: T) => boolean, - ): T | false - findStructureAtXY( - x: number, - y: number, - conditions: (structure: T) => boolean, - ): T | false + /** + * Try to enforce a moveRequest and inform the result + */ + runMoveRequest(): boolean - findCSiteAtCoord( - coord: Coord, - conditions: (cSite: T) => boolean, - ): T | false - findCSiteAtXY( - x: number, - y: number, - conditions: (cSite: T) => boolean, - ): T | false + /** + *unpackCoordAsPos + */ + recurseMoveRequest(queue?: string[]): void - findStructureInRange( - startCoord: Coord, - range: number, - condition: (structure: T) => boolean, - ): T | false + avoidEnemyThreatCoords(): boolean - /** - * Generates a square visual at the specified coordinate - */ - coordVisual(x: number, y: number, fill?: string): void - } + /** + * Decides if the creep needs to get more resources or not. DO NOT USE FOR CREEPS THAT PERFORM MULTIPLE TRANSACTIONS PER TICK + */ + needsResources(): boolean - interface DepositRecord { - decay: number - needs: number[] - } + /** + * Wether the creep has a > 0 amount of a resorce that isn't energy + */ + hasNonEnergyResource(): boolean - interface IdealSquadMembers {} + findRecycleTarget(): StructureSpawn | StructureContainer | false - interface CreepFunctions { - update(): void + advancedRecycle(): boolean - initRun(): void + advancedReserveController(): boolean - endRun(): void + findCost(): number - isDying(): boolean + passiveHeal(): boolean - advancedPickup(target: Resource): boolean + /** + * Heal nearby allies without moving + */ + aggressiveHeal(): boolean - advancedTransfer( - target: Creep | AnyStoreStructure, - resourceType?: ResourceConstant, - amount?: number, - ): boolean + /** + * Attack nearby enemies without moving + */ + passiveRangedAttack(): boolean + } - advancedWithdraw( - target: Creep | AnyStoreStructure | Tombstone | Ruin, - resourceType?: ResourceConstant, - amount?: number, - ): boolean + interface CreepProperties { + /** + * The packed position of the moveRequest, if one has been made + */ + moveRequest: string - advancedBuild(): number - builderGetEnergy(): number + /** + * Wether the creep moved a resource this tick + */ + movedResource: boolean - /** - * Attempts multiple methods to build one of our construction sites - */ - advancedBuildCSite(cSite: ConstructionSite): number + /** + * The packed coord the creep is trying to act upon, or the action it has decided on + */ + moved?: string | MovedTypes - /** - * Attempts multiple methods to build an ally construction site - */ - advancedBuildAllyCSite(): boolean + /** + * The creep's opts when trying to make a moveRequest intra tick + */ + pathOpts: CustomPathFinderArgs - /** - * - */ - findNewRampartRepairTarget(): StructureRampart | false - /** - * - */ - findNewRepairTarget(): Structure | false - /** - * - */ - findRepairTarget(): Structure | false + /** + * Wether the creep is allowed accept room logistics requests that require delivery + */ + noDelivery: boolean - /** - * Find a source index when not necessarily in a commune or remote - */ - findSourceIndex(): boolean - findCommuneSourceIndex(): boolean - findRemoteSourceIndex(): boolean + /** + * The coordinate the creep would prefer to be shoved towards, if it is to be shoved + */ + actionCoord: Coord - /** - * Find a source harvest pos when not necessarily in a commune or remote - */ - findSourceHarvestPos(sourceIndex: number): RoomPosition | false - findCommuneSourceHarvestPos(sourceIndex: number): false | RoomPosition - findRemoteSourceHarvestPos(sourceIndex: number): false | RoomPosition + _macroHealStrength: number + /** + * The heal strength of the creep alongside its neighbours that we dopn't own + */ + readonly macroHealStrength: number - findMineralHarvestPos(): false | RoomPosition + _reserveHits: number + /** + * The max possible hits - accounting for nearby healers - subtracted by damage attempts + */ + reserveHits: number - /** - * - */ - createMoveRequestByPath(args: CustomPathFinderArgs, pathOpts: MoveRequestByPathOpts): number + _grossTowerDamage: number + /** + * The highest possible tower damage + */ + readonly grossTowerDamage: number - /** - * - */ - createMoveRequest(args: CustomPathFinderArgs, opts?: MoveRequestOpts): number + _netTowerDamage: number + /** + * The highest possible tower damage, accounting for maximum possible enemy heal + */ + readonly netTowerDamage: number - assignMoveRequest(coord: Coord): void + _message: string + /** + * The cumulative message to present in say() + */ + message: string - findShoveCoord(avoidPackedCoords: Set, targetCoord?: Coord): Coord + _freeCapacityNextTick: number + /** + * The estimated total free capacity the creep will have next tick + */ + freeCapacityNextTick: number - shove(avoidPackedCoords?: Set): boolean + _isOnExit: boolean + readonly isOnExit: boolean - /** - * Try to enforce a moveRequest and inform the result - */ - runMoveRequest(): boolean + _exitTo: string | boolean + readonly exitTo: string | boolean + } - /** - *unpackCoordAsPos - */ - recurseMoveRequest(queue?: string[]): void + // Creeps - avoidEnemyThreatCoords(): boolean + interface Creep extends CreepFunctions, CreepProperties { + combatTarget: Creep - /** - * Decides if the creep needs to get more resources or not. DO NOT USE FOR CREEPS THAT PERFORM MULTIPLE TRANSACTIONS PER TICK - */ - needsResources(): boolean + /** + * Wether the creep did a harvest, build, upgrade, dismantle, repair, heal, attack this tick + */ + worked: WorkTypes - /** - * Wether the creep has a > 0 amount of a resorce that isn't energy - */ - hasNonEnergyResource(): boolean + /** + * Wether the creep rangedHealed or rangedAttacked this tick + */ + ranged: boolean - findRecycleTarget(): StructureSpawn | StructureContainer | false + /** + * Whether the creep is actively pulling another creep or not + */ + pulling: boolean - advancedRecycle(): boolean - - advancedReserveController(): boolean - - findCost(): number - - passiveHeal(): boolean - - /** - * Heal nearby allies without moving - */ - aggressiveHeal(): boolean - - /** - * Attack nearby enemies without moving - */ - passiveRangedAttack(): boolean - } + /** + * Whether the creep is actively getting pulled by another creep or not + */ + gettingPulled: boolean - interface CreepProperties { - /** - * The packed position of the moveRequest, if one has been made - */ - moveRequest: string - - /** - * Wether the creep moved a resource this tick - */ - movedResource: boolean - - /** - * The packed coord the creep is trying to act upon, or the action it has decided on - */ - moved?: string | MovedTypes - - /** - * The creep's opts when trying to make a moveRequest intra tick - */ - pathOpts: CustomPathFinderArgs - - /** - * Wether the creep is allowed accept room logistics requests that require delivery - */ - noDelivery: boolean - - /** - * The coordinate the creep would prefer to be shoved towards, if it is to be shoved - */ - actionCoord: Coord - - _macroHealStrength: number - /** - * The heal strength of the creep alongside its neighbours that we dopn't own - */ - readonly macroHealStrength: number - - _reserveHits: number - /** - * The max possible hits - accounting for nearby healers - subtracted by damage attempts - */ - reserveHits: number - - _grossTowerDamage: number - /** - * The highest possible tower damage - */ - readonly grossTowerDamage: number - - _netTowerDamage: number - /** - * The highest possible tower damage, accounting for maximum possible enemy heal - */ - readonly netTowerDamage: number - - _message: string - /** - * The cumulative message to present in say() - */ - message: string - - _freeCapacityNextTick: number - /** - * The estimated total free capacity the creep will have next tick - */ - freeCapacityNextTick: number - - _isOnExit: boolean - readonly isOnExit: boolean - - _exitTo: string | boolean - readonly exitTo: string | boolean - } + /** + * The squad the creep belongs to + */ + squad: Duo | Quad | DynamicSquad | undefined - // Creeps - - interface Creep extends CreepFunctions, CreepProperties { - combatTarget: Creep - - /** - * Wether the creep did a harvest, build, upgrade, dismantle, repair, heal, attack this tick - */ - worked: WorkTypes - - /** - * Wether the creep rangedHealed or rangedAttacked this tick - */ - ranged: boolean - - /** - * Whether the creep is actively pulling another creep or not - */ - pulling: boolean - - /** - * Whether the creep is actively getting pulled by another creep or not - */ - gettingPulled: boolean - - /** - * The squad the creep belongs to - */ - squad: Duo | Quad | DynamicSquad | undefined - - /** - * Wether the squad has ran yet - */ - squadRan: boolean - - /** - * The ID of the spawn the creep is spawning in, if it is spawning - */ - spawnID: Id - - /** - * The change to a value the creep opperated this tick - */ - dataChange: number - - // Creep Functions - - activeRenew(): void - - passiveRenew(): void - - findBulzodeTargets(goalCoord: RoomPosition): Id[] - - findQuadBulldozeTargets(goalCoord: RoomPosition): Id[] - - manageSpawning(spawn: StructureSpawn): void - - findRoomLogisticsRequest( - args?: FindNewRoomLogisticsRequestArgs, - ): CreepRoomLogisticsRequest | 0 - findRoomLogisticsRequestTypes( - args?: FindNewRoomLogisticsRequestArgs, - ): Set | Result.fail - canAcceptRoomLogisticsRequest( - requestType: RoomLogisticsRequestTypes, - requestID: string, - ): boolean - createBackupStoringStructuresRoomLogisticsRequest( - types?: Set, - resourceTypes?: Set, - ): CreepRoomLogisticsRequest | 0 - createBackupStoringStructuresRoomLogisticsRequestTransfer(): CreepRoomLogisticsRequest | 0 - createBackupStoringStructuresRoomLogisticsRequestWithdraw( - resourceTypes?: Set, - ): CreepRoomLogisticsRequest | 0 - findRoomLogisticRequestAmount(request: RoomLogisticsRequest): number - - runRoomLogisticsRequestAdvanced(args?: FindNewRoomLogisticsRequestArgs): Result - runRoomLogisticsRequestsAdvanced(args?: FindNewRoomLogisticsRequestArgs): Result - - runRoomLogisticsRequest(): Result - runRoomLogisticsRequests(): boolean - - findCreepRoomLogisticsRequestAmount( - type: RoomLogisticsRequestTypes, - targetID: Id, - amount: number, - resourceType: ResourceConstant, - ): number - createCreepRoomLogisticsRequest( - type: RoomLogisticsRequestTypes, - targetID: Id, - amount: number, - resourceType?: ResourceConstant, - ): number - - // Creep Getters - - _nameData: string[] - nameData: string[] - - _role: CreepRoles - /** - * The lifetime designation that broadly describes what the creep should do - */ - readonly role: CreepRoles - - _cost: number - /** - * The amount of energy required to spawn the creep - */ - readonly cost: number - - _commune: Room | undefined - /** - * The name of the room the creep is from - */ - readonly commune: Room | undefined - - _defaultParts: number - readonly defaultParts: number - - _customID: number - readonly customID: number - - _strength: number - /** - * A numerical measurement of the combat abilites of the creep - */ - readonly strength: number - - _combatStrength: CombatStrength - - readonly combatStrength: CombatStrength - - _defenceStrength: number - - /** - * The multiplier to incoming damage the creep has - */ - readonly defenceStrength: number - - _parts: Partial> - - /** - * The number of parts organized by type the creep has - */ - readonly parts: Partial> - - _boosts: Partial> - - /** - * The number of boosts organized by type the creep has - */ - readonly boosts: Partial> - - _canMove: boolean - readonly canMove: boolean - - _idealSquadMembers: IdealSquadMembers - readonly idealSquadMembers: IdealSquadMembers - } + /** + * Wether the squad has ran yet + */ + squadRan: boolean - interface PowerCreep extends CreepFunctions, CreepProperties { - /** - * Wether the creep has used a power this tick - */ - powered: boolean + /** + * The ID of the spawn the creep is spawning in, if it is spawning + */ + spawnID: Id - _powerCooldowns: Partial> + /** + * The change to a value the creep opperated this tick + */ + dataChange: number + + // Creep Functions + + activeRenew(): void + + passiveRenew(): void + + findBulzodeTargets(goalCoord: RoomPosition): Id[] + + findQuadBulldozeTargets(goalCoord: RoomPosition): Id[] + + manageSpawning(spawn: StructureSpawn): void + + findRoomLogisticsRequest(args?: FindNewRoomLogisticsRequestArgs): CreepRoomLogisticsRequest | 0 + findRoomLogisticsRequestTypes( + args?: FindNewRoomLogisticsRequestArgs, + ): Set | Result.fail + canAcceptRoomLogisticsRequest( + requestType: RoomLogisticsRequestTypes, + requestID: string, + ): boolean + createBackupStoringStructuresRoomLogisticsRequest( + types?: Set, + resourceTypes?: Set, + ): CreepRoomLogisticsRequest | 0 + createBackupStoringStructuresRoomLogisticsRequestTransfer(): CreepRoomLogisticsRequest | 0 + createBackupStoringStructuresRoomLogisticsRequestWithdraw( + resourceTypes?: Set, + ): CreepRoomLogisticsRequest | 0 + findRoomLogisticRequestAmount(request: RoomLogisticsRequest): number + + runRoomLogisticsRequestAdvanced(args?: FindNewRoomLogisticsRequestArgs): Result + runRoomLogisticsRequestsAdvanced(args?: FindNewRoomLogisticsRequestArgs): Result + + runRoomLogisticsRequest(): Result + runRoomLogisticsRequests(): boolean + + findCreepRoomLogisticsRequestAmount( + type: RoomLogisticsRequestTypes, + targetID: Id, + amount: number, + resourceType: ResourceConstant, + ): number + createCreepRoomLogisticsRequest( + type: RoomLogisticsRequestTypes, + targetID: Id, + amount: number, + resourceType?: ResourceConstant, + ): number + + // Creep Getters + + _nameData: string[] + nameData: string[] + + _role: CreepRoles + /** + * The lifetime designation that broadly describes what the creep should do + */ + readonly role: CreepRoles - readonly powerCooldowns: Partial> - } + _cost: number + /** + * The amount of energy required to spawn the creep + */ + readonly cost: number - // Structures + _commune: Room | undefined + /** + * The name of the room the creep is from + */ + readonly commune: Room | undefined - interface Structure { - // Getters + _defaultParts: number + readonly defaultParts: number - _isRCLActionable: boolean + _customID: number + readonly customID: number - /** - * Wether the structure is disable or not by the room's controller level - */ - readonly isRCLActionable: boolean - } + _strength: number + /** + * A numerical measurement of the combat abilites of the creep + */ + readonly strength: number - interface StructureSpawn { - /** - * Wether the spawn has renewed a creep this tick - */ - renewed: boolean + _combatStrength: CombatStrength - /** - * Wether the structure has been transfered or withdrawn from - */ - hasHadResourcesMoved: boolean - } + readonly combatStrength: CombatStrength - interface StructureExtension { - /** - * Wether the structure has been transfered or withdrawn from - */ - hasHadResourcesMoved: boolean - } + _defenceStrength: number - interface StructureTerminal { - intended: boolean - } + /** + * The multiplier to incoming damage the creep has + */ + readonly defenceStrength: number - interface CustomStore extends StoreDefinition { - parentID: Id - } + _parts: Partial> - interface RoomObject { - // Functions + /** + * The number of parts organized by type the creep has + */ + readonly parts: Partial> - /** - * Finds the present total store usage number of this RoomObject - * @param resourceType A resourceConstant to ensure proper querying of limit store RoomObjects - */ - usedStore(resourceType?: ResourceConstant): number + _boosts: Partial> - /** - * Finds the total free store capacity of this RoomObject - * @param resourceType A resourceConstant to ensure proper querying of limit store RoomObjects - */ - freeStore(): number + /** + * The number of boosts organized by type the creep has + */ + readonly boosts: Partial> - /** - * Finds the total free store capacity of a specific resource for this RoomObject - */ - freeSpecificStore(resourceType?: ResourceConstant): number + _canMove: boolean + readonly canMove: boolean - freeNextStoreOf(resourceType: ResourceConstant): number + _idealSquadMembers: IdealSquadMembers + readonly idealSquadMembers: IdealSquadMembers + } - freeReserveStoreOf(resourceType: ResourceConstant): number + interface PowerCreep extends CreepFunctions, CreepProperties { + /** + * Wether the creep has used a power this tick + */ + powered: boolean - // RoomObject getters + _powerCooldowns: Partial> - _effectsData: Map + readonly powerCooldowns: Partial> + } - readonly effectsData: Map + // Structures - _nextHits: number + interface Structure { + // Getters - /** - * The estimated hits amount next tick - */ - nextHits: number + _isRCLActionable: boolean - // _nextStore: Partial + /** + * Wether the structure is disable or not by the room's controller level + */ + readonly isRCLActionable: boolean + } - // /** - // * The estimated store values next tick - // */ - // readonly nextStore: Partial + interface StructureSpawn { + /** + * Wether the spawn has renewed a creep this tick + */ + renewed: boolean - _nextStore: Partial + /** + * Wether the structure has been transfered or withdrawn from + */ + hasHadResourcesMoved: boolean + } - /** - * The estimated store values next tick. Values can be negative - */ - readonly nextStore: Partial + interface StructureExtension { + /** + * Wether the structure has been transfered or withdrawn from + */ + hasHadResourcesMoved: boolean + } - _usedNextStore: number - /** - * Can be negative - */ - readonly usedNextStore: number + interface StructureTerminal { + intended: boolean + } - /** - * Can be negative - */ - readonly freeNextStore: number + interface CustomStore extends StoreDefinition { + parentID: Id + } - _reserveStore: Partial + interface RoomObject { + // Functions - /** - * The store values including that reserved by tasks - */ - readonly reserveStore: Partial + /** + * Finds the present total store usage number of this RoomObject + * @param resourceType A resourceConstant to ensure proper querying of limit store RoomObjects + */ + usedStore(resourceType?: ResourceConstant): number - _usedReserveStore: number + /** + * Finds the total free store capacity of this RoomObject + * @param resourceType A resourceConstant to ensure proper querying of limit store RoomObjects + */ + freeStore(): number - readonly usedReserveStore: number + /** + * Finds the total free store capacity of a specific resource for this RoomObject + */ + freeSpecificStore(resourceType?: ResourceConstant): number - readonly freeReserveStore: number + freeNextStoreOf(resourceType: ResourceConstant): number - _reservePowers: Set + freeReserveStoreOf(resourceType: ResourceConstant): number - readonly reservePowers: Set - } + // RoomObject getters - interface Resource { - // Getters and setters + _effectsData: Map - _nextAmount: number - nextAmount: number + readonly effectsData: Map - _reserveAmount: number - reserveAmount: number - } + _nextHits: number - interface Source { - communeIndex: number | undefined - remoteIndex: number | undefined - } + /** + * The estimated hits amount next tick + */ + nextHits: number - // Memory value types - - interface RoomMemory { - [RoomMemoryKeys.type]: RoomTypes - [RoomMemoryKeys.lastScout]: number - [RoomMemoryKeys.danger]?: number - /*** - * The destination roomNames of each portal - */ - [RoomMemoryKeys.portalsTo]: string[] - - // Types specific - - [RoomMemoryKeys.owner]: string - [RoomMemoryKeys.RCL]: number - [RoomMemoryKeys.powerEnabled]: boolean - [RoomMemoryKeys.constructionSiteTarget]: Id - [RoomMemoryKeys.stampAnchors]: PackedStampAnchors - [RoomMemoryKeys.roadQuota]: number[] - [RoomMemoryKeys.communeSources]: Id[] - [RoomMemoryKeys.communeSourceHarvestPositions]: string[] - [RoomMemoryKeys.communeSourcePaths]: string[] - [RoomMemoryKeys.mineralPath]: string - [RoomMemoryKeys.mineralPositions]: string - [RoomMemoryKeys.centerUpgradePos]: string - [RoomMemoryKeys.upgradePositions]: string - [RoomMemoryKeys.upgradePath]: string - [RoomMemoryKeys.basePlans]: string - [RoomMemoryKeys.rampartPlans]: string - [RoomMemoryKeys.mineral]: Id - [RoomMemoryKeys.mineralType]: MineralConstant - [RoomMemoryKeys.score]: number - [RoomMemoryKeys.dynamicScore]: number - [RoomMemoryKeys.dynamicScoreUpdate]: number - [RoomMemoryKeys.communePlanned]: boolean - - // Commune - - [RoomMemoryKeys.remotes]: string[] - [RoomMemoryKeys.powerBanks]: { [roomName: string]: number[] } - [RoomMemoryKeys.deposits]: Record, DepositRecord> - [RoomMemoryKeys.workRequest]: string - [RoomMemoryKeys.combatRequests]: string[] - [RoomMemoryKeys.haulRequests]: string[] - [RoomMemoryKeys.nukeRequest]: string - [RoomMemoryKeys.threatened]: number - [RoomMemoryKeys.lastAttackedBy]: number - [RoomMemoryKeys.minHaulerCost]: number - [RoomMemoryKeys.minHaulerCostUpdate]: number - [RoomMemoryKeys.greatestRCL]: number - [RoomMemoryKeys.abandonCommune]: boolean - [RoomMemoryKeys.marketData]: { - [RESOURCE_ENERGY]?: number - sellAvg?: { [key in ResourceConstant]?: number } - buyAvg?: { [key in ResourceConstant]?: number } - aquire?: { [key in ResourceConstant]?: number } - } - [RoomMemoryKeys.factoryProduct]: - | CommodityConstant - | MineralConstant - | RESOURCE_ENERGY - | RESOURCE_GHODIUM - [RoomMemoryKeys.factoryUsableResources]: ( - | CommodityConstant - | MineralConstant - | RESOURCE_GHODIUM - | RESOURCE_ENERGY - )[] - - // Remote - - [RoomMemoryKeys.commune]: string - [RoomMemoryKeys.maxSourceIncome]: number[] - [RoomMemoryKeys.remoteSourceHarvesters]: number[] - [RoomMemoryKeys.haulers]: number[] - [RoomMemoryKeys.remoteReservers]: number - [RoomMemoryKeys.remoteCoreAttacker]: number - [RoomMemoryKeys.remoteBuilder]: number - [RoomMemoryKeys.remoteDismantler]: number - [RoomMemoryKeys.abandonRemote]: number - [RoomMemoryKeys.recursedAbandonment]: boolean - [RoomMemoryKeys.disable]: boolean - [RoomMemoryKeys.disableSources]: boolean[] - [RoomMemoryKeys.enemyReserved]: boolean - [RoomMemoryKeys.invaderCore]: number - [RoomMemoryKeys.disableCachedPaths]: boolean - [RoomMemoryKeys.remotePlanned]: boolean - [RoomMemoryKeys.remoteStampAnchors]: PackedStampAnchors - [RoomMemoryKeys.remoteControllerPath]: string - [RoomMemoryKeys.remoteControllerPositions]: string - [RoomMemoryKeys.remoteSources]: Id[] - [RoomMemoryKeys.remoteSourceHarvestPositions]: string[] - [RoomMemoryKeys.remoteSourceFastFillerPaths]: string[] - [RoomMemoryKeys.remoteSourceHubPaths]: string[] - [RoomMemoryKeys.clearedEnemyStructures]: boolean - [RoomMemoryKeys.lastStructureCheck]: number - [RoomMemoryKeys.roads]: number[] - [RoomMemoryKeys.remoteSourceCredit]: number[] - [RoomMemoryKeys.remoteSourceCreditChange]: number[] - [RoomMemoryKeys.remoteSourceCreditReservation]: number[] - [RoomMemoryKeys.hasContainer]: boolean[] - [RoomMemoryKeys.pathsThrough]: string[] - - // Ally - - // Enemy - - [RoomMemoryKeys.terminal]: boolean - [RoomMemoryKeys.towers]: number - [RoomMemoryKeys.energy]: number - [RoomMemoryKeys.defensiveStrength]: number - [RoomMemoryKeys.offensiveThreat]: number - - // Source Keeper - - [RoomMemoryKeys.keeperLairCoords]: string - } + // _nextStore: Partial - interface CreepMemory { - [CreepMemoryKeys.preferRoads]: boolean - [CreepMemoryKeys.sourceIndex]: number - [CreepMemoryKeys.dying]: boolean - [CreepMemoryKeys.packedCoord]: string - [CreepMemoryKeys.path]: string - [CreepMemoryKeys.goalPos]: string - [CreepMemoryKeys.usedPathForGoal]: string - [CreepMemoryKeys.lastCache]: number - [CreepMemoryKeys.structureTarget]: Id> - [CreepMemoryKeys.remote]: string - [CreepMemoryKeys.scoutTarget]: string - [CreepMemoryKeys.signTarget]: string | false - [CreepMemoryKeys.roomLogisticsRequests]: CreepRoomLogisticsRequest[] - [CreepMemoryKeys.needsResources]: boolean - [CreepMemoryKeys.squadSize]: number - [CreepMemoryKeys.squadType]: SquadTypes - [CreepMemoryKeys.squadCombatType]: SquadCombatTypes - [CreepMemoryKeys.isSquadFormed]: boolean - [CreepMemoryKeys.squadMembers]: string[] - [CreepMemoryKeys.quadBulldozeTargets]: Id[] - [CreepMemoryKeys.haulRequest]: string - [CreepMemoryKeys.ticksWaited]: number - [CreepMemoryKeys.recycleTarget]: Id | undefined - [CreepMemoryKeys.rampartOnlyShoving]: boolean - [CreepMemoryKeys.rampartTarget]: Id - [CreepMemoryKeys.taskRoom]: string - [CreepMemoryKeys.getPulled]: boolean - [CreepMemoryKeys.combatRequest]: string - [CreepMemoryKeys.workRequest]: string - /** - * Wether the creep is/was trying to flee for their designated - */ - [CreepMemoryKeys.flee]: boolean - [CreepMemoryKeys.squadMoveType]: SquadMoveTypes - /** - * A command to wait until the designated tick to perform an specified action - */ - [CreepMemoryKeys.sleepFor]: SleepFor - [CreepMemoryKeys.sleepTime]: number - /** - * An ambigious target the creep is after, probably for target locking - */ - [CreepMemoryKeys.targetID]: Id - // The name of the trader and tick for the previos relay action - [CreepMemoryKeys.previousRelayer]: [string, number] - [CreepMemoryKeys.stationary]: boolean - } + // /** + // * The estimated store values next tick + // */ + // readonly nextStore: Partial - interface PowerCreepMemory extends CreepMemory { - [PowerCreepMemoryKeys.commune]: string - [PowerCreepMemoryKeys.task]: PowerCreepTasks - [PowerCreepMemoryKeys.taskTarget]: Id - [PowerCreepMemoryKeys.taskPower]: PowerConstant - [PowerCreepMemoryKeys.taskRoom]: string - } + _nextStore: Partial - interface UserScriptTemplate { - /** - * Run at the start of the tick - */ - initialRun(): void - /** - * Run at the middle of the tick - */ - run(): void - /** - * Run at the end of the tick - */ - endRun(): void - } + /** + * The estimated store values next tick. Values can be negative + */ + readonly nextStore: Partial + + _usedNextStore: number + /** + * Can be negative + */ + readonly usedNextStore: number + + /** + * Can be negative + */ + readonly freeNextStore: number + + _reserveStore: Partial + + /** + * The store values including that reserved by tasks + */ + readonly reserveStore: Partial + + _usedReserveStore: number + + readonly usedReserveStore: number + + readonly freeReserveStore: number - // Global + _reservePowers: Set - namespace NodeJS { - interface Global { - // User custom + readonly reservePowers: Set + } - collectivizer: TCollectivizer + interface Resource { + // Getters and setters - settings: Settings - // Intentionally unused - settingsExample: Settings + _nextAmount: number + nextAmount: number - userScript: UserScriptTemplate - // intentionally unused - userScriptExample: UserScriptTemplate + _reserveAmount: number + reserveAmount: number + } - // + interface Source { + communeIndex: number | undefined + remoteIndex: number | undefined + } - Memory: Memory + // Memory value types - /** - * Whether global is constructed or not - */ - constructed: true | undefined + interface RoomMemory { + [RoomMemoryKeys.type]: RoomTypes + [RoomMemoryKeys.lastScout]: number + [RoomMemoryKeys.danger]?: number + /*** + * The destination roomNames of each portal + */ + [RoomMemoryKeys.portalsTo]: string[] + + // Types specific + + [RoomMemoryKeys.owner]: string + [RoomMemoryKeys.RCL]: number + [RoomMemoryKeys.powerEnabled]: boolean + [RoomMemoryKeys.constructionSiteTarget]: Id + [RoomMemoryKeys.stampAnchors]: PackedStampAnchors + [RoomMemoryKeys.roadQuota]: number[] + [RoomMemoryKeys.communeSources]: Id[] + [RoomMemoryKeys.communeSourceHarvestPositions]: string[] + [RoomMemoryKeys.communeSourcePaths]: string[] + [RoomMemoryKeys.mineralPath]: string + [RoomMemoryKeys.mineralPositions]: string + [RoomMemoryKeys.centerUpgradePos]: string + [RoomMemoryKeys.upgradePositions]: string + [RoomMemoryKeys.upgradePath]: string + [RoomMemoryKeys.basePlans]: string + [RoomMemoryKeys.rampartPlans]: string + [RoomMemoryKeys.mineral]: Id + [RoomMemoryKeys.mineralType]: MineralConstant + [RoomMemoryKeys.score]: number + [RoomMemoryKeys.dynamicScore]: number + [RoomMemoryKeys.dynamicScoreUpdate]: number + [RoomMemoryKeys.communePlanned]: boolean + + // Commune + + [RoomMemoryKeys.remotes]: string[] + [RoomMemoryKeys.powerBanks]: { [roomName: string]: number[] } + [RoomMemoryKeys.deposits]: Record, DepositRecord> + [RoomMemoryKeys.workRequest]: string + [RoomMemoryKeys.combatRequests]: string[] + [RoomMemoryKeys.haulRequests]: string[] + [RoomMemoryKeys.nukeRequest]: string + [RoomMemoryKeys.threatened]: number + [RoomMemoryKeys.lastAttackedBy]: number + [RoomMemoryKeys.minHaulerCost]: number + [RoomMemoryKeys.minHaulerCostUpdate]: number + [RoomMemoryKeys.greatestRCL]: number + [RoomMemoryKeys.abandonCommune]: boolean + [RoomMemoryKeys.marketData]: { + [RESOURCE_ENERGY]?: number + sellAvg?: { [key in ResourceConstant]?: number } + buyAvg?: { [key in ResourceConstant]?: number } + aquire?: { [key in ResourceConstant]?: number } + } + [RoomMemoryKeys.factoryProduct]: + | CommodityConstant + | MineralConstant + | RESOURCE_ENERGY + | RESOURCE_GHODIUM + [RoomMemoryKeys.factoryUsableResources]: ( + | CommodityConstant + | MineralConstant + | RESOURCE_GHODIUM + | RESOURCE_ENERGY + )[] + + // Remote + + [RoomMemoryKeys.commune]: string + [RoomMemoryKeys.maxSourceIncome]: number[] + [RoomMemoryKeys.remoteSourceHarvesters]: number[] + [RoomMemoryKeys.haulers]: number[] + [RoomMemoryKeys.remoteReservers]: number + [RoomMemoryKeys.remoteCoreAttacker]: number + [RoomMemoryKeys.remoteBuilder]: number + [RoomMemoryKeys.remoteDismantler]: number + [RoomMemoryKeys.abandonRemote]: number + [RoomMemoryKeys.recursedAbandonment]: boolean + [RoomMemoryKeys.disable]: boolean + [RoomMemoryKeys.disableSources]: boolean[] + [RoomMemoryKeys.enemyReserved]: boolean + [RoomMemoryKeys.invaderCore]: number + [RoomMemoryKeys.disableCachedPaths]: boolean + [RoomMemoryKeys.remotePlanned]: boolean + [RoomMemoryKeys.remoteStampAnchors]: PackedStampAnchors + [RoomMemoryKeys.remoteControllerPath]: string + [RoomMemoryKeys.remoteControllerPositions]: string + [RoomMemoryKeys.remoteSources]: Id[] + [RoomMemoryKeys.remoteSourceHarvestPositions]: string[] + [RoomMemoryKeys.remoteSourceFastFillerPaths]: string[] + [RoomMemoryKeys.remoteSourceHubPaths]: string[] + [RoomMemoryKeys.clearedEnemyStructures]: boolean + [RoomMemoryKeys.lastStructureCheck]: number + [RoomMemoryKeys.roads]: number[] + [RoomMemoryKeys.remoteSourceCredit]: number[] + [RoomMemoryKeys.remoteSourceCreditChange]: number[] + [RoomMemoryKeys.remoteSourceCreditReservation]: number[] + [RoomMemoryKeys.hasContainer]: boolean[] + [RoomMemoryKeys.pathsThrough]: string[] + + // Ally + + // Enemy + + [RoomMemoryKeys.terminal]: boolean + [RoomMemoryKeys.towers]: number + [RoomMemoryKeys.energy]: number + [RoomMemoryKeys.defensiveStrength]: number + [RoomMemoryKeys.offensiveThreat]: number + + // Source Keeper + + [RoomMemoryKeys.keeperLairCoords]: string + } + + interface CreepMemory { + [CreepMemoryKeys.preferRoads]: boolean + [CreepMemoryKeys.sourceIndex]: number + [CreepMemoryKeys.dying]: boolean + [CreepMemoryKeys.packedCoord]: string + [CreepMemoryKeys.path]: string + [CreepMemoryKeys.goalPos]: string + [CreepMemoryKeys.usedPathForGoal]: string + [CreepMemoryKeys.lastCache]: number + [CreepMemoryKeys.structureTarget]: Id> + [CreepMemoryKeys.remote]: string + [CreepMemoryKeys.scoutTarget]: string + [CreepMemoryKeys.signTarget]: string | false + [CreepMemoryKeys.roomLogisticsRequests]: CreepRoomLogisticsRequest[] + [CreepMemoryKeys.needsResources]: boolean + [CreepMemoryKeys.squadSize]: number + [CreepMemoryKeys.squadType]: SquadTypes + [CreepMemoryKeys.squadCombatType]: SquadCombatTypes + [CreepMemoryKeys.isSquadFormed]: boolean + [CreepMemoryKeys.squadMembers]: string[] + [CreepMemoryKeys.quadBulldozeTargets]: Id[] + [CreepMemoryKeys.haulRequest]: string + [CreepMemoryKeys.ticksWaited]: number + [CreepMemoryKeys.recycleTarget]: Id | undefined + [CreepMemoryKeys.rampartOnlyShoving]: boolean + [CreepMemoryKeys.rampartTarget]: Id + [CreepMemoryKeys.taskRoom]: string + [CreepMemoryKeys.getPulled]: boolean + [CreepMemoryKeys.combatRequest]: string + [CreepMemoryKeys.workRequest]: string + /** + * Wether the creep is/was trying to flee for their designated + */ + [CreepMemoryKeys.flee]: boolean + [CreepMemoryKeys.squadMoveType]: SquadMoveTypes + /** + * A command to wait until the designated tick to perform an specified action + */ + [CreepMemoryKeys.sleepFor]: SleepFor + [CreepMemoryKeys.sleepTime]: number + /** + * An ambigious target the creep is after, probably for target locking + */ + [CreepMemoryKeys.targetID]: Id + // The name of the trader and tick for the previos relay action + [CreepMemoryKeys.previousRelayer]: [string, number] + [CreepMemoryKeys.stationary]: boolean + } + + interface PowerCreepMemory extends CreepMemory { + [PowerCreepMemoryKeys.commune]: string + [PowerCreepMemoryKeys.task]: PowerCreepTasks + [PowerCreepMemoryKeys.taskTarget]: Id + [PowerCreepMemoryKeys.taskPower]: PowerConstant + [PowerCreepMemoryKeys.taskRoom]: string + } + + interface UserScriptTemplate { + /** + * Run at the start of the tick + */ + initialRun(): void + /** + * Run at the middle of the tick + */ + run(): void + /** + * Run at the end of the tick + */ + endRun(): void + } - packedRoomNames: { [roomName: string]: string } + // Global - unpackedRoomNames: { [roomName: string]: string } + namespace NodeJS { + interface Global { + // User custom - lastReset: number + collectivizer: TCollectivizer - debugUtils: DebugUtils + settings: Settings + // Intentionally unused + settingsExample: Settings - // Command functions + userScript: UserScriptTemplate + // intentionally unused + userScriptExample: UserScriptTemplate - stringify(v: any, maxDepth: number): void + // - /** - * Deletes all properties of global - */ - clearGlobal(): void + Memory: Memory - /** - * Deletes all properties of Memory - */ - clearMemory(): string + /** + * Whether global is constructed or not + */ + constructed: true | undefined - /** - * Kills all creeps owned by the bot - */ - killCreeps(roles?: CreepRoles[]): string + packedRoomNames: { [roomName: string]: string } - /** - * Removes all specified construction sites owned by the bot - */ - removeCSites(removeInProgress?: boolean, types?: BuildableStructureConstant[]): string + unpackedRoomNames: { [roomName: string]: string } - /** - * Destroys all specified structures owned by the bot - */ - destroyStructures(roomName: string, types?: StructureConstant[]): string + lastReset: number - /** - * Destroys all specified structures in communes - */ - destroyCommuneStructures(types?: StructureConstant[]): string + debugUtils: DebugUtils - /** - * Responds, or if needed, creates, a claim request for a specified room, by a specified room - * @param requestName The roomName of the workRequest to respond to - * @param commune The commune to respond to the workRequest - */ - claim(requestName: string, communeName?: string, score?: number): string + // Command functions - /** - * Deletes workRequests for a specified room, if there are any - * @param roomName The roomName of the workRequest to delete - */ - deleteWorkRequest(roomName: string): string + stringify(v: any, maxDepth: number): void - deleteWorkRequests(): string + /** + * Deletes all properties of global + */ + clearGlobal(): void - /** - * Responds, or if needed, creates, an attack request for a specified room, by a specified room - */ - combat( - requestName: string, - type: CombatRequestTypes, - opts?: Partial<{ [key in keyof typeof CombatRequestKeys]: CombatRequestKeys }>, - communeName?: string, - ): string + /** + * Deletes all properties of Memory + */ + clearMemory(): string - /** - * Deletes combatRequests for a specified room, if there are any - */ - deleteCombatRequest(requestName: string): string + /** + * Kills all creeps owned by the bot + */ + killCreeps(roles?: CreepRoles[]): string - deleteBasePlans(roomName?: string): string + /** + * Removes all specified construction sites owned by the bot + */ + removeCSites(removeInProgress?: boolean, types?: BuildableStructureConstant[]): string - usedHeap(): string - } - } + /** + * Destroys all specified structures owned by the bot + */ + destroyStructures(roomName: string, types?: StructureConstant[]): string - interface StringMap { - [key: string]: T - } - type StringMapGeneric = { - [key in K]: V + /** + * Destroys all specified structures in communes + */ + destroyCommuneStructures(types?: StructureConstant[]): string + + /** + * Responds, or if needed, creates, a claim request for a specified room, by a specified room + * @param requestName The roomName of the workRequest to respond to + * @param commune The commune to respond to the workRequest + */ + claim(requestName: string, communeName?: string, score?: number): string + + /** + * Deletes workRequests for a specified room, if there are any + * @param roomName The roomName of the workRequest to delete + */ + deleteWorkRequest(roomName: string): string + + deleteWorkRequests(): string + + /** + * Responds, or if needed, creates, an attack request for a specified room, by a specified room + */ + combat( + requestName: string, + type: CombatRequestTypes, + opts?: Partial<{ [key in keyof typeof CombatRequestKeys]: CombatRequestKeys }>, + communeName?: string, + ): string + + /** + * Deletes combatRequests for a specified room, if there are any + */ + deleteCombatRequest(requestName: string): string + + deleteBasePlans(roomName?: string): string + + usedHeap(): string } + } + + interface StringMap { + [key: string]: T + } + type StringMapGeneric = { + [key in K]: V + } } diff --git a/src/types/players.ts b/src/types/players.ts index fcecb060e..63e28c08b 100644 --- a/src/types/players.ts +++ b/src/types/players.ts @@ -1,18 +1,13 @@ -import { PlayerMemoryKeys } from "international/constants" - -export enum PlayerRelationships { - ally, - enemy, - noAggression -} +import { PlayerRelationships } from 'international/constants' +import { PlayerMemoryKeys } from 'international/constants' export interface PlayerMemory { - [PlayerMemoryKeys.offensiveThreat]: number - [PlayerMemoryKeys.defensiveStrength]: number - [PlayerMemoryKeys.hate]: number - [PlayerMemoryKeys.lastAttackedBy]: number - [PlayerMemoryKeys.rangeFromExitWeight]: number - [PlayerMemoryKeys.relationship]: PlayerRelationships - [PlayerMemoryKeys.reputation]: number - [PlayerMemoryKeys.lastSeen]: number + [PlayerMemoryKeys.offensiveThreat]: number + [PlayerMemoryKeys.defensiveStrength]: number + [PlayerMemoryKeys.hate]: number + [PlayerMemoryKeys.lastAttackedBy]: number + [PlayerMemoryKeys.rangeFromExitWeight]: number + [PlayerMemoryKeys.relationship]: PlayerRelationships + [PlayerMemoryKeys.reputation]: number + [PlayerMemoryKeys.lastSeen]: number } diff --git a/src/utils/procs.ts b/src/utils/procs.ts new file mode 100644 index 000000000..607fe8e1d --- /dev/null +++ b/src/utils/procs.ts @@ -0,0 +1,20 @@ +// General processes + +import { collectiveManager } from "international/collective" +import { LogTypes, customLog } from "./logging" + +export class Procs { + outOfBucket() { + collectiveManager.logs = '' + customLog('Skipping tick due to low bucket, bucket remaining', Game.cpu.bucket, { + type: LogTypes.warning, + }) + console.log( + global.settings.logging + ? collectiveManager.logs + : `Skipping tick due to low bucket, bucket remaining ${Game.cpu.bucket}`, + ) + } +} + +export const procs = new Procs() diff --git a/src/utils/utils.ts b/src/utils/utils.ts index a8bdf043f..9ebe83a18 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -1,24 +1,9 @@ import { ErrorMapper } from 'other/ErrorMapper' import { - mmoShardNames, - customColors, - offsetsByDirection, - roomDimensions, - roomTypeProperties, - roomTypes, - allStructureTypes, - dynamicScoreRoomRange, - maxControllerLevel, - preferredCommuneRange, - RoomMemoryKeys, - RoomTypes, - PlayerMemoryKeys, - CPUMaxPerTick, - Result, + customColors, roomDimensions, PlayerMemoryKeys, Result } from '../international/constants' -import { collectiveManager } from '../international/collective' -import { LogTypes, customLog } from './logging' -import { PlayerRelationships } from 'types/players' +import { customLog } from './logging' +import { PlayerRelationships } from 'international/constants' import { roomNameUtils } from 'room/roomNameUtils' /** @@ -747,23 +732,13 @@ export function isAlly(playerName: string) { const playerMemory = Memory.players[playerName] // If PlayerMemory does not exist they are not an ally, as ally memory is always present if (!playerMemory) return false + // Don't consider ourselves as allies + if (playerName === Memory.me) return false // Wether or not they are recorded as an ally return playerMemory[PlayerMemoryKeys.relationship] === PlayerRelationships.ally } -export function outOfBucket() { - collectiveManager.logs = '' - customLog('Skipping tick due to low bucket, bucket remaining', Game.cpu.bucket, { - type: LogTypes.warning, - }) - console.log( - global.settings.logging - ? collectiveManager.logs - : `Skipping tick due to low bucket, bucket remaining ${Game.cpu.bucket}`, - ) -} - /** * Finds your username */ From effe1f3cfdcf824ed4df0b5aae0378f2b1cff233 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sun, 7 Jan 2024 14:11:59 -0800 Subject: [PATCH 072/190] fix gitignore for settings type file --- .gitignore | 2 +- src/types/settings.ts | 106 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 src/types/settings.ts diff --git a/.gitignore b/.gitignore index d1708fe54..3a338424f 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,7 @@ collectivizer.ts src/other/userScript/* !userScript.example.ts -settings.ts +src/settings.ts .screeps.yaml # wasm-pack always puts a .gitignore in here; if you want to not ignore it, diff --git a/src/types/settings.ts b/src/types/settings.ts new file mode 100644 index 000000000..6e4743538 --- /dev/null +++ b/src/types/settings.ts @@ -0,0 +1,106 @@ +export interface Settings { + /** + * The current breaking version of the bot. + * Increment to induce migrations which can be controlled with the migration manager + */ + breakingVersion: number | undefined + /** + * Wether the bot should generate any room visuals + */ + roomVisuals: boolean + + /** + * Wether the bot should generate map visuals + */ + mapVisuals: boolean + + /** + * A list of usernames to treat as allies + */ + allies: string[] + + /** + * A list of usernames to treat as neutral + */ + nonAggressionPlayers: string[] + + /** + * A list of usernames to not trade with + */ + tradeBlacklist: string[] + + /** + * Wether the bot should sell pixels + */ + pixelSelling: boolean + + /** + * Wether the bot should generate pixels + */ + pixelGeneration: boolean + + /** + * Wether the bot should automatically respond to workRequests + */ + autoClaim: boolean + + /** + * Wether or not to automatically create attack requests for viable targets + */ + autoAttack: boolean + + /** + * Wether the bot should enable ramparts when there is no enemy present + */ + publicRamparts: boolean + + /** + * Wether the bot should try trading with its allies + */ + allyCommunication: boolean + + /** + * Wether or not the bot should be using the market + */ + marketUsage: boolean + + /** + * The number of ticks to publish customLogs for. 0 disabled logging. Cannot be more than 100 + */ + logging: number + + /** + * Wether or not creeps should use .say + */ + creepSay: boolean + + /** + * Wether or not creeps should chant slogans + */ + creepChant: string[] + + /** + * The public segment number (0-99) that you and your allies are using + */ + allySegmentID: number + /** + * Wether or not to send errors, if set up, to the error storer + */ + errorExporting: boolean + /** + * Wether or not to try to migrate existing structures to planned positions + */ + structureMigration: boolean + /** + * Wether or not to generate visuals for room logistics requests + */ + roomLogisticsVisuals: boolean + /** + * Wether or not to generate and display logs for debugging purposes + */ + debugLogging: boolean + + /* relationships: RelationshipSettings */ +} + +/* type RelationshipSettings = {[playerName: string]: PlayerRelationships} */ From 0d4f3d130d6c74883e964384baa051bcc3383ccf Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Fri, 12 Jan 2024 23:32:09 -0800 Subject: [PATCH 073/190] fix energy delivery request amounts --- src/international/collective.ts | 10 +- src/international/constants.ts | 2 +- src/international/creepOrganizer.ts | 3 +- src/international/flags.ts | 49 +- src/international/requests.ts | 585 +++++++++--------- src/other/profilerRegister.ts | 2 - src/room/commune/communeUtils.ts | 11 + src/room/creeps/creepLogiProcs.ts | 270 -------- src/room/creeps/creepProcs.ts | 291 ++++++++- .../creeps/creepPrototypes/creepFunctions.ts | 206 +++--- .../creeps/roleManagers/commune/hauler.ts | 24 +- src/types.d.ts | 14 +- src/types/roomRequests.ts | 21 +- 13 files changed, 790 insertions(+), 698 deletions(-) delete mode 100644 src/room/creeps/creepLogiProcs.ts diff --git a/src/international/collective.ts b/src/international/collective.ts index 0e8b0a9bd..4b1710668 100644 --- a/src/international/collective.ts +++ b/src/international/collective.ts @@ -312,7 +312,7 @@ export class CollectiveManager extends Sleepable { } // Consider it funneled - + funnelingRoomNames.add(roomName) } @@ -333,9 +333,13 @@ export class CollectiveManager extends Sleepable { for (const key in resources) { const resource = key as unknown as ResourceConstant - if (!this._resourcesInStoringStructures[resource]) + if (!this._resourcesInStoringStructures[resource]) { this._resourcesInStoringStructures[resource] = resources[resource] - this._resourcesInStoringStructures[resource] = resources[resource] + continue + } + + + this._resourcesInStoringStructures[resource] += resources[resource] } } diff --git a/src/international/constants.ts b/src/international/constants.ts index fc41d70df..2f77af4f1 100644 --- a/src/international/constants.ts +++ b/src/international/constants.ts @@ -112,7 +112,7 @@ export enum CombatRequestKeys { dynamicSquadQuota } -export enum CreepRoomLogisticsRequestKeys { +export enum CreepLogisticsRequestKeys { type, target, resourceType, diff --git a/src/international/creepOrganizer.ts b/src/international/creepOrganizer.ts index f661f8739..310cff02a 100644 --- a/src/international/creepOrganizer.ts +++ b/src/international/creepOrganizer.ts @@ -7,7 +7,6 @@ import { statsManager } from './statsManager' import { creepUtils } from 'room/creeps/creepUtils' import { creepDataManager } from 'room/creeps/creepData' import { creepProcs } from 'room/creeps/creepProcs' -import { creepLogiProcs } from 'room/creeps/creepLogiProcs' export class CreepOrganizer { constructor() {} @@ -63,7 +62,7 @@ export class CreepOrganizer { if (!creep.spawning) creep.room.creepPositions[packCoord(creep.pos)] = creep.name if (roomLogisticsRoles.has(role)) { - creepLogiProcs.updateLogisticsRequests(creep) + creepProcs.updateLogisticsRequests(creep) } // Get the commune the creep is from diff --git a/src/international/flags.ts b/src/international/flags.ts index 16368c9b7..03bbf8347 100644 --- a/src/international/flags.ts +++ b/src/international/flags.ts @@ -906,7 +906,6 @@ export class FlagManager { } const headers = ['roomName', 'resource', 'amount', 'priority'] - const data: any[][] = [] for (const ID in collectiveManager.terminalRequests) { @@ -943,6 +942,54 @@ export class FlagManager { ], }) } + + private internationalResources(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const room = Game.rooms[roomName] + if (!room) { + flag.setColor(COLOR_RED) + return + } + + const headers = ['resource', 'amount'] + const data: any[][] = [] + + const resourcesInStoringStructures = collectiveManager.resourcesInStoringStructures + for (const key in resourcesInStoringStructures) { + const resourceType = key as ResourceConstant + + const row: any[] = [resourceType, resourcesInStoringStructures[resourceType]] + data.push(row) + } + + const height = 3 + data.length + + Dashboard({ + config: { + room: room.name, + }, + widgets: [ + { + pos: { + x: 1, + y: 1, + }, + width: 47, + height, + widget: Rectangle({ + data: Table(() => ({ + data, + config: { + label: 'My Resources', + headers, + }, + })), + }), + }, + ], + }) + } } export const flagManager = new FlagManager() diff --git a/src/international/requests.ts b/src/international/requests.ts index fc8686b10..1f4367635 100644 --- a/src/international/requests.ts +++ b/src/international/requests.ts @@ -15,351 +15,364 @@ import { import { indexOf } from 'lodash' import { Sleepable } from 'utils/sleepable' import { util } from 'chai' +import { WorkRequest } from 'types/internationalRequests' +import { communeUtils } from 'room/commune/communeUtils' const runRequestInverval = randomIntRange(100, 200) // Should adsorb the request content of tickInit export class RequestsManager extends Sleepable { + sleepFor = randomIntRange(100, 200) - sleepFor = randomIntRange(100, 200) + run() { + this.updateWorkRequests() + this.updateCombatRequests() + this.updateHaulRequests() - run() { + if (utils.isTickInterval(runRequestInverval)) return - this.updateWorkRequests() - this.updateCombatRequests() - this.updateHaulRequests() + this.runWorkRequests() + this.runCombatRequests() + this.runHaulRequests() + } - if (utils.isTickInterval(runRequestInverval)) return + // update requests - this.runWorkRequests() - this.runCombatRequests() - this.runHaulRequests() - } - - // update requests + private updateWorkRequests() { + const runThreshold = randomIntRange(19000, 20000) - private updateWorkRequests() { + for (const roomName in Memory.workRequests) { + const request = Memory.workRequests[roomName] + if (request[WorkRequestKeys.responder]) continue - const runThreshold = randomIntRange(19000, 20000) + if (request[WorkRequestKeys.abandon] > 0) { + request[WorkRequestKeys.abandon] -= 1 + continue + } - for (const roomName in Memory.workRequests) { + // otherwise abandon is worthless. Let's delete it to save (a bit of) memory - const request = Memory.workRequests[roomName] - if (request[WorkRequestKeys.responder]) continue + delete request[WorkRequestKeys.abandon] - if (request[WorkRequestKeys.abandon] > 0) { - request[WorkRequestKeys.abandon] -= 1 - continue - } + // update dynamic score if enough time has passed - // otherwise abandon is worthless. Let's delete it to save (a bit of) memory + const roomMemory = Memory.rooms[roomName] + if ( + !roomMemory[RoomMemoryKeys.dynamicScore] || + Game.time - roomMemory[RoomMemoryKeys.dynamicScoreUpdate] >= runThreshold + ) { + roomNameUtils.findDynamicScore(roomName) + } + } + } + + private updateCombatRequests() { + for (const requestName in Memory.combatRequests) { + const request = Memory.combatRequests[requestName] + + if (request[CombatRequestKeys.responder]) { + collectiveManager.creepsByCombatRequest[requestName] = {} + for (const role of antifaRoles) + collectiveManager.creepsByCombatRequest[requestName][role] = [] + request[CombatRequestKeys.quads] = 0 + continue + } + + if (request[CombatRequestKeys.abandon]) { + request[CombatRequestKeys.abandon] -= 1 + continue + } + + delete request[CombatRequestKeys.abandon] + } + } - delete request[WorkRequestKeys.abandon] + private updateHaulRequests() { + for (const requestName in Memory.haulRequests) { + const request = Memory.haulRequests[requestName] - // update dynamic score if enough time has passed + if (request[HaulRequestKeys.responder]) { + collectiveManager.creepsByHaulRequest[requestName] = [] + continue + } - const roomMemory = Memory.rooms[roomName] - if ( - !roomMemory[RoomMemoryKeys.dynamicScore] || - Game.time - roomMemory[RoomMemoryKeys.dynamicScoreUpdate] >= runThreshold - ) { + if (request[HaulRequestKeys.abandon] > 0) { + request[HaulRequestKeys.abandon] -= 1 + continue + } - roomNameUtils.findDynamicScore(roomName) - } - } + delete request[HaulRequestKeys.abandon] } + } - private updateCombatRequests() { - - for (const requestName in Memory.combatRequests) { - const request = Memory.combatRequests[requestName] + // run requests - if (request[CombatRequestKeys.responder]) { - collectiveManager.creepsByCombatRequest[requestName] = {} - for (const role of antifaRoles) - collectiveManager.creepsByCombatRequest[requestName][role] = [] - request[CombatRequestKeys.quads] = 0 - continue - } + private runWorkRequests() { + if (!global.settings.autoClaim) return + /* if (collectiveManager.communes.size >= collectiveManager.maxCommunes) return */ - if (request[CombatRequestKeys.abandon]) { + let reservedGCL = Game.gcl.level - collectiveManager.communes.size - request[CombatRequestKeys.abandon] -= 1 - continue - } + // Subtract the number of workRequests with responders - delete request[CombatRequestKeys.abandon] + for (const roomName in Memory.workRequests) { + const request = Memory.workRequests[roomName] + if (!request[WorkRequestKeys.responder]) continue - } + reservedGCL -= 1 } - private updateHaulRequests() { + /* if (reservedGCL <= 0) return */ - for (const requestName in Memory.haulRequests) { - const request = Memory.haulRequests[requestName] + const communesForResponding = new Set() - if (request[HaulRequestKeys.responder]) { - collectiveManager.creepsByHaulRequest[requestName] = [] - continue - } + for (const roomName of collectiveManager.communes) { + if (!communeUtils.canTakeNewWorkRequest(roomName)) continue - if (request[HaulRequestKeys.abandon] > 0) { + communesForResponding.add(roomName) + } - request[HaulRequestKeys.abandon] -= 1 - continue - } + // Assign and abandon workRequests, in order of score + + const workRequests = collectiveManager.workRequestsByScore + for (const roomName of workRequests) { + const request = Memory.workRequests[roomName] + + if (!request) continue + if (!this.shouldWorkRequestGetResponse(request, roomName, reservedGCL)) { + continue + } + + // If there is not enough reserved GCL to make a new request + /* if (reservedGCL <= 0) return */ + + const type = Memory.rooms[roomName][RoomMemoryKeys.type] + // if someone else has acquired the room + if ( + type === RoomTypes.ally || + type === RoomTypes.enemy || + type === RoomTypes.allyRemote || + type === RoomTypes.enemyRemote + ) { + // Wait on the request + Memory.workRequests[roomName][WorkRequestKeys.abandon] = 20000 + continue + } + + const communeName = findClosestRoomName(roomName, communesForResponding) + if (!communeName) { + // Wait on the request + Memory.workRequests[roomName][WorkRequestKeys.abandon] = 20000 + continue + } + + // Run a more simple and less expensive check, then a more complex and expensive to confirm. If the check fails, abandon the room for some time + + if ( + Game.map.getRoomLinearDistance(communeName, roomName) > maxWorkRequestDistance || + roomNameUtils.advancedFindDistance(communeName, roomName, { + typeWeights: { + keeper: Infinity, + enemy: Infinity, + ally: Infinity, + }, + }) > maxWorkRequestDistance + ) { + Memory.workRequests[roomName][WorkRequestKeys.abandon] = 20000 + continue + } + + // Otherwise assign the request to the room, and record as such in Memory + + Memory.rooms[communeName][RoomMemoryKeys.workRequest] = roomName + Memory.workRequests[roomName][WorkRequestKeys.responder] = communeName + + reservedGCL -= 1 + + communesForResponding.delete(communeName) + } + } - delete request[HaulRequestKeys.abandon] + private shouldWorkRequestGetResponse(request: WorkRequest, roomName: string, reservedGCL: number) { + // If there is no GCL left to claim with + if (Game.gcl.level <= reservedGCL) { - } + const room = Game.rooms[roomName] + // If we don't own the request room's contorller already, then we should stop + if (room && !room.controller.my) { + return false + } } - // run requests + if (request[WorkRequestKeys.abandon]) return false + if ( + request[WorkRequestKeys.responder] && + collectiveManager.communes.has(request[WorkRequestKeys.responder]) + ) { + return false + } + return true + } - private runWorkRequests() { - if (!global.settings.autoClaim) return - if (collectiveManager.communes.size >= collectiveManager.maxCommunes) return + private runCombatRequests() { + for (const requestName in Memory.combatRequests) { + const request = Memory.combatRequests[requestName] - let reservedGCL = Game.gcl.level - collectiveManager.communes.size + if (request[CombatRequestKeys.abandon]) continue + if ( + request[CombatRequestKeys.responder] && + collectiveManager.communes.has(request[CombatRequestKeys.responder]) + ) + continue - // Subtract the number of workRequests with responders + // Filter communes that don't have the combatRequest target already - for (const roomName in Memory.workRequests) { - const request = Memory.workRequests[roomName] - if (!request[WorkRequestKeys.responder]) continue + const communes = [] - reservedGCL -= 1 - } + for (const roomName of collectiveManager.communes) { + /* if (Memory.rooms[roomName].combatRequests.includes(requestName)) continue */ - if (reservedGCL <= 0) return + // Ensure the combatRequest isn't responded to by the room the request is for - const communesForResponding = new Set() + if (requestName === roomName) continue - for (const roomName of collectiveManager.communes) { - if (Memory.rooms[roomName][RoomMemoryKeys.workRequest]) continue - if (Game.rooms[roomName].energyCapacityAvailable < 650) continue + const room = Game.rooms[roomName] + if (!room.roomManager.structures.spawn.length) continue - const room = Game.rooms[roomName] - if (!room.roomManager.structures.spawn.length) continue + // Ensure we aren't responding to too many requests for our energy level - communesForResponding.add(roomName) + if (room.storage && room.controller.level >= 4) { + if ( + room.memory[RoomMemoryKeys.combatRequests].length + 1 >= + room.communeManager.maxCombatRequests + ) + continue + } else { + if ( + room.memory[RoomMemoryKeys.combatRequests].length + 1 >= + room.communeManager.estimatedEnergyIncome / 10 + ) + continue } - // Assign and abandon workRequests, in order of score - - for (const roomName of collectiveManager.workRequestsByScore) { - const request = Memory.workRequests[roomName] - - if (!request) continue - if (request[WorkRequestKeys.abandon]) continue - // If there is not enough reserved GCL to make a new request - if (reservedGCL <= 0) return - if ( - request[WorkRequestKeys.responder] && - collectiveManager.communes.has(request[WorkRequestKeys.responder]) - ) { - - continue - } - - const type = Memory.rooms[roomName][RoomMemoryKeys.type] - // if someone else has acquired the room - if (type === RoomTypes.ally || type === RoomTypes.enemy || type === RoomTypes.allyRemote || type === RoomTypes.enemyRemote) { - // Wait on the request - Memory.workRequests[roomName][WorkRequestKeys.abandon] = 20000 - continue - } - - const communeName = findClosestRoomName(roomName, communesForResponding) - if (!communeName) { - - // Wait on the request - Memory.workRequests[roomName][WorkRequestKeys.abandon] = 20000 - continue - } - - // Run a more simple and less expensive check, then a more complex and expensive to confirm. If the check fails, abandon the room for some time - - if ( - Game.map.getRoomLinearDistance(communeName, roomName) > maxWorkRequestDistance || - roomNameUtils.advancedFindDistance(communeName, roomName, { - typeWeights: { - keeper: Infinity, - enemy: Infinity, - ally: Infinity, - }, - }) > maxWorkRequestDistance - ) { - Memory.workRequests[roomName][WorkRequestKeys.abandon] = 20000 - continue - } - - // Otherwise assign the request to the room, and record as such in Memory - - Memory.rooms[communeName][RoomMemoryKeys.workRequest] = roomName - Memory.workRequests[roomName][WorkRequestKeys.responder] = communeName - - reservedGCL -= 1 - - communesForResponding.delete(communeName) - } + // Ensure we can afford the creeps required + + const minRangedAttackCost = room.communeManager.findMinRangedAttackCost( + request[CombatRequestKeys.minDamage], + ) + const minMeleeHealCost = room.communeManager.findMinHealCost( + request[CombatRequestKeys.minMeleeHeal] + + (request[CombatRequestKeys.maxTowerDamage] || 0), + ) + const minRangedHealCost = room.communeManager.findMinHealCost( + request[CombatRequestKeys.minRangedHeal], + ) + + if (minRangedAttackCost + minRangedHealCost > room.energyCapacityAvailable) continue + + const minAttackCost = room.communeManager.findMinMeleeAttackCost( + request[CombatRequestKeys.minDamage], + ) + if (minAttackCost > room.energyCapacityAvailable) continue + + communes.push(roomName) + } + + const communeName = findClosestRoomName(requestName, communes) + if (!communeName) continue + + // Run a more simple and less expensive check, then a more complex and expensive to confirm + + if ( + Game.map.getRoomLinearDistance(communeName, requestName) > maxCombatDistance || + roomNameUtils.advancedFindDistance(communeName, requestName, { + typeWeights: { + keeper: Infinity, + enemy: Infinity, + ally: Infinity, + }, + }) > maxCombatDistance + ) { + request[CombatRequestKeys.abandon] = 20000 + continue + } + + // Otherwise assign the request to the room, and record as such in Memory + + Memory.rooms[communeName][RoomMemoryKeys.combatRequests].push(requestName) + request[CombatRequestKeys.responder] = communeName + + collectiveManager.creepsByCombatRequest[requestName] = {} + for (const role of antifaRoles) { + collectiveManager.creepsByCombatRequest[requestName][role] = [] + } } + } - private runCombatRequests() { - for (const requestName in Memory.combatRequests) { - const request = Memory.combatRequests[requestName] - - if (request[CombatRequestKeys.abandon]) continue - if (request[CombatRequestKeys.responder] && - collectiveManager.communes.has(request[CombatRequestKeys.responder])) continue - - // Filter communes that don't have the combatRequest target already - - const communes = [] - - for (const roomName of collectiveManager.communes) { - /* if (Memory.rooms[roomName].combatRequests.includes(requestName)) continue */ - - // Ensure the combatRequest isn't responded to by the room the request is for - - if (requestName === roomName) continue - - const room = Game.rooms[roomName] - if (!room.roomManager.structures.spawn.length) continue - - // Ensure we aren't responding to too many requests for our energy level - - if (room.storage && room.controller.level >= 4) { - if ( - room.memory[RoomMemoryKeys.combatRequests].length + 1 >= - room.communeManager.maxCombatRequests - ) - continue - } else { - if ( - room.memory[RoomMemoryKeys.combatRequests].length + 1 >= - room.communeManager.estimatedEnergyIncome / 10 - ) - continue - } - - // Ensure we can afford the creeps required + private runHaulRequests() { + for (const requestName in Memory.haulRequests) { + const request = Memory.haulRequests[requestName] - const minRangedAttackCost = room.communeManager.findMinRangedAttackCost( - request[CombatRequestKeys.minDamage], - ) - const minMeleeHealCost = room.communeManager.findMinHealCost( - request[CombatRequestKeys.minMeleeHeal] + - (request[CombatRequestKeys.maxTowerDamage] || 0), - ) - const minRangedHealCost = room.communeManager.findMinHealCost( - request[CombatRequestKeys.minRangedHeal], - ) + if (request[HaulRequestKeys.abandon]) continue + if ( + request[HaulRequestKeys.responder] && + collectiveManager.communes.has(request[HaulRequestKeys.responder]) + ) + continue - if (minRangedAttackCost + minRangedHealCost > room.energyCapacityAvailable) continue + // Filter communes that don't have the combatRequest target already - const minAttackCost = room.communeManager.findMinMeleeAttackCost( - request[CombatRequestKeys.minDamage], - ) - if (minAttackCost > room.energyCapacityAvailable) continue + const communes = [] - communes.push(roomName) - } - - const communeName = findClosestRoomName(requestName, communes) - if (!communeName) continue - - // Run a more simple and less expensive check, then a more complex and expensive to confirm - - if ( - Game.map.getRoomLinearDistance(communeName, requestName) > maxCombatDistance || - roomNameUtils.advancedFindDistance(communeName, requestName, { - typeWeights: { - keeper: Infinity, - enemy: Infinity, - ally: Infinity, - }, - }) > maxCombatDistance - ) { - request[CombatRequestKeys.abandon] = 20000 - continue - } - - // Otherwise assign the request to the room, and record as such in Memory - - Memory.rooms[communeName][RoomMemoryKeys.combatRequests].push(requestName) - request[CombatRequestKeys.responder] = communeName - - collectiveManager.creepsByCombatRequest[requestName] = {} - for (const role of antifaRoles) { - - collectiveManager.creepsByCombatRequest[requestName][role] = [] - } + for (const roomName of collectiveManager.communes) { + if (Memory.rooms[roomName][RoomMemoryKeys.haulRequests].includes(requestName)) { + continue } - } - - private runHaulRequests() { - for (const requestName in Memory.haulRequests) { - const request = Memory.haulRequests[requestName] - - if (request[HaulRequestKeys.abandon]) continue - if (request[HaulRequestKeys.responder] && - collectiveManager.communes.has(request[HaulRequestKeys.responder])) continue - - // Filter communes that don't have the combatRequest target already - - const communes = [] - for (const roomName of collectiveManager.communes) { - if (Memory.rooms[roomName][RoomMemoryKeys.haulRequests].includes(requestName)) { - - continue - } - - const room = Game.rooms[roomName] - if (room.controller.level < 4) continue - if (!room.roomManager.structures.spawn.length) continue - - if (!room.communeManager.storingStructures.length) continue - // Ensure we aren't responding to too many requests for our energy level - if ( - room.roomManager.resourcesInStoringStructures.energy / - (20000 + room.controller.level * 1000) < - room.memory[RoomMemoryKeys.haulRequests].length - ) - continue - - communes.push(roomName) - } - - const communeName = findClosestRoomName(requestName, communes) - if (!communeName) continue - - // Run a more simple and less expensive check, then a more complex and expensive to confirm - - if ( - Game.map.getRoomLinearDistance(communeName, requestName) > maxHaulDistance || - roomNameUtils.advancedFindDistance(communeName, requestName, { - typeWeights: { - keeper: Infinity, - enemy: Infinity, - ally: Infinity, - }, - }) > maxHaulDistance - ) { - request[HaulRequestKeys.abandon] = 20000 - continue - } - - // Otherwise assign the request to the room, and record as such in Memory - - Memory.rooms[communeName][RoomMemoryKeys.haulRequests].push(requestName) - request[HaulRequestKeys.responder] = communeName - - collectiveManager.creepsByHaulRequest[requestName] = [] - } + const room = Game.rooms[roomName] + if (room.controller.level < 4) continue + if (!room.roomManager.structures.spawn.length) continue + + if (!room.communeManager.storingStructures.length) continue + // Ensure we aren't responding to too many requests for our energy level + if ( + room.roomManager.resourcesInStoringStructures.energy / + (20000 + room.controller.level * 1000) < + room.memory[RoomMemoryKeys.haulRequests].length + ) + continue + + communes.push(roomName) + } + + const communeName = findClosestRoomName(requestName, communes) + if (!communeName) continue + + // Run a more simple and less expensive check, then a more complex and expensive to confirm + + if ( + Game.map.getRoomLinearDistance(communeName, requestName) > maxHaulDistance || + roomNameUtils.advancedFindDistance(communeName, requestName, { + typeWeights: { + keeper: Infinity, + enemy: Infinity, + ally: Infinity, + }, + }) > maxHaulDistance + ) { + request[HaulRequestKeys.abandon] = 20000 + continue + } + + // Otherwise assign the request to the room, and record as such in Memory + + Memory.rooms[communeName][RoomMemoryKeys.haulRequests].push(requestName) + request[HaulRequestKeys.responder] = communeName + + collectiveManager.creepsByHaulRequest[requestName] = [] } + } } export const requestsManager = new RequestsManager() diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index 62fc9892e..36b2377bc 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -100,7 +100,6 @@ import { CommuneProcs } from 'room/commune/communeProcs' import { PowerCreepProcs } from 'room/creeps/powerCreeps/powerCreepProcs' import { PowerCreepUtils } from 'room/creeps/powerCreeps/powerCreepUtils' import { CreepProcs } from 'room/creeps/creepProcs' -import { CreepLogiProcs } from 'room/creeps/creepLogiProcs' import { Procs } from 'utils/procs' export function profilerRegister() { @@ -179,7 +178,6 @@ export function profilerRegister() { profiler.registerClass(CreepProcs, 'CreepProcs') profiler.registerClass(CreepMoveProcs, 'CreepMoveProcs') - profiler.registerClass(CreepLogiProcs, 'CreepLogiProcs') profiler.registerClass(CreepUtils, 'CreepUtils') profiler.registerClass(MyCreepUtils, 'MyCreepUtils') diff --git a/src/room/commune/communeUtils.ts b/src/room/commune/communeUtils.ts index ca648718e..7407db042 100644 --- a/src/room/commune/communeUtils.ts +++ b/src/room/commune/communeUtils.ts @@ -212,6 +212,17 @@ export class CommuneUtils { data.estimatedCommuneSourceIncome = estimatedIncome return estimatedIncome } + + canTakeNewWorkRequest(roomName: string) { + + if (Memory.rooms[roomName][RoomMemoryKeys.workRequest]) return false + if (Game.rooms[roomName].energyCapacityAvailable < 650) return false + + const room = Game.rooms[roomName] + if (!room.roomManager.structures.spawn.length) return false + + return true + } } export const communeUtils = new CommuneUtils() diff --git a/src/room/creeps/creepLogiProcs.ts b/src/room/creeps/creepLogiProcs.ts deleted file mode 100644 index ea4f17b00..000000000 --- a/src/room/creeps/creepLogiProcs.ts +++ /dev/null @@ -1,270 +0,0 @@ -import { CreepMemoryKeys, CreepRoomLogisticsRequestKeys, RoomLogisticsRequestTypes, FlagNames } from "international/constants" -import { CreepRoomLogisticsRequest, RoomLogisticsTargets } from "types/roomRequests" -import { customLog } from "utils/logging" -import { findObjectWithID } from "utils/utils" - -export class CreepLogiProcs { - updateLogisticsRequests(creep: Creep) { - const creepMemory = Memory.creeps[creep.name] - if (!creepMemory[CreepMemoryKeys.roomLogisticsRequests]) { - creepMemory[CreepMemoryKeys.roomLogisticsRequests] = [] - return - } - if (!creepMemory[CreepMemoryKeys.roomLogisticsRequests].length) return -/* - for (let i = creepMemory[CreepMemoryKeys.roomLogisticsRequests].length - 1; i >= 0; i--) { - const request = creepMemory[CreepMemoryKeys.roomLogisticsRequests][i] - const target = findObjectWithID(request[CreepRoomLogisticsRequestKeys.target]) - if (target) continue - - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(i, 1) - } - */ - const request = creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] - if (!request) return - - const target = findObjectWithID(request[CreepRoomLogisticsRequestKeys.target]) - if (!target) { - - if (request[CreepRoomLogisticsRequestKeys.delivery]) { - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 2) - return - } - - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return - } - - // requests where they are delivering - if (request[CreepRoomLogisticsRequestKeys.delivery]) { - this.updateDeliverLogisticsRequest( - creep, - request, - creepMemory[CreepMemoryKeys.roomLogisticsRequests][1], - target - ) - return - } - - // transfer requests - if (request[CreepRoomLogisticsRequestKeys.type] === RoomLogisticsRequestTypes.transfer) { - this.updateTransferLogisticsRequest(creep, request) - return - } - - // If pickup type - if (target instanceof Resource) { - this.updatePickupLogisticsRequest(creep, request, target) - return - } - - // Withdraw or offer type - this.updateWithdrawLogisticsRequest(creep, request, target) - return - } - - /** - * - * @returns false if the request was deleted - */ - private updateTransferLogisticsRequest(creep: Creep, request: CreepRoomLogisticsRequest) { - const creepMemory = Memory.creeps[creep.name] - const target = findObjectWithID(request[CreepRoomLogisticsRequestKeys.target]) - - // Delete the request if the target is fulfilled - - if (target.freeNextStore < request[CreepRoomLogisticsRequestKeys.amount]) { - if (Game.flags[FlagNames.debugCreepLogistics]) - customLog( - 'not enough free store', - creep.name + - ', ' + - request[CreepRoomLogisticsRequestKeys.target] + - ', ' + - target.freeNextStore + - ' < ' + - request[CreepRoomLogisticsRequestKeys.amount], - ) - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return false - } - - request[CreepRoomLogisticsRequestKeys.amount] = Math.min( - Math.min( - creep.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]], - target.freeNextStore, - ), - request[CreepRoomLogisticsRequestKeys.amount], - ) - if (request[CreepRoomLogisticsRequestKeys.amount] <= 0) { - if (Game.flags[FlagNames.debugCreepLogistics]) - customLog( - 'not enough amount', - creep.name + - ', ' + - request[CreepRoomLogisticsRequestKeys.target] + - ', ' + - request[CreepRoomLogisticsRequestKeys.amount], - ) - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return false - } - - if (!request[CreepRoomLogisticsRequestKeys.noReserve]) { - target.reserveStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += - request[CreepRoomLogisticsRequestKeys.amount] - } - - return true - } - - /** - * - * @returns false if the request was deleted - */ - private updatePickupLogisticsRequest( - creep: Creep, - request: CreepRoomLogisticsRequest, - target: Resource, - ) { - const creepMemory = Memory.creeps[creep.name] - - // Update in accordance to potential resource decay - - request[CreepRoomLogisticsRequestKeys.amount] = Math.min( - Math.min(creep.freeNextStore, target.nextAmount), - request[CreepRoomLogisticsRequestKeys.amount], - ) - if (request[CreepRoomLogisticsRequestKeys.amount] <= 0) { - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return false - } - - if (!request[CreepRoomLogisticsRequestKeys.noReserve]) { - target.reserveAmount -= request[CreepRoomLogisticsRequestKeys.amount] - } - - return true - } - - /** - * - * @returns false if the request was deleted - */ - private updateWithdrawLogisticsRequest( - creep: Creep, - request: CreepRoomLogisticsRequest, - target: RoomLogisticsTargets, - ) { - const creepMemory = Memory.creeps[creep.name] - - // Delete the request if the target doesn't have what we need - if ( - target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] < - request[CreepRoomLogisticsRequestKeys.amount] - ) { - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return false - } - - request[CreepRoomLogisticsRequestKeys.amount] = Math.min( - Math.min( - creep.freeNextStore, - target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]], - ), - request[CreepRoomLogisticsRequestKeys.amount], - ) - if (request[CreepRoomLogisticsRequestKeys.amount] <= 0) { - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return false - } - - if (!request[CreepRoomLogisticsRequestKeys.noReserve]) { - target.reserveStore[request[CreepRoomLogisticsRequestKeys.resourceType]] -= - request[CreepRoomLogisticsRequestKeys.amount] - } - - return true - } - - /** - * update both request pairs of the deliver request - * @param creep - * @param request pickup, withdraw or offer to get sufficient resources - * @param deliverToRequest transfer to delivery target - */ - private updateDeliverLogisticsRequest( - creep: Creep, - request: CreepRoomLogisticsRequest, - deliverToRequest: CreepRoomLogisticsRequest, - target: RoomLogisticsTargets - ) { - const creepMemory = Memory.creeps[creep.name] - - const deliverTarget = findObjectWithID(deliverToRequest[CreepRoomLogisticsRequestKeys.target]) - if (!deliverTarget) { - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 2) - return false - } - - // If pickup type - if (target instanceof Resource) { - // Update in accordance to potential resource decay - - request[CreepRoomLogisticsRequestKeys.amount] = Math.min( - Math.min(creep.freeNextStore, target.nextAmount), - request[CreepRoomLogisticsRequestKeys.amount], - ) - if (request[CreepRoomLogisticsRequestKeys.amount] <= 0) { - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 2) - return false - } - - if (!request[CreepRoomLogisticsRequestKeys.noReserve]) { - target.reserveAmount -= request[CreepRoomLogisticsRequestKeys.amount] - deliverTarget.reserveStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += Math.min( - deliverToRequest[CreepRoomLogisticsRequestKeys.amount], - request[CreepRoomLogisticsRequestKeys.amount], - ) - } - - return true - } - - // Withdraw or offer - - // Delete the request if the target doesn't have what we need - if ( - target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] < - request[CreepRoomLogisticsRequestKeys.amount] - ) { - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 2) - return false - } - - request[CreepRoomLogisticsRequestKeys.amount] = Math.min( - Math.min( - creep.freeNextStore, - target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]], - ), - request[CreepRoomLogisticsRequestKeys.amount], - ) - if (request[CreepRoomLogisticsRequestKeys.amount] <= 0) { - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 2) - return false - } - - if (!request[CreepRoomLogisticsRequestKeys.noReserve]) { - target.reserveStore[request[CreepRoomLogisticsRequestKeys.resourceType]] -= - request[CreepRoomLogisticsRequestKeys.amount] - deliverTarget.reserveStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += Math.min( - deliverToRequest[CreepRoomLogisticsRequestKeys.amount], - request[CreepRoomLogisticsRequestKeys.amount], - ) - } - - return true - } -} - -export const creepLogiProcs = new CreepLogiProcs() diff --git a/src/room/creeps/creepProcs.ts b/src/room/creeps/creepProcs.ts index 8b4a3f49c..8a4ae87ab 100644 --- a/src/room/creeps/creepProcs.ts +++ b/src/room/creeps/creepProcs.ts @@ -4,7 +4,7 @@ import { myCreepUtils } from './myCreepUtils' import { statsManager } from 'international/statsManager' import { CreepMemoryKeys, - CreepRoomLogisticsRequestKeys, + CreepLogisticsRequestKeys, FlagNames, Result, RoomLogisticsRequestTypes, @@ -12,7 +12,7 @@ import { import { creepUtils } from './creepUtils' import { communeUtils } from 'room/commune/communeUtils' import { - CreepRoomLogisticsRequest, + CreepLogisticsRequest, RoomLogisticsRequest, RoomLogisticsTargets, } from 'types/roomRequests' @@ -363,6 +363,293 @@ export class CreepProcs { return Result.success } + updateLogisticsRequests(creep: Creep) { + const creepMemory = Memory.creeps[creep.name] + if (!creepMemory[CreepMemoryKeys.roomLogisticsRequests]) { + creepMemory[CreepMemoryKeys.roomLogisticsRequests] = [] + return + } + if (!creepMemory[CreepMemoryKeys.roomLogisticsRequests].length) return + /* + for (let i = creepMemory[CreepMemoryKeys.roomLogisticsRequests].length - 1; i >= 0; i--) { + const request = creepMemory[CreepMemoryKeys.roomLogisticsRequests][i] + const target = findObjectWithID(request[CreepRoomLogisticsRequestKeys.target]) + if (target) continue + + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(i, 1) + } + */ + const request = creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] + if (!request) return + + const target = findObjectWithID(request[CreepLogisticsRequestKeys.target]) + if (!target) { + if (Game.flags[FlagNames.debugCreepLogistics]) { + creep.room.visual.text('❌T', creep.pos) + } + + if (request[CreepLogisticsRequestKeys.delivery]) { + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 2) + return + } + + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return + } + + // requests where they are delivering + if (request[CreepLogisticsRequestKeys.delivery]) { + this.updateDeliverLogisticsRequest( + creep, + request, + creepMemory[CreepMemoryKeys.roomLogisticsRequests][1], + target, + ) + return + } + + // transfer requests + if (request[CreepLogisticsRequestKeys.type] === RoomLogisticsRequestTypes.transfer) { + this.updateTransferLogisticsRequest(creep, request) + return + } + + // If pickup type + if (target instanceof Resource) { + this.updatePickupLogisticsRequest(creep, request, target) + return + } + + // Withdraw or offer type + this.updateWithdrawLogisticsRequest(creep, request, target) + return + } + + /** + * + * @returns false if the request was deleted + */ + private updateTransferLogisticsRequest(creep: Creep, request: CreepLogisticsRequest) { + const creepMemory = Memory.creeps[creep.name] + const target = findObjectWithID(request[CreepLogisticsRequestKeys.target]) + + // Delete the request if the target is fulfilled + + if (target.freeNextStore < request[CreepLogisticsRequestKeys.amount]) { + if (Game.flags[FlagNames.debugCreepLogistics]) { + + creep.room.visual.text('❌TA1', creep.pos, { font: 0.2 }) + customLog( + 'not enough free store', + creep.name + + ', ' + + request[CreepLogisticsRequestKeys.target] + + ', ' + + target.freeNextStore + + ' < ' + + request[CreepLogisticsRequestKeys.amount], + ) + } + + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return false + } + + request[CreepLogisticsRequestKeys.amount] = Math.min( + Math.min( + creep.nextStore[request[CreepLogisticsRequestKeys.resourceType]], + target.freeNextStore, + ), + request[CreepLogisticsRequestKeys.amount], + ) + if (request[CreepLogisticsRequestKeys.amount] <= 0) { + + if (Game.flags[FlagNames.debugCreepLogistics]) { + + creep.room.visual.text('❌TA2 ' + target.freeNextStore + ' ' + creep.nextStore[request[CreepLogisticsRequestKeys.resourceType]], creep.pos, { font: 0.2 }) + customLog( + 'not enough amount', + creep.name + + ', ' + + request[CreepLogisticsRequestKeys.target] + + ', ' + + request[CreepLogisticsRequestKeys.amount], + ) + } + + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return false + } + + if (!request[CreepLogisticsRequestKeys.noReserve]) { + target.reserveStore[request[CreepLogisticsRequestKeys.resourceType]] += + request[CreepLogisticsRequestKeys.amount] + } + + return true + } + + /** + * + * @returns false if the request was deleted + */ + private updatePickupLogisticsRequest( + creep: Creep, + request: CreepLogisticsRequest, + target: Resource, + ) { + const creepMemory = Memory.creeps[creep.name] + + // Update in accordance to potential resource decay + + request[CreepLogisticsRequestKeys.amount] = Math.min( + Math.min(creep.freeNextStore, target.nextAmount), + request[CreepLogisticsRequestKeys.amount], + ) + if (request[CreepLogisticsRequestKeys.amount] <= 0) { + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return false + } + + if (!request[CreepLogisticsRequestKeys.noReserve]) { + target.reserveAmount -= request[CreepLogisticsRequestKeys.amount] + } + + return true + } + + /** + * + * @returns false if the request was deleted + */ + private updateWithdrawLogisticsRequest( + creep: Creep, + request: CreepLogisticsRequest, + target: RoomLogisticsTargets, + ) { + const creepMemory = Memory.creeps[creep.name] + + // Delete the request if the target doesn't have what we need + if ( + target.nextStore[request[CreepLogisticsRequestKeys.resourceType]] < + request[CreepLogisticsRequestKeys.amount] + ) { + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return false + } + + request[CreepLogisticsRequestKeys.amount] = Math.min( + Math.min( + creep.freeNextStore, + target.nextStore[request[CreepLogisticsRequestKeys.resourceType]], + ), + request[CreepLogisticsRequestKeys.amount], + ) + if (request[CreepLogisticsRequestKeys.amount] <= 0) { + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return false + } + + if (!request[CreepLogisticsRequestKeys.noReserve]) { + target.reserveStore[request[CreepLogisticsRequestKeys.resourceType]] -= + request[CreepLogisticsRequestKeys.amount] + } + + return true + } + + /** + * update both request pairs of the deliver request + * @param creep + * @param request pickup, withdraw or offer to get sufficient resources + * @param deliverToRequest transfer to delivery target + */ + private updateDeliverLogisticsRequest( + creep: Creep, + request: CreepLogisticsRequest, + deliverToRequest: CreepLogisticsRequest, + target: RoomLogisticsTargets, + ) { + const creepMemory = Memory.creeps[creep.name] + + const deliverTarget = findObjectWithID(deliverToRequest[CreepLogisticsRequestKeys.target]) + if (!deliverTarget) { + if (Game.flags[FlagNames.debugCreepLogistics]) { + creep.room.visual.text('❌DT', creep.pos) + } + + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 2) + return false + } + + // If pickup type + if (target instanceof Resource) { + // Update in accordance to potential resource decay + + request[CreepLogisticsRequestKeys.amount] = Math.min( + Math.min(creep.freeNextStore, target.nextAmount), + request[CreepLogisticsRequestKeys.amount], + ) + if (request[CreepLogisticsRequestKeys.amount] <= 0) { + if (Game.flags[FlagNames.debugCreepLogistics]) { + creep.room.visual.text('❌DT0R', creep.pos) + } + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 2) + return false + } + + if (!request[CreepLogisticsRequestKeys.noReserve]) { + target.reserveAmount -= request[CreepLogisticsRequestKeys.amount] + deliverTarget.reserveStore[request[CreepLogisticsRequestKeys.resourceType]] += Math.min( + deliverToRequest[CreepLogisticsRequestKeys.amount], + request[CreepLogisticsRequestKeys.amount], + ) + } + + return true + } + + // Withdraw or offer + + // Delete the request if the target doesn't have what we need + if ( + target.nextStore[request[CreepLogisticsRequestKeys.resourceType]] < + request[CreepLogisticsRequestKeys.amount] + ) { + if (Game.flags[FlagNames.debugCreepLogistics]) { + creep.room.visual.text('❌DTA', creep.pos) + } + + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 2) + return false + } + + request[CreepLogisticsRequestKeys.amount] = Math.min( + Math.min( + creep.freeNextStore, + target.nextStore[request[CreepLogisticsRequestKeys.resourceType]], + ), + request[CreepLogisticsRequestKeys.amount], + ) + if (request[CreepLogisticsRequestKeys.amount] <= 0) { + if (Game.flags[FlagNames.debugCreepLogistics]) { + creep.room.visual.text('❌DT0A', creep.pos) + } + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 2) + return false + } + + if (!request[CreepLogisticsRequestKeys.noReserve]) { + target.reserveStore[request[CreepLogisticsRequestKeys.resourceType]] -= + request[CreepLogisticsRequestKeys.amount] + deliverTarget.reserveStore[request[CreepLogisticsRequestKeys.resourceType]] += Math.min( + deliverToRequest[CreepLogisticsRequestKeys.amount], + request[CreepLogisticsRequestKeys.amount], + ) + } + + return true + } } export const creepProcs = new CreepProcs() diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index c634b67d2..50cd85094 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -15,7 +15,7 @@ import { Result, storingStructureTypesSet, CreepMemoryKeys, - CreepRoomLogisticsRequestKeys, + CreepLogisticsRequestKeys, RoomMemoryKeys, ReservedCoordTypes, WorkTypes, @@ -57,7 +57,7 @@ import { creepClasses } from '../creepClasses' import { statsManager } from 'international/statsManager' import { creepUtils } from '../creepUtils' import { RoomManager } from 'room/room' -import { CreepRoomLogisticsRequest, RoomLogisticsRequest } from 'types/roomRequests' +import { CreepLogisticsRequest, RoomLogisticsRequest } from 'types/roomRequests' import { customLog, stringifyLog } from 'utils/logging' import { customPathFinder } from 'international/customPathFinder' import { communeUtils } from 'room/commune/communeUtils' @@ -1195,7 +1195,7 @@ Creep.prototype.findRoomLogisticsRequest = function (args) { /* log('FINDING REQ', bestRequest + ', ' + Array.from(types), { position: 1 }) */ - let creepRequest: CreepRoomLogisticsRequest | 0 + let creepRequest: CreepLogisticsRequest | 0 if (!bestRequest) { creepRequest = this.createBackupStoringStructuresRoomLogisticsRequest( @@ -1206,30 +1206,33 @@ Creep.prototype.findRoomLogisticsRequest = function (args) { if (creepRequest === Result.fail) return Result.fail } else { creepRequest = { - [CreepRoomLogisticsRequestKeys.type]: bestRequest.type, - [CreepRoomLogisticsRequestKeys.target]: bestRequest.targetID, - [CreepRoomLogisticsRequestKeys.resourceType]: bestRequest.resourceType, - [CreepRoomLogisticsRequestKeys.amount]: this.findRoomLogisticRequestAmount(bestRequest), - [CreepRoomLogisticsRequestKeys.noReserve]: bestRequest.noReserve, + [CreepLogisticsRequestKeys.type]: bestRequest.type, + [CreepLogisticsRequestKeys.target]: bestRequest.targetID, + [CreepLogisticsRequestKeys.resourceType]: bestRequest.resourceType, + [CreepLogisticsRequestKeys.amount]: this.findRoomLogisticRequestAmount(bestRequest), + [CreepLogisticsRequestKeys.noReserve]: bestRequest.noReserve, } if (bestRequest.delivery) { // This request will preceed the one we've accepted to provide for the delivery - let nextCreepRequest: CreepRoomLogisticsRequest + let nextCreepRequest: CreepLogisticsRequest const storingStructure = findObjectWithID(bestRequest.delivery as Id) if (storingStructure) { nextCreepRequest = { - [CreepRoomLogisticsRequestKeys.type]: RoomLogisticsRequestTypes.withdraw, - [CreepRoomLogisticsRequestKeys.target]: storingStructure.id, - [CreepRoomLogisticsRequestKeys.resourceType]: bestRequest.resourceType, - [CreepRoomLogisticsRequestKeys.amount]: Math.min( + [CreepLogisticsRequestKeys.type]: RoomLogisticsRequestTypes.withdraw, + [CreepLogisticsRequestKeys.target]: storingStructure.id, + [CreepLogisticsRequestKeys.resourceType]: bestRequest.resourceType, + [CreepLogisticsRequestKeys.amount]: Math.min( storingStructure.reserveStore[bestRequest.resourceType], - creepRequest[CreepRoomLogisticsRequestKeys.amount], + creepRequest[CreepLogisticsRequestKeys.amount], ), - [CreepRoomLogisticsRequestKeys.noReserve]: bestRequest.noReserve, - [CreepRoomLogisticsRequestKeys.delivery]: true, + [CreepLogisticsRequestKeys.noReserve]: bestRequest.noReserve, + [CreepLogisticsRequestKeys.delivery]: true, } + + storingStructure.reserveStore[nextCreepRequest[CreepLogisticsRequestKeys.resourceType]] -= + nextCreepRequest[CreepLogisticsRequestKeys.amount] } else { // The delivery provider is @@ -1241,27 +1244,26 @@ Creep.prototype.findRoomLogisticsRequest = function (args) { this.room.roomLogisticsRequests[RoomLogisticsRequestTypes.pickup][bestRequest.delivery] nextCreepRequest = { - [CreepRoomLogisticsRequestKeys.type]: nextRequest.type, - [CreepRoomLogisticsRequestKeys.target]: nextRequest.targetID, - [CreepRoomLogisticsRequestKeys.resourceType]: nextRequest.resourceType, - [CreepRoomLogisticsRequestKeys.amount]: Math.min( + [CreepLogisticsRequestKeys.type]: nextRequest.type, + [CreepLogisticsRequestKeys.target]: nextRequest.targetID, + [CreepLogisticsRequestKeys.resourceType]: nextRequest.resourceType, + [CreepLogisticsRequestKeys.amount]: Math.min( this.nextStore[nextRequest.resourceType] + this.freeNextStore, - creepRequest[CreepRoomLogisticsRequestKeys.amount], + creepRequest[CreepLogisticsRequestKeys.amount], ), - [CreepRoomLogisticsRequestKeys.noReserve]: - creepRequest[CreepRoomLogisticsRequestKeys.noReserve], - [CreepRoomLogisticsRequestKeys.delivery]: true, + [CreepLogisticsRequestKeys.noReserve]: creepRequest[CreepLogisticsRequestKeys.noReserve], + [CreepLogisticsRequestKeys.delivery]: true, } // Handle reservations for nextRequest - if (!creepRequest[CreepRoomLogisticsRequestKeys.noReserve]) { + if (!creepRequest[CreepLogisticsRequestKeys.noReserve]) { // delete the parent request if it has no more utility, otherwise, reduce its amount - if (nextRequest.amount === nextCreepRequest[CreepRoomLogisticsRequestKeys.amount]) { + if (nextRequest.amount === nextCreepRequest[CreepLogisticsRequestKeys.amount]) { delete this.room.roomLogisticsRequests[nextRequest.type][nextRequest.ID] } else { - nextRequest.amount -= nextCreepRequest[CreepRoomLogisticsRequestKeys.amount] + nextRequest.amount -= nextCreepRequest[CreepLogisticsRequestKeys.amount] } const target = findObjectWithID(nextRequest.targetID) @@ -1269,12 +1271,12 @@ Creep.prototype.findRoomLogisticsRequest = function (args) { // Pickup type if (target instanceof Resource) { - target.reserveAmount -= nextCreepRequest[CreepRoomLogisticsRequestKeys.amount] + target.reserveAmount -= nextCreepRequest[CreepLogisticsRequestKeys.amount] } else { // Withdraw or offer type - target.reserveStore[nextCreepRequest[CreepRoomLogisticsRequestKeys.resourceType]] -= - nextCreepRequest[CreepRoomLogisticsRequestKeys.amount] + target.reserveStore[nextCreepRequest[CreepLogisticsRequestKeys.resourceType]] -= + nextCreepRequest[CreepLogisticsRequestKeys.amount] } } } @@ -1285,41 +1287,41 @@ Creep.prototype.findRoomLogisticsRequest = function (args) { // delete the parent request if it has no more utility, otherwise, reduce its amount if ( - !creepRequest[CreepRoomLogisticsRequestKeys.noReserve] && - bestRequest.amount === creepRequest[CreepRoomLogisticsRequestKeys.amount] + !creepRequest[CreepLogisticsRequestKeys.noReserve] && + bestRequest.amount === creepRequest[CreepLogisticsRequestKeys.amount] ) { delete this.room.roomLogisticsRequests[bestRequest.type][bestRequest.ID] } else { - bestRequest.amount -= creepRequest[CreepRoomLogisticsRequestKeys.amount] + bestRequest.amount -= creepRequest[CreepLogisticsRequestKeys.amount] } } creepMemory[CreepMemoryKeys.roomLogisticsRequests].push(creepRequest) - if (creepRequest[CreepRoomLogisticsRequestKeys.noReserve]) { + if (creepRequest[CreepLogisticsRequestKeys.noReserve]) { return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] } - const target = findObjectWithID(creepRequest[CreepRoomLogisticsRequestKeys.target]) + const target = findObjectWithID(creepRequest[CreepLogisticsRequestKeys.target]) // Pickup type if (target instanceof Resource) { - target.reserveAmount -= creepRequest[CreepRoomLogisticsRequestKeys.amount] + target.reserveAmount -= creepRequest[CreepLogisticsRequestKeys.amount] return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] } - if (creepRequest[CreepRoomLogisticsRequestKeys.type] === RoomLogisticsRequestTypes.transfer) { - target.reserveStore[creepRequest[CreepRoomLogisticsRequestKeys.resourceType]] += - creepRequest[CreepRoomLogisticsRequestKeys.amount] + if (creepRequest[CreepLogisticsRequestKeys.type] === RoomLogisticsRequestTypes.transfer) { + target.reserveStore[creepRequest[CreepLogisticsRequestKeys.resourceType]] += + creepRequest[CreepLogisticsRequestKeys.amount] return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] } // Withdraw or offer type - target.reserveStore[creepRequest[CreepRoomLogisticsRequestKeys.resourceType]] -= - creepRequest[CreepRoomLogisticsRequestKeys.amount] + target.reserveStore[creepRequest[CreepLogisticsRequestKeys.resourceType]] -= + creepRequest[CreepLogisticsRequestKeys.amount] return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] } @@ -1525,10 +1527,10 @@ Creep.prototype.createBackupStoringStructuresRoomLogisticsRequestTransfer = func if (!storingStructure) return Result.fail /* this.room.visual.text((this.nextStore[resourceType]).toString(), this.pos.x, this.pos.y, { color: customColors.red }) */ return { - [CreepRoomLogisticsRequestKeys.type]: RoomLogisticsRequestTypes.transfer, - [CreepRoomLogisticsRequestKeys.target]: storingStructure.id, - [CreepRoomLogisticsRequestKeys.resourceType]: resourceType, - [CreepRoomLogisticsRequestKeys.amount]: nextStore[resourceType], + [CreepLogisticsRequestKeys.type]: RoomLogisticsRequestTypes.transfer, + [CreepLogisticsRequestKeys.target]: storingStructure.id, + [CreepLogisticsRequestKeys.resourceType]: resourceType, + [CreepLogisticsRequestKeys.amount]: nextStore[resourceType], } } @@ -1552,10 +1554,10 @@ Creep.prototype.createBackupStoringStructuresRoomLogisticsRequestWithdraw = func /* this.room.visual.text((this.nextStore[resourceType]).toString(), this.pos.x, this.pos.y, { color: customColors.red }) */ return { - [CreepRoomLogisticsRequestKeys.type]: RoomLogisticsRequestTypes.withdraw, - [CreepRoomLogisticsRequestKeys.target]: storingStructure.id, - [CreepRoomLogisticsRequestKeys.resourceType]: resourceType, - [CreepRoomLogisticsRequestKeys.amount]: this.freeNextStore, + [CreepLogisticsRequestKeys.type]: RoomLogisticsRequestTypes.withdraw, + [CreepLogisticsRequestKeys.target]: storingStructure.id, + [CreepLogisticsRequestKeys.resourceType]: resourceType, + [CreepLogisticsRequestKeys.amount]: this.freeNextStore, } } @@ -1572,9 +1574,9 @@ Creep.prototype.findRoomLogisticRequestAmount = function (request) { if (request.delivery) { // Take extra energy in case its needed - if (request.resourceType === RESOURCE_ENERGY) { +/* if (request.resourceType === RESOURCE_ENERGY) { return this.nextStore[request.resourceType] + this.freeNextStore - } + } */ return Math.min(request.amount, this.nextStore[request.resourceType] + this.freeNextStore) } @@ -1591,7 +1593,7 @@ Creep.prototype.runRoomLogisticsRequestAdvanced = function (args) { if (!request) return Result.noAction /* log('REQUEST RESPONSE', request.T, { position: 1 }) */ - const target = findObjectWithID(request[CreepRoomLogisticsRequestKeys.target]) + const target = findObjectWithID(request[CreepLogisticsRequestKeys.target]) if (Game.flags[FlagNames.debugCreepLogistics]) this.room.targetVisual(this.pos, target.pos, true) if (getRange(target.pos, this.pos) > 1) { const result = this.createMoveRequest({ @@ -1623,7 +1625,7 @@ Creep.prototype.runRoomLogisticsRequestAdvanced = function (args) { } if (Game.flags[FlagNames.debugCreepLogistics]) { - this.room.visual.text(request[CreepRoomLogisticsRequestKeys.amount].toString(), this.pos) + this.room.visual.text(request[CreepLogisticsRequestKeys.amount].toString(), this.pos) } /* log( @@ -1637,21 +1639,21 @@ Creep.prototype.runRoomLogisticsRequestAdvanced = function (args) { this.pickup(target) this.movedResource = true - this.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += - request[CreepRoomLogisticsRequestKeys.amount] - target.nextAmount -= request[CreepRoomLogisticsRequestKeys.amount] + this.nextStore[request[CreepLogisticsRequestKeys.resourceType]] += + request[CreepLogisticsRequestKeys.amount] + target.nextAmount -= request[CreepLogisticsRequestKeys.amount] this.memory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) return Result.success } - if (request[CreepRoomLogisticsRequestKeys.type] === RoomLogisticsRequestTypes.transfer) { + if (request[CreepLogisticsRequestKeys.type] === RoomLogisticsRequestTypes.transfer) { stringifyLog('tried to resolve request for ' + this.name, request) const result = this.transfer( target as AnyStoreStructure | Creep, - request[CreepRoomLogisticsRequestKeys.resourceType], - request[CreepRoomLogisticsRequestKeys.amount], + request[CreepLogisticsRequestKeys.resourceType], + request[CreepLogisticsRequestKeys.amount], ) if (result !== OK) { this.room.visual.text(result.toString(), this.pos) @@ -1660,10 +1662,10 @@ Creep.prototype.runRoomLogisticsRequestAdvanced = function (args) { this.movedResource = true - this.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] -= - request[CreepRoomLogisticsRequestKeys.amount] - target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += - request[CreepRoomLogisticsRequestKeys.amount] + this.nextStore[request[CreepLogisticsRequestKeys.resourceType]] -= + request[CreepLogisticsRequestKeys.amount] + target.nextStore[request[CreepLogisticsRequestKeys.resourceType]] += + request[CreepLogisticsRequestKeys.amount] this.memory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) return Result.success @@ -1677,18 +1679,18 @@ Creep.prototype.runRoomLogisticsRequestAdvanced = function (args) { if ( target.transfer( this, - request[CreepRoomLogisticsRequestKeys.resourceType], - request[CreepRoomLogisticsRequestKeys.amount], + request[CreepLogisticsRequestKeys.resourceType], + request[CreepLogisticsRequestKeys.amount], ) !== OK ) return Result.fail target.movedResource = true - this.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += - request[CreepRoomLogisticsRequestKeys.amount] - target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] -= - request[CreepRoomLogisticsRequestKeys.amount] + this.nextStore[request[CreepLogisticsRequestKeys.resourceType]] += + request[CreepLogisticsRequestKeys.amount] + target.nextStore[request[CreepLogisticsRequestKeys.resourceType]] -= + request[CreepLogisticsRequestKeys.amount] this.memory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) return Result.action @@ -1697,18 +1699,18 @@ Creep.prototype.runRoomLogisticsRequestAdvanced = function (args) { if ( this.withdraw( target, - request[CreepRoomLogisticsRequestKeys.resourceType], - request[CreepRoomLogisticsRequestKeys.amount], + request[CreepLogisticsRequestKeys.resourceType], + request[CreepLogisticsRequestKeys.amount], ) !== OK ) return Result.fail this.movedResource = true - this.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += - request[CreepRoomLogisticsRequestKeys.amount] - target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] -= - request[CreepRoomLogisticsRequestKeys.amount] + this.nextStore[request[CreepLogisticsRequestKeys.resourceType]] += + request[CreepLogisticsRequestKeys.amount] + target.nextStore[request[CreepLogisticsRequestKeys.resourceType]] -= + request[CreepLogisticsRequestKeys.amount] this.memory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) return Result.success @@ -1730,7 +1732,7 @@ Creep.prototype.runRoomLogisticsRequest = function () { if (!request) return Result.fail /* log('REQUEST RESPONSE', request.T, { position: 1 }) */ - const target = findObjectWithID(request[CreepRoomLogisticsRequestKeys.target]) + const target = findObjectWithID(request[CreepLogisticsRequestKeys.target]) if (getRange(target.pos, this.pos) > 1) { this.createMoveRequest({ @@ -1761,30 +1763,30 @@ Creep.prototype.runRoomLogisticsRequest = function () { this.pickup(target) this.movedResource = true - this.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += - request[CreepRoomLogisticsRequestKeys.amount] - target.nextAmount -= request[CreepRoomLogisticsRequestKeys.amount] + this.nextStore[request[CreepLogisticsRequestKeys.resourceType]] += + request[CreepLogisticsRequestKeys.amount] + target.nextAmount -= request[CreepLogisticsRequestKeys.amount] creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) return Result.success } - if (request[CreepRoomLogisticsRequestKeys.type] === RoomLogisticsRequestTypes.transfer) { + if (request[CreepLogisticsRequestKeys.type] === RoomLogisticsRequestTypes.transfer) { if ( this.transfer( target as AnyStoreStructure | Creep, - request[CreepRoomLogisticsRequestKeys.resourceType], - request[CreepRoomLogisticsRequestKeys.amount], + request[CreepLogisticsRequestKeys.resourceType], + request[CreepLogisticsRequestKeys.amount], ) !== OK ) return Result.fail this.movedResource = true - this.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] -= - request[CreepRoomLogisticsRequestKeys.amount] - target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += - request[CreepRoomLogisticsRequestKeys.amount] + this.nextStore[request[CreepLogisticsRequestKeys.resourceType]] -= + request[CreepLogisticsRequestKeys.amount] + target.nextStore[request[CreepLogisticsRequestKeys.resourceType]] += + request[CreepLogisticsRequestKeys.amount] creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) return Result.success @@ -1798,18 +1800,18 @@ Creep.prototype.runRoomLogisticsRequest = function () { if ( target.transfer( this, - request[CreepRoomLogisticsRequestKeys.resourceType], - request[CreepRoomLogisticsRequestKeys.amount], + request[CreepLogisticsRequestKeys.resourceType], + request[CreepLogisticsRequestKeys.amount], ) !== OK ) return Result.fail this.movedResource = true - this.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += - request[CreepRoomLogisticsRequestKeys.amount] - target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] -= - request[CreepRoomLogisticsRequestKeys.amount] + this.nextStore[request[CreepLogisticsRequestKeys.resourceType]] += + request[CreepLogisticsRequestKeys.amount] + target.nextStore[request[CreepLogisticsRequestKeys.resourceType]] -= + request[CreepLogisticsRequestKeys.amount] creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) return Result.success @@ -1818,18 +1820,18 @@ Creep.prototype.runRoomLogisticsRequest = function () { if ( this.withdraw( target, - request[CreepRoomLogisticsRequestKeys.resourceType], - request[CreepRoomLogisticsRequestKeys.amount], + request[CreepLogisticsRequestKeys.resourceType], + request[CreepLogisticsRequestKeys.amount], ) !== OK ) return Result.fail this.movedResource = true - this.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] += - request[CreepRoomLogisticsRequestKeys.amount] - target.nextStore[request[CreepRoomLogisticsRequestKeys.resourceType]] -= - request[CreepRoomLogisticsRequestKeys.amount] + this.nextStore[request[CreepLogisticsRequestKeys.resourceType]] += + request[CreepLogisticsRequestKeys.amount] + target.nextStore[request[CreepLogisticsRequestKeys.resourceType]] -= + request[CreepLogisticsRequestKeys.amount] creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) return Result.success @@ -1899,10 +1901,10 @@ Creep.prototype.createCreepRoomLogisticsRequest = function ( if (amount <= 0) return Result.fail this.memory[CreepMemoryKeys.roomLogisticsRequests].push({ - [CreepRoomLogisticsRequestKeys.type]: type, - [CreepRoomLogisticsRequestKeys.target]: targetID, - [CreepRoomLogisticsRequestKeys.resourceType]: resourceType, - [CreepRoomLogisticsRequestKeys.amount]: amount, + [CreepLogisticsRequestKeys.type]: type, + [CreepLogisticsRequestKeys.target]: targetID, + [CreepLogisticsRequestKeys.resourceType]: resourceType, + [CreepLogisticsRequestKeys.amount]: amount, }) return Result.success diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index 10493e639..3a47b9826 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -1,16 +1,16 @@ import { - CreepMemoryKeys, - CreepRoomLogisticsRequestKeys, - FlagNames, - MovedTypes, - Result, - RoomLogisticsRequestTypes, - RoomMemoryKeys, - RoomTypes, - SleepFor, - customColors, - packedPosLength, - relayOffsets, + CreepMemoryKeys, + CreepLogisticsRequestKeys, + FlagNames, + MovedTypes, + Result, + RoomLogisticsRequestTypes, + RoomMemoryKeys, + RoomTypes, + SleepFor, + customColors, + packedPosLength, + relayOffsets, } from 'international/constants' import { statsManager } from 'international/statsManager' import { packCoord, reversePosList, unpackCoord, unpackPosAt } from 'other/codec' diff --git a/src/types.d.ts b/src/types.d.ts index 76a390ddb..897e258cd 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -6,7 +6,7 @@ import { WorkRequestKeys, CombatRequestKeys, CreepMemoryKeys, - CreepRoomLogisticsRequestKeys, + CreepLogisticsRequestKeys, DepositRequestKeys, HaulRequestKeys, NukeRequestKeys, @@ -34,7 +34,7 @@ import { CustomPathFinderArgs } from 'international/customPathFinder' import { CombatRequest, HaulRequest, NukeRequest, WorkRequest } from 'types/internationalRequests' import { PlayerMemory } from 'types/players' import { - CreepRoomLogisticsRequest, + CreepLogisticsRequest, PowerTask, RoomLogisticsRequest, FindNewRoomLogisticsRequestArgs, @@ -973,7 +973,7 @@ declare global { manageSpawning(spawn: StructureSpawn): void - findRoomLogisticsRequest(args?: FindNewRoomLogisticsRequestArgs): CreepRoomLogisticsRequest | 0 + findRoomLogisticsRequest(args?: FindNewRoomLogisticsRequestArgs): CreepLogisticsRequest | 0 findRoomLogisticsRequestTypes( args?: FindNewRoomLogisticsRequestArgs, ): Set | Result.fail @@ -984,11 +984,11 @@ declare global { createBackupStoringStructuresRoomLogisticsRequest( types?: Set, resourceTypes?: Set, - ): CreepRoomLogisticsRequest | 0 - createBackupStoringStructuresRoomLogisticsRequestTransfer(): CreepRoomLogisticsRequest | 0 + ): CreepLogisticsRequest | 0 + createBackupStoringStructuresRoomLogisticsRequestTransfer(): CreepLogisticsRequest | 0 createBackupStoringStructuresRoomLogisticsRequestWithdraw( resourceTypes?: Set, - ): CreepRoomLogisticsRequest | 0 + ): CreepLogisticsRequest | 0 findRoomLogisticRequestAmount(request: RoomLogisticsRequest): number runRoomLogisticsRequestAdvanced(args?: FindNewRoomLogisticsRequestArgs): Result @@ -1354,7 +1354,7 @@ declare global { [CreepMemoryKeys.remote]: string [CreepMemoryKeys.scoutTarget]: string [CreepMemoryKeys.signTarget]: string | false - [CreepMemoryKeys.roomLogisticsRequests]: CreepRoomLogisticsRequest[] + [CreepMemoryKeys.roomLogisticsRequests]: CreepLogisticsRequest[] [CreepMemoryKeys.needsResources]: boolean [CreepMemoryKeys.squadSize]: number [CreepMemoryKeys.squadType]: SquadTypes diff --git a/src/types/roomRequests.ts b/src/types/roomRequests.ts index 0ce8f9931..ebea40363 100644 --- a/src/types/roomRequests.ts +++ b/src/types/roomRequests.ts @@ -1,18 +1,19 @@ import { - CreepRoomLogisticsRequestKeys, PowerRequestKeys, - RoomLogisticsRequestTypes + CreepLogisticsRequestKeys, + PowerRequestKeys, + RoomLogisticsRequestTypes, } from 'international/constants' export type RoomLogisticsTargets = AnyStoreStructure | Creep | Tombstone | Ruin | Resource -export interface CreepRoomLogisticsRequest { - [CreepRoomLogisticsRequestKeys.type]: RoomLogisticsRequestTypes - [CreepRoomLogisticsRequestKeys.target]: Id - [CreepRoomLogisticsRequestKeys.resourceType]: ResourceConstant - [CreepRoomLogisticsRequestKeys.amount]: number - [CreepRoomLogisticsRequestKeys.onlyFull]?: boolean - [CreepRoomLogisticsRequestKeys.noReserve]?: boolean - [CreepRoomLogisticsRequestKeys.delivery]?: boolean +export interface CreepLogisticsRequest { + [CreepLogisticsRequestKeys.type]: RoomLogisticsRequestTypes + [CreepLogisticsRequestKeys.target]: Id + [CreepLogisticsRequestKeys.resourceType]: ResourceConstant + [CreepLogisticsRequestKeys.amount]: number + [CreepLogisticsRequestKeys.onlyFull]?: boolean + [CreepLogisticsRequestKeys.noReserve]?: boolean + [CreepLogisticsRequestKeys.delivery]?: boolean } export interface RoomLogisticsRequest { From 2dc62c2d22e8e418ae765156a831bae170cc9571 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 13 Jan 2024 18:55:51 -0800 Subject: [PATCH 074/190] implement fixed freeNextStoreOf, code cleanup + documentation --- src/international/constants.ts | 9 ++ src/international/flags.ts | 2 +- src/other/profilerRegister.ts | 4 + src/room/commune/defence.ts | 83 ++++++------------- src/room/commune/nuker.ts | 16 ++-- src/room/commune/towers.ts | 2 +- src/room/creeps/creepProcs.ts | 63 +++++++++----- .../creeps/creepPrototypes/creepFunctions.ts | 8 +- .../creeps/roleManagers/commune/fastFiller.ts | 4 +- src/room/roomFunctions.ts | 3 +- src/room/roomObjectFunctions.ts | 41 +-------- src/room/roomObjectUtils.ts | 26 ++++++ src/room/structureUtils.ts | 15 ++++ src/types.d.ts | 22 ++--- 14 files changed, 150 insertions(+), 148 deletions(-) create mode 100644 src/room/roomObjectUtils.ts create mode 100644 src/room/structureUtils.ts diff --git a/src/international/constants.ts b/src/international/constants.ts index 2f77af4f1..055eb667e 100644 --- a/src/international/constants.ts +++ b/src/international/constants.ts @@ -704,6 +704,15 @@ export const generalRepairStructureTypes = new Set([ STRUCTURE_CONTAINER, ]) +/** + * These structures have seperate store capacities for different resources. For example, labs can hold minerals and energy, but at different amounts and without conflict + */ +export const separateStoreStructureTypes = new Set([ + STRUCTURE_LAB, + STRUCTURE_NUKER, + STRUCTURE_POWER_SPAWN +]) + export const customColors = { white: '#ffffff', lightGrey: '#eaeaea', diff --git a/src/international/flags.ts b/src/international/flags.ts index 03bbf8347..f52d7fc9c 100644 --- a/src/international/flags.ts +++ b/src/international/flags.ts @@ -310,7 +310,7 @@ export class FlagManager { const planData = rampartPlans.getXY(coord.x, coord.y) if (planData) { // Filter out non-mincut ramparts - if (planData.buildForNuke || planData.coversStructure) { + if (planData.buildForNuke || planData.coversStructure || planData.buildForThreat) { room.coordVisual(coord.x, coord.y) return true } diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index 36b2377bc..d12528df5 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -101,6 +101,8 @@ import { PowerCreepProcs } from 'room/creeps/powerCreeps/powerCreepProcs' import { PowerCreepUtils } from 'room/creeps/powerCreeps/powerCreepUtils' import { CreepProcs } from 'room/creeps/creepProcs' import { Procs } from 'utils/procs' +import { RoomObjectUtils } from 'room/roomObjectUtils' +import { StructureUtils } from 'room/structureUtils' export function profilerRegister() { // Classes @@ -170,6 +172,8 @@ export function profilerRegister() { profiler.registerClass(RoomDataManager, 'RoomDataManager') profiler.registerClass(CommuneDataManager, 'CommuneDataManager') profiler.registerClass(CommuneProcs, 'CommuneProc') + profiler.registerClass(RoomObjectUtils, 'RoomObjectUtils') + profiler.registerClass(StructureUtils, 'StructureUtils') // Creep classes diff --git a/src/room/commune/defence.ts b/src/room/commune/defence.ts index 4d60ad67c..69c942423 100644 --- a/src/room/commune/defence.ts +++ b/src/room/commune/defence.ts @@ -34,8 +34,6 @@ import { customLog, LogTypes } from 'utils/logging' export class DefenceManager { communeManager: CommuneManager - threatByPlayers: Map - constructor(communeManager: CommuneManager) { this.communeManager = communeManager } @@ -88,42 +86,6 @@ export class DefenceManager { if (!this.isBaseSafe()) return true return false - - /* - // Otherwise if safeMode can be activated - - // Get the previous tick's events - - const eventLog = room.getEventLog() - - // Loop through each eventItem - - for (const eventItem of eventLog) { - // If the event wasn't an attack, iterate - - if (eventItem.event !== EVENT_ATTACK) continue - - // Otherwise get the target of the attack - - const attackTarget = findObjectWithID(eventItem.data.targetId as Id) - - // If the attackTarget isn't a structure, iterate - - if (!(attackTarget instanceof Structure)) continue - - const structuresAtCoord = room.roomManager.structureCoords.get( - packCoord(attackTarget.pos), - ) - if ( - structuresAtCoord && - structuresAtCoord.find(ID => findObjectWithID(ID).structureType === STRUCTURE_SPAWN) - ) - return true - - if (safemodeTargets.includes(attackTarget.structureType)) return true - } - - return false */ } private isSafe() {} @@ -145,7 +107,7 @@ export class DefenceManager { const planData = rampartPlans.getXY(coord.x, coord.y) if (planData) { // Filter out non-mincut ramparts - if (planData.buildForNuke || planData.coversStructure) return true + if (planData.buildForNuke || planData.coversStructure || planData.buildForThreat) return true // Don't flood past mincut ramparts return false } @@ -378,31 +340,34 @@ export class DefenceManager { if (!room.towerInferiority) return false - let presentThreat = 0 - this.threatByPlayers = new Map() + const presentThreat: PresentThreat = { + total: 0, + byPlayers: {} + } for (const enemyCreep of room.roomManager.enemyAttackers) { - let threat = 0 + let creepThreat = 0 + + creepThreat += enemyCreep.combatStrength.dismantle + creepThreat += enemyCreep.combatStrength.melee * 1.2 + creepThreat += enemyCreep.combatStrength.ranged * 3.5 - threat += enemyCreep.combatStrength.dismantle - threat += enemyCreep.combatStrength.melee * 1.2 - threat += enemyCreep.combatStrength.ranged * 3.5 + creepThreat += enemyCreep.combatStrength.heal / enemyCreep.defenceStrength - threat += enemyCreep.combatStrength.heal / enemyCreep.defenceStrength + creepThreat = Math.floor(creepThreat) - threat = Math.floor(threat) - presentThreat += threat + presentThreat.total += creepThreat const playerName = enemyCreep.owner.username if (playerName === 'Invader') continue - const threatByPlayer = this.threatByPlayers.get(enemyCreep.owner.username) - if (threatByPlayer) { - this.threatByPlayers.set(playerName, threatByPlayer + threat) + const playerThreat = presentThreat.byPlayers[enemyCreep.owner.username] + if (playerThreat) { + presentThreat.byPlayers[playerName] = playerThreat + creepThreat continue } - this.threatByPlayers.set(playerName, threat) + presentThreat.byPlayers[playerName] = creepThreat } return presentThreat @@ -427,15 +392,16 @@ export class DefenceManager { roomMemory[RoomMemoryKeys.threatened] = Math.max( roomMemory[RoomMemoryKeys.threatened], - presentThreat, + presentThreat.total, playerManager.highestThreat / 3, ) - for (const [playerName, threat] of this.threatByPlayers) { - let player = Memory.players[playerName] + for (const playerName in presentThreat.byPlayers) { + const threat = presentThreat.byPlayers[playerName] + const player = Memory.players[playerName] if (!player) { - player = playerManager.initPlayer(playerName) + playerManager.initPlayer(playerName) } player[PlayerMemoryKeys.offensiveThreat] = Math.max( @@ -450,3 +416,8 @@ export class DefenceManager { return } } + +interface PresentThreat { + total: number + byPlayers: {[playerName: string]: number} +} diff --git a/src/room/commune/nuker.ts b/src/room/commune/nuker.ts index 0edccf717..22b87a8fc 100644 --- a/src/room/commune/nuker.ts +++ b/src/room/commune/nuker.ts @@ -1,16 +1,15 @@ import { NukeRequestKeys, Result, RoomLogisticsRequestTypes, RoomMemoryKeys } from 'international/constants' import { scalePriority } from 'utils/utils' import { CommuneManager } from './commune' +import { roomObjectUtils } from 'room/roomObjectUtils' const nukerResources = [RESOURCE_ENERGY, RESOURCE_GHODIUM] export class NukerManager { communeManager: CommuneManager - nuker: StructureNuker constructor(communeManager: CommuneManager) { this.communeManager = communeManager - this.nuker = this.communeManager.room.roomManager.structures.nuker[0] } run() { @@ -18,26 +17,27 @@ export class NukerManager { const requestName = roomMemory[RoomMemoryKeys.nukeRequest] if (!requestName) return - if (!this.nuker) { + const nuker = this.communeManager.room.roomManager.nuker + if (!nuker) { return } - if (this.createRoomLogisticsRequests() === Result.action) return + if (this.createRoomLogisticsRequests(nuker) === Result.action) return const request = Memory.nukeRequests[requestName] - this.nuker.launchNuke( + nuker.launchNuke( new RoomPosition(request[NukeRequestKeys.x], request[NukeRequestKeys.y], requestName), ) } - private createRoomLogisticsRequests() { + private createRoomLogisticsRequests(nuker: StructureNuker) { let result = Result.noAction for (const resource of nukerResources) { - if (this.nuker.freeReserveStoreOf(resource) <= 0) continue + if (roomObjectUtils.freeReserveStoreOf(nuker, resource) <= 0) continue this.communeManager.room.createRoomLogisticsRequest({ - target: this.nuker, + target: nuker, type: RoomLogisticsRequestTypes.transfer, priority: 100, }) diff --git a/src/room/commune/towers.ts b/src/room/commune/towers.ts index 2a1688f36..11452beaf 100644 --- a/src/room/commune/towers.ts +++ b/src/room/commune/towers.ts @@ -315,7 +315,7 @@ export class TowerManager { this.communeManager.room.createRoomLogisticsRequest({ target: structure, maxAmount: structure.usedReserveStore - 100, - /* onlyFull: true, */ + onlyFull: true, type: RoomLogisticsRequestTypes.offer, priority: scalePriority( structure.store.getCapacity(RESOURCE_ENERGY), diff --git a/src/room/creeps/creepProcs.ts b/src/room/creeps/creepProcs.ts index 8a4ae87ab..008155475 100644 --- a/src/room/creeps/creepProcs.ts +++ b/src/room/creeps/creepProcs.ts @@ -17,6 +17,7 @@ import { RoomLogisticsTargets, } from 'types/roomRequests' import { customLog } from 'utils/logging' +import { roomObjectUtils } from 'room/roomObjectUtils' export class CreepProcs { advancedUpgradeController(creep: Creep) { @@ -408,18 +409,18 @@ export class CreepProcs { return } - // transfer requests - if (request[CreepLogisticsRequestKeys.type] === RoomLogisticsRequestTypes.transfer) { - this.updateTransferLogisticsRequest(creep, request) - return - } - // If pickup type if (target instanceof Resource) { this.updatePickupLogisticsRequest(creep, request, target) return } + // transfer requests + if (request[CreepLogisticsRequestKeys.type] === RoomLogisticsRequestTypes.transfer) { + this.updateTransferLogisticsRequest(creep, request, target) + return + } + // Withdraw or offer type this.updateWithdrawLogisticsRequest(creep, request, target) return @@ -429,23 +430,33 @@ export class CreepProcs { * * @returns false if the request was deleted */ - private updateTransferLogisticsRequest(creep: Creep, request: CreepLogisticsRequest) { + private updateTransferLogisticsRequest( + creep: Creep, + request: CreepLogisticsRequest, + target: RoomObject & { store: StoreDefinition }, + ) { const creepMemory = Memory.creeps[creep.name] - const target = findObjectWithID(request[CreepLogisticsRequestKeys.target]) // Delete the request if the target is fulfilled - if (target.freeNextStore < request[CreepLogisticsRequestKeys.amount]) { + const targetFreeNextStore = roomObjectUtils.freeNextStoreOf( + target, + request[CreepLogisticsRequestKeys.resourceType], + ) + if (targetFreeNextStore < request[CreepLogisticsRequestKeys.amount]) { if (Game.flags[FlagNames.debugCreepLogistics]) { - - creep.room.visual.text('❌TA1', creep.pos, { font: 0.2 }) + creep.room.visual.text( + '❌TA1 ' + targetFreeNextStore + '/' + request[CreepLogisticsRequestKeys.amount], + creep.pos, + { font: 0.2 }, + ) customLog( 'not enough free store', creep.name + ', ' + request[CreepLogisticsRequestKeys.target] + ', ' + - target.freeNextStore + + targetFreeNextStore + ' < ' + request[CreepLogisticsRequestKeys.amount], ) @@ -458,15 +469,20 @@ export class CreepProcs { request[CreepLogisticsRequestKeys.amount] = Math.min( Math.min( creep.nextStore[request[CreepLogisticsRequestKeys.resourceType]], - target.freeNextStore, + targetFreeNextStore, ), request[CreepLogisticsRequestKeys.amount], ) if (request[CreepLogisticsRequestKeys.amount] <= 0) { - if (Game.flags[FlagNames.debugCreepLogistics]) { - - creep.room.visual.text('❌TA2 ' + target.freeNextStore + ' ' + creep.nextStore[request[CreepLogisticsRequestKeys.resourceType]], creep.pos, { font: 0.2 }) + creep.room.visual.text( + '❌TA2 ' + + targetFreeNextStore + + ' ' + + creep.nextStore[request[CreepLogisticsRequestKeys.resourceType]], + creep.pos, + { font: 0.2 }, + ) customLog( 'not enough amount', creep.name + @@ -499,11 +515,15 @@ export class CreepProcs { target: Resource, ) { const creepMemory = Memory.creeps[creep.name] + const creepFreeNextStore = roomObjectUtils.freeNextStoreOf( + creep, + request[CreepLogisticsRequestKeys.resourceType], + ) // Update in accordance to potential resource decay request[CreepLogisticsRequestKeys.amount] = Math.min( - Math.min(creep.freeNextStore, target.nextAmount), + Math.min(creepFreeNextStore, target.nextAmount), request[CreepLogisticsRequestKeys.amount], ) if (request[CreepLogisticsRequestKeys.amount] <= 0) { @@ -538,9 +558,10 @@ export class CreepProcs { return false } + const creepFreeNextStore = roomObjectUtils.freeNextStoreOf(creep, request[CreepLogisticsRequestKeys.resourceType]) request[CreepLogisticsRequestKeys.amount] = Math.min( Math.min( - creep.freeNextStore, + creepFreeNextStore, target.nextStore[request[CreepLogisticsRequestKeys.resourceType]], ), request[CreepLogisticsRequestKeys.amount], @@ -586,8 +607,9 @@ export class CreepProcs { if (target instanceof Resource) { // Update in accordance to potential resource decay + const creepFreeNextStore = roomObjectUtils.freeNextStoreOf(creep, request[CreepLogisticsRequestKeys.resourceType]) request[CreepLogisticsRequestKeys.amount] = Math.min( - Math.min(creep.freeNextStore, target.nextAmount), + Math.min(creepFreeNextStore, target.nextAmount), request[CreepLogisticsRequestKeys.amount], ) if (request[CreepLogisticsRequestKeys.amount] <= 0) { @@ -624,9 +646,10 @@ export class CreepProcs { return false } + const creepFreeNextStore = roomObjectUtils.freeNextStoreOf(creep, request[CreepLogisticsRequestKeys.resourceType]) request[CreepLogisticsRequestKeys.amount] = Math.min( Math.min( - creep.freeNextStore, + creepFreeNextStore, target.nextStore[request[CreepLogisticsRequestKeys.resourceType]], ), request[CreepLogisticsRequestKeys.amount], diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index 50cd85094..4e2c10dc8 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -62,6 +62,7 @@ import { customLog, stringifyLog } from 'utils/logging' import { customPathFinder } from 'international/customPathFinder' import { communeUtils } from 'room/commune/communeUtils' import { myCreepUtils } from '../myCreepUtils' +import { roomObjectUtils } from 'room/roomObjectUtils' Creep.prototype.update = function () {} @@ -1574,7 +1575,7 @@ Creep.prototype.findRoomLogisticRequestAmount = function (request) { if (request.delivery) { // Take extra energy in case its needed -/* if (request.resourceType === RESOURCE_ENERGY) { + /* if (request.resourceType === RESOURCE_ENERGY) { return this.nextStore[request.resourceType] + this.freeNextStore } */ @@ -1869,9 +1870,10 @@ Creep.prototype.findCreepRoomLogisticsRequestAmount = function ( if (type === RoomLogisticsRequestTypes.transfer) { // Delete the request if the target is fulfilled - if (target.freeNextStore < amount) return 0 + const targetFreeReserveStore = roomObjectUtils.freeNextStoreOf(target, resourceType) + if (targetFreeReserveStore < amount) return 0 - amount = Math.min(Math.min(this.nextStore[resourceType], target.freeNextStore), amount) + amount = Math.min(Math.min(this.nextStore[resourceType], targetFreeReserveStore), amount) if (amount <= 0) return amount target.reserveStore[resourceType] += amount diff --git a/src/room/creeps/roleManagers/commune/fastFiller.ts b/src/room/creeps/roleManagers/commune/fastFiller.ts index 0912c24b6..5395055a8 100644 --- a/src/room/creeps/roleManagers/commune/fastFiller.ts +++ b/src/room/creeps/roleManagers/commune/fastFiller.ts @@ -71,7 +71,7 @@ export class FastFiller extends Creep { // If the creep has a non-energy resource - if (this.usedStore() > this.store.energy) { + if (this.store.getUsedCapacity() > this.store.energy) { for (const resourceType in this.store) { if (resourceType == RESOURCE_ENERGY) continue @@ -103,7 +103,7 @@ export class FastFiller extends Creep { // If there is a non-energy resource in a container - if (structure.usedStore() > structure.store.energy) { + if (structure.store.getUsedCapacity() > structure.store.energy) { for (const key in structure.store) { const resourceType = key as ResourceConstant diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index e31560721..c893c8b16 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -63,6 +63,7 @@ import { playerManager } from 'international/players' import { roomNameUtils } from './roomNameUtils' import { customLog } from 'utils/logging' import { myCreepUtils } from './creeps/myCreepUtils' +import { roomObjectUtils } from './roomObjectUtils' /** @param pos1 pos of the object performing the action @@ -1663,7 +1664,7 @@ Room.prototype.createRoomLogisticsRequest = function (args) { ) return Result.fail - amount = args.target.freeReserveStoreOf(args.resourceType) + amount = roomObjectUtils.freeReserveStoreOf(args.target, args.resourceType) /* this.visual.text(args.target.reserveStore[args.resourceType].toString(), args.target.pos) */ } diff --git a/src/room/roomObjectFunctions.ts b/src/room/roomObjectFunctions.ts index ddb7be7a5..fa17244cb 100644 --- a/src/room/roomObjectFunctions.ts +++ b/src/room/roomObjectFunctions.ts @@ -1,18 +1,4 @@ -RoomObject.prototype.usedStore = function (this: RoomObject & { store?: StoreDefinition }, resourceType) { - if (!this.store) return 0 - - let amount = 0 - - if (resourceType) return this.store[resourceType] - - for (const type in this.store) amount += this.store[type as ResourceConstant] - - return amount -} - -RoomObject.prototype.freeStore = function (this: RoomObject & { store?: StoreDefinition }) { - return this.store.getCapacity() - this.usedStore() -} +import { separateStoreStructureTypes } from "international/constants" RoomObject.prototype.freeSpecificStore = function ( this: RoomObject & { store?: StoreDefinition }, @@ -20,28 +6,3 @@ RoomObject.prototype.freeSpecificStore = function ( ) { return this.store.getCapacity(resourceType) - this.store[resourceType] } - -RoomObject.prototype.freeNextStoreOf = function (this: RoomObject & { store?: StoreDefinition }, resourceType) { - return this.store.getCapacity(resourceType) - this.nextStore[resourceType] -} - -RoomObject.prototype.freeReserveStoreOf = function (this: RoomObject & { store?: StoreDefinition }, resourceType) { - - return this.store.getCapacity(resourceType) - this.reserveStore[resourceType] -} - -/* -RoomObject.prototype.usedNextStore = function (this: RoomObject & { store?: StoreDefinition }) { - let amount = 0 - for (const type in this.nextStore) amount += this.nextStore[type as ResourceConstant] - - return amount -} - -RoomObject.prototype.usedReserveStore = function (this: RoomObject & { store?: StoreDefinition }) { - let amount = 0 - for (const type in this.reserveStore) amount += this.reserveStore[type as ResourceConstant] - - return amount -} - */ diff --git a/src/room/roomObjectUtils.ts b/src/room/roomObjectUtils.ts new file mode 100644 index 000000000..7d3a139dc --- /dev/null +++ b/src/room/roomObjectUtils.ts @@ -0,0 +1,26 @@ +import { separateStoreStructureTypes } from "international/constants" + +export class RoomObjectUtils { + freeNextStoreOf(roomObject: RoomObject & { store: StoreDefinition }, resourceType: ResourceConstant) { + // If our storing system is like a lab, nuker, power spawn + if (roomObject instanceof Structure && separateStoreStructureTypes.has(roomObject.structureType)) { + return roomObject.store.getCapacity(resourceType) - roomObject.nextStore[resourceType] + } + + return roomObject.store.getCapacity(resourceType) - roomObject.usedNextStore + } + + freeReserveStoreOf( + roomObject: RoomObject & { store: StoreDefinition }, + resourceType: ResourceConstant, + ) { + // If our storing system is like a lab, nuker, power spawn + if (roomObject instanceof Structure && separateStoreStructureTypes.has(roomObject.structureType)) { + return roomObject.store.getCapacity(resourceType) - roomObject.reserveStore[resourceType] + } + + return roomObject.store.getCapacity(resourceType) - roomObject.usedReserveStore + } +} + +export const roomObjectUtils = new RoomObjectUtils() diff --git a/src/room/structureUtils.ts b/src/room/structureUtils.ts new file mode 100644 index 000000000..51d27972c --- /dev/null +++ b/src/room/structureUtils.ts @@ -0,0 +1,15 @@ +import { RoomMemoryKeys } from "international/constants" + +export class StructureUtils { + isRCLActionable(structure: Structure) { + if (structure._isRCLActionable !== undefined) return structure._isRCLActionable + + if (!structure.room.controller) return (structure._isRCLActionable = true) + if (Memory.rooms[structure.room.name][RoomMemoryKeys.greatestRCL] === structure.room.controller.level) + return (structure._isRCLActionable = true) + + return (structure._isRCLActionable = structure.isActive()) + } +} + +export const structureUtils = new StructureUtils() diff --git a/src/types.d.ts b/src/types.d.ts index 897e258cd..aacb7379e 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -1097,6 +1097,7 @@ declare global { /** * Wether the structure is disable or not by the room's controller level + * @deprecated use structureUtils.isRCLActionable(structure) instead */ readonly isRCLActionable: boolean } @@ -1131,27 +1132,12 @@ declare global { interface RoomObject { // Functions - /** - * Finds the present total store usage number of this RoomObject - * @param resourceType A resourceConstant to ensure proper querying of limit store RoomObjects - */ - usedStore(resourceType?: ResourceConstant): number - - /** - * Finds the total free store capacity of this RoomObject - * @param resourceType A resourceConstant to ensure proper querying of limit store RoomObjects - */ - freeStore(): number - /** * Finds the total free store capacity of a specific resource for this RoomObject + * @deprecated either create a util without a prototype or use your brain to do the math yourself */ freeSpecificStore(resourceType?: ResourceConstant): number - freeNextStoreOf(resourceType: ResourceConstant): number - - freeReserveStoreOf(resourceType: ResourceConstant): number - // RoomObject getters _effectsData: Map @@ -1187,6 +1173,7 @@ declare global { /** * Can be negative + * @deprecated not an accurate measurement when store.getCapacity() without a resource arg often returns null */ readonly freeNextStore: number @@ -1201,6 +1188,9 @@ declare global { readonly usedReserveStore: number + /** + * @deprecated not an accurate measurement when store.getCapacity() without a resource arg often returns null + */ readonly freeReserveStore: number _reservePowers: Set From c0200eb82ea1f6653d286967548d176e48d7d0e4 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 13 Jan 2024 19:10:57 -0800 Subject: [PATCH 075/190] remove deprecated isRCLActionable --- src/main.ts | 1 - src/room/commune/commune.ts | 9 +++++---- src/room/commune/communeUtils.ts | 5 +++-- src/room/commune/haulerNeed.ts | 9 +++++---- src/room/commune/links.ts | 15 ++++++++------- src/room/commune/remotesManager.ts | 3 ++- src/room/commune/spawning/spawnRequests.ts | 5 +++-- .../commune/spawning/spawningStructures.ts | 3 ++- src/room/commune/terminal/terminal.ts | 5 +++-- src/room/commune/towers.ts | 3 ++- src/room/creeps/creepAdditions.ts | 3 ++- src/room/creeps/creepProcs.ts | 3 ++- .../creeps/creepPrototypes/creepFunctions.ts | 5 +++-- .../creeps/roleManagers/commune/fastFiller.ts | 11 ++++++----- .../creeps/roleManagers/commune/hauler.ts | 3 ++- .../roleManagers/commune/sourceHarvester.ts | 3 ++- src/room/room.ts | 5 +++-- src/room/structureAdditions.ts | 19 ------------------- src/room/structureUtils.ts | 8 ++++---- src/types.d.ts | 8 +++----- 20 files changed, 60 insertions(+), 66 deletions(-) delete mode 100644 src/room/structureAdditions.ts diff --git a/src/main.ts b/src/main.ts index 2044c5a5a..31fe31f72 100644 --- a/src/main.ts +++ b/src/main.ts @@ -7,7 +7,6 @@ import { roomsManager } from 'room/rooms' import './room/resourceAdditions' import './room/roomObjectFunctions' import './room/roomObjectAdditions' -import './room/structureAdditions' import './room/creeps/creepAdditions' import './other/profilerRegister' import { memHack } from 'other/memHack' diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index 1f61f5136..7ec4d6f5a 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -56,6 +56,7 @@ import { roomNameUtils } from 'room/roomNameUtils' import { LogTypes, customLog } from 'utils/logging' import { communeUtils } from './communeUtils' import { communeProcs } from './communeProcs' +import { structureUtils } from 'room/structureUtils' export type ResourceTargets = { min: Partial<{ [key in ResourceConstant]: number }> @@ -613,10 +614,10 @@ export class CommuneManager { // We can use links const controllerLink = this.controllerLink - if (!controllerLink || !controllerLink.isRCLActionable) return false + if (!controllerLink || ! structureUtils.isRCLActionable(controllerLink)) return false const hubLink = this.room.roomManager.hubLink - if (!hubLink || !hubLink.isRCLActionable) return false + if (!hubLink || !structureUtils.isRCLActionable(hubLink)) return false return (this._upgradeStructure = controllerLink) } @@ -786,7 +787,7 @@ export class CommuneManager { let fastFillerSpawnEnergyCapacity = 0 for (const structure of this.actionableSpawningStructures) { - if (!structure.isRCLActionable) continue + if (!structureUtils.isRCLActionable(structure)) continue // Outside of the fastFiller if (getRange(structure.pos, anchor) > 2) continue @@ -815,7 +816,7 @@ export class CommuneManager { let actionableSpawningStructures: SpawningStructures = structures.spawn actionableSpawningStructures = actionableSpawningStructures.concat(structures.extension) actionableSpawningStructures = actionableSpawningStructures.filter( - structure => structure.isRCLActionable, + structure => structureUtils.isRCLActionable(structure), ) this.actionableSpawningStructuresIDs = actionableSpawningStructures.map( diff --git a/src/room/commune/communeUtils.ts b/src/room/commune/communeUtils.ts index 7407db042..736854737 100644 --- a/src/room/commune/communeUtils.ts +++ b/src/room/commune/communeUtils.ts @@ -11,6 +11,7 @@ import { } from 'international/constants' import { collectiveManager } from "international/collective" import { roomUtils } from "room/roomUtils" +import { structureUtils } from "room/structureUtils" export class CommuneUtils { getGeneralRepairStructures(room: Room) { @@ -160,7 +161,7 @@ export class CommuneUtils { maxUpgradeStrength = 0 - if (hubLink && hubLink.isRCLActionable) { + if (hubLink && structureUtils.isRCLActionable(hubLink)) { // Add a bit of extra range because of inherent limitations of withdrawing and transferring const range = getRange(upgradeStructure.pos, hubLink.pos) + 3 @@ -172,7 +173,7 @@ export class CommuneUtils { const sourceLink = sourceLinks[i] if (!sourceLink) continue - if (!sourceLink.isRCLActionable) continue + if (!structureUtils.isRCLActionable(sourceLink)) continue const range = getRange(sourceLink.pos, upgradeStructure.pos) diff --git a/src/room/commune/haulerNeed.ts b/src/room/commune/haulerNeed.ts index bc9e911f4..ca320606c 100644 --- a/src/room/commune/haulerNeed.ts +++ b/src/room/commune/haulerNeed.ts @@ -3,6 +3,7 @@ import { customLog } from 'utils/logging' import { findCarryPartsRequired } from 'utils/utils' import { CommuneManager } from './commune' import { communeUtils } from './communeUtils' +import { structureUtils } from 'room/structureUtils' export class HaulerNeedManager { communeManager: CommuneManager @@ -48,12 +49,12 @@ export class HaulerNeedManager { const estimatedSourceIncome = communeUtils.getEstimatedSourceIncome(room) const hubLink = room.roomManager.hubLink - if (hubLink && hubLink.isRCLActionable) { + if (hubLink && structureUtils.isRCLActionable(hubLink)) { // There is a valid hubLink for (let index in room.find(FIND_SOURCES)) { const sourceLink = room.communeManager.sourceLinks[index] - if (sourceLink && sourceLink.isRCLActionable) continue + if (sourceLink && structureUtils.isRCLActionable(sourceLink)) continue this.communeManager.communeHaulerNeed += findCarryPartsRequired( packedSourcePaths[index].length / packedPosLength + 3, @@ -96,11 +97,11 @@ export class HaulerNeedManager { private controllerNeedLink() { const controllerLink = this.communeManager.controllerLink - if (!controllerLink || !controllerLink.isRCLActionable) return + if (!controllerLink || !structureUtils.isRCLActionable(controllerLink)) return const hubLink = this.communeManager.room.roomManager.hubLink // No need to haul if there is a valid hubLink - if (hubLink && hubLink.isRCLActionable) return + if (hubLink && structureUtils.isRCLActionable(hubLink)) return // There is a viable controllerLink but we need to haul to it diff --git a/src/room/commune/links.ts b/src/room/commune/links.ts index 374d82951..aad9a8d36 100644 --- a/src/room/commune/links.ts +++ b/src/room/commune/links.ts @@ -5,6 +5,7 @@ import { } from 'international/constants' import { customLog } from 'utils/logging' import { CommuneManager } from './commune' +import { structureUtils } from 'room/structureUtils' export class LinkManager { communeManager: CommuneManager @@ -20,7 +21,7 @@ export class LinkManager { if (!this.communeManager.room.storage && !this.communeManager.room.terminal) { const controllerLink = this.communeManager.controllerLink - if (!controllerLink || !controllerLink.isRCLActionable) return + if (!controllerLink || !structureUtils.isRCLActionable(controllerLink)) return this.createControllerLinkRoomLogisticsRequest(controllerLink) return @@ -31,14 +32,14 @@ export class LinkManager { } private sourcesToReceivers() { - const sourceLinks = this.communeManager.room.communeManager.sourceLinks.filter(link => link && link.isRCLActionable) + const sourceLinks = this.communeManager.room.communeManager.sourceLinks.filter(link => link && structureUtils.isRCLActionable(link)) if (!sourceLinks.length) return let receiverLinks = [ this.communeManager.room.roomManager.fastFillerLink, this.communeManager.room.roomManager.hubLink, this.communeManager.controllerLink, - ].filter(link => link && link.isRCLActionable) + ].filter(link => link && structureUtils.isRCLActionable(link)) if (!receiverLinks.length) return @@ -82,10 +83,10 @@ export class LinkManager { private hubToFastFiller() { const fastFillerLink = this.communeManager.room.roomManager.fastFillerLink - if (!fastFillerLink || !fastFillerLink.isRCLActionable) return + if (!fastFillerLink || !structureUtils.isRCLActionable(fastFillerLink)) return const hubLink = this.communeManager.room.roomManager.hubLink - if (!hubLink || !hubLink.isRCLActionable) { + if (!hubLink || !structureUtils.isRCLActionable(hubLink)) { this.createFastFillerLinkRoomLogisticsRequest(fastFillerLink) return @@ -131,10 +132,10 @@ export class LinkManager { private hubToController() { const controllerLink = this.communeManager.controllerLink - if (!controllerLink || !controllerLink.isRCLActionable) return + if (!controllerLink || !structureUtils.isRCLActionable(controllerLink)) return const hubLink = this.communeManager.room.roomManager.hubLink - if (!hubLink || !hubLink.isRCLActionable) { + if (!hubLink || !structureUtils.isRCLActionable(hubLink)) { this.createControllerLinkRoomLogisticsRequest(controllerLink) return } diff --git a/src/room/commune/remotesManager.ts b/src/room/commune/remotesManager.ts index e086d4b0d..d5a287b4c 100644 --- a/src/room/commune/remotesManager.ts +++ b/src/room/commune/remotesManager.ts @@ -20,6 +20,7 @@ import { import { unpackPosList } from 'other/codec' import { CommuneManager } from './commune' import { roomNameUtils } from 'room/roomNameUtils' +import { structureUtils } from 'room/structureUtils' type RemoteSourcePathTypes = | RoomMemoryKeys.remoteSourceFastFillerPaths @@ -53,7 +54,7 @@ export class RemotesManager { private updateRemoteResourcePathType() { if (this.communeManager.remoteResourcePathType !== undefined && !randomTick()) return - if (this.communeManager.room.storage && this.communeManager.room.storage.isRCLActionable) { + if (this.communeManager.room.storage && structureUtils.isRCLActionable(this.communeManager.room.storage)) { this.communeManager.remoteResourcePathType = RoomMemoryKeys.remoteSourceHubPaths return } diff --git a/src/room/commune/spawning/spawnRequests.ts b/src/room/commune/spawning/spawnRequests.ts index 339550683..8510c7524 100644 --- a/src/room/commune/spawning/spawnRequests.ts +++ b/src/room/commune/spawning/spawnRequests.ts @@ -28,6 +28,7 @@ import { SpawnRequest, SpawnRequestArgs, SpawnRequestTypes } from 'types/spawnRe import { spawnUtils } from './spawnUtils' import { SpawnRequestConstructor, spawnRequestConstructors } from './spawnRequestConstructors' import { communeUtils } from '../communeUtils' +import { structureUtils } from 'room/structureUtils' export class SpawnRequestsManager { communeManager: CommuneManager @@ -362,7 +363,7 @@ export class SpawnRequestsManager { if ( (!this.communeManager.room.roomManager.hubLink || this.communeManager.room.roomManager.structures.link.length < 2) && - (!this.communeManager.room.terminal || !this.communeManager.room.terminal.isRCLActionable) + (!this.communeManager.room.terminal || !structureUtils.isRCLActionable(this.communeManager.room.terminal)) ) return false @@ -975,7 +976,7 @@ export class SpawnRequestsManager { const controllerLink = this.communeManager.controllerLink const maxCreeps = - controllerLink && controllerLink.isRCLActionable + controllerLink && structureUtils.isRCLActionable(controllerLink) ? this.communeManager.room.roomManager.upgradePositions.length : this.communeManager.room.roomManager.upgradePositions.length - 1 diff --git a/src/room/commune/spawning/spawningStructures.ts b/src/room/commune/spawning/spawningStructures.ts index a449734c6..2ca121b90 100644 --- a/src/room/commune/spawning/spawningStructures.ts +++ b/src/room/commune/spawning/spawningStructures.ts @@ -20,6 +20,7 @@ import { spawnUtils } from './spawnUtils' import { Dashboard, Rectangle, Table } from 'screeps-viz' import { BodyPartCounts, SpawnRequest, SpawnRequestArgs, SpawnRequestTypes } from 'types/spawnRequest' import { SpawnRequestConstructor, spawnRequestConstructors } from './spawnRequestConstructors' +import { structureUtils } from 'room/structureUtils' export const spawnRequestConstructorsByType: {[key in SpawnRequestTypes]: SpawnRequestConstructor } = { [SpawnRequestTypes.individualUniform]: spawnRequestConstructors.spawnRequestIndividualUniform, @@ -51,7 +52,7 @@ export class SpawningStructuresManager { for (const spawn of spawns) { if (spawn.renewed) continue - if (!spawn.isRCLActionable) continue + if (!structureUtils.isRCLActionable(spawn)) continue if (spawn.spawning) { const creep = Game.creeps[spawn.spawning.name] diff --git a/src/room/commune/terminal/terminal.ts b/src/room/commune/terminal/terminal.ts index 34dfffaf1..ceb4722ea 100644 --- a/src/room/commune/terminal/terminal.ts +++ b/src/room/commune/terminal/terminal.ts @@ -11,6 +11,7 @@ import { collectiveManager } from 'international/collective' import { CommuneManager, ResourceTargets } from 'room/commune/commune' import { tradingUtils } from './tradingUtils' import { marketManager } from 'international/market/marketOrders' +import { structureUtils } from 'room/structureUtils' export class TerminalManager { communeManager: CommuneManager @@ -24,7 +25,7 @@ export class TerminalManager { preTickRun() { const room = this.communeManager.room if (!room.terminal) return - if (!room.terminal.isRCLActionable) return + if (!structureUtils.isRCLActionable(room.terminal)) return const resourceTargets = this.communeManager.resourceTargets @@ -36,7 +37,7 @@ export class TerminalManager { // Stop if there is no terminal if (!room.terminal) return - if (!room.terminal.isRCLActionable) return + if (!structureUtils.isRCLActionable(room.terminal)) return if (room.terminal.cooldown > 0) return const resourceTargets = this.communeManager.resourceTargets diff --git a/src/room/commune/towers.ts b/src/room/commune/towers.ts index 11452beaf..e81f6fb23 100644 --- a/src/room/commune/towers.ts +++ b/src/room/commune/towers.ts @@ -21,6 +21,7 @@ import { packCoord } from 'other/codec' import { CommuneManager } from './commune' import { playerManager } from 'international/players' import { communeUtils } from './communeUtils' +import { structureUtils } from 'room/structureUtils' const minTowerRampartRepairTreshold = RAMPART_DECAY_AMOUNT * 1.5 @@ -35,7 +36,7 @@ export class TowerManager { run() { const { room } = this.communeManager - const towers = room.roomManager.structures.tower.filter(tower => tower.isRCLActionable) + const towers = room.roomManager.structures.tower.filter(tower => structureUtils.isRCLActionable(tower)) if (!towers.length) { room.towerInferiority = room.roomManager.notMyCreeps.enemy.length > 0 return diff --git a/src/room/creeps/creepAdditions.ts b/src/room/creeps/creepAdditions.ts index a39cca7d2..234286a76 100644 --- a/src/room/creeps/creepAdditions.ts +++ b/src/room/creeps/creepAdditions.ts @@ -11,6 +11,7 @@ import { getRangeXY, getRange, isXYExit, isExit } from 'utils/utils' import { profiler } from 'other/profiler' import { towerFunctions } from 'room/commune/towers' import { creepUtils } from './creepUtils' +import { structureUtils } from 'room/structureUtils' Object.defineProperties(Creep.prototype, { nameData: { @@ -360,7 +361,7 @@ const additions = { this._grossTowerDamage = 0 for (const tower of this.room.roomManager.structures.tower) { - if (!tower.isRCLActionable) continue + if (!structureUtils.isRCLActionable(tower)) continue if (tower.store.getUsedCapacity(RESOURCE_ENERGY) < TOWER_ENERGY_COST) continue this._grossTowerDamage = towerFunctions.estimateDamageGross(tower, this.pos) diff --git a/src/room/creeps/creepProcs.ts b/src/room/creeps/creepProcs.ts index 008155475..f595572a3 100644 --- a/src/room/creeps/creepProcs.ts +++ b/src/room/creeps/creepProcs.ts @@ -18,6 +18,7 @@ import { } from 'types/roomRequests' import { customLog } from 'utils/logging' import { roomObjectUtils } from 'room/roomObjectUtils' +import { structureUtils } from 'room/structureUtils' export class CreepProcs { advancedUpgradeController(creep: Creep) { @@ -31,7 +32,7 @@ export class CreepProcs { creep.room.roomManager.controllerContainer const controllerLink = creep.room.communeManager.controllerLink - if (!controllerStructure && controllerLink && controllerLink.isRCLActionable) + if (!controllerStructure && controllerLink && structureUtils.isRCLActionable(controllerLink)) controllerStructure = controllerLink // If there is a controllerContainer diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index 4e2c10dc8..55c13d8c5 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -63,6 +63,7 @@ import { customPathFinder } from 'international/customPathFinder' import { communeUtils } from 'room/commune/communeUtils' import { myCreepUtils } from '../myCreepUtils' import { roomObjectUtils } from 'room/roomObjectUtils' +import { structureUtils } from 'room/structureUtils' Creep.prototype.update = function () {} @@ -737,7 +738,7 @@ Creep.prototype.hasNonEnergyResource = function () { Creep.prototype.findRecycleTarget = function () { const { room } = this - const spawns = room.roomManager.structures.spawn.filter(spawn => spawn.isRCLActionable) + const spawns = room.roomManager.structures.spawn.filter(spawn => structureUtils.isRCLActionable(spawn)) if (!spawns.length) return false @@ -875,7 +876,7 @@ Creep.prototype.passiveRenew = function () { getRangeXY(this.pos.x, spawn.pos.x, this.pos.y, spawn.pos.y) === 1 && !spawn.renewed && !spawn.spawning && - spawn.isRCLActionable, + structureUtils.isRCLActionable(spawn), ) if (!spawn) return diff --git a/src/room/creeps/roleManagers/commune/fastFiller.ts b/src/room/creeps/roleManagers/commune/fastFiller.ts index 5395055a8..a9886235a 100644 --- a/src/room/creeps/roleManagers/commune/fastFiller.ts +++ b/src/room/creeps/roleManagers/commune/fastFiller.ts @@ -1,6 +1,7 @@ import { CreepMemoryKeys, ReservedCoordTypes } from 'international/constants' import { findClosestPos, getRangeXY, getRange } from 'utils/utils' import { packCoord, packPos, unpackCoord, unpackCoordAsPos, unpackPos } from 'other/codec' +import { structureUtils } from 'room/structureUtils' export class FastFiller extends Creep { update() { @@ -128,19 +129,19 @@ export class FastFiller extends Creep { } let fastFillerStoringStructures: (StructureContainer | StructureLink)[] = [] - if (room.roomManager.fastFillerLink && room.roomManager.fastFillerLink.isRCLActionable) - fastFillerStoringStructures.push(room.roomManager.fastFillerLink) + + const fastFillerLink = room.roomManager.fastFillerLink + if (fastFillerLink && structureUtils.isRCLActionable(fastFillerLink)) + fastFillerStoringStructures.push(fastFillerLink) fastFillerStoringStructures = fastFillerStoringStructures.concat(fastFillerContainers) - // Loop through each fastFillerStoringStructure + // Find a storing structure to get energy from for (const structure of fastFillerStoringStructures) { // Otherwise, if the structure is not in range 1 to the this - if (getRange(this.pos, structure.pos) > 1) continue // If there is a non-energy resource in the structure - if (structure.nextStore.energy <= 0) continue // Otherwise, withdraw from the structure and inform true diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index 3a47b9826..015827045 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -15,6 +15,7 @@ import { import { statsManager } from 'international/statsManager' import { packCoord, reversePosList, unpackCoord, unpackPosAt } from 'other/codec' import { myCreepUtils } from 'room/creeps/myCreepUtils' +import { structureUtils } from 'room/structureUtils' import { findObjectWithID, getRange, @@ -85,7 +86,7 @@ export class Hauler extends Creep { getRangeXY(this.pos.x, spawn.pos.x, this.pos.y, spawn.pos.y) === 1 && !spawn.renewed && !spawn.spawning && - spawn.isRCLActionable, + structureUtils.isRCLActionable(spawn), ) if (!spawn) return diff --git a/src/room/creeps/roleManagers/commune/sourceHarvester.ts b/src/room/creeps/roleManagers/commune/sourceHarvester.ts index 407fd2653..6677ea451 100644 --- a/src/room/creeps/roleManagers/commune/sourceHarvester.ts +++ b/src/room/creeps/roleManagers/commune/sourceHarvester.ts @@ -20,6 +20,7 @@ import { packCoord, packPos, reversePosList, unpackPos } from 'other/codec' import { Hauler } from './hauler' import { creepUtils } from 'room/creeps/creepUtils' import { myCreepUtils } from 'room/creeps/myCreepUtils' +import { structureUtils } from 'room/structureUtils' export class SourceHarvester extends Creep { constructor(creepID: Id) { @@ -279,7 +280,7 @@ export class SourceHarvester extends Creep { const sourceLink = this.room.communeManager.sourceLinks[this.memory[CreepMemoryKeys.sourceIndex]] - if (sourceLink && sourceLink.isRCLActionable) return false + if (sourceLink && structureUtils.isRCLActionable(sourceLink)) return false // If the creep isn't full enough to justify a request diff --git a/src/room/room.ts b/src/room/room.ts index 6579721c5..69283ab13 100644 --- a/src/room/room.ts +++ b/src/room/room.ts @@ -67,6 +67,7 @@ import { PathGoal, customPathFinder } from 'international/customPathFinder' import { roomNameUtils } from './roomNameUtils' import { collectiveManager } from 'international/collective' import { customLog } from 'utils/logging' +import { structureUtils } from './structureUtils' export interface InterpretedRoomEvent { eventType: EventConstant @@ -1404,7 +1405,7 @@ export class RoomManager { const structureCoords = this.structureCoords const fastFillerLink = this.fastFillerLink - const sufficientLink = fastFillerLink && fastFillerLink.isRCLActionable + const sufficientLink = fastFillerLink && structureUtils.isRCLActionable(fastFillerLink) for (const pos of rawFastFillerPositions) { const adjacentStructuresOfTypes: Partial> = { @@ -2222,7 +2223,7 @@ export class RoomManager { for (const structure of storingStructures) { if (!structure) continue - if (!structure.isRCLActionable) continue + if (!structureUtils.isRCLActionable(structure)) continue for (const key in structure.store) { const resourceType = key as ResourceConstant diff --git a/src/room/structureAdditions.ts b/src/room/structureAdditions.ts deleted file mode 100644 index baac90d94..000000000 --- a/src/room/structureAdditions.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { RoomMemoryKeys } from "international/constants" - -Object.defineProperties(Structure.prototype, { - /** - * Credits to Tigga for the foundation - * Improved by MarvinTMB / Carson - */ - isRCLActionable: { - get() { - if (this._isRCLActionable !== undefined) return this._isRCLActionable - - if (!this.room.controller) return (this._isRCLActionable = true) - if (Memory.rooms[this.room.name][RoomMemoryKeys.greatestRCL] === this.room.controller.level) - return (this._isRCLActionable = true) - - return (this._isRCLActionable = this.isActive()) - }, - }, -} as PropertyDescriptorMap & ThisType) diff --git a/src/room/structureUtils.ts b/src/room/structureUtils.ts index 51d27972c..887db542b 100644 --- a/src/room/structureUtils.ts +++ b/src/room/structureUtils.ts @@ -2,13 +2,13 @@ import { RoomMemoryKeys } from "international/constants" export class StructureUtils { isRCLActionable(structure: Structure) { - if (structure._isRCLActionable !== undefined) return structure._isRCLActionable + if (structure.isRCLActionable !== undefined) return structure.isRCLActionable - if (!structure.room.controller) return (structure._isRCLActionable = true) + if (!structure.room.controller) return (structure.isRCLActionable = true) if (Memory.rooms[structure.room.name][RoomMemoryKeys.greatestRCL] === structure.room.controller.level) - return (structure._isRCLActionable = true) + return (structure.isRCLActionable = true) - return (structure._isRCLActionable = structure.isActive()) + return (structure.isRCLActionable = structure.isActive()) } } diff --git a/src/types.d.ts b/src/types.d.ts index aacb7379e..15e5f7a02 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -1093,13 +1093,11 @@ declare global { interface Structure { // Getters - _isRCLActionable: boolean - /** - * Wether the structure is disable or not by the room's controller level - * @deprecated use structureUtils.isRCLActionable(structure) instead + * Wether the structure is disabled or not by the room's downgraded controller level + * @method structureUtils.isRCLActionable(structure) */ - readonly isRCLActionable: boolean + isRCLActionable: boolean } interface StructureSpawn { From 2a84812fc07efac559e5307bd76ccbd63f864969 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 13 Jan 2024 21:02:47 -0800 Subject: [PATCH 076/190] manager -> proc util pair migration work towers, dropped resources, container, ruins, tombstones --- src/international/constants.ts | 2111 ++++++------- src/international/requests.ts | 32 +- src/other/profilerRegister.ts | 20 +- src/room/commune/combatRequest.ts | 377 +-- src/room/commune/commune.ts | 15 +- src/room/commune/communeData.ts | 2 + src/room/commune/communeProcs.ts | 1 + src/room/commune/haulRequestManager.ts | 204 +- src/room/commune/remotesManager.ts | 723 +++-- src/room/commune/towerProcs.ts | 247 ++ src/room/commune/towerUtils.ts | 113 + src/room/commune/towers.ts | 385 --- src/room/commune/workRequest.ts | 297 +- src/room/construction/communePlanner.ts | 4 +- src/room/container.ts | 125 - src/room/creeps/creepAdditions.ts | 4 +- src/room/droppedResources.ts | 39 - src/room/logisticsProcs.ts | 200 ++ src/room/logisticsUtils.ts | 5 + src/room/remotePlanner.ts | 4 +- src/room/remoteProcs.ts | 7 + src/room/remoteUtils.ts | 5 + src/room/room.ts | 3614 +++++++++++------------ src/room/roomNameUtils.ts | 498 ++-- src/room/ruins.ts | 45 - src/room/tombstones.ts | 45 - src/types.d.ts | 3 + src/utils/utils.ts | 16 - 28 files changed, 4541 insertions(+), 4600 deletions(-) create mode 100644 src/room/commune/towerProcs.ts create mode 100644 src/room/commune/towerUtils.ts delete mode 100644 src/room/commune/towers.ts delete mode 100644 src/room/container.ts delete mode 100644 src/room/droppedResources.ts create mode 100644 src/room/logisticsProcs.ts create mode 100644 src/room/logisticsUtils.ts create mode 100644 src/room/remoteProcs.ts create mode 100644 src/room/remoteUtils.ts delete mode 100644 src/room/ruins.ts delete mode 100644 src/room/tombstones.ts diff --git a/src/international/constants.ts b/src/international/constants.ts index 055eb667e..dc1637c18 100644 --- a/src/international/constants.ts +++ b/src/international/constants.ts @@ -4,112 +4,112 @@ import { CommuneManager } from 'room/commune/commune' import { randomIntRange } from 'utils/utils' export enum PlayerRelationships { - ally, - enemy, - noAggression + ally, + enemy, + noAggression, } export enum PlayerMemoryKeys { - /** - * Generally how good their offense is - */ - offensiveThreat, - /** - * Generally how good their defense is - */ - defensiveStrength, - /** - * How much we want them dead - */ - hate, - /** - * The last time we were attacked by them - */ - lastAttackedBy, - /** - * the positive, non-zero value for which to weight enemy exit retreat threat - */ - rangeFromExitWeight, - relationship, - /** - * The positive reputation we've determined for the player. - * Effects response to ally requests and such - */ - reputation, - /** - * The last time this player was seen. Used for garbage collection, to remove old players - */ - lastSeen, + /** + * Generally how good their offense is + */ + offensiveThreat, + /** + * Generally how good their defense is + */ + defensiveStrength, + /** + * How much we want them dead + */ + hate, + /** + * The last time we were attacked by them + */ + lastAttackedBy, + /** + * the positive, non-zero value for which to weight enemy exit retreat threat + */ + rangeFromExitWeight, + relationship, + /** + * The positive reputation we've determined for the player. + * Effects response to ally requests and such + */ + reputation, + /** + * The last time this player was seen. Used for garbage collection, to remove old players + */ + lastSeen, } export const playerDecayKeys = new Set([ - PlayerMemoryKeys.offensiveThreat, - PlayerMemoryKeys.defensiveStrength, - PlayerMemoryKeys.hate, + PlayerMemoryKeys.offensiveThreat, + PlayerMemoryKeys.defensiveStrength, + PlayerMemoryKeys.hate, ]) export enum WorkRequestKeys { - claimer, - vanguard, - abandon, - responder, - priority, - allyVanguard, - forAlly, - hauler, + claimer, + vanguard, + abandon, + responder, + priority, + allyVanguard, + forAlly, + hauler, } export enum HaulRequestKeys { - type, - distance, - timer, - priority, - abandon, - responder, + type, + distance, + timer, + priority, + abandon, + responder, } export enum NukeRequestKeys { - x, - y, - responder, - priority, + x, + y, + responder, + priority, } export enum DepositRequestKeys { - depositHarvester, - depositHauler, - abandon, - responder, - /** - * The type of resource the deposit provides - */ - type, + depositHarvester, + depositHauler, + abandon, + responder, + /** + * The type of resource the deposit provides + */ + type, } export enum CombatRequestKeys { - abandon, - rangedAttack, - attack, - dismantle, - downgrade, - minDamage, - minMeleeHeal, - minRangedHeal, - maxTowerDamage, - quads, - priority, - quadQuota, - inactionTimerMax, - inactionTimer, - maxThreat, - abandonments, - /** - * The type of attack request - */ - type, - responder, - dynamicSquads, - dynamicSquadQuota + abandon, + rangedAttack, + attack, + dismantle, + downgrade, + minDamage, + minMeleeHeal, + minRangedHeal, + maxTowerDamage, + quads, + priority, + quadQuota, + inactionTimerMax, + inactionTimer, + maxThreat, + abandonments, + /** + * The type of attack request + */ + type, + responder, + dynamicSquads, + dynamicSquadQuota, } export enum CreepLogisticsRequestKeys { @@ -126,227 +126,278 @@ export enum CreepLogisticsRequestKeys { } export enum RoomLogisticsRequestTypes { - /** - * Asks for resources to be transferred - */ - transfer, - /** - * Asks for resources to be withdrawn - */ - withdraw, - /** - * A dropped resource asking to be picked up - */ - pickup, - /** - * Offering to be picked up but not trying to get rid of the resource - */ - offer, + /** + * Asks for resources to be transferred + */ + transfer, + /** + * Asks for resources to be withdrawn + */ + withdraw, + /** + * A dropped resource asking to be picked up + */ + pickup, + /** + * Offering to be picked up but not trying to get rid of the resource + */ + offer, } export enum SleepFor { - any, - move, + any, + move, } export enum CreepMemoryKeys { - preferRoads, - sourceIndex, - dying, - packedCoord, - path, - goalPos, - usedPathForGoal, - lastCache, - structureTarget, - remote, - scoutTarget, - signTarget, - roomLogisticsRequests, - needsResources, - squadSize, - squadType, - squadCombatType, - isSquadFormed, - squadMembers, - quadBulldozeTargets, - haulRequest, - ticksWaited, - recycleTarget, - rampartOnlyShoving, - rampartTarget, - taskRoom, - getPulled, - combatRequest, - workRequest, - flee, - squadMoveType, - sleepFor, - sleepTime, - targetID, - previousRelayer, - stationary, + preferRoads, + sourceIndex, + dying, + packedCoord, + path, + goalPos, + usedPathForGoal, + lastCache, + structureTarget, + remote, + scoutTarget, + signTarget, + roomLogisticsRequests, + needsResources, + squadSize, + squadType, + squadCombatType, + isSquadFormed, + squadMembers, + quadBulldozeTargets, + haulRequest, + ticksWaited, + recycleTarget, + rampartOnlyShoving, + rampartTarget, + taskRoom, + getPulled, + combatRequest, + workRequest, + flee, + squadMoveType, + sleepFor, + sleepTime, + targetID, + previousRelayer, + stationary, } export enum PowerCreepMemoryKeys { - commune, - /** - * The name of the method queued for operation - */ - task, - taskTarget, - /** - * The type of power the creep should use - */ - taskPower, - taskRoom, + commune, + /** + * The name of the method queued for operation + */ + task, + taskTarget, + /** + * The type of power the creep should use + */ + taskPower, + taskRoom, } export enum PowerRequestKeys { - target, - type, - cooldown, + target, + type, + cooldown, } export enum RoomTypes { - commune, - remote, - ally, - allyRemote, - neutral, - enemy, - enemyRemote, - sourceKeeper, - center, - highway, - intersection, + commune, + remote, + ally, + allyRemote, + neutral, + enemy, + enemyRemote, + sourceKeeper, + center, + highway, + intersection, +} + +export enum RoomStatusKeys { + normal, + closed, + novice, + respawn, } export enum RoomMemoryKeys { - type, - lastScout, - /** - * Tells (mostly civilians) if the room is safe (non-undefined number) and what tick it will refresh - */ - danger, - portalsTo, - - // Types specific - - owner, - RCL, - powerEnabled, - constructionSiteTarget, - stampAnchors, - roadQuota, - communeSources, - communeSourceHarvestPositions, - communeSourcePaths, - mineralPath, - mineralPositions, - centerUpgradePos, - upgradePositions, - upgradePath, - basePlans, - rampartPlans, - mineral, - mineralType, - /** - * A valuation of base plan score. Lower is better - */ - score, - /** - * A valuation of base plan score with changing variables. Lower is better - */ - dynamicScore, - dynamicScoreUpdate, - communePlanned, - - // Commune - - remotes, - powerBanks, - deposits, - workRequest, - combatRequests, - haulRequests, - nukeRequest, - threatened, - lastAttackedBy, - minHaulerCost, - minHaulerCostUpdate, - greatestRCL, - /** - * Wether or not we are trying to have the room go from commune to neutral - */ - abandonCommune, - marketData, - factoryProduct, - factoryUsableResources, - - // Remote - - commune, - maxSourceIncome, - remoteSourceHarvesters, - haulers, - remoteReservers, - remoteCoreAttacker, - remoteBuilder, - remoteDismantler, - abandonRemote, - recursedAbandonment, - disable, - disableSources, - enemyReserved, - invaderCore, - disableCachedPaths, - remotePlanned, - remoteStampAnchors, - remoteControllerPath, - remoteControllerPositions, - remoteSources, - remoteSourceHarvestPositions, - remoteSourceFastFillerPaths, - remoteSourceHubPaths, - clearedEnemyStructures, - lastStructureCheck, - roads, - remoteSourceCredit, - remoteSourceCreditChange, - remoteSourceCreditReservation, - hasContainer, - /** - * The names of the rooms the remote has paths through to get to the commune - */ - pathsThrough, - - // Ally - - // Enemy - - terminal, - towers, - energy, - defensiveStrength, - offensiveThreat, - - // Source Keeper - - keeperLairCoords, + type, + lastScout, + /** + * Tells (mostly civilians) if the room is safe (non-undefined number) and what tick it will refresh + */ + danger, + portalsTo, + status, + + // Types specific + + owner, + RCL, + powerEnabled, + constructionSiteTarget, + stampAnchors, + roadQuota, + communeSources, + communeSourceHarvestPositions, + communeSourcePaths, + mineralPath, + mineralPositions, + centerUpgradePos, + upgradePositions, + upgradePath, + basePlans, + rampartPlans, + mineral, + mineralType, + /** + * A valuation of base plan score. Lower is better + */ + score, + /** + * A valuation of base plan score with changing variables. Lower is better + */ + dynamicScore, + dynamicScoreUpdate, + communePlanned, + + // Commune + + remotes, + powerBanks, + deposits, + workRequest, + combatRequests, + haulRequests, + nukeRequest, + threatened, + lastAttackedBy, + minHaulerCost, + minHaulerCostUpdate, + greatestRCL, + /** + * Wether or not we are trying to have the room go from commune to neutral + */ + abandonCommune, + marketData, + factoryProduct, + factoryUsableResources, + + // Remote + + commune, + maxSourceIncome, + remoteSourceHarvesters, + haulers, + remoteReservers, + remoteCoreAttacker, + remoteBuilder, + remoteDismantler, + abandonRemote, + recursedAbandonment, + disable, + disableSources, + enemyReserved, + invaderCore, + disableCachedPaths, + remotePlanned, + remoteStampAnchors, + remoteControllerPath, + remoteControllerPositions, + remoteSources, + remoteSourceHarvestPositions, + remoteSourceFastFillerPaths, + remoteSourceHubPaths, + clearedEnemyStructures, + lastStructureCheck, + roads, + remoteSourceCredit, + remoteSourceCreditChange, + remoteSourceCreditReservation, + hasContainer, + /** + * The names of the rooms the remote has paths through to get to the commune + */ + pathsThrough, + + // Ally + + // Enemy + + terminal, + towers, + energy, + defensiveStrength, + offensiveThreat, + + // Source Keeper + + keeperLairCoords, } export type RemoteResourcePathTypes = - | RoomMemoryKeys.remoteSourceFastFillerPaths - | RoomMemoryKeys.remoteSourceHubPaths + | RoomMemoryKeys.remoteSourceFastFillerPaths + | RoomMemoryKeys.remoteSourceHubPaths // General export const mmoShardNames = new Set(['shard0', 'shard1', 'shard2', 'shard3']) export const roomTypeProperties: Set = new Set([ - // Commune + // Commune + + RoomMemoryKeys.remotes, + RoomMemoryKeys.deposits, + RoomMemoryKeys.powerBanks, + RoomMemoryKeys.minHaulerCost, + RoomMemoryKeys.minHaulerCostUpdate, + RoomMemoryKeys.threatened, + RoomMemoryKeys.lastAttackedBy, + RoomMemoryKeys.abandonCommune, + RoomMemoryKeys.score, + RoomMemoryKeys.dynamicScore, + RoomMemoryKeys.dynamicScoreUpdate, + RoomMemoryKeys.clearedEnemyStructures, + + // Remote + + RoomMemoryKeys.commune, + RoomMemoryKeys.remoteSourceFastFillerPaths, + RoomMemoryKeys.remoteSourceHubPaths, + RoomMemoryKeys.remoteSourceCredit, + RoomMemoryKeys.remoteSourceCreditChange, + RoomMemoryKeys.remoteSourceCreditReservation, + RoomMemoryKeys.abandonRemote, + RoomMemoryKeys.recursedAbandonment, + RoomMemoryKeys.pathsThrough, + RoomMemoryKeys.disableSources, + + // Ally and Enemy + + RoomMemoryKeys.owner, + RoomMemoryKeys.RCL, + + // Enemy + + RoomMemoryKeys.powerEnabled, + RoomMemoryKeys.towers, + RoomMemoryKeys.terminal, + RoomMemoryKeys.energy, + RoomMemoryKeys.offensiveThreat, + RoomMemoryKeys.defensiveStrength, +]) +export const roomTypes: Record> = { + [RoomTypes.commune]: new Set([ RoomMemoryKeys.remotes, RoomMemoryKeys.deposits, RoomMemoryKeys.powerBanks, @@ -359,9 +410,8 @@ export const roomTypeProperties: Set = new Set([ RoomMemoryKeys.dynamicScore, RoomMemoryKeys.dynamicScoreUpdate, RoomMemoryKeys.clearedEnemyStructures, - - // Remote - + ]), + [RoomTypes.remote]: new Set([ RoomMemoryKeys.commune, RoomMemoryKeys.remoteSourceFastFillerPaths, RoomMemoryKeys.remoteSourceHubPaths, @@ -371,138 +421,125 @@ export const roomTypeProperties: Set = new Set([ RoomMemoryKeys.abandonRemote, RoomMemoryKeys.recursedAbandonment, RoomMemoryKeys.pathsThrough, - RoomMemoryKeys.disableSources, - - // Ally and Enemy - + ]), + [RoomTypes.ally]: new Set([RoomMemoryKeys.owner, RoomMemoryKeys.RCL]), + [RoomTypes.allyRemote]: new Set([RoomMemoryKeys.owner]), + [RoomTypes.enemy]: new Set([ RoomMemoryKeys.owner, RoomMemoryKeys.RCL, - - // Enemy - RoomMemoryKeys.powerEnabled, RoomMemoryKeys.towers, RoomMemoryKeys.terminal, RoomMemoryKeys.energy, RoomMemoryKeys.offensiveThreat, RoomMemoryKeys.defensiveStrength, -]) - -export const roomTypes: Record> = { - [RoomTypes.commune]: new Set([ - RoomMemoryKeys.remotes, - RoomMemoryKeys.deposits, - RoomMemoryKeys.powerBanks, - RoomMemoryKeys.minHaulerCost, - RoomMemoryKeys.minHaulerCostUpdate, - RoomMemoryKeys.threatened, - RoomMemoryKeys.lastAttackedBy, - RoomMemoryKeys.abandonCommune, - RoomMemoryKeys.score, - RoomMemoryKeys.dynamicScore, - RoomMemoryKeys.dynamicScoreUpdate, - RoomMemoryKeys.clearedEnemyStructures, - ]), - [RoomTypes.remote]: new Set([ - RoomMemoryKeys.commune, - RoomMemoryKeys.remoteSourceFastFillerPaths, - RoomMemoryKeys.remoteSourceHubPaths, - RoomMemoryKeys.remoteSourceCredit, - RoomMemoryKeys.remoteSourceCreditChange, - RoomMemoryKeys.remoteSourceCreditReservation, - RoomMemoryKeys.abandonRemote, - RoomMemoryKeys.recursedAbandonment, - RoomMemoryKeys.pathsThrough, - ]), - [RoomTypes.ally]: new Set([RoomMemoryKeys.owner, RoomMemoryKeys.RCL]), - [RoomTypes.allyRemote]: new Set([RoomMemoryKeys.owner]), - [RoomTypes.enemy]: new Set([ - RoomMemoryKeys.owner, - RoomMemoryKeys.RCL, - RoomMemoryKeys.powerEnabled, - RoomMemoryKeys.towers, - RoomMemoryKeys.terminal, - RoomMemoryKeys.energy, - RoomMemoryKeys.offensiveThreat, - RoomMemoryKeys.defensiveStrength, - ]), - [RoomTypes.enemyRemote]: new Set([RoomMemoryKeys.owner]), - [RoomTypes.neutral]: new Set([]), - [RoomTypes.intersection]: new Set([]), - [RoomTypes.sourceKeeper]: new Set([RoomMemoryKeys.owner, RoomMemoryKeys.keeperLairCoords]), - [RoomTypes.center]: new Set([RoomMemoryKeys.owner]), - [RoomTypes.highway]: new Set([]), + ]), + [RoomTypes.enemyRemote]: new Set([RoomMemoryKeys.owner]), + [RoomTypes.neutral]: new Set([]), + [RoomTypes.intersection]: new Set([]), + [RoomTypes.sourceKeeper]: new Set([RoomMemoryKeys.owner, RoomMemoryKeys.keeperLairCoords]), + [RoomTypes.center]: new Set([RoomMemoryKeys.owner]), + [RoomTypes.highway]: new Set([]), } export const constantRoomTypes: Set> = new Set([ - RoomTypes.sourceKeeper, - RoomTypes.center, - RoomTypes.highway, - RoomTypes.intersection, + RoomTypes.sourceKeeper, + RoomTypes.center, + RoomTypes.highway, + RoomTypes.intersection, ]) export const roomTypesUsedForStats = [RoomTypes.commune, RoomTypes.remote] export const creepRoles: CreepRoles[] = [ - 'sourceHarvester', - 'hauler', - 'requestHauler', - 'controllerUpgrader', - 'builder', - 'maintainer', - 'mineralHarvester', - 'hubHauler', - 'fastFiller', - 'meleeDefender', - 'rangedDefender', - 'remoteSourceHarvester', - 'remoteReserver', - 'remoteDefender', - 'remoteCoreAttacker', - 'remoteDismantler', - 'remoteBuilder', - 'scout', - 'claimer', - 'vanguard', - 'allyVanguard', - 'antifaRangedAttacker', - 'antifaAttacker', - 'antifaHealer', - 'antifaDismantler', - 'antifaDowngrader', + 'sourceHarvester', + 'hauler', + 'requestHauler', + 'controllerUpgrader', + 'builder', + 'maintainer', + 'mineralHarvester', + 'hubHauler', + 'fastFiller', + 'meleeDefender', + 'rangedDefender', + 'remoteSourceHarvester', + 'remoteReserver', + 'remoteDefender', + 'remoteCoreAttacker', + 'remoteDismantler', + 'remoteBuilder', + 'scout', + 'claimer', + 'vanguard', + 'allyVanguard', + 'antifaRangedAttacker', + 'antifaAttacker', + 'antifaHealer', + 'antifaDismantler', + 'antifaDowngrader', ] +export enum CreepRoleKeys { + sourceHarvester, + hauler, + requestHauler, + controllerUpgrader, + builder, + maintainer, + mineralHarvester, + hubHauler, + fastFiller, + meleeDefender, + rangedDefender, + remoteSourceHarvester, + remoteReserver, + remoteDefender, + remoteCoreAttacker, + remoteDismantler, + remoteBuilder, + scout, + claimer, + vanguard, + allyVanguard, + antifaRangedAttacker, + antifaAttacker, + antifaHealer, + antifaDismantler, + antifaDowngrader, +} + /** * Roles that will interact with the room logistics system */ export const roomLogisticsRoles: Set = new Set([ - 'sourceHarvester', - 'hauler', - 'builder', - 'maintainer', - 'controllerUpgrader', - 'remoteSourceHarvester', - 'hubHauler', - 'allyVanguard', + 'sourceHarvester', + 'hauler', + 'builder', + 'maintainer', + 'controllerUpgrader', + 'remoteSourceHarvester', + 'hubHauler', + 'allyVanguard', ]) export const communeCreepRoles: Set = new Set([ - 'sourceHarvester', - 'builder', - 'maintainer', - 'controllerUpgrader', - 'hubHauler', - 'fastFiller', - 'mineralHarvester', - 'meleeDefender', - 'rangedDefender', + 'sourceHarvester', + 'builder', + 'maintainer', + 'controllerUpgrader', + 'hubHauler', + 'fastFiller', + 'mineralHarvester', + 'meleeDefender', + 'rangedDefender', ]) export enum PowerCreepTasks { - advancedEnablePower, - advancedGenerateOps, - advancedRenew, - transferOps, + advancedEnablePower, + advancedGenerateOps, + advancedRenew, + transferOps, } export const powerCreepClassNames: PowerClassConstant[] = ['operator'] @@ -511,32 +548,32 @@ export const powerCreepClassNames: PowerClassConstant[] = ['operator'] * Which role gets priority in which circumstance. Lowest to highest */ export enum TrafficPriorities { - hauler, - requestHauler, - scout, - hubHauler, - fastFiller, - sourceHarvester, - mineralHarvester, - remoteSourceHarvester, - remoteCoreAttacker, - remoteDismantler, - remoteReserver, - remoteBuilder, - vanguard, - allyVanguard, - controllerUpgrader, - builder, - claimer, - remoteDefender, - meleeDefender, - rangedDefender, - maintainer, - antifaDismantler, - antifaDowngrader, - antifaHealer, - antifaAttacker, - antifaRangedAttacker, + hauler, + requestHauler, + scout, + hubHauler, + fastFiller, + sourceHarvester, + mineralHarvester, + remoteSourceHarvester, + remoteCoreAttacker, + remoteDismantler, + remoteReserver, + remoteBuilder, + vanguard, + allyVanguard, + controllerUpgrader, + builder, + claimer, + remoteDefender, + meleeDefender, + rangedDefender, + maintainer, + antifaDismantler, + antifaDowngrader, + antifaHealer, + antifaAttacker, + antifaRangedAttacker, } export const version = `v2.${global.settings.breakingVersion}.0` @@ -544,24 +581,24 @@ export const version = `v2.${global.settings.breakingVersion}.0` // Set of messages to randomly apply to commune rooms export const communeSign = - 'A commune of the proletariat. Bourgeoisie not welcome here! Now Collectivized. ' + version + 'A commune of the proletariat. Bourgeoisie not welcome here! Now Collectivized. ' + version /** * Set of messages to randomly apply to non-commune rooms */ export const nonCommuneSigns = [ - 'The top 1% have more money than the poorest 4.5 billion', - 'McDonalds workers in the US make $10/hour. In Denmark, as a result of unions, they make $22/hour', - 'We have democracy in our policial system, should we not have it in our companies too?', - 'Workers of the world, unite; you have nothing to lose but your chains!', - 'Real democracy requires democracy in the workplace', - 'Adults spend a combined 13 years of their life under a dictatorship: the workplace', - 'Socialism is about worker ownership over the workplace', - 'Are trans women women? Yes.', - 'Advancing the LGBTQ+ agenda <3', - 'Does Jeff Bezos work 56,000 times harder than his average worker? Because he gets paid like it', - 'We already eat from the trashcan all the time. The name of this trash is ideology - Slavoj Zizek', - 'Religion is the opium of the people - Karl Marx', + 'The top 1% have more money than the poorest 4.5 billion', + 'McDonalds workers in the US make $10/hour. In Denmark, as a result of unions, they make $22/hour', + 'We have democracy in our policial system, should we not have it in our companies too?', + 'Workers of the world, unite; you have nothing to lose but your chains!', + 'Real democracy requires democracy in the workplace', + 'Adults spend a combined 13 years of their life under a dictatorship: the workplace', + 'Socialism is about worker ownership over the workplace', + 'Are trans women women? Yes.', + 'Advancing the LGBTQ+ agenda <3', + 'Does Jeff Bezos work 56,000 times harder than his average worker? Because he gets paid like it', + 'We already eat from the trashcan all the time. The name of this trash is ideology - Slavoj Zizek', + 'Religion is the opium of the people - Karl Marx', ] /** @@ -576,109 +613,109 @@ export const enemyDieChants = ['☮️', '❤️'] export const roomDimensions = 50 export const allStructureTypes: StructureConstant[] = [ - STRUCTURE_SPAWN, - STRUCTURE_EXTENSION, - STRUCTURE_ROAD, - STRUCTURE_WALL, - STRUCTURE_RAMPART, - STRUCTURE_KEEPER_LAIR, - STRUCTURE_PORTAL, - STRUCTURE_CONTROLLER, - STRUCTURE_LINK, - STRUCTURE_STORAGE, - STRUCTURE_TOWER, - STRUCTURE_OBSERVER, - STRUCTURE_POWER_BANK, - STRUCTURE_POWER_SPAWN, - STRUCTURE_EXTRACTOR, - STRUCTURE_LAB, - STRUCTURE_TERMINAL, - STRUCTURE_CONTAINER, - STRUCTURE_NUKER, - STRUCTURE_FACTORY, - STRUCTURE_INVADER_CORE, + STRUCTURE_SPAWN, + STRUCTURE_EXTENSION, + STRUCTURE_ROAD, + STRUCTURE_WALL, + STRUCTURE_RAMPART, + STRUCTURE_KEEPER_LAIR, + STRUCTURE_PORTAL, + STRUCTURE_CONTROLLER, + STRUCTURE_LINK, + STRUCTURE_STORAGE, + STRUCTURE_TOWER, + STRUCTURE_OBSERVER, + STRUCTURE_POWER_BANK, + STRUCTURE_POWER_SPAWN, + STRUCTURE_EXTRACTOR, + STRUCTURE_LAB, + STRUCTURE_TERMINAL, + STRUCTURE_CONTAINER, + STRUCTURE_NUKER, + STRUCTURE_FACTORY, + STRUCTURE_INVADER_CORE, ] export const buildableStructureTypes: BuildableStructureConstant[] = [ - STRUCTURE_SPAWN, - STRUCTURE_EXTENSION, - STRUCTURE_ROAD, - STRUCTURE_WALL, - STRUCTURE_RAMPART, - STRUCTURE_LINK, - STRUCTURE_STORAGE, - STRUCTURE_TOWER, - STRUCTURE_OBSERVER, - STRUCTURE_POWER_SPAWN, - STRUCTURE_EXTRACTOR, - STRUCTURE_LAB, - STRUCTURE_TERMINAL, - STRUCTURE_CONTAINER, - STRUCTURE_NUKER, - STRUCTURE_FACTORY, + STRUCTURE_SPAWN, + STRUCTURE_EXTENSION, + STRUCTURE_ROAD, + STRUCTURE_WALL, + STRUCTURE_RAMPART, + STRUCTURE_LINK, + STRUCTURE_STORAGE, + STRUCTURE_TOWER, + STRUCTURE_OBSERVER, + STRUCTURE_POWER_SPAWN, + STRUCTURE_EXTRACTOR, + STRUCTURE_LAB, + STRUCTURE_TERMINAL, + STRUCTURE_CONTAINER, + STRUCTURE_NUKER, + STRUCTURE_FACTORY, ] export const buildableStructuresSet: Set = new Set( - buildableStructureTypes, + buildableStructureTypes, ) export const impassibleStructureTypes: StructureConstant[] = [ - STRUCTURE_SPAWN, - STRUCTURE_EXTENSION, - STRUCTURE_WALL, - STRUCTURE_KEEPER_LAIR, - STRUCTURE_CONTROLLER, - STRUCTURE_LINK, - STRUCTURE_STORAGE, - STRUCTURE_TOWER, - STRUCTURE_OBSERVER, - STRUCTURE_POWER_BANK, - STRUCTURE_POWER_SPAWN, - STRUCTURE_EXTRACTOR, - STRUCTURE_LAB, - STRUCTURE_TERMINAL, - STRUCTURE_NUKER, - STRUCTURE_FACTORY, - STRUCTURE_INVADER_CORE, + STRUCTURE_SPAWN, + STRUCTURE_EXTENSION, + STRUCTURE_WALL, + STRUCTURE_KEEPER_LAIR, + STRUCTURE_CONTROLLER, + STRUCTURE_LINK, + STRUCTURE_STORAGE, + STRUCTURE_TOWER, + STRUCTURE_OBSERVER, + STRUCTURE_POWER_BANK, + STRUCTURE_POWER_SPAWN, + STRUCTURE_EXTRACTOR, + STRUCTURE_LAB, + STRUCTURE_TERMINAL, + STRUCTURE_NUKER, + STRUCTURE_FACTORY, + STRUCTURE_INVADER_CORE, ] export const impassibleStructureTypesSet = new Set(impassibleStructureTypes) export const defaultStructureTypesByBuildPriority: StructureConstant[] = [ - STRUCTURE_RAMPART, - STRUCTURE_WALL, - STRUCTURE_SPAWN, - STRUCTURE_EXTENSION, - STRUCTURE_CONTAINER, - STRUCTURE_ROAD, - STRUCTURE_STORAGE, - STRUCTURE_TOWER, - STRUCTURE_TERMINAL, - STRUCTURE_LINK, - STRUCTURE_EXTRACTOR, - STRUCTURE_LAB, - STRUCTURE_FACTORY, - STRUCTURE_POWER_SPAWN, - STRUCTURE_NUKER, - STRUCTURE_OBSERVER, + STRUCTURE_RAMPART, + STRUCTURE_WALL, + STRUCTURE_SPAWN, + STRUCTURE_EXTENSION, + STRUCTURE_CONTAINER, + STRUCTURE_ROAD, + STRUCTURE_STORAGE, + STRUCTURE_TOWER, + STRUCTURE_TERMINAL, + STRUCTURE_LINK, + STRUCTURE_EXTRACTOR, + STRUCTURE_LAB, + STRUCTURE_FACTORY, + STRUCTURE_POWER_SPAWN, + STRUCTURE_NUKER, + STRUCTURE_OBSERVER, ] export const structureTypesToProtect: StructureConstant[] = [ - STRUCTURE_SPAWN, - STRUCTURE_TOWER, - STRUCTURE_LAB, - STRUCTURE_TERMINAL, - STRUCTURE_STORAGE, - STRUCTURE_FACTORY, - STRUCTURE_NUKER, - STRUCTURE_POWER_SPAWN, - STRUCTURE_OBSERVER, - STRUCTURE_LINK, + STRUCTURE_SPAWN, + STRUCTURE_TOWER, + STRUCTURE_LAB, + STRUCTURE_TERMINAL, + STRUCTURE_STORAGE, + STRUCTURE_FACTORY, + STRUCTURE_NUKER, + STRUCTURE_POWER_SPAWN, + STRUCTURE_OBSERVER, + STRUCTURE_LINK, ] export const structureTypesToProtectSet = new Set(structureTypesToProtect) export const storingStructureTypesSet: Set = new Set([ - STRUCTURE_STORAGE, - STRUCTURE_TERMINAL, + STRUCTURE_STORAGE, + STRUCTURE_TERMINAL, ]) /** @@ -688,309 +725,305 @@ export const ourImpassibleStructures = impassibleStructureTypes.concat(STRUCTURE export const ourImpassibleStructuresSet = new Set(ourImpassibleStructures) export const combatTargetStructureTypes: Set = new Set([ - STRUCTURE_SPAWN, - STRUCTURE_TOWER, - STRUCTURE_EXTENSION, - STRUCTURE_STORAGE, - STRUCTURE_TERMINAL, - STRUCTURE_POWER_SPAWN, - STRUCTURE_FACTORY, - STRUCTURE_NUKER, - STRUCTURE_OBSERVER, + STRUCTURE_SPAWN, + STRUCTURE_TOWER, + STRUCTURE_EXTENSION, + STRUCTURE_STORAGE, + STRUCTURE_TERMINAL, + STRUCTURE_POWER_SPAWN, + STRUCTURE_FACTORY, + STRUCTURE_NUKER, + STRUCTURE_OBSERVER, ]) -export const generalRepairStructureTypes = new Set([ - STRUCTURE_ROAD, - STRUCTURE_CONTAINER, -]) +export const generalRepairStructureTypes = new Set([STRUCTURE_ROAD, STRUCTURE_CONTAINER]) /** * These structures have seperate store capacities for different resources. For example, labs can hold minerals and energy, but at different amounts and without conflict */ export const separateStoreStructureTypes = new Set([ - STRUCTURE_LAB, - STRUCTURE_NUKER, - STRUCTURE_POWER_SPAWN + STRUCTURE_LAB, + STRUCTURE_NUKER, + STRUCTURE_POWER_SPAWN, ]) export const customColors = { - white: '#ffffff', - lightGrey: '#eaeaea', - midGrey: '#bcbcbc', - darkGrey: '#5e5e5e', - lightBlue: '#0f66fc', - darkBlue: '#02007d', - black: '#000000', - yellow: '#ABB400', - red: '#d10000', - green: '#00d137', - brown: '#aa7253', - purple: '#8b06a3', - pink: '#d60ef9', - orange: '#f27602', - teal: '#02f2e2', + white: '#ffffff', + lightGrey: '#eaeaea', + midGrey: '#bcbcbc', + darkGrey: '#5e5e5e', + lightBlue: '#0f66fc', + darkBlue: '#02007d', + black: '#000000', + yellow: '#ABB400', + red: '#d10000', + green: '#00d137', + brown: '#aa7253', + purple: '#8b06a3', + pink: '#d60ef9', + orange: '#f27602', + teal: '#02f2e2', } export const remoteStamps: Record = { - container: { - offset: 0, - protectionOffset: 0, - size: 1, - structures: { - container: [{ x: 0, y: 0 }], - }, + container: { + offset: 0, + protectionOffset: 0, + size: 1, + structures: { + container: [{ x: 0, y: 0 }], }, - road: { - offset: 0, - protectionOffset: 0, - size: 1, - structures: { - road: [{ x: 0, y: 0 }], - }, + }, + road: { + offset: 0, + protectionOffset: 0, + size: 1, + structures: { + road: [{ x: 0, y: 0 }], }, + }, } export const stamps: Record = { - fastFiller: { - offset: 3, - protectionOffset: 6, - size: 4, - structures: { - extension: [ - { x: 1, y: 1 }, - { x: 2, y: 1 }, - { x: 3, y: 1 }, - { x: 3, y: 2 }, - { x: 2, y: 3 }, - { x: 4, y: 1 }, - { x: 5, y: 1 }, - { x: 4, y: 3 }, - { x: 1, y: 4 }, - { x: 3, y: 4 }, - { x: 1, y: 5 }, - { x: 2, y: 5 }, - { x: 4, y: 5 }, - { x: 5, y: 5 }, - { x: 5, y: 4 }, - ], - road: [ - { x: 3, y: 0 }, - { x: 2, y: 0 }, - { x: 1, y: 0 }, - { x: 0, y: 1 }, - { x: 0, y: 2 }, - { x: 0, y: 3 }, - { x: 0, y: 4 }, - { x: 4, y: 0 }, - { x: 5, y: 0 }, - { x: 6, y: 1 }, - { x: 6, y: 2 }, - { x: 6, y: 4 }, - { x: 6, y: 3 }, - { x: 6, y: 5 }, - { x: 5, y: 6 }, - { x: 4, y: 6 }, - { x: 3, y: 6 }, - { x: 2, y: 6 }, - { x: 1, y: 6 }, - { x: 0, y: 5 }, - ], - spawn: [ - { x: 1, y: 2 }, - { x: 5, y: 2 }, - { x: 3, y: 5 }, - ], - container: [ - { x: 1, y: 3 }, - { x: 5, y: 3 }, - ], - link: [{ x: 3, y: 3 }], - empty: [ - { x: 2, y: 2 }, - { x: 4, y: 2 }, - { x: 2, y: 4 }, - { x: 4, y: 4 }, - ], - }, + fastFiller: { + offset: 3, + protectionOffset: 6, + size: 4, + structures: { + extension: [ + { x: 1, y: 1 }, + { x: 2, y: 1 }, + { x: 3, y: 1 }, + { x: 3, y: 2 }, + { x: 2, y: 3 }, + { x: 4, y: 1 }, + { x: 5, y: 1 }, + { x: 4, y: 3 }, + { x: 1, y: 4 }, + { x: 3, y: 4 }, + { x: 1, y: 5 }, + { x: 2, y: 5 }, + { x: 4, y: 5 }, + { x: 5, y: 5 }, + { x: 5, y: 4 }, + ], + road: [ + { x: 3, y: 0 }, + { x: 2, y: 0 }, + { x: 1, y: 0 }, + { x: 0, y: 1 }, + { x: 0, y: 2 }, + { x: 0, y: 3 }, + { x: 0, y: 4 }, + { x: 4, y: 0 }, + { x: 5, y: 0 }, + { x: 6, y: 1 }, + { x: 6, y: 2 }, + { x: 6, y: 4 }, + { x: 6, y: 3 }, + { x: 6, y: 5 }, + { x: 5, y: 6 }, + { x: 4, y: 6 }, + { x: 3, y: 6 }, + { x: 2, y: 6 }, + { x: 1, y: 6 }, + { x: 0, y: 5 }, + ], + spawn: [ + { x: 1, y: 2 }, + { x: 5, y: 2 }, + { x: 3, y: 5 }, + ], + container: [ + { x: 1, y: 3 }, + { x: 5, y: 3 }, + ], + link: [{ x: 3, y: 3 }], + empty: [ + { x: 2, y: 2 }, + { x: 4, y: 2 }, + { x: 2, y: 4 }, + { x: 4, y: 4 }, + ], }, - hub: { - offset: 2, - protectionOffset: 5, - size: 0, - structures: { - storage: [ - { x: 1, y: 0 }, - { x: 0, y: 1 }, - { x: 2, y: 1 }, - { x: 1, y: 2 }, - ], - }, + }, + hub: { + offset: 2, + protectionOffset: 5, + size: 0, + structures: { + storage: [ + { x: 1, y: 0 }, + { x: 0, y: 1 }, + { x: 2, y: 1 }, + { x: 1, y: 2 }, + ], }, - gridExtension: { - offset: 0, - protectionOffset: 4, - size: 1, - structures: { - extension: [{ x: 0, y: 0 }], - }, + }, + gridExtension: { + offset: 0, + protectionOffset: 4, + size: 1, + structures: { + extension: [{ x: 0, y: 0 }], }, - inputLab: { - offset: 0, - protectionOffset: 4, - size: 1, - structures: { - lab: [{ x: 0, y: 0 }], - }, + }, + inputLab: { + offset: 0, + protectionOffset: 4, + size: 1, + structures: { + lab: [{ x: 0, y: 0 }], }, - outputLab: { - offset: 0, - protectionOffset: 4, - size: 1, - structures: { - lab: [{ x: 0, y: 0 }], - }, + }, + outputLab: { + offset: 0, + protectionOffset: 4, + size: 1, + structures: { + lab: [{ x: 0, y: 0 }], }, - tower: { - offset: 0, - protectionOffset: 4, - size: 1, - structures: { - tower: [{ x: 0, y: 0 }], - }, + }, + tower: { + offset: 0, + protectionOffset: 4, + size: 1, + structures: { + tower: [{ x: 0, y: 0 }], }, - observer: { - offset: 0, - protectionOffset: 4, - size: 1, - structures: { - observer: [{ x: 0, y: 0 }], - }, + }, + observer: { + offset: 0, + protectionOffset: 4, + size: 1, + structures: { + observer: [{ x: 0, y: 0 }], }, - nuker: { - offset: 0, - protectionOffset: 4, - size: 1, - structures: { - nuker: [{ x: 0, y: 0 }], - }, + }, + nuker: { + offset: 0, + protectionOffset: 4, + size: 1, + structures: { + nuker: [{ x: 0, y: 0 }], }, - powerSpawn: { - offset: 0, - protectionOffset: 4, - size: 1, - structures: { - powerSpawn: [{ x: 0, y: 0 }], - }, + }, + powerSpawn: { + offset: 0, + protectionOffset: 4, + size: 1, + structures: { + powerSpawn: [{ x: 0, y: 0 }], }, - sourceLink: { - offset: 0, - protectionOffset: 0, - size: 1, - structures: { - link: [{ x: 0, y: 0 }], - }, + }, + sourceLink: { + offset: 0, + protectionOffset: 0, + size: 1, + structures: { + link: [{ x: 0, y: 0 }], }, - sourceExtension: { - offset: 0, - protectionOffset: 0, - size: 1, - structures: { - extension: [{ x: 0, y: 0 }], - }, + }, + sourceExtension: { + offset: 0, + protectionOffset: 0, + size: 1, + structures: { + extension: [{ x: 0, y: 0 }], }, - container: { - offset: 0, - protectionOffset: 0, - size: 1, - structures: { - container: [{ x: 0, y: 0 }], - }, + }, + container: { + offset: 0, + protectionOffset: 0, + size: 1, + structures: { + container: [{ x: 0, y: 0 }], }, - extractor: { - offset: 0, - protectionOffset: 0, - size: 1, - structures: { - extractor: [{ x: 0, y: 0 }], - }, + }, + extractor: { + offset: 0, + protectionOffset: 0, + size: 1, + structures: { + extractor: [{ x: 0, y: 0 }], }, - road: { - offset: 0, - protectionOffset: 0, - size: 1, - structures: { - road: [{ x: 0, y: 0 }], - }, + }, + road: { + offset: 0, + protectionOffset: 0, + size: 1, + structures: { + road: [{ x: 0, y: 0 }], }, - minCutRampart: { - offset: 0, - protectionOffset: 0, - size: 1, - structures: { - rampart: [{ x: 0, y: 0 }], - }, + }, + minCutRampart: { + offset: 0, + protectionOffset: 0, + size: 1, + structures: { + rampart: [{ x: 0, y: 0 }], }, - onboardingRampart: { - offset: 0, - protectionOffset: 0, - size: 1, - structures: { - rampart: [{ x: 0, y: 0 }], - }, + }, + onboardingRampart: { + offset: 0, + protectionOffset: 0, + size: 1, + structures: { + rampart: [{ x: 0, y: 0 }], }, - shieldRampart: { - offset: 0, - protectionOffset: 0, - size: 1, - structures: { - rampart: [{ x: 0, y: 0 }], - }, + }, + shieldRampart: { + offset: 0, + protectionOffset: 0, + size: 1, + structures: { + rampart: [{ x: 0, y: 0 }], }, + }, } export const stampKeys = Object.keys(stamps) as StampTypes[] export const minerals: Partial = [ - RESOURCE_HYDROGEN, - RESOURCE_OXYGEN, - RESOURCE_UTRIUM, - RESOURCE_KEANIUM, - RESOURCE_LEMERGIUM, - RESOURCE_ZYNTHIUM, - RESOURCE_CATALYST, + RESOURCE_HYDROGEN, + RESOURCE_OXYGEN, + RESOURCE_UTRIUM, + RESOURCE_KEANIUM, + RESOURCE_LEMERGIUM, + RESOURCE_ZYNTHIUM, + RESOURCE_CATALYST, ] export const boosts = [RESOURCE_CATALYZED_GHODIUM_ACID] export const dismantleBoosts = [ - RESOURCE_ZYNTHIUM_HYDRIDE, - RESOURCE_ZYNTHIUM_ACID, - RESOURCE_CATALYZED_ZYNTHIUM_ACID, + RESOURCE_ZYNTHIUM_HYDRIDE, + RESOURCE_ZYNTHIUM_ACID, + RESOURCE_CATALYZED_ZYNTHIUM_ACID, ] export const dismantleBoostsSet = new Set(dismantleBoosts) export const allResources = new Set(RESOURCES_ALL) export const antifaRoles: ( - | 'antifaRangedAttacker' - | 'antifaAttacker' - | 'antifaHealer' - | 'antifaDismantler' - | 'antifaDowngrader' + | 'antifaRangedAttacker' + | 'antifaAttacker' + | 'antifaHealer' + | 'antifaDismantler' + | 'antifaDowngrader' )[] = [ - 'antifaRangedAttacker', - 'antifaAttacker', - 'antifaHealer', - 'antifaDismantler', - 'antifaDowngrader', + 'antifaRangedAttacker', + 'antifaAttacker', + 'antifaHealer', + 'antifaDismantler', + 'antifaDowngrader', ] /** * Roles for which to provide spawnGroups for based on their shared remoteName */ -export const remoteRoles: -('remoteReserver' | 'remoteDefender' | 'remoteCoreAttacker' | 'remoteDismantler')[] = [ - 'remoteReserver', - 'remoteDefender', - 'remoteCoreAttacker', - 'remoteDismantler', -] +export const remoteRoles: ( + | 'remoteReserver' + | 'remoteDefender' + | 'remoteCoreAttacker' + | 'remoteDismantler' +)[] = ['remoteReserver', 'remoteDefender', 'remoteCoreAttacker', 'remoteDismantler'] export const CPUBucketCapacity = 10000 export const CPUMaxPerTick = 500 @@ -1010,10 +1043,10 @@ export const cacheAmountModifier = 25 * Which structures should be safemoded when attacked */ export const safemodeTargets: StructureConstant[] = [ - STRUCTURE_SPAWN, - STRUCTURE_TOWER, - STRUCTURE_STORAGE, - STRUCTURE_TERMINAL, + STRUCTURE_SPAWN, + STRUCTURE_TOWER, + STRUCTURE_STORAGE, + STRUCTURE_TERMINAL, ] export const safemodeTargetsSet = new Set(safemodeTargets) @@ -1046,126 +1079,126 @@ export const powerSpawnRefillThreshold = 0.1 * Offsets from a creep's moveRequest for which to search for relay targets */ export const relayOffsets = { - horizontal: [ - { - x: 0, - y: 0, - }, - { - x: -1, - y: 0, - }, - { - x: 1, - y: 0, - }, - ], - vertical: [ - { - x: 0, - y: 0, - }, - { - x: 0, - y: -1, - }, - { - x: 0, - y: 1, - }, - ], - topLeft: [ - { - x: 0, - y: 0, - }, - { - x: 1, - y: 0, - }, - { - x: 0, - y: 1, - }, - ], - topRight: [ - { - x: 0, - y: 0, - }, - { - x: -1, - y: 0, - }, - { - x: 0, - y: 1, - }, - ], - bottomLeft: [ - { - x: 0, - y: 0, - }, - { - x: 1, - y: 0, - }, - { - x: 0, - y: -1, - }, - ], - bottomRight: [ - { - x: 0, - y: 0, - }, - { - x: -1, - y: 0, - }, - { - x: 0, - y: -1, - }, - ], + horizontal: [ + { + x: 0, + y: 0, + }, + { + x: -1, + y: 0, + }, + { + x: 1, + y: 0, + }, + ], + vertical: [ + { + x: 0, + y: 0, + }, + { + x: 0, + y: -1, + }, + { + x: 0, + y: 1, + }, + ], + topLeft: [ + { + x: 0, + y: 0, + }, + { + x: 1, + y: 0, + }, + { + x: 0, + y: 1, + }, + ], + topRight: [ + { + x: 0, + y: 0, + }, + { + x: -1, + y: 0, + }, + { + x: 0, + y: 1, + }, + ], + bottomLeft: [ + { + x: 0, + y: 0, + }, + { + x: 1, + y: 0, + }, + { + x: 0, + y: -1, + }, + ], + bottomRight: [ + { + x: 0, + y: 0, + }, + { + x: -1, + y: 0, + }, + { + x: 0, + y: -1, + }, + ], } export const squadQuotas: Partial<{ - [key in SquadTypes]: Partial<{ [key in CreepRoles]: Partial<{ [key in CreepRoles]: number }> }> + [key in SquadTypes]: Partial<{ [key in CreepRoles]: Partial<{ [key in CreepRoles]: number }> }> }> = { - duo: { - antifaAttacker: { - antifaAttacker: 1, - antifaHealer: 1, - }, - antifaDismantler: { - antifaDismantler: 1, - antifaHealer: 1, - }, + duo: { + antifaAttacker: { + antifaAttacker: 1, + antifaHealer: 1, + }, + antifaDismantler: { + antifaDismantler: 1, + antifaHealer: 1, + }, + }, + quad: { + antifaRangedAttacker: { + antifaRangedAttacker: 4, }, - quad: { - antifaRangedAttacker: { - antifaRangedAttacker: 4, - }, - antifaAttacker: { - antifaAttacker: 1, - antifaHealer: 3, - }, - antifaDismantler: { - antifaDismantler: 1, - antifaHealer: 3, - }, + antifaAttacker: { + antifaAttacker: 1, + antifaHealer: 3, }, - dynamic: { - antifaRangedAttacker: { - antifaAttacker: 1, - antifaHealer: 1, - antifaRangedAttacker: 1, - antifaDismantler: 1, - }, + antifaDismantler: { + antifaDismantler: 1, + antifaHealer: 3, }, + }, + dynamic: { + antifaRangedAttacker: { + antifaAttacker: 1, + antifaHealer: 1, + antifaRangedAttacker: 1, + antifaDismantler: 1, + }, + }, } export const defaultPlainCost = 1 @@ -1178,56 +1211,56 @@ export const defaultCreepSwampCost = 8 * @constant 2 3 */ export const quadAttackMemberOffsets = [ - { - x: 0, - y: 0, - }, - { - x: 0, - y: 1, - }, - { - x: 1, - y: 1, - }, - { - x: 1, - y: 0, - }, + { + x: 0, + y: 0, + }, + { + x: 0, + y: 1, + }, + { + x: 1, + y: 1, + }, + { + x: 1, + y: 0, + }, ] export const packedQuadAttackMemberOffsets = quadAttackMemberOffsets.map(coord => packCoord(coord)) export enum Result { - fail, - success, - action, - noAction, - stop, + fail, + success, + action, + noAction, + stop, } export const maxRemoteRoomDistance = 5 // Past this it's probably not efficient export const maxRemotePathDistance = 250 export const offsetsByDirection = [ - , - [0, -1], - [1, -1], - [1, 0], - [1, 1], - [0, 1], - [-1, 1], - [-1, 0], - [-1, -1], + , + [0, -1], + [1, -1], + [1, 0], + [1, 1], + [0, 1], + [-1, 1], + [-1, 0], + [-1, -1], ] export const towerPowers = [PWR_OPERATE_TOWER, PWR_DISRUPT_TOWER] export const remoteTypeWeights: Partial<{ [key: string]: number }> = { - [RoomTypes.sourceKeeper]: Infinity, - [RoomTypes.enemy]: Infinity, - [RoomTypes.enemyRemote]: Infinity, - [RoomTypes.ally]: Infinity, - [RoomTypes.allyRemote]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemy]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.allyRemote]: Infinity, } export const maxWorkRequestDistance = 10 @@ -1235,118 +1268,118 @@ export const maxCombatDistance = 20 export const maxHaulDistance = 15 export const partsByPriority: PartsByPriority[] = [ - 'tough', - 'claim', - 'attack', - 'ranged_attack', - 'secondaryTough', - 'work', - 'carry', - 'move', - 'secondaryAttack', - 'heal', + 'tough', + 'claim', + 'attack', + 'ranged_attack', + 'secondaryTough', + 'work', + 'carry', + 'move', + 'secondaryAttack', + 'heal', ] export const partsByPriorityPartType: { [key in PartsByPriority]: BodyPartConstant } = { - [TOUGH]: TOUGH, - [CLAIM]: CLAIM, - [ATTACK]: ATTACK, - [RANGED_ATTACK]: RANGED_ATTACK, - secondaryTough: TOUGH, - [WORK]: WORK, - [CARRY]: CARRY, - [MOVE]: MOVE, - secondaryAttack: ATTACK, - [HEAL]: HEAL, + [TOUGH]: TOUGH, + [CLAIM]: CLAIM, + [ATTACK]: ATTACK, + [RANGED_ATTACK]: RANGED_ATTACK, + secondaryTough: TOUGH, + [WORK]: WORK, + [CARRY]: CARRY, + [MOVE]: MOVE, + secondaryAttack: ATTACK, + [HEAL]: HEAL, } export const rangedMassAttackMultiplierByRange = [1, 1, 0.4, 0.1] export enum RoomStatsKeys { - ControllerLevel = 'cl', - EnergyInputHarvest = 'eih', - EnergyInputBought = 'eib', - EnergyOutputUpgrade = 'eou', - EnergyOutputRepairOther = 'eoro', - EnergyOutputRepairWallOrRampart = 'eorwr', - EnergyOutputBuild = 'eob', - EnergyOutputSold = 'eos', - EnergyOutputSpawn = 'eosp', - EnergyOutputPower = 'eop', - MineralsHarvested = 'mh', - EnergyStored = 'es', - BatteriesStoredTimes10 = 'bes', - CreepCount = 'cc', - TotalCreepCount = 'tcc', - PowerCreepCount = 'pcc', - SpawnUsagePercentage = 'su', - MinHaulerCost = 'mhc', - EnergyOutputTransactionCosts = 'eotc', - EnergyTerminalSentDomestic = 'etsd', - EnergyTerminalSentOther = 'etso', - - GameTime = 'gt', - RemoteCount = 'rc', - RemoteEnergyStored = 'res', - RemoteEnergyInputHarvest = 'reih', - RemoteEnergyOutputRepairOther = 'reoro', - RemoteEnergyOutputBuild = 'reob', + ControllerLevel = 'cl', + EnergyInputHarvest = 'eih', + EnergyInputBought = 'eib', + EnergyOutputUpgrade = 'eou', + EnergyOutputRepairOther = 'eoro', + EnergyOutputRepairWallOrRampart = 'eorwr', + EnergyOutputBuild = 'eob', + EnergyOutputSold = 'eos', + EnergyOutputSpawn = 'eosp', + EnergyOutputPower = 'eop', + MineralsHarvested = 'mh', + EnergyStored = 'es', + BatteriesStoredTimes10 = 'bes', + CreepCount = 'cc', + TotalCreepCount = 'tcc', + PowerCreepCount = 'pcc', + SpawnUsagePercentage = 'su', + MinHaulerCost = 'mhc', + EnergyOutputTransactionCosts = 'eotc', + EnergyTerminalSentDomestic = 'etsd', + EnergyTerminalSentOther = 'etso', + + GameTime = 'gt', + RemoteCount = 'rc', + RemoteEnergyStored = 'res', + RemoteEnergyInputHarvest = 'reih', + RemoteEnergyOutputRepairOther = 'reoro', + RemoteEnergyOutputBuild = 'reob', } export const packedPosLength = 3 export const packedCoordLength = 2 export const cardinalOffsets = [ - { - x: -1, - y: 0, - }, - { - x: 1, - y: 0, - }, - { - x: 0, - y: -1, - }, - { - x: 0, - y: 1, - }, + { + x: -1, + y: 0, + }, + { + x: 1, + y: 0, + }, + { + x: 0, + y: -1, + }, + { + x: 0, + y: 1, + }, ] export const adjacentOffsets = [ - { - x: -1, - y: -1, - }, - { - x: 0, - y: -1, - }, - { - x: 1, - y: -1, - }, - { - x: 1, - y: 0, - }, - { - x: 1, - y: 1, - }, - { - x: 0, - y: 1, - }, - { - x: -1, - y: 1, - }, - { - x: -1, - y: 0, - }, + { + x: -1, + y: -1, + }, + { + x: 0, + y: -1, + }, + { + x: 1, + y: -1, + }, + { + x: 1, + y: 0, + }, + { + x: 1, + y: 1, + }, + { + x: 0, + y: 1, + }, + { + x: -1, + y: 1, + }, + { + x: -1, + y: 0, + }, ] export const defaultMinCutDepth = 7 /* export const defaultMineralPriority = { @@ -1354,8 +1387,8 @@ export const defaultMinCutDepth = 7 } */ export const decayCosts: Partial<{ [key in BuildableStructureConstant]: number }> = { - [STRUCTURE_ROAD]: roadUpkeepCost, - [STRUCTURE_CONTAINER]: containerUpkeepCost, + [STRUCTURE_ROAD]: roadUpkeepCost, + [STRUCTURE_CONTAINER]: containerUpkeepCost, } export const dynamicScoreRoomRange = 8 @@ -1367,46 +1400,48 @@ export const maxSegmentsOpen = 10 /** * The max possible spawn energy capacity rooms can have */ -export const maxSpawnEnergyCapacity = CONTROLLER_STRUCTURES[STRUCTURE_SPAWN][maxControllerLevel] * SPAWN_ENERGY_CAPACITY + CONTROLLER_STRUCTURES[STRUCTURE_EXTENSION][8] * EXTENSION_ENERGY_CAPACITY[maxControllerLevel] +export const maxSpawnEnergyCapacity = + CONTROLLER_STRUCTURES[STRUCTURE_SPAWN][maxControllerLevel] * SPAWN_ENERGY_CAPACITY + + CONTROLLER_STRUCTURES[STRUCTURE_EXTENSION][8] * EXTENSION_ENERGY_CAPACITY[maxControllerLevel] /** * Non-zero types of reserved registered coordinates */ export enum ReservedCoordTypes { - /** - * The creep is trying to spawn onto this coord - */ - spawning, - /** - * The notable reserved coord reserver is dying - */ - dying, - /** - * Probably a more temporary reserved coord that need not be considered in all situations - */ - normal, - /** - * Probably a more permanent reserved coord that should be considered in more situations - */ - important, - /** - * Probably a position very important to combat related coordinate reservation - */ - necessary, + /** + * The creep is trying to spawn onto this coord + */ + spawning, + /** + * The notable reserved coord reserver is dying + */ + dying, + /** + * Probably a more temporary reserved coord that need not be considered in all situations + */ + normal, + /** + * Probably a more permanent reserved coord that should be considered in more situations + */ + important, + /** + * Probably a position very important to combat related coordinate reservation + */ + necessary, } /** * Types of work intents */ export enum WorkTypes { - harvest, - repair, - build, - upgrade, - dismantle, - heal, - attack, - attackController, + harvest, + repair, + build, + upgrade, + dismantle, + heal, + attack, + attackController, } export enum SegmentIDs { @@ -1420,8 +1455,8 @@ export enum SegmentIDs { } export enum MovedTypes { - moved = 1, - wait, + moved = 1, + wait, } export enum FlagNames { diff --git a/src/international/requests.ts b/src/international/requests.ts index 1f4367635..78766d0ac 100644 --- a/src/international/requests.ts +++ b/src/international/requests.ts @@ -1,4 +1,4 @@ -import { findClosestRoomName, randomIntRange, randomRange, utils } from 'utils/utils' +import { randomIntRange, randomRange, utils } from 'utils/utils' import { collectiveManager } from './collective' import { roomNameUtils } from 'room/roomNameUtils' import { @@ -159,15 +159,21 @@ export class RequestsManager extends Sleepable { continue } - const communeName = findClosestRoomName(roomName, communesForResponding) + const communeName = roomNameUtils.findClosestRoomName(roomName, communesForResponding) if (!communeName) { // Wait on the request Memory.workRequests[roomName][WorkRequestKeys.abandon] = 20000 continue } - // Run a more simple and less expensive check, then a more complex and expensive to confirm. If the check fails, abandon the room for some time + if (Game.map.getRoomStatus(roomName) !== Game.map.getRoomStatus(communeName)) { + // We probably can't reach as it will likely be a respawn, novice, or closed + + Memory.workRequests[roomName][WorkRequestKeys.abandon] = 20000 + continue + } + // Run a more simple and less expensive check, then a more complex and expensive to confirm. If the check fails, abandon the room for some time if ( Game.map.getRoomLinearDistance(communeName, roomName) > maxWorkRequestDistance || roomNameUtils.advancedFindDistance(communeName, roomName, { @@ -279,11 +285,17 @@ export class RequestsManager extends Sleepable { communes.push(roomName) } - const communeName = findClosestRoomName(requestName, communes) + const communeName = roomNameUtils.findClosestRoomName(requestName, communes) if (!communeName) continue - // Run a more simple and less expensive check, then a more complex and expensive to confirm + if (Game.map.getRoomStatus(requestName) !== Game.map.getRoomStatus(communeName)) { + // We probably can't reach as it will likely be a respawn, novice, or closed + + Memory.workRequests[requestName][WorkRequestKeys.abandon] = 20000 + continue + } + // Run a more simple and less expensive check, then a more complex and expensive to confirm if ( Game.map.getRoomLinearDistance(communeName, requestName) > maxCombatDistance || roomNameUtils.advancedFindDistance(communeName, requestName, { @@ -346,11 +358,17 @@ export class RequestsManager extends Sleepable { communes.push(roomName) } - const communeName = findClosestRoomName(requestName, communes) + const communeName = roomNameUtils.findClosestRoomName(requestName, communes) if (!communeName) continue - // Run a more simple and less expensive check, then a more complex and expensive to confirm + if (Game.map.getRoomStatus(requestName) !== Game.map.getRoomStatus(communeName)) { + // We probably can't reach as it will likely be a respawn, novice, or closed + Memory.workRequests[requestName][WorkRequestKeys.abandon] = 20000 + continue + } + + // Run a more simple and less expensive check, then a more complex and expensive to confirm if ( Game.map.getRoomLinearDistance(communeName, requestName) > maxHaulDistance || roomNameUtils.advancedFindDistance(communeName, requestName, { diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index d12528df5..319c47236 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -34,10 +34,6 @@ import { GarbageCollector } from 'international/garbageCollector' import { EndTickManager } from 'international/endTick' import { EndTickCreepManager } from 'room/creeps/endTickCreepManager' import { PowerCreepOrganizer } from 'international/powerCreepOrganizer' -import { ContainerManager } from 'room/container' -import { DroppedResourceManager } from 'room/droppedResources' -import { RuinsManager } from 'room/ruins' -import { TombstoneManager } from 'room/tombstones' import { HaulerNeedManager } from 'room/commune/haulerNeed' import { LinkManager } from 'room/commune/links' import { StoringStructuresManager } from 'room/commune/storingStructures' @@ -103,6 +99,12 @@ import { CreepProcs } from 'room/creeps/creepProcs' import { Procs } from 'utils/procs' import { RoomObjectUtils } from 'room/roomObjectUtils' import { StructureUtils } from 'room/structureUtils' +import { RemoteProcs } from 'room/remoteProcs' +import { RemoteUtils } from 'room/remoteUtils' +import { LogisticsProcs } from 'room/logisticsProcs' +import { LogisticsUtils } from 'room/logisticsUtils' +import { TowerProcs } from 'room/commune/towerProcs' +import { TowerUtils } from 'room/commune/towerUtils' export function profilerRegister() { // Classes @@ -150,10 +152,6 @@ export function profilerRegister() { profiler.registerClass(SourceManager, 'SourceManager') profiler.registerClass(WorkRequestManager, 'WorkRequestManager') profiler.registerClass(EndTickCreepManager, 'EndTickCreepManager') - profiler.registerClass(ContainerManager, 'ContainerManager') - profiler.registerClass(DroppedResourceManager, 'DroppedResourceManager') - profiler.registerClass(RuinsManager, 'RuinManager') - profiler.registerClass(TombstoneManager, 'TombstoneManager') profiler.registerClass(HaulerNeedManager, 'HaulerNeedManager') profiler.registerClass(LinkManager, 'LinkManager') profiler.registerClass(StoringStructuresManager, 'StoringStructuresManager') @@ -174,6 +172,12 @@ export function profilerRegister() { profiler.registerClass(CommuneProcs, 'CommuneProc') profiler.registerClass(RoomObjectUtils, 'RoomObjectUtils') profiler.registerClass(StructureUtils, 'StructureUtils') + profiler.registerClass(RemoteProcs, 'RemoteProcs') + profiler.registerClass(RemoteUtils, 'RemoteUtils') + profiler.registerClass(LogisticsProcs, 'LogisticsProcs') + profiler.registerClass(LogisticsUtils, 'LogisticsUtils') + profiler.registerClass(TowerProcs, 'TowerProcs') + profiler.registerClass(TowerUtils, 'TowerUtils') // Creep classes diff --git a/src/room/commune/combatRequest.ts b/src/room/commune/combatRequest.ts index 35138da80..ab4d02fe5 100644 --- a/src/room/commune/combatRequest.ts +++ b/src/room/commune/combatRequest.ts @@ -1,80 +1,93 @@ import { CombatRequestKeys, RoomMemoryKeys, customColors } from 'international/constants' import { CommuneManager } from './commune' import { statsManager } from 'international/statsManager' +import { randomIntRange, utils } from 'utils/utils' +import { CombatRequest } from 'types/internationalRequests' + +const checkRoomStatusInverval = randomIntRange(200, 500) export class CombatRequestManager { - communeManager: CommuneManager + communeManager: CommuneManager - constructor(communeManager: CommuneManager) { - this.communeManager = communeManager - } + constructor(communeManager: CommuneManager) { + this.communeManager = communeManager + } - public run() { - const { room } = this.communeManager + public run() { + const { room } = this.communeManager - for ( - let index = room.memory[RoomMemoryKeys.combatRequests].length - 1; - index >= 0; - index -= 1 - ) { - const requestName = room.memory[RoomMemoryKeys.combatRequests][index] - const request = Memory.combatRequests[requestName] + for ( + let index = room.memory[RoomMemoryKeys.combatRequests].length - 1; + index >= 0; + index -= 1 + ) { + const requestName = room.memory[RoomMemoryKeys.combatRequests][index] + const request = Memory.combatRequests[requestName] - // The request has been deleted by soemthing else + // The request has been deleted by soemthing else - if (!request) { - room.memory[RoomMemoryKeys.combatRequests].splice(index, 1) - continue - } + if (!request) { + room.memory[RoomMemoryKeys.combatRequests].splice(index, 1) + continue + } - // We have no way to make creeps + // We have no way to make creeps - if (!room.roomManager.structures.spawn.length) { - delete request[CombatRequestKeys.responder] - room.memory[RoomMemoryKeys.combatRequests].splice(index, 1) - continue - } + if (!room.roomManager.structures.spawn.length) { + delete request[CombatRequestKeys.responder] + room.memory[RoomMemoryKeys.combatRequests].splice(index, 1) + continue + } - // We don't have enough energy to respond to the request + // We don't have enough energy to respond to the request - if (!this.canKeepRequest()) { - delete request[CombatRequestKeys.responder] - room.memory[RoomMemoryKeys.combatRequests].splice(index, 1) - } + if (!this.canKeepRequest(requestName, request)) { + delete request[CombatRequestKeys.responder] + room.memory[RoomMemoryKeys.combatRequests].splice(index, 1) + } - this[`${request[CombatRequestKeys.type]}Request`](requestName, index) - } + this[`${request[CombatRequestKeys.type]}Request`](requestName, index) } + } - private canKeepRequest() { - const { room } = this.communeManager + private canKeepRequest(requestName: string, request: Partial) { + const { room } = this.communeManager - // Ensure we aren't responding to too many requests for our energy level + // Ensure we aren't responding to too many requests for our energy level - if (room.storage && room.controller.level >= 4) { - if ( - room.memory[RoomMemoryKeys.combatRequests].length >= - room.communeManager.maxCombatRequests - ) - return false - } + if (room.storage && room.controller.level >= 4) { + if ( + room.memory[RoomMemoryKeys.combatRequests].length >= room.communeManager.maxCombatRequests + ) + return false + } - if ( - room.memory[RoomMemoryKeys.combatRequests].length >= - room.communeManager.estimatedEnergyIncome / 10 - ) - return false - return true + // If the room is closed or is now a respawn or novice zone + if ( + utils.isTickInterval(checkRoomStatusInverval) && + Game.map.getRoomStatus(requestName).status !== Game.map.getRoomStatus(room.name).status + ) { + return false } - private attackRequest(requestName: string, index: number) { - const { room } = this.communeManager - const request = Memory.combatRequests[requestName] - const requestRoom = Game.rooms[requestName] - if (!requestRoom) return + if ( + room.memory[RoomMemoryKeys.combatRequests].length >= + room.communeManager.estimatedEnergyIncome / 10 + ) { + return false + } - // If there are threats to our hegemony, temporarily abandon the request - /* + return true + } + + private attackRequest(requestName: string, index: number) { + const { room } = this.communeManager + const request = Memory.combatRequests[requestName] + const requestRoom = Game.rooms[requestName] + if (!requestRoom) return + + // If there are threats to our hegemony, temporarily abandon the request + /* if (requestRoom.roomManager.enemyAttackers.length > 0) { request[CombatRequestKeys.abandon] = 1500 @@ -84,56 +97,64 @@ export class CombatRequestManager { } */ - // If there is a controller and it's in safemode, abandon until it ends + // If there is a controller and it's in safemode, abandon until it ends - if (requestRoom.controller && requestRoom.controller.safeMode) { - request[CombatRequestKeys.abandon] = requestRoom.controller.safeMode + if (requestRoom.controller && requestRoom.controller.safeMode) { + request[CombatRequestKeys.abandon] = requestRoom.controller.safeMode - this.manageAbandonment(requestName, index) - return - } -/* + this.manageAbandonment(requestName, index) + return + } + /* const enemySquadData = requestRoom.roomManager.enemySquadData request[CombatRequestKeys.minRangedHeal] = Math.max(enemySquadData.highestRangedDamage, 1) request[CombatRequestKeys.minDamage] = enemySquadData.highestHeal * 1.2 */ - const towers = requestRoom.roomManager.structures.tower + const towers = requestRoom.roomManager.structures.tower - let minDamage = 1 - let minMeleeHeal = towers.length ? (towers.length * TOWER_POWER_ATTACK) : 1 - let minRangedHeal = towers.length ? (towers.length * TOWER_POWER_ATTACK) : 1 + let minDamage = 1 + let minMeleeHeal = towers.length ? towers.length * TOWER_POWER_ATTACK : 1 + let minRangedHeal = towers.length ? towers.length * TOWER_POWER_ATTACK : 1 - for (const enemyCreep of room.roomManager.enemyAttackers) { - // If we have tower(s) and its an invader, don't care about it + for (const enemyCreep of room.roomManager.enemyAttackers) { + // If we have tower(s) and its an invader, don't care about it - minDamage += Math.max(enemyCreep.combatStrength.heal * 1.2, Math.ceil(enemyCreep.hits / 50)) - minMeleeHeal += enemyCreep.combatStrength.melee + enemyCreep.combatStrength.ranged - minRangedHeal += enemyCreep.combatStrength.ranged - } - - request[CombatRequestKeys.minRangedHeal] = Math.max(request[CombatRequestKeys.minRangedHeal], minRangedHeal) - request[CombatRequestKeys.minMeleeHeal] = Math.max(request[CombatRequestKeys.minRangedHeal], minMeleeHeal) - request[CombatRequestKeys.minDamage] = Math.max(request[CombatRequestKeys.minRangedHeal], minDamage) - - // If there are no enemyCreeps - if ( - !requestRoom.roomManager.notMyCreeps.enemy.length && - (!requestRoom.controller || !requestRoom.controller.owner) - ) { - request[CombatRequestKeys.inactionTimer] -= 1 - this.manageInaction(requestName, index) - } else - request[CombatRequestKeys.inactionTimer] = request[CombatRequestKeys.inactionTimerMax] + minDamage += Math.max(enemyCreep.combatStrength.heal * 1.2, Math.ceil(enemyCreep.hits / 50)) + minMeleeHeal += enemyCreep.combatStrength.melee + enemyCreep.combatStrength.ranged + minRangedHeal += enemyCreep.combatStrength.ranged } - private harassRequest(requestName: string, index: number) { - const { room } = this.communeManager - const request = Memory.combatRequests[requestName] - const requestRoom = Game.rooms[requestName] - if (!requestRoom) return - /* + request[CombatRequestKeys.minRangedHeal] = Math.max( + request[CombatRequestKeys.minRangedHeal], + minRangedHeal, + ) + request[CombatRequestKeys.minMeleeHeal] = Math.max( + request[CombatRequestKeys.minRangedHeal], + minMeleeHeal, + ) + request[CombatRequestKeys.minDamage] = Math.max( + request[CombatRequestKeys.minRangedHeal], + minDamage, + ) + + // If there are no enemyCreeps + if ( + !requestRoom.roomManager.notMyCreeps.enemy.length && + (!requestRoom.controller || !requestRoom.controller.owner) + ) { + request[CombatRequestKeys.inactionTimer] -= 1 + this.manageInaction(requestName, index) + } else request[CombatRequestKeys.inactionTimer] = request[CombatRequestKeys.inactionTimerMax] + } + + private harassRequest(requestName: string, index: number) { + const { room } = this.communeManager + const request = Memory.combatRequests[requestName] + const requestRoom = Game.rooms[requestName] + if (!requestRoom) return + /* if (Game.time % Math.floor(Math.random() * 100) === 0) { const structures = requestRoom[CreepMemoryKeys.structureTarget]s @@ -144,113 +165,115 @@ export class CombatRequestManager { request[CombatRequestKeys.dismantle] = Math.min(Math.ceil(totalHits / DISMANTLE_POWER / 5000), 20) } */ - // If there are threats to our hegemony, temporarily abandon the request - - const threateningAttacker = requestRoom.roomManager.enemyAttackers.find( - creep => creep.combatStrength.ranged + creep.combatStrength.ranged > 0, - ) - - if (threateningAttacker) { - request[CombatRequestKeys.abandon] = 1500 + // If there are threats to our hegemony, temporarily abandon the request - this.communeManager.deleteCombatRequest(requestName, index) - return - } - - // If there are no enemyCreeps - if (!requestRoom.roomManager.notMyCreeps.enemy.length) { - request[CombatRequestKeys.inactionTimer] -= 1 - this.manageInaction(requestName, index) - } else { + const threateningAttacker = requestRoom.roomManager.enemyAttackers.find( + creep => creep.combatStrength.ranged + creep.combatStrength.ranged > 0, + ) - if (!request[CombatRequestKeys.inactionTimerMax]) { + if (threateningAttacker) { + request[CombatRequestKeys.abandon] = 1500 - this.communeManager.deleteCombatRequest(requestName, index) - return - } - - request[CombatRequestKeys.inactionTimer] = request[CombatRequestKeys.inactionTimerMax] - } + this.communeManager.deleteCombatRequest(requestName, index) + return } - private defendRequest(requestName: string, index: number) { - const { room } = this.communeManager - const request = Memory.combatRequests[requestName] - const requestRoom = Game.rooms[requestName] - if (!requestRoom) return - - if (requestRoom.controller && requestRoom.controller.safeMode) { - request[CombatRequestKeys.abandon] = requestRoom.controller.safeMode - - this.manageAbandonment(requestName, index) - return - } - - const hasTowers = !!room.roomManager.structures.tower.length - - let minDamage = 1 - let minMeleeHeal = 1 - let minRangedHeal = 1 - - for (const enemyCreep of room.roomManager.enemyAttackers) { - // If we have tower(s) and its an invader, don't care about it - if (hasTowers && enemyCreep.owner.username === 'Invader') { - - continue - } + // If there are no enemyCreeps + if (!requestRoom.roomManager.notMyCreeps.enemy.length) { + request[CombatRequestKeys.inactionTimer] -= 1 + this.manageInaction(requestName, index) + } else { + if (!request[CombatRequestKeys.inactionTimerMax]) { + this.communeManager.deleteCombatRequest(requestName, index) + return + } + + request[CombatRequestKeys.inactionTimer] = request[CombatRequestKeys.inactionTimerMax] + } + } - minDamage += Math.max(enemyCreep.combatStrength.heal * 1.2, Math.ceil(enemyCreep.hits / 50)) - minMeleeHeal += enemyCreep.combatStrength.melee + enemyCreep.combatStrength.ranged - minRangedHeal += enemyCreep.combatStrength.ranged + private defendRequest(requestName: string, index: number) { + const { room } = this.communeManager + const request = Memory.combatRequests[requestName] + const requestRoom = Game.rooms[requestName] + if (!requestRoom) return + if (requestRoom.controller && requestRoom.controller.safeMode) { + request[CombatRequestKeys.abandon] = requestRoom.controller.safeMode - } + this.manageAbandonment(requestName, index) + return + } - request[CombatRequestKeys.minRangedHeal] = Math.max(request[CombatRequestKeys.minRangedHeal], minRangedHeal) - request[CombatRequestKeys.minMeleeHeal] = Math.max(request[CombatRequestKeys.minRangedHeal], minMeleeHeal) - request[CombatRequestKeys.minDamage] = Math.max(request[CombatRequestKeys.minRangedHeal], minDamage) + const hasTowers = !!room.roomManager.structures.tower.length - // If there is nothing to defend from right now - if (!requestRoom.roomManager.enemyDamageThreat) { - request[CombatRequestKeys.inactionTimer] -= 1 - this.manageInaction(requestName, index) - } else { + let minDamage = 1 + let minMeleeHeal = 1 + let minRangedHeal = 1 - if (!request[CombatRequestKeys.inactionTimerMax]) { + for (const enemyCreep of room.roomManager.enemyAttackers) { + // If we have tower(s) and its an invader, don't care about it + if (hasTowers && enemyCreep.owner.username === 'Invader') { + continue + } - this.communeManager.deleteCombatRequest(requestName, index) - return - } + minDamage += Math.max(enemyCreep.combatStrength.heal * 1.2, Math.ceil(enemyCreep.hits / 50)) + minMeleeHeal += enemyCreep.combatStrength.melee + enemyCreep.combatStrength.ranged + minRangedHeal += enemyCreep.combatStrength.ranged + } - request[CombatRequestKeys.inactionTimer] = request[CombatRequestKeys.inactionTimerMax] - } + request[CombatRequestKeys.minRangedHeal] = Math.max( + request[CombatRequestKeys.minRangedHeal], + minRangedHeal, + ) + request[CombatRequestKeys.minMeleeHeal] = Math.max( + request[CombatRequestKeys.minRangedHeal], + minMeleeHeal, + ) + request[CombatRequestKeys.minDamage] = Math.max( + request[CombatRequestKeys.minRangedHeal], + minDamage, + ) + + // If there is nothing to defend from right now + if (!requestRoom.roomManager.enemyDamageThreat) { + request[CombatRequestKeys.inactionTimer] -= 1 + this.manageInaction(requestName, index) + } else { + if (!request[CombatRequestKeys.inactionTimerMax]) { + this.communeManager.deleteCombatRequest(requestName, index) + return + } + + request[CombatRequestKeys.inactionTimer] = request[CombatRequestKeys.inactionTimerMax] } + } - private manageInaction(requestName: string, index: number) { - const request = Memory.combatRequests[requestName] + private manageInaction(requestName: string, index: number) { + const request = Memory.combatRequests[requestName] - if (request[CombatRequestKeys.inactionTimer] <= 0) { - this.communeManager.deleteCombatRequest(requestName, index) - return - } + if (request[CombatRequestKeys.inactionTimer] <= 0) { + this.communeManager.deleteCombatRequest(requestName, index) + return } + } - private manageAbandonment(requestName: string, index: number) { - const request = Memory.combatRequests[requestName] + private manageAbandonment(requestName: string, index: number) { + const request = Memory.combatRequests[requestName] - if (request[CombatRequestKeys.abandonments] >= 3) { - // Delete the request + if (request[CombatRequestKeys.abandonments] >= 3) { + // Delete the request - this.communeManager.deleteCombatRequest(requestName, index) - return - } + this.communeManager.deleteCombatRequest(requestName, index) + return + } - if (request[CombatRequestKeys.abandon] > 0) { - // Stop responding to the request + if (request[CombatRequestKeys.abandon] > 0) { + // Stop responding to the request - this.communeManager.room.memory[RoomMemoryKeys.combatRequests].splice(index, 1) - delete request[CombatRequestKeys.responder] - return - } + this.communeManager.room.memory[RoomMemoryKeys.combatRequests].splice(index, 1) + delete request[CombatRequestKeys.responder] + return } + } } diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index 7ec4d6f5a..1be5bcaea 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -35,7 +35,6 @@ import { CombatRequestManager } from './combatRequest' import { PowerSpawnsManager } from './powerSpawn' import './haulerSize' import { SourceManager } from './sourceManager' -import { TowerManager } from './towers' import { DefenceManager } from './defence' import { SpawningStructuresManager } from './spawning/spawningStructures' import { HaulRequestManager } from './haulRequestManager' @@ -57,6 +56,8 @@ import { LogTypes, customLog } from 'utils/logging' import { communeUtils } from './communeUtils' import { communeProcs } from './communeProcs' import { structureUtils } from 'room/structureUtils' +import { logisticsProcs } from 'room/logisticsProcs' +import { towerProcs } from './towerProcs' export type ResourceTargets = { min: Partial<{ [key in ResourceConstant]: number }> @@ -71,7 +72,6 @@ export class CommuneManager { constructionManager: ConstructionManager defenceManager: DefenceManager - towerManager: TowerManager storingStructuresManager: StoringStructuresManager linkManager: LinkManager labManager: LabManager @@ -122,7 +122,6 @@ export class CommuneManager { this.constructionManager = new ConstructionManager(this) this.defenceManager = new DefenceManager(this) - this.towerManager = new TowerManager(this) this.storingStructuresManager = new StoringStructuresManager(this) this.linkManager = new LinkManager(this) this.labManager = new LabManager(this) @@ -274,7 +273,7 @@ export class CommuneManager { if (!this.room.memory[RoomMemoryKeys.communePlanned]) return this.defenceManager.run() - this.towerManager.run() + towerProcs.run(this.room) this.defenceManager.manageThreat() this.defenceManager.manageDefenceRequests() @@ -291,10 +290,10 @@ export class CommuneManager { this.spawningStructuresManager.createRoomLogisticsRequests() this.storingStructuresManager.run() this.factoryManager.run() - this.room.roomManager.containerManager.runCommune() - this.room.roomManager.droppedResourceManager.runCommune() - this.room.roomManager.tombstoneManager.runCommune() - this.room.roomManager.ruinManager.runCommune() + logisticsProcs.createCommuneContainerLogisticsRequests(this.room) + logisticsProcs.createCommuneDroppedResourceLogisticsRequests(this.room) + logisticsProcs.createCommuneTombstoneLogisticsRequests(this.room) + logisticsProcs.createCommuneRuinLogisticsRequests(this.room) this.linkManager.run() this.labManager.run() this.powerSpawningStructuresManager.run() diff --git a/src/room/commune/communeData.ts b/src/room/commune/communeData.ts index 6389aa92b..6aebe2fd6 100644 --- a/src/room/commune/communeData.ts +++ b/src/room/commune/communeData.ts @@ -9,6 +9,7 @@ interface CommuneData { generalRepairStructureCoords: Set maxUpgradeStrength: number estimatedCommuneSourceIncome: number[] + towerRampartRepairTreshold: number } /** @@ -28,6 +29,7 @@ export class CommuneDataManager { if (utils.isTickInterval(10)) { delete data.estimatedCommuneSourceIncome + delete data.towerRampartRepairTreshold } } } diff --git a/src/room/commune/communeProcs.ts b/src/room/commune/communeProcs.ts index 678f8b920..335baad9f 100644 --- a/src/room/commune/communeProcs.ts +++ b/src/room/commune/communeProcs.ts @@ -1,6 +1,7 @@ import { roomUtils } from 'room/roomUtils' import { communeDataManager } from './communeData' import { communeUtils } from './communeUtils' +import { RoomLogisticsRequestTypes } from 'international/constants' /** * Minor processes for communes diff --git a/src/room/commune/haulRequestManager.ts b/src/room/commune/haulRequestManager.ts index c126339eb..219eb9f9c 100644 --- a/src/room/commune/haulRequestManager.ts +++ b/src/room/commune/haulRequestManager.ts @@ -1,102 +1,88 @@ import { - customColors, - HaulRequestKeys, - CombatRequestKeys, - RoomMemoryKeys, + customColors, + HaulRequestKeys, + CombatRequestKeys, + RoomMemoryKeys, } from 'international/constants' -import { randomTick } from 'utils/utils' +import { randomIntRange, randomTick, utils } from 'utils/utils' import { CommuneManager } from './commune' +const checkRoomStatusInverval = randomIntRange(200, 500) + export class HaulRequestManager { - communeManager: CommuneManager + communeManager: CommuneManager + + constructor(communeManager: CommuneManager) { + this.communeManager = communeManager + } + + public preTickRun() { + const { room } = this.communeManager + return + for (let index = 0; index < room.memory[RoomMemoryKeys.haulRequests].length; index++) { + const requestName = room.memory[RoomMemoryKeys.haulRequests][index] + const request = Memory.haulRequests[requestName] + + if ( + !request || + !room.roomManager.structures.spawn.length || + room.roomManager.resourcesInStoringStructures.energy < this.communeManager.minStoredEnergy + ) { + this.communeManager.room.memory[RoomMemoryKeys.haulRequests].splice(index, 1) + continue + } + + // The room is closed or is now a respawn or novice zone + + if ( + utils.isTickInterval(checkRoomStatusInverval) && + Game.map.getRoomStatus(requestName).status !== Game.map.getRoomStatus(room.name).status + ) { + delete Memory.haulRequests[requestName] + room.memory[RoomMemoryKeys.haulRequests].splice(index, 1) + delete request[HaulRequestKeys.responder] + return + } - constructor(communeManager: CommuneManager) { - this.communeManager = communeManager - } + const val = HaulRequestKeys.type + const val2 = request[val] - public preTickRun() { - const { room } = this.communeManager - return - for (let index = 0; index < room.memory[RoomMemoryKeys.haulRequests].length; index++) { - const requestName = room.memory[RoomMemoryKeys.haulRequests][index] - const request = Memory.haulRequests[requestName] - - if ( - !request || - !room.roomManager.structures.spawn.length || - room.roomManager.resourcesInStoringStructures.energy < - this.communeManager.minStoredEnergy - ) { - this.communeManager.room.memory[RoomMemoryKeys.haulRequests].splice(index, 1) - continue - } - - // The room is closed or is now a respawn or novice zone - - if ( - randomTick(20) && - Game.map.getRoomStatus(requestName).status !== - Game.map.getRoomStatus(room.name).status - ) { - delete Memory.haulRequests[requestName] - room.memory[RoomMemoryKeys.haulRequests].splice(index, 1) - delete request[HaulRequestKeys.responder] - return - } - - const val = HaulRequestKeys.type - const val2 = request[val] - - const val3 = request[0] - - if (request[HaulRequestKeys.type] === 'transfer') - this.preTickTransferRequest(requestName, index) - this.withdrawRequest(requestName, index) - } + const val3 = request[0] + + if (request[HaulRequestKeys.type] === 'transfer') + this.preTickTransferRequest(requestName, index) + this.withdrawRequest(requestName, index) } + } - private preTickTransferRequest(requestName: string, index: number) {} + private preTickTransferRequest(requestName: string, index: number) {} - public run() { - const { room } = this.communeManager - return + public run() { + const { room } = this.communeManager + return - for (let index = 0; index < room.memory[RoomMemoryKeys.haulRequests].length; index++) { - const requestName = room.memory[RoomMemoryKeys.haulRequests][index] - const request = Memory.haulRequests[requestName] - - if (!request) { - this.communeManager.room.memory[RoomMemoryKeys.haulRequests].splice(index, 1) - continue - } - - // The room is closed or is now a respawn or novice zone - - if ( - randomTick(20) && - Game.map.getRoomStatus(requestName).status !== - Game.map.getRoomStatus(room.name).status - ) { - delete Memory.haulRequests[requestName] - room.memory[RoomMemoryKeys.haulRequests].splice(index, 1) - delete request[HaulRequestKeys.responder] - return - } - - if (request[HaulRequestKeys.type] === 'transfer') - this.transferRequest(requestName, index) - this.withdrawRequest(requestName, index) - } + for (let index = 0; index < room.memory[RoomMemoryKeys.haulRequests].length; index++) { + const requestName = room.memory[RoomMemoryKeys.haulRequests][index] + const request = Memory.haulRequests[requestName] + + if (!request) { + this.communeManager.room.memory[RoomMemoryKeys.haulRequests].splice(index, 1) + continue + } + + if (request[HaulRequestKeys.type] === 'transfer') this.transferRequest(requestName, index) + this.withdrawRequest(requestName, index) } + } - private transferRequest(requestName: string, index: number) { - const { room } = this.communeManager - const request = Memory.haulRequests[requestName] - const requestRoom = Game.rooms[requestName] - if (!requestRoom) return + private transferRequest(requestName: string, index: number) { + const { room } = this.communeManager + const request = Memory.haulRequests[requestName] + const requestRoom = Game.rooms[requestName] + if (!requestRoom) return - // If there are threats to our hegemony, temporarily abandon the request - /* + // If there are threats to our hegemony, temporarily abandon the request + /* if (requestRoom.roomManager.enemyAttackers.length > 0) { request[CombatRequestKeys.abandon] = 1500 @@ -106,33 +92,33 @@ export class HaulRequestManager { } */ - // If there is a controller and it's in safemode, abandon until it ends - - if (requestRoom.controller && requestRoom.controller.safeMode) { - request[HaulRequestKeys.abandon] = requestRoom.controller.safeMode - - room.memory[RoomMemoryKeys.haulRequests].splice(index, 1) - delete request[HaulRequestKeys.responder] - } + // If there is a controller and it's in safemode, abandon until it ends - // If there are no enemyCreeps, delete the combatRequest + if (requestRoom.controller && requestRoom.controller.safeMode) { + request[HaulRequestKeys.abandon] = requestRoom.controller.safeMode - if ( - !requestRoom.roomManager.notMyCreeps.enemy.length && - (!requestRoom.controller || !requestRoom.controller.owner) - ) { - delete Memory.haulRequests[requestName] - room.memory[RoomMemoryKeys.haulRequests].splice(index, 1) - delete request[HaulRequestKeys.responder] - return - } + room.memory[RoomMemoryKeys.haulRequests].splice(index, 1) + delete request[HaulRequestKeys.responder] } - private withdrawRequest(requestName: string, index: number) { - const { room } = this.communeManager - const request = Memory.haulRequests[requestName] - const requestRoom = Game.rooms[requestName] - if (!requestRoom) return - return + // If there are no enemyCreeps, delete the combatRequest + + if ( + !requestRoom.roomManager.notMyCreeps.enemy.length && + (!requestRoom.controller || !requestRoom.controller.owner) + ) { + delete Memory.haulRequests[requestName] + room.memory[RoomMemoryKeys.haulRequests].splice(index, 1) + delete request[HaulRequestKeys.responder] + return } + } + private withdrawRequest(requestName: string, index: number) { + const { room } = this.communeManager + const request = Memory.haulRequests[requestName] + const requestRoom = Game.rooms[requestName] + if (!requestRoom) return + + return + } } diff --git a/src/room/commune/remotesManager.ts b/src/room/commune/remotesManager.ts index d5a287b4c..71058f8f3 100644 --- a/src/room/commune/remotesManager.ts +++ b/src/room/commune/remotesManager.ts @@ -1,21 +1,21 @@ import { - remoteRoles, - maxRemoteRoomDistance, - remoteTypeWeights, - packedPosLength, - RoomMemoryKeys, - RoomTypes, - defaultDataDecay, - maxRemotePathDistance, + remoteRoles, + maxRemoteRoomDistance, + remoteTypeWeights, + packedPosLength, + RoomMemoryKeys, + RoomTypes, + defaultDataDecay, + maxRemotePathDistance, } from 'international/constants' import { - findCarryPartsRequired, - findLowestScore, - getRange, - randomIntRange, - randomRange, - randomTick, - utils, + findCarryPartsRequired, + findLowestScore, + getRange, + randomIntRange, + randomRange, + randomTick, + utils, } from 'utils/utils' import { unpackPosList } from 'other/codec' import { CommuneManager } from './commune' @@ -23,162 +23,164 @@ import { roomNameUtils } from 'room/roomNameUtils' import { structureUtils } from 'room/structureUtils' type RemoteSourcePathTypes = - | RoomMemoryKeys.remoteSourceFastFillerPaths - | RoomMemoryKeys.remoteSourceHubPaths + | RoomMemoryKeys.remoteSourceFastFillerPaths + | RoomMemoryKeys.remoteSourceHubPaths const remoteSourcePathTypes: RemoteSourcePathTypes[] = [ - RoomMemoryKeys.remoteSourceFastFillerPaths, - RoomMemoryKeys.remoteSourceHubPaths, + RoomMemoryKeys.remoteSourceFastFillerPaths, + RoomMemoryKeys.remoteSourceHubPaths, ] const manageUseInterval = randomIntRange(150, 200) +const checkRoomStatusInterval = randomIntRange(200, 500) export class RemotesManager { - communeManager: CommuneManager + communeManager: CommuneManager - constructor(communeManager: CommuneManager) { - this.communeManager = communeManager - } + constructor(communeManager: CommuneManager) { + this.communeManager = communeManager + } + + update() { + const roomMemory = Memory.rooms[this.communeManager.room.name] - update() { - const roomMemory = Memory.rooms[this.communeManager.room.name] + for (const remoteName of roomMemory[RoomMemoryKeys.remotes]) { + roomNameUtils.updateCreepsOfRemoteName(remoteName, this.communeManager) + } - for (const remoteName of roomMemory[RoomMemoryKeys.remotes]) { + this.updateRemoteResourcePathType() + } - roomNameUtils.updateCreepsOfRemoteName(remoteName, this.communeManager) - } + private updateRemoteResourcePathType() { + if (this.communeManager.remoteResourcePathType !== undefined && !randomTick()) return - this.updateRemoteResourcePathType() + if ( + this.communeManager.room.storage && + structureUtils.isRCLActionable(this.communeManager.room.storage) + ) { + this.communeManager.remoteResourcePathType = RoomMemoryKeys.remoteSourceHubPaths + return } + this.communeManager.remoteResourcePathType = RoomMemoryKeys.remoteSourceFastFillerPaths + } + initRun() { + const { room } = this.communeManager - private updateRemoteResourcePathType() { - if (this.communeManager.remoteResourcePathType !== undefined && !randomTick()) return + // Loop through the commune's remote names - if (this.communeManager.room.storage && structureUtils.isRCLActionable(this.communeManager.room.storage)) { - this.communeManager.remoteResourcePathType = RoomMemoryKeys.remoteSourceHubPaths - return - } - this.communeManager.remoteResourcePathType = RoomMemoryKeys.remoteSourceFastFillerPaths - } + for (let index = room.memory[RoomMemoryKeys.remotes].length - 1; index >= 0; index -= 1) { + // Get the name of the remote using the index - initRun() { - const { room } = this.communeManager + const remoteName = room.memory[RoomMemoryKeys.remotes][index] + const remoteMemory = Memory.rooms[remoteName] - // Loop through the commune's remote names + // Reset values to avoid error - for (let index = room.memory[RoomMemoryKeys.remotes].length - 1; index >= 0; index -= 1) { - // Get the name of the remote using the index + for (const i in remoteMemory[RoomMemoryKeys.remoteSources]) { + remoteMemory[RoomMemoryKeys.maxSourceIncome][i] = 0 + remoteMemory[RoomMemoryKeys.remoteSourceHarvesters][i] = 0 + remoteMemory[RoomMemoryKeys.haulers][i] = 0 - const remoteName = room.memory[RoomMemoryKeys.remotes][index] - const remoteMemory = Memory.rooms[remoteName] + remoteMemory[RoomMemoryKeys.remoteSourceCreditChange][i] = 0 + remoteMemory[RoomMemoryKeys.remoteSourceCreditReservation][i] = 0 + } + remoteMemory[RoomMemoryKeys.remoteReservers] = 0 - // Reset values to avoid error + // If the room isn't a remote, remove it from the remotes array - for (const i in remoteMemory[RoomMemoryKeys.remoteSources]) { - remoteMemory[RoomMemoryKeys.maxSourceIncome][i] = 0 - remoteMemory[RoomMemoryKeys.remoteSourceHarvesters][i] = 0 - remoteMemory[RoomMemoryKeys.haulers][i] = 0 + if ( + remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote || + remoteMemory[RoomMemoryKeys.commune] !== room.name + ) { + this.communeManager.removeRemote(remoteName, index) + continue + } - remoteMemory[RoomMemoryKeys.remoteSourceCreditChange][i] = 0 - remoteMemory[RoomMemoryKeys.remoteSourceCreditReservation][i] = 0 - } - remoteMemory[RoomMemoryKeys.remoteReservers] = 0 + // If we've determined the room to be unusable + if (!this.manageUse(remoteName)) continue - // If the room isn't a remote, remove it from the remotes array + // The room is closed or is now a respawn or novice zone - if ( - remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote || - remoteMemory[RoomMemoryKeys.commune] !== room.name - ) { - this.communeManager.removeRemote(remoteName, index) - continue - } + if ( + utils.isTickInterval(checkRoomStatusInterval) && + Game.map.getRoomStatus(remoteName).status !== Game.map.getRoomStatus(room.name).status + ) { + this.communeManager.removeRemote(remoteName, index) + continue + } - // If we've determined the room to be unusable - if (!this.manageUse(remoteName)) continue + if ( + remoteMemory[RoomMemoryKeys.abandonRemote] !== undefined && + remoteMemory[RoomMemoryKeys.abandonRemote] > 0 + ) { + if (!remoteMemory[RoomMemoryKeys.recursedAbandonment]) { + this.recurseAbandonment(remoteName) + } - // The room is closed or is now a respawn or novice zone + this.manageAbandonment(remoteName) + continue + } - if ( - utils.isTickInterval(100) && - Game.map.getRoomStatus(remoteName).status !== - Game.map.getRoomStatus(room.name).status - ) { - this.communeManager.removeRemote(remoteName, index) - continue - } + this.managePathCacheAllowance(remoteName) - if (remoteMemory[RoomMemoryKeys.abandonRemote] !== undefined && remoteMemory[RoomMemoryKeys.abandonRemote] > 0) { - if (!remoteMemory[RoomMemoryKeys.recursedAbandonment]) { - this.recurseAbandonment(remoteName) - } + for (const i in remoteMemory[RoomMemoryKeys.remoteSources]) { + remoteMemory[RoomMemoryKeys.maxSourceIncome][i] = + SOURCE_ENERGY_NEUTRAL_CAPACITY / ENERGY_REGEN_TIME + } + remoteMemory[RoomMemoryKeys.remoteReservers] = 5 - this.manageAbandonment(remoteName) - continue - } + // Get the remote - this.managePathCacheAllowance(remoteName) + const remote = Game.rooms[remoteName] - for (const i in remoteMemory[RoomMemoryKeys.remoteSources]) { - remoteMemory[RoomMemoryKeys.maxSourceIncome][i] = - SOURCE_ENERGY_NEUTRAL_CAPACITY / ENERGY_REGEN_TIME - } - remoteMemory[RoomMemoryKeys.remoteReservers] = 5 + const possibleReservation = room.energyCapacityAvailable >= 650 + const isReserved = + remote && + remote.controller.reservation && + remote.controller.reservation.username === Memory.me - // Get the remote + // If the remote is reserved - const remote = Game.rooms[remoteName] + if (possibleReservation) { + // We can potentially double our income - const possibleReservation = room.energyCapacityAvailable >= 650 - const isReserved = - remote && - remote.controller.reservation && - remote.controller.reservation.username === Memory.me - - // If the remote is reserved - - if (possibleReservation) { - // We can potentially double our income - - for (const i in remoteMemory[RoomMemoryKeys.remoteSources]) { - remoteMemory[RoomMemoryKeys.maxSourceIncome][i] *= 2 - } - - // If the reservation isn't soon to run out, relative to the room's sourceEfficacy average - - if ( - isReserved && - remote.controller.reservation.ticksToEnd >= - Math.max( - (remoteMemory[RoomMemoryKeys.remoteControllerPath].length / - packedPosLength) * - 3, - 500, - ) - ) { - remoteMemory[RoomMemoryKeys.remoteReservers] = 0 - } - } - - if (remote) { - const sourceContainers = remote.roomManager.sourceContainers - const remoteSources = remote.roomManager.remoteSources - for (const i in remoteSources) { - remoteMemory[RoomMemoryKeys.remoteSourceCredit][i] = 0 - - const source = remoteSources[i] - const container = sourceContainers[i] - if (container) { - remoteMemory[RoomMemoryKeys.remoteSourceCredit][i] += container.store.energy - } - - for (const resource of remote.roomManager.droppedEnergy) { - if (getRange(resource.pos, source.pos) > 1) continue - - remoteMemory[RoomMemoryKeys.remoteSourceCredit][i] += resource.amount - } - } - /* + for (const i in remoteMemory[RoomMemoryKeys.remoteSources]) { + remoteMemory[RoomMemoryKeys.maxSourceIncome][i] *= 2 + } + + // If the reservation isn't soon to run out, relative to the room's sourceEfficacy average + + if ( + isReserved && + remote.controller.reservation.ticksToEnd >= + Math.max( + (remoteMemory[RoomMemoryKeys.remoteControllerPath].length / packedPosLength) * 3, + 500, + ) + ) { + remoteMemory[RoomMemoryKeys.remoteReservers] = 0 + } + } + + if (remote) { + const sourceContainers = remote.roomManager.sourceContainers + const remoteSources = remote.roomManager.remoteSources + for (const i in remoteSources) { + remoteMemory[RoomMemoryKeys.remoteSourceCredit][i] = 0 + + const source = remoteSources[i] + const container = sourceContainers[i] + if (container) { + remoteMemory[RoomMemoryKeys.remoteSourceCredit][i] += container.store.energy + } + + for (const resource of remote.roomManager.droppedEnergy) { + if (getRange(resource.pos, source.pos) > 1) continue + + remoteMemory[RoomMemoryKeys.remoteSourceCredit][i] += resource.amount + } + } + /* remoteMemory[RoomMemoryKeys.minDamage] = 0 remoteMemory[RoomMemoryKeys.minHeal] = 0 @@ -191,281 +193,272 @@ export class RemotesManager { remoteMemory[RoomMemoryKeys.minHeal] += enemyCreep.combatStrength.ranged } */ - // Record if we have or don't have a source container for each source - - for (const i in sourceContainers) { - remoteMemory[RoomMemoryKeys.hasContainer][i] = !!sourceContainers - } - - // Temporary measure while DynamicSquads are in progress - - const enemyAttackers = remote.roomManager.enemyAttackers - if (enemyAttackers.length) { - const score = findLowestScore(enemyAttackers, creep => { - return creep.ticksToLive - }) - remoteMemory[RoomMemoryKeys.danger] = - Game.time + randomIntRange(score, score + 100) - roomNameUtils.abandonRemote(remoteName, randomIntRange(score, score + 100)) - continue - } - - // If the controller is reserved and not by me - - if ( - remote.controller.reservation && - remote.controller.reservation.username !== Memory.me - ) - remoteMemory[RoomMemoryKeys.enemyReserved] = true - // If the controller is not reserved or is by us - else remoteMemory[RoomMemoryKeys.enemyReserved] = false - - remoteMemory[RoomMemoryKeys.remoteCoreAttacker] = - remote.roomManager.structures.invaderCore.length * 8 - remoteMemory[RoomMemoryKeys.invaderCore] = - remote.roomManager.structures.invaderCore.length - - // Create need if there are any structures that need to be removed - - remoteMemory[RoomMemoryKeys.remoteDismantler] = Math.min( - remote.roomManager.dismantleTargets.length, - 8, - ) - } - - console.log(this.communeManager.remoteResourcePathType) - - for (const i in remoteMemory[RoomMemoryKeys.remoteSources]) { - const remoteSourcePathLength = - remoteMemory[this.communeManager.remoteResourcePathType].length / - packedPosLength - const hasContainer = remoteMemory[RoomMemoryKeys.hasContainer][i] - if (hasContainer) { - // account for repair cost for container - - const creditChange = CONTAINER_DECAY / (CONTAINER_DECAY_TIME * REPAIR_POWER) - - remoteMemory[RoomMemoryKeys.remoteSourceCredit][i] -= - creditChange * remoteSourcePathLength - - remoteMemory[RoomMemoryKeys.remoteSourceCreditChange][i] -= creditChange - remoteMemory[RoomMemoryKeys.maxSourceIncome][i] -= creditChange - continue - } - - // We don't have a container, account for decay cost - - const creditChange = Math.ceil( - remoteMemory[RoomMemoryKeys.remoteSourceCredit][i] / ENERGY_DECAY, - ) - - remoteMemory[RoomMemoryKeys.remoteSourceCredit][i] -= - creditChange * remoteSourcePathLength - - remoteMemory[RoomMemoryKeys.remoteSourceCreditChange][i] -= creditChange - remoteMemory[RoomMemoryKeys.maxSourceIncome][i] -= creditChange - } - - // If the remote is assumed to be reserved by an enemy or an invader core - - if ( - (remoteMemory[RoomMemoryKeys.enemyReserved] && - remoteMemory[RoomMemoryKeys.invaderCore]) || - remoteMemory[RoomMemoryKeys.remoteDismantler] > 0 - ) { - for (const i in remoteMemory[RoomMemoryKeys.maxSourceIncome]) { - remoteMemory[RoomMemoryKeys.maxSourceIncome][i] = 0 - } - remoteMemory[RoomMemoryKeys.remoteReservers] = 0 - } + // Record if we have or don't have a source container for each source + + for (const i in sourceContainers) { + remoteMemory[RoomMemoryKeys.hasContainer][i] = !!sourceContainers + } + + // Temporary measure while DynamicSquads are in progress + + const enemyAttackers = remote.roomManager.enemyAttackers + if (enemyAttackers.length) { + const score = findLowestScore(enemyAttackers, creep => { + return creep.ticksToLive + }) + remoteMemory[RoomMemoryKeys.danger] = Game.time + randomIntRange(score, score + 100) + roomNameUtils.abandonRemote(remoteName, randomIntRange(score, score + 100)) + continue + } + + // If the controller is reserved and not by me + + if (remote.controller.reservation && remote.controller.reservation.username !== Memory.me) + remoteMemory[RoomMemoryKeys.enemyReserved] = true + // If the controller is not reserved or is by us + else remoteMemory[RoomMemoryKeys.enemyReserved] = false + + remoteMemory[RoomMemoryKeys.remoteCoreAttacker] = + remote.roomManager.structures.invaderCore.length * 8 + remoteMemory[RoomMemoryKeys.invaderCore] = remote.roomManager.structures.invaderCore.length + + // Create need if there are any structures that need to be removed + + remoteMemory[RoomMemoryKeys.remoteDismantler] = Math.min( + remote.roomManager.dismantleTargets.length, + 8, + ) + } + + console.log(this.communeManager.remoteResourcePathType) + + for (const i in remoteMemory[RoomMemoryKeys.remoteSources]) { + const remoteSourcePathLength = + remoteMemory[this.communeManager.remoteResourcePathType].length / packedPosLength + const hasContainer = remoteMemory[RoomMemoryKeys.hasContainer][i] + if (hasContainer) { + // account for repair cost for container + + const creditChange = CONTAINER_DECAY / (CONTAINER_DECAY_TIME * REPAIR_POWER) + + remoteMemory[RoomMemoryKeys.remoteSourceCredit][i] -= + creditChange * remoteSourcePathLength + + remoteMemory[RoomMemoryKeys.remoteSourceCreditChange][i] -= creditChange + remoteMemory[RoomMemoryKeys.maxSourceIncome][i] -= creditChange + continue } + + // We don't have a container, account for decay cost + + const creditChange = Math.ceil( + remoteMemory[RoomMemoryKeys.remoteSourceCredit][i] / ENERGY_DECAY, + ) + + remoteMemory[RoomMemoryKeys.remoteSourceCredit][i] -= creditChange * remoteSourcePathLength + + remoteMemory[RoomMemoryKeys.remoteSourceCreditChange][i] -= creditChange + remoteMemory[RoomMemoryKeys.maxSourceIncome][i] -= creditChange + } + + // If the remote is assumed to be reserved by an enemy or an invader core + + if ( + (remoteMemory[RoomMemoryKeys.enemyReserved] && remoteMemory[RoomMemoryKeys.invaderCore]) || + remoteMemory[RoomMemoryKeys.remoteDismantler] > 0 + ) { + for (const i in remoteMemory[RoomMemoryKeys.maxSourceIncome]) { + remoteMemory[RoomMemoryKeys.maxSourceIncome][i] = 0 + } + remoteMemory[RoomMemoryKeys.remoteReservers] = 0 + } } + } - run() { - // Loop through the commune's remote names + run() { + // Loop through the commune's remote names - for (const remoteName of this.communeManager.room.memory[RoomMemoryKeys.remotes]) { - const remoteMemory = Memory.rooms[remoteName] + for (const remoteName of this.communeManager.room.memory[RoomMemoryKeys.remotes]) { + const remoteMemory = Memory.rooms[remoteName] - for (const sourceIndex in remoteMemory[RoomMemoryKeys.remoteSources]) { - // If there was no change in credits, move the values closer to 0 by a % - if (remoteMemory[RoomMemoryKeys.remoteSourceCreditChange][sourceIndex] <= 0) { - remoteMemory[RoomMemoryKeys.remoteSourceCredit][sourceIndex] *= 0.999 - } - } + for (const sourceIndex in remoteMemory[RoomMemoryKeys.remoteSources]) { + // If there was no change in credits, move the values closer to 0 by a % + if (remoteMemory[RoomMemoryKeys.remoteSourceCreditChange][sourceIndex] <= 0) { + remoteMemory[RoomMemoryKeys.remoteSourceCredit][sourceIndex] *= 0.999 + } + } - if (remoteMemory[RoomMemoryKeys.abandonRemote]) continue + if (remoteMemory[RoomMemoryKeys.abandonRemote]) continue - /* + /* const remote = Game.rooms[remoteName] const isReserved = remote && remote.controller.reservation && remote.controller.reservation.username === Memory.me */ - // Loop through each index of sourceEfficacies - - for (const sourceIndex in remoteMemory[RoomMemoryKeys.remoteSources]) { - if (remoteMemory[RoomMemoryKeys.maxSourceIncome][sourceIndex] === 0) continue - - const income = Math.min( - // Make sure we ignore negative credit changes - Math.max(remoteMemory[RoomMemoryKeys.remoteSourceCreditChange][sourceIndex], 0), - remoteMemory[RoomMemoryKeys.maxSourceIncome][sourceIndex], - ) - - // Find the number of carry parts required for the source, and add it to the remoteHauler need - - remoteMemory[RoomMemoryKeys.haulers][sourceIndex] += findCarryPartsRequired( - (remoteMemory[RoomMemoryKeys.remoteSourceFastFillerPaths][sourceIndex].length / - packedPosLength) * - 2, - income, - ) - } - } + // Loop through each index of sourceEfficacies + + for (const sourceIndex in remoteMemory[RoomMemoryKeys.remoteSources]) { + if (remoteMemory[RoomMemoryKeys.maxSourceIncome][sourceIndex] === 0) continue + + const income = Math.min( + // Make sure we ignore negative credit changes + Math.max(remoteMemory[RoomMemoryKeys.remoteSourceCreditChange][sourceIndex], 0), + remoteMemory[RoomMemoryKeys.maxSourceIncome][sourceIndex], + ) + + // Find the number of carry parts required for the source, and add it to the remoteHauler need + + remoteMemory[RoomMemoryKeys.haulers][sourceIndex] += findCarryPartsRequired( + (remoteMemory[RoomMemoryKeys.remoteSourceFastFillerPaths][sourceIndex].length / + packedPosLength) * + 2, + income, + ) + } } + } - /** - * Every x ticks see if sourcePath is safe to use - */ - private managePathCacheAllowance(remoteName: string) { - if (!randomTick(20)) return - - const remoteMemory = Memory.rooms[remoteName] + /** + * Every x ticks see if sourcePath is safe to use + */ + private managePathCacheAllowance(remoteName: string) { + if (!randomTick(20)) return - for (let index in remoteMemory[RoomMemoryKeys.remoteSources]) { - const pathRoomNames: Set = new Set() + const remoteMemory = Memory.rooms[remoteName] - for (const pos of unpackPosList( - remoteMemory[RoomMemoryKeys.remoteSourceFastFillerPaths][index], - )) { - const roomName = pos.roomName + for (let index in remoteMemory[RoomMemoryKeys.remoteSources]) { + const pathRoomNames: Set = new Set() - if (pathRoomNames.has(roomName)) continue - pathRoomNames.add(roomName) + for (const pos of unpackPosList( + remoteMemory[RoomMemoryKeys.remoteSourceFastFillerPaths][index], + )) { + const roomName = pos.roomName - // See if the room has a valid type and isn't abandoned + if (pathRoomNames.has(roomName)) continue + pathRoomNames.add(roomName) - if ( - remoteTypeWeights[remoteMemory[RoomMemoryKeys.type]] !== Infinity && - !remoteMemory[RoomMemoryKeys.abandonRemote] - ) - continue + // See if the room has a valid type and isn't abandoned - remoteMemory[RoomMemoryKeys.disableCachedPaths] = true - return - } - } + if ( + remoteTypeWeights[remoteMemory[RoomMemoryKeys.type]] !== Infinity && + !remoteMemory[RoomMemoryKeys.abandonRemote] + ) + continue - remoteMemory[RoomMemoryKeys.disableCachedPaths] = false + remoteMemory[RoomMemoryKeys.disableCachedPaths] = true + return + } } - /** - * true = continue use - * false = stop use - */ - private manageUse(remoteName: string): boolean { - const roomMemory = Memory.rooms[remoteName] - // If we aren't on the inverval to check for use - if (!utils.isTickInterval(manageUseInterval)) { - // Inform the current state of things - return !roomMemory[RoomMemoryKeys.disable] - } - - // Otherwise see if the state needs to be updated + remoteMemory[RoomMemoryKeys.disableCachedPaths] = false + } + + /** + * true = continue use + * false = stop use + */ + private manageUse(remoteName: string): boolean { + const roomMemory = Memory.rooms[remoteName] + // If we aren't on the inverval to check for use + if (!utils.isTickInterval(manageUseInterval)) { + // Inform the current state of things + return !roomMemory[RoomMemoryKeys.disable] + } - let disabledSources = this.manageSourcesUse(remoteName) - if (disabledSources >= roomMemory[RoomMemoryKeys.remoteSources].length) { - roomMemory[RoomMemoryKeys.disable] = true - return false - } + // Otherwise see if the state needs to be updated - roomMemory[RoomMemoryKeys.disable] = undefined - return true + let disabledSources = this.manageSourcesUse(remoteName) + if (disabledSources >= roomMemory[RoomMemoryKeys.remoteSources].length) { + roomMemory[RoomMemoryKeys.disable] = true + return false } - private manageAbandonment(remoteName: string) { - const remoteMemory = Memory.rooms[remoteName] + roomMemory[RoomMemoryKeys.disable] = undefined + return true + } - remoteMemory[RoomMemoryKeys.abandonRemote] -= 1 - } + private manageAbandonment(remoteName: string) { + const remoteMemory = Memory.rooms[remoteName] - private isRemoteBlocked(remoteName: string) { - const safeDistance = roomNameUtils.advancedFindDistance(this.communeManager.room.name, remoteName, { - typeWeights: remoteTypeWeights, - avoidDanger: true, - }) - if (safeDistance > maxRemoteRoomDistance) return true + remoteMemory[RoomMemoryKeys.abandonRemote] -= 1 + } - const distance = roomNameUtils.advancedFindDistance(this.communeManager.room.name, remoteName, { - typeWeights: remoteTypeWeights, - }) - if (Math.round(safeDistance * 0.75) > distance) return true + private isRemoteBlocked(remoteName: string) { + const safeDistance = roomNameUtils.advancedFindDistance( + this.communeManager.room.name, + remoteName, + { + typeWeights: remoteTypeWeights, + avoidDanger: true, + }, + ) + if (safeDistance > maxRemoteRoomDistance) return true - return false - } + const distance = roomNameUtils.advancedFindDistance(this.communeManager.room.name, remoteName, { + typeWeights: remoteTypeWeights, + }) + if (Math.round(safeDistance * 0.75) > distance) return true - private recurseAbandonment(remoteName: string) { - const remoteMemory = Memory.rooms[remoteName] + return false + } - for (const remoteName2 of Memory.rooms[this.communeManager.room.name][ - RoomMemoryKeys.remotes - ]) { - const remoteMemory2 = Memory.rooms[remoteName2] + private recurseAbandonment(remoteName: string) { + const remoteMemory = Memory.rooms[remoteName] - // No point in abandoning if the remote is already sufficiently abandoned - if ( - remoteMemory2[RoomMemoryKeys.abandonRemote] >= - remoteMemory[RoomMemoryKeys.abandonRemote] - ) - continue + for (const remoteName2 of Memory.rooms[this.communeManager.room.name][RoomMemoryKeys.remotes]) { + const remoteMemory2 = Memory.rooms[remoteName2] - // We want to abandon if the remote paths through the specified remote - if (!remoteMemory2[RoomMemoryKeys.pathsThrough].includes(remoteName)) continue + // No point in abandoning if the remote is already sufficiently abandoned + if (remoteMemory2[RoomMemoryKeys.abandonRemote] >= remoteMemory[RoomMemoryKeys.abandonRemote]) + continue - roomNameUtils.abandonRemote(remoteName2, remoteMemory[RoomMemoryKeys.abandonRemote]) - } + // We want to abandon if the remote paths through the specified remote + if (!remoteMemory2[RoomMemoryKeys.pathsThrough].includes(remoteName)) continue - remoteMemory[RoomMemoryKeys.recursedAbandonment] = true + roomNameUtils.abandonRemote(remoteName2, remoteMemory[RoomMemoryKeys.abandonRemote]) } - private manageSourcesUse(remoteName: string) { - let disabledSources = 0 - const roomMemory = Memory.rooms[remoteName] + remoteMemory[RoomMemoryKeys.recursedAbandonment] = true + } - for (const pathType of remoteSourcePathTypes) { - for (const index in roomMemory[pathType]) { - if (this.manageSourceUse(remoteName, index, pathType)) continue + private manageSourcesUse(remoteName: string) { + let disabledSources = 0 + const roomMemory = Memory.rooms[remoteName] - disabledSources += 1 - roomMemory[RoomMemoryKeys.disableSources][index] = true - } - } + for (const pathType of remoteSourcePathTypes) { + for (const index in roomMemory[pathType]) { + if (this.manageSourceUse(remoteName, index, pathType)) continue - return disabledSources + disabledSources += 1 + roomMemory[RoomMemoryKeys.disableSources][index] = true + } } - private manageSourceUse( - remoteName: string, - sourceIndex: string, - pathType: RemoteSourcePathTypes, - ) { - const roomMemory = Memory.rooms[remoteName] - const packedPath = roomMemory[pathType][parseInt(sourceIndex)] - if (!packedPath.length) return false + return disabledSources + } - if (packedPath.length / packedPosLength > maxRemotePathDistance) { - return false - } + private manageSourceUse( + remoteName: string, + sourceIndex: string, + pathType: RemoteSourcePathTypes, + ) { + const roomMemory = Memory.rooms[remoteName] + const packedPath = roomMemory[pathType][parseInt(sourceIndex)] + if (!packedPath.length) return false - const path = unpackPosList(packedPath) - for (const pos of path) { - if (!Memory.rooms[pos.roomName][RoomMemoryKeys.owner]) continue + if (packedPath.length / packedPosLength > maxRemotePathDistance) { + return false + } - // the room has an owner + const path = unpackPosList(packedPath) + for (const pos of path) { + if (!Memory.rooms[pos.roomName][RoomMemoryKeys.owner]) continue - return false - } + // the room has an owner - return true + return false } + + return true + } } diff --git a/src/room/commune/towerProcs.ts b/src/room/commune/towerProcs.ts new file mode 100644 index 000000000..d8821da8f --- /dev/null +++ b/src/room/commune/towerProcs.ts @@ -0,0 +1,247 @@ +import { PlayerMemoryKeys, RoomLogisticsRequestTypes } from "international/constants" +import { playerManager } from "international/players" +import { statsManager } from "international/statsManager" +import { packCoord } from "other/codec" +import { structureUtils } from "room/structureUtils" +import { findWithHighestScore, findObjectWithID, randomTick, findWithLowestScore, scalePriority, utils } from "utils/utils" +import { communeUtils } from "./communeUtils" +import { towerUtils } from "./towerUtils" + +export class TowerProcs { + run(room: Room) { + + const towers = room.roomManager.structures.tower.filter(tower => + structureUtils.isRCLActionable(tower), + ) + if (!towers.length) { + room.towerInferiority = room.roomManager.notMyCreeps.enemy.length > 0 + return + } + + const actionableTowerIDs = [] + + for (const tower of towers) { + if (tower.nextStore.energy < TOWER_ENERGY_COST) continue + + actionableTowerIDs.push(tower.id) + } + + this.createRoomLogisticsRequests(room) + + if (this.attackEnemyCreeps(room, actionableTowerIDs)) return + + if (room.roomManager.enemyAttackers.length) { + if (this.healCreeps(room, actionableTowerIDs)) return + if (this.repairRamparts(room, actionableTowerIDs)) return + if (this.repairGeneral(room, actionableTowerIDs)) return + } + } + + private trackEnemySquads() {} + + private considerAttackTargets(room: Room) { + const enemyCreeps = room.roomManager.notMyCreeps.enemy + + if (!room.communeManager.towerAttackTarget) { + const [score, target] = findWithHighestScore(enemyCreeps, enemyCreep => { + const damage = enemyCreep.netTowerDamage + + if (enemyCreep.owner.username === 'Invader') { + if (damage <= 0) { + if (room.towerInferiority) return false + room.towerInferiority = true + this.createPowerTasks(room) + return false + } + } else { + const playerMemory = + Memory.players[enemyCreep.owner.username] || + playerManager.initPlayer(enemyCreep.owner.username) + const weight = playerMemory[PlayerMemoryKeys.rangeFromExitWeight] + + if (/* findWeightedRangeFromExit(enemyCreep.pos, weight) * */ damage < enemyCreep.hits) { + if (room.towerInferiority) return false + room.towerInferiority = true + this.createPowerTasks(room) + return false + } + } + + return damage + }) + if (!target) return false + + room.communeManager.towerAttackTarget = target + } + + // If we might be under attack from a swarm, record that the tower needs help + + if (enemyCreeps.length >= 15) { + this.createPowerTasks(room) + room.towerInferiority = true + } + + return room.communeManager.towerAttackTarget + } + + private attackEnemyCreeps(room: Room, actionableTowerIDs: Id[]) { + if (Game.flags.disableTowerAttacks) { + room.towerInferiority = + room.roomManager.enemyAttackers.length > 0 + return false + } + if (!actionableTowerIDs.length) return false + if (!room.roomManager.notMyCreeps.enemy.length) return false + + const attackTarget = this.considerAttackTargets(room) + if (!attackTarget) { + return this.scatterShot(room, actionableTowerIDs) + } + + for (let i = actionableTowerIDs.length - 1; i >= 0; i--) { + const tower = findObjectWithID(actionableTowerIDs[i]) + + if (tower.attack(attackTarget) !== OK) continue + + actionableTowerIDs.splice(i, 1) + + attackTarget.reserveHits -= towerUtils.estimateDamageNet(tower, attackTarget) + if (attackTarget.reserveHits <= 0) return true + } + + return true + } + + /** + * @description Distribute fire amoung enemies + * Maybe we can mess up healing + */ + scatterShot(room: Room, actionableTowerIDs: Id[]) { + if (actionableTowerIDs.length <= 1) return false + if (!randomTick(200)) return false + + const enemyCreeps = room.roomManager.notMyCreeps.enemy + if (enemyCreeps.length < Math.min(4, actionableTowerIDs.length)) return false + + let targetIndex = 0 + + for (let i = actionableTowerIDs.length - 1; i >= 0; i--) { + const tower = findObjectWithID(actionableTowerIDs[i]) + const attackTarget = enemyCreeps[targetIndex] + + if (tower.attack(attackTarget) !== OK) continue + + actionableTowerIDs.splice(i, 1) + attackTarget.reserveHits -= towerUtils.estimateDamageNet(tower, attackTarget) + + if (targetIndex >= enemyCreeps.length - 1) { + targetIndex = 0 + continue + } + + targetIndex += 1 + } + + return true + } + + private healCreeps(room: Room, actionableTowerIDs: Id[]) { + if (!actionableTowerIDs.length) return false + + const healTarget = towerUtils.findHealTarget(room) + if (!healTarget) return false + + for (let i = actionableTowerIDs.length - 1; i >= 0; i--) { + const tower = findObjectWithID(actionableTowerIDs[i]) + + if (tower.heal(healTarget) !== OK) continue + + actionableTowerIDs.splice(i, 1) + } + + return true + } + + private repairRamparts(room: Room, actionableTowerIDs: Id[]) { + if (!actionableTowerIDs.length) return false + + const repairTarget = towerUtils.findRampartRepairTarget(room) + if (!repairTarget) return false + + for (let i = actionableTowerIDs.length - 1; i >= 0; i--) { + const tower = findObjectWithID(actionableTowerIDs[i]) + if (tower.repair(repairTarget) !== OK) continue + + statsManager.updateStat(room.name, 'eorwr', TOWER_ENERGY_COST) + actionableTowerIDs.splice(i, 1) + } + + return true + } + + private repairGeneral(room: Room, actionableTowerIDs: Id[]) { + if (!actionableTowerIDs.length) return false + + const structures = towerUtils.findGeneralRepairTargets(room) + if (!structures.length) return false + + for (let i = actionableTowerIDs.length - 1; i >= 0; i--) { + const tower = findObjectWithID(actionableTowerIDs[i]) + + const target = structures[structures.length - 1] + + if (tower.repair(target) !== OK) continue + + structures.pop() + + actionableTowerIDs.splice(i, 1) + } + + return true + } + + private createPowerTasks(room: Room) { + if (!room.myPowerCreeps.length) return + + for (const tower of room.roomManager.structures.tower) { + room.createPowerTask(tower, PWR_OPERATE_TOWER, 1) + } + } + + private createRoomLogisticsRequests(room: Room) { + for (const structure of room.roomManager.structures.tower) { + // If don't have enough energy, request more + + if (structure.usedReserveStore < structure.store.getCapacity(RESOURCE_ENERGY) * 0.8) { + room.createRoomLogisticsRequest({ + target: structure, + type: RoomLogisticsRequestTypes.transfer, + priority: scalePriority( + structure.store.getCapacity(RESOURCE_ENERGY), + structure.reserveStore.energy, + 20, + ), + }) + } + + // If there are no attackers and the tower has some energy, make offer request + + if (structure.usedReserveStore > structure.store.getCapacity(RESOURCE_ENERGY) * 0.5) { + room.createRoomLogisticsRequest({ + target: structure, + maxAmount: structure.usedReserveStore - 100, + onlyFull: true, + type: RoomLogisticsRequestTypes.offer, + priority: 100 /* scalePriority( + structure.store.getCapacity(RESOURCE_ENERGY), + structure.usedReserveStore, + 10, + true, + ), */, + }) + } + } + } +} + +export const towerProcs = new TowerProcs() diff --git a/src/room/commune/towerUtils.ts b/src/room/commune/towerUtils.ts new file mode 100644 index 000000000..8ec3ad428 --- /dev/null +++ b/src/room/commune/towerUtils.ts @@ -0,0 +1,113 @@ +import { towerPowers } from "international/constants" +import { findWithLowestScore, getRange } from "utils/utils" +import { communeDataManager } from "./communeData" +import { communeUtils } from "./communeUtils" +import { packCoord } from "other/codec" + +const minTowerRampartRepairTreshold = RAMPART_DECAY_AMOUNT * 1.5 + +export class TowerUtils { + /** + * Estimate the damage a normal tower would do over a given distance. Does not account for effects + */ + estimateRangeDamage(origin: Coord, goal: Coord) { + let damage = TOWER_POWER_ATTACK + + let range = getRange(origin, goal) + + if (range > TOWER_OPTIMAL_RANGE) { + if (range > TOWER_FALLOFF_RANGE) range = TOWER_FALLOFF_RANGE + + damage -= + (damage * TOWER_FALLOFF * (range - TOWER_OPTIMAL_RANGE)) / + (TOWER_FALLOFF_RANGE - TOWER_OPTIMAL_RANGE) + } + + return Math.floor(damage) + } + + estimateDamageGross(tower: StructureTower, targetCoord: Coord) { + let damage = this.estimateRangeDamage(tower.pos, targetCoord) + + for (const powerType of towerPowers) { + const effect = tower.effectsData.get(powerType) as PowerEffect + if (!effect) continue + + damage *= Math.floor(POWER_INFO[powerType].effect[effect.level - 1]) + } + + return Math.floor(damage) + } + + estimateDamageNet(tower: StructureTower, target: Creep) { + let damage = this.estimateDamageGross(tower, target.pos) + damage *= target.defenceStrength + + damage -= target.macroHealStrength + return Math.floor(damage) + } + + getRampartRepairTreshold(room: Room) { + const data = communeDataManager.data[room.name] + if (data.towerRampartRepairTreshold !== undefined) return data.towerRampartRepairTreshold + + let rampartRepairTreshold = minTowerRampartRepairTreshold + + const enemySquadData = room.roomManager.enemySquadData + rampartRepairTreshold += enemySquadData.highestDismantle + // Melee damage includes ranged + rampartRepairTreshold += enemySquadData.highestMeleeDamage + + data.towerRampartRepairTreshold = rampartRepairTreshold + return rampartRepairTreshold + } + + findHealTarget(room: Room) { + + if (room.roomManager.enemyAttackers.length) { + return room.roomManager.myDamagedCreeps.find(creep => { + return !creep.isOnExit && !room.roomManager.enemyThreatCoords.has(packCoord(creep.pos)) + }) + } + + let healTargets: (Creep | PowerCreep)[] = [] + + // Construct heal targets from my and allied damaged creeps in the this + + healTargets = room.roomManager.myDamagedCreeps.concat(room.roomManager.allyDamagedCreeps) + healTargets = healTargets.concat(room.roomManager.myDamagedPowerCreeps) + + return healTargets.find(creep => !creep.isOnExit) + } + + findRampartRepairTarget(room: Room) { + const ramparts = room.roomManager.enemyAttackers.length + ? room.communeManager.defensiveRamparts + : communeUtils.getRampartRepairTargets(room) + + const [score, rampart] = findWithLowestScore(ramparts, rampart => { + let score = rampart.hits + // Account for decay amount: percent of time to decay times decay amount + score -= Math.floor( + (RAMPART_DECAY_AMOUNT * (RAMPART_DECAY_TIME - rampart.ticksToDecay)) / RAMPART_DECAY_TIME, + ) + + return score + }) + + const rampartRepairThreshold = towerUtils.getRampartRepairTreshold(room) + + // Make sure the rampart is below the treshold + if (score > rampartRepairThreshold) return false + return rampart + } + + findGeneralRepairTargets(room: Room) { + let structures: Structure[] = room.roomManager.structures.spawn + structures = structures.concat(room.roomManager.structures.tower) + + return structures + } +} + +export const towerUtils = new TowerUtils() diff --git a/src/room/commune/towers.ts b/src/room/commune/towers.ts deleted file mode 100644 index e81f6fb23..000000000 --- a/src/room/commune/towers.ts +++ /dev/null @@ -1,385 +0,0 @@ -import { - PlayerMemoryKeys, - RoomLogisticsRequestTypes, - customColors, - towerPowers, -} from 'international/constants' -import { statsManager } from 'international/statsManager' -import { - findHighestScore, - findObjectWithID, - findWeightedRangeFromExit, - findWithHighestScore, - findWithLowestScore, - getRange, - isXYInBorder, - randomTick, - scalePriority, - utils, -} from 'utils/utils' -import { packCoord } from 'other/codec' -import { CommuneManager } from './commune' -import { playerManager } from 'international/players' -import { communeUtils } from './communeUtils' -import { structureUtils } from 'room/structureUtils' - -const minTowerRampartRepairTreshold = RAMPART_DECAY_AMOUNT * 1.5 - -export class TowerManager { - communeManager: CommuneManager - actionableTowerIDs: Id[] - - constructor(communeManager: CommuneManager) { - this.communeManager = communeManager - } - - run() { - const { room } = this.communeManager - - const towers = room.roomManager.structures.tower.filter(tower => structureUtils.isRCLActionable(tower)) - if (!towers.length) { - room.towerInferiority = room.roomManager.notMyCreeps.enemy.length > 0 - return - } - - this.actionableTowerIDs = [] - - for (const tower of towers) { - if (tower.nextStore.energy < TOWER_ENERGY_COST) continue - - this.actionableTowerIDs.push(tower.id) - } - - const isTickInterval = utils.isTickInterval(10) - if (isTickInterval) { - delete this._towerRampartRepairThreshold - } - - this.createRoomLogisticsRequests() - - if (this.attackEnemyCreeps()) return - - if (room.roomManager.enemyAttackers.length || isTickInterval) { - - if (this.healCreeps()) return - if (this.repairRamparts()) return - if (this.repairGeneral()) return - } - } - - private trackEnemySquads() {} - - private findAttackTarget() { - const { room } = this.communeManager - const enemyCreeps = room.roomManager.notMyCreeps.enemy - - if (!this.communeManager.towerAttackTarget) { - const [score, target] = findWithHighestScore(enemyCreeps, enemyCreep => { - const damage = enemyCreep.netTowerDamage - - if (enemyCreep.owner.username === 'Invader') { - if (damage <= 0) { - if (room.towerInferiority) return false - room.towerInferiority = true - this.createPowerTasks() - return false - } - } else { - const playerMemory = - Memory.players[enemyCreep.owner.username] || - playerManager.initPlayer(enemyCreep.owner.username) - const weight = playerMemory[PlayerMemoryKeys.rangeFromExitWeight] - - if ( - /* findWeightedRangeFromExit(enemyCreep.pos, weight) * */damage < - enemyCreep.hits - ) { - if (room.towerInferiority) return false - room.towerInferiority = true - this.createPowerTasks() - return false - } - } - - return damage - }) - if (!target) return false - - this.communeManager.towerAttackTarget = target - } - - // If we might be under attack from a swarm, record that the tower needs help - - if (enemyCreeps.length >= 15) { - this.createPowerTasks() - room.towerInferiority = true - } - - return this.communeManager.towerAttackTarget - } - - private attackEnemyCreeps() { - if (Game.flags.disableTowerAttacks) { - this.communeManager.room.towerInferiority = - this.communeManager.room.roomManager.enemyAttackers.length > 0 - return false - } - if (!this.actionableTowerIDs.length) return false - if (!this.communeManager.room.roomManager.notMyCreeps.enemy.length) return false - - const attackTarget = this.findAttackTarget() - if (!attackTarget) { - return this.scatterShot() - } - - for (let i = this.actionableTowerIDs.length - 1; i >= 0; i--) { - const tower = findObjectWithID(this.actionableTowerIDs[i]) - - if (tower.attack(attackTarget) !== OK) continue - - this.actionableTowerIDs.splice(i, 1) - - attackTarget.reserveHits -= towerFunctions.estimateDamageNet(tower, attackTarget) - if (attackTarget.reserveHits <= 0) return true - } - - return true - } - - /** - * @description Distribute fire amoung enemies - * Maybe we can mess up healing - */ - scatterShot() { - if (this.actionableTowerIDs.length <= 1) return false - if (!randomTick(200)) return false - - const enemyCreeps = this.communeManager.room.roomManager.notMyCreeps.enemy - if (enemyCreeps.length < Math.min(4, this.actionableTowerIDs.length)) return false - - let targetIndex = 0 - - for (let i = this.actionableTowerIDs.length - 1; i >= 0; i--) { - const tower = findObjectWithID(this.actionableTowerIDs[i]) - const attackTarget = enemyCreeps[targetIndex] - - if (tower.attack(attackTarget) !== OK) continue - - this.actionableTowerIDs.splice(i, 1) - attackTarget.reserveHits -= towerFunctions.estimateDamageNet(tower, attackTarget) - - if (targetIndex >= enemyCreeps.length - 1) { - targetIndex = 0 - continue - } - - targetIndex += 1 - } - - return true - } - - findHealTarget() { - const { room } = this.communeManager - - if (room.roomManager.enemyAttackers.length) { - return room.roomManager.myDamagedCreeps.find(creep => { - return ( - !creep.isOnExit && !room.roomManager.enemyThreatCoords.has(packCoord(creep.pos)) - ) - }) - } - - let healTargets: (Creep | PowerCreep)[] = [] - - // Construct heal targets from my and allied damaged creeps in the this - - healTargets = room.roomManager.myDamagedCreeps.concat(room.roomManager.allyDamagedCreeps) - healTargets = healTargets.concat(room.roomManager.myDamagedPowerCreeps) - - return healTargets.find(creep => !creep.isOnExit) - } - - private healCreeps() { - if (!this.actionableTowerIDs.length) return false - - const healTarget = this.findHealTarget() - if (!healTarget) return false - - for (let i = this.actionableTowerIDs.length - 1; i >= 0; i--) { - const tower = findObjectWithID(this.actionableTowerIDs[i]) - - if (tower.heal(healTarget) !== OK) continue - - this.actionableTowerIDs.splice(i, 1) - } - - return true - } - - private findRampartRepairTarget() { - const { room } = this.communeManager - const ramparts = room.roomManager.enemyAttackers.length - ? room.communeManager.defensiveRamparts - : communeUtils.getRampartRepairTargets(room) - - const [score, rampart] = findWithLowestScore(ramparts, rampart => { - let score = rampart.hits - // Account for decay amount: percent of time to decay times decay amount - score -= Math.floor( - (RAMPART_DECAY_AMOUNT * (RAMPART_DECAY_TIME - rampart.ticksToDecay)) / - RAMPART_DECAY_TIME, - ) - - return score - }) - - const rampartRepairThreshold = this.rampartRepairTreshold - - // Make sure the rampart is below the treshold - if (score > rampartRepairThreshold) return false - return rampart - } - - private repairRamparts() { - if (!this.actionableTowerIDs.length) return false - - const repairTarget = this.findRampartRepairTarget() - if (!repairTarget) return false - - for (let i = this.actionableTowerIDs.length - 1; i >= 0; i--) { - const tower = findObjectWithID(this.actionableTowerIDs[i]) - if (tower.repair(repairTarget) !== OK) continue - - statsManager.updateStat(this.communeManager.room.name, 'eorwr', TOWER_ENERGY_COST) - this.actionableTowerIDs.splice(i, 1) - } - - return true - } - - private findGeneralRepairTargets() { - let structures: Structure[] = this.communeManager.room.roomManager.structures.spawn - structures = structures.concat(this.communeManager.room.roomManager.structures.tower) - - return structures - } - - private repairGeneral() { - if (!this.actionableTowerIDs.length) return false - - const structures = this.findGeneralRepairTargets() - if (!structures.length) return false - - for (let i = this.actionableTowerIDs.length - 1; i >= 0; i--) { - const tower = findObjectWithID(this.actionableTowerIDs[i]) - - const target = structures[structures.length - 1] - - if (tower.repair(target) !== OK) continue - - structures.pop() - - this.actionableTowerIDs.splice(i, 1) - } - - return true - } - - private createPowerTasks() { - if (!this.communeManager.room.myPowerCreeps.length) return - - for (const tower of this.communeManager.room.roomManager.structures.tower) { - this.communeManager.room.createPowerTask(tower, PWR_OPERATE_TOWER, 1) - } - } - - private createRoomLogisticsRequests() { - for (const structure of this.communeManager.room.roomManager.structures.tower) { - // If don't have enough energy, request more - - if (structure.usedReserveStore < structure.store.getCapacity(RESOURCE_ENERGY) * 0.8) { - this.communeManager.room.createRoomLogisticsRequest({ - target: structure, - type: RoomLogisticsRequestTypes.transfer, - priority: scalePriority( - structure.store.getCapacity(RESOURCE_ENERGY), - structure.reserveStore.energy, - 20, - ), - }) - } - - // If there are no attackers and the tower has some energy, make offer request - - if (structure.usedReserveStore > structure.store.getCapacity(RESOURCE_ENERGY) * 0.5) { - this.communeManager.room.createRoomLogisticsRequest({ - target: structure, - maxAmount: structure.usedReserveStore - 100, - onlyFull: true, - type: RoomLogisticsRequestTypes.offer, - priority: scalePriority( - structure.store.getCapacity(RESOURCE_ENERGY), - structure.usedReserveStore, - 10, - true, - ), - }) - } - } - } - - _towerRampartRepairThreshold: number - get rampartRepairTreshold() { - if (this._towerRampartRepairThreshold) return this._towerRampartRepairThreshold - - let rampartRepairTreshold = minTowerRampartRepairTreshold - - const enemySquadData = this.communeManager.room.roomManager.enemySquadData - rampartRepairTreshold += enemySquadData.highestDismantle - // Melee damage includes ranged - rampartRepairTreshold += enemySquadData.highestMeleeDamage - - return (this._towerRampartRepairThreshold = rampartRepairTreshold) - } -} - -export const towerFunctions = { - /** - * Estimate the damage a normal tower would do over a given distance. Does not account for effects - */ - estimateRangeDamage: function (origin: Coord, goal: Coord) { - let damage = TOWER_POWER_ATTACK - - let range = getRange(origin, goal) - - if (range > TOWER_OPTIMAL_RANGE) { - if (range > TOWER_FALLOFF_RANGE) range = TOWER_FALLOFF_RANGE - - damage -= - (damage * TOWER_FALLOFF * (range - TOWER_OPTIMAL_RANGE)) / - (TOWER_FALLOFF_RANGE - TOWER_OPTIMAL_RANGE) - } - - return Math.floor(damage) - }, - estimateDamageGross: function (tower: StructureTower, targetCoord: Coord) { - let damage = this.estimateRangeDamage(tower.pos, targetCoord) - - for (const powerType of towerPowers) { - const effect = tower.effectsData.get(powerType) as PowerEffect - if (!effect) continue - - damage *= Math.floor(POWER_INFO[powerType].effect[effect.level - 1]) - } - - return Math.floor(damage) - }, - estimateDamageNet: function (tower: StructureTower, target: Creep) { - let damage = this.estimateDamageGross(tower, target.pos) - damage *= target.defenceStrength - - damage -= target.macroHealStrength - return Math.floor(damage) - }, -} diff --git a/src/room/commune/workRequest.ts b/src/room/commune/workRequest.ts index 43b4ec5a2..7cf48cee9 100644 --- a/src/room/commune/workRequest.ts +++ b/src/room/commune/workRequest.ts @@ -1,9 +1,9 @@ import { - WorkRequestKeys, - CombatRequestKeys, - RoomMemoryKeys, - RoomTypes, - customColors, + WorkRequestKeys, + CombatRequestKeys, + RoomMemoryKeys, + RoomTypes, + customColors, } from 'international/constants' import { randomIntRange, randomTick, utils } from 'utils/utils' import { collectiveManager } from 'international/collective' @@ -14,120 +14,121 @@ import { WorkRequest } from 'types/internationalRequests' const checkRoomStatusInverval = randomIntRange(200, 500) export class WorkRequestManager { - communeManager: CommuneManager + communeManager: CommuneManager - constructor(communeManager: CommuneManager) { - this.communeManager = communeManager + constructor(communeManager: CommuneManager) { + this.communeManager = communeManager + } + + preTickRun() { + const { room } = this.communeManager + + // create a workRequest if needed + + if (room.roomManager.structures.spawn.length) return + + let request = Memory.workRequests[room.name] + if (request) { + request[WorkRequestKeys.priority] = 0 + return + } + + request = Memory.workRequests[room.name] = { + [WorkRequestKeys.priority]: 0, + } + } + + run() { + const { room } = this.communeManager + const roomMemory = Memory.rooms[room.name] + + const requestName = roomMemory[RoomMemoryKeys.workRequest] + if (!requestName) return + + const request = Memory.workRequests[requestName] + // If the workRequest doesn't exist anymore somehow, stop trying to do anything with it + if (!request) { + delete roomMemory[RoomMemoryKeys.workRequest] + return + } + + // if we have no spawn, stop + if (!room.roomManager.structures.spawn.length) { + this.stopResponse(true) + return + } + + const type = Memory.rooms[requestName][RoomMemoryKeys.type] + if ( + type === RoomTypes.ally || + type === RoomTypes.enemy || + type === RoomTypes.allyRemote || + type === RoomTypes.enemyRemote + ) { + // Delete the request so long as the new type isn't ally + + this.stopResponse(type !== RoomTypes.ally) + return + } + + // If the room is closed or is now a respawn or novice zone + if ( + utils.isTickInterval(checkRoomStatusInverval) && + Game.map.getRoomStatus(requestName).status !== Game.map.getRoomStatus(room.name).status + ) { + this.delete(requestName, request) + return } - preTickRun() { - const { room } = this.communeManager + // If the request has been abandoned, have the commune abandon it too - // create a workRequest if needed + if (request[WorkRequestKeys.abandon] > 0) { + this.stopResponse() + return + } + + if (room.energyCapacityAvailable < 650) { + this.stopResponse() + return + } + + const requestRoom = Game.rooms[requestName] + if (!request[WorkRequestKeys.forAlly] && (!requestRoom || !requestRoom.controller.my)) { + request[WorkRequestKeys.claimer] = 1 + return + } + + // If there is a spawn and we own it + + if ( + requestRoom.roomManager.structures.spawn.length && + requestRoom.roomManager.structures.spawn.find(spawn => spawn.my) + ) { + this.delete(requestName, request) + return + } - if (room.roomManager.structures.spawn.length) return + // If there is an invader core - let request = Memory.workRequests[room.name] - if (request) { - request[WorkRequestKeys.priority] = 0 - return - } + const invaderCores = requestRoom.roomManager.structures.invaderCore + if (invaderCores.length) { + // Abandon for the core's remaining existance plus the estimated reservation time - request = Memory.workRequests[room.name] = { - [WorkRequestKeys.priority]: 0, - } + this.abandon( + invaderCores[0].effects[EFFECT_COLLAPSE_TIMER].ticksRemaining + CONTROLLER_RESERVE_MAX, + ) + return } - run() { - const { room } = this.communeManager - const roomMemory = Memory.rooms[room.name] - - const requestName = roomMemory[RoomMemoryKeys.workRequest] - if (!requestName) return - - const request = Memory.workRequests[requestName] - // If the workRequest doesn't exist anymore somehow, stop trying to do anything with it - if (!request) { - delete roomMemory[RoomMemoryKeys.workRequest] - return - } - - // if we have no spawn, stop - if (!room.roomManager.structures.spawn.length) { - this.stopResponse(true) - return - } - - const type = Memory.rooms[requestName][RoomMemoryKeys.type] - if (type === RoomTypes.ally || type === RoomTypes.enemy || type === RoomTypes.allyRemote || type === RoomTypes.enemyRemote) { - // Delete the request so long as the new type isn't ally - - this.stopResponse(type !== RoomTypes.ally) - return - } - - // The room is closed or is now a respawn or novice zone - - if ( - utils.isTickInterval(checkRoomStatusInverval) && - Game.map.getRoomStatus(requestName).status !== Game.map.getRoomStatus(room.name).status - ) { - this.delete(requestName, request) - return - } - - // If the request has been abandoned, have the commune abandon it too - - if (request[WorkRequestKeys.abandon] > 0) { - this.stopResponse() - return - } - - if (room.energyCapacityAvailable < 650) { - this.stopResponse() - return - } - - const requestRoom = Game.rooms[requestName] - if (!request[WorkRequestKeys.forAlly] && (!requestRoom || !requestRoom.controller.my)) { - request[WorkRequestKeys.claimer] = 1 - return - } - - // If there is a spawn and we own it - - if ( - requestRoom.roomManager.structures.spawn.length && - requestRoom.roomManager.structures.spawn.find(spawn => spawn.my) - ) { - this.delete(requestName, request) - return - } - - // If there is an invader core - - const invaderCores = requestRoom.roomManager.structures.invaderCore - if (invaderCores.length) { - // Abandon for the core's remaining existance plus the estimated reservation time - - this.abandon( - invaderCores[0].effects[EFFECT_COLLAPSE_TIMER].ticksRemaining + - CONTROLLER_RESERVE_MAX, - ) - return - } - - if (request[WorkRequestKeys.forAlly]) { - request[WorkRequestKeys.allyVanguard] = requestRoom.roomManager.structures.spawn.length - ? 0 - : 20 - } else { - request[WorkRequestKeys.vanguard] = requestRoom.roomManager.structures.spawn.length - ? 0 - : 20 - } - - /* + if (request[WorkRequestKeys.forAlly]) { + request[WorkRequestKeys.allyVanguard] = requestRoom.roomManager.structures.spawn.length + ? 0 + : 20 + } else { + request[WorkRequestKeys.vanguard] = requestRoom.roomManager.structures.spawn.length ? 0 : 20 + } + + /* request[WorkRequestKeys.minDamage] = 0 request[WorkRequestKeys.minHeal] = 0 @@ -150,54 +151,52 @@ export class WorkRequestManager { if (request[WorkRequestKeys.minDamage] > 0 || request[WorkRequestKeys.minHeal] > 0) this.abandonRemote() } */ - } + } - private stopResponse(deleteCombat?: boolean) { - const roomMemory = this.communeManager.room.memory - const request = Memory.workRequests[roomMemory[RoomMemoryKeys.workRequest]] + private stopResponse(deleteCombat?: boolean) { + const roomMemory = this.communeManager.room.memory + const request = Memory.workRequests[roomMemory[RoomMemoryKeys.workRequest]] - if (deleteCombat) this.deleteCombat() + if (deleteCombat) this.deleteCombat() - delete request[WorkRequestKeys.responder] - delete roomMemory[RoomMemoryKeys.workRequest] - } + delete request[WorkRequestKeys.responder] + delete roomMemory[RoomMemoryKeys.workRequest] + } - private delete(requestName: string, request: WorkRequest) { - const roomMemory = this.communeManager.room.memory + private delete(requestName: string, request: WorkRequest) { + const roomMemory = this.communeManager.room.memory - this.deleteCombat() + this.deleteCombat() - delete Memory.workRequests[roomMemory[RoomMemoryKeys.workRequest]] - delete roomMemory[RoomMemoryKeys.workRequest] - } + delete Memory.workRequests[roomMemory[RoomMemoryKeys.workRequest]] + delete roomMemory[RoomMemoryKeys.workRequest] + } - private abandon(abandonTime: number = 20000) { - const roomMemory = this.communeManager.room.memory - const request = Memory.workRequests[roomMemory[RoomMemoryKeys.workRequest]] + private abandon(abandonTime: number = 20000) { + const roomMemory = this.communeManager.room.memory + const request = Memory.workRequests[roomMemory[RoomMemoryKeys.workRequest]] - this.deleteCombat() + this.deleteCombat() - request[WorkRequestKeys.abandon] = abandonTime - delete request[WorkRequestKeys.responder] - delete roomMemory[RoomMemoryKeys.workRequest] - } + request[WorkRequestKeys.abandon] = abandonTime + delete request[WorkRequestKeys.responder] + delete roomMemory[RoomMemoryKeys.workRequest] + } - private deleteCombat() { - const workRequestName = this.communeManager.room.memory[RoomMemoryKeys.workRequest] - const combatRequest = Memory.combatRequests[workRequestName] - if (!combatRequest) return - - if (combatRequest[CombatRequestKeys.responder]) { - const combatRequestResponder = Game.rooms[combatRequest[CombatRequestKeys.responder]] - combatRequestResponder.communeManager.deleteCombatRequest( - combatRequest[CombatRequestKeys.responder], - combatRequestResponder.memory[RoomMemoryKeys.combatRequests].indexOf( - workRequestName, - ), - ) - return - } - - delete Memory.combatRequests[workRequestName] + private deleteCombat() { + const workRequestName = this.communeManager.room.memory[RoomMemoryKeys.workRequest] + const combatRequest = Memory.combatRequests[workRequestName] + if (!combatRequest) return + + if (combatRequest[CombatRequestKeys.responder]) { + const combatRequestResponder = Game.rooms[combatRequest[CombatRequestKeys.responder]] + combatRequestResponder.communeManager.deleteCombatRequest( + combatRequest[CombatRequestKeys.responder], + combatRequestResponder.memory[RoomMemoryKeys.combatRequests].indexOf(workRequestName), + ) + return } + + delete Memory.combatRequests[workRequestName] + } } diff --git a/src/room/construction/communePlanner.ts b/src/room/construction/communePlanner.ts index 186039170..fa040d78d 100644 --- a/src/room/construction/communePlanner.ts +++ b/src/room/construction/communePlanner.ts @@ -62,7 +62,7 @@ import { BasePlans } from './basePlans' import { RampartPlans } from './rampartPlans' import { minCutToExit } from './minCut' import { customPathFinder } from 'international/customPathFinder' -import { towerFunctions } from '../commune/towers' +import { towerUtils } from 'room/commune/towerUtils' const unprotectedCoordWeight = defaultRoadPlanningPlainCost * 16 const dynamicDistanceWeight = 8 @@ -2976,7 +2976,7 @@ export class CommunePlanner { let minIndividualDamage = Infinity for (const packedCoord of this.outsideMinCut) { - const damage = towerFunctions.estimateRangeDamage( + const damage = towerUtils.estimateRangeDamage( coord, unpackNumAsCoord(packedCoord), ) diff --git a/src/room/container.ts b/src/room/container.ts deleted file mode 100644 index 1c540ac36..000000000 --- a/src/room/container.ts +++ /dev/null @@ -1,125 +0,0 @@ -import { RoomLogisticsRequestTypes, customColors } from 'international/constants' -import { customLog } from 'utils/logging' -import { scalePriority } from 'utils/utils' -import { RoomManager } from './room' - -export class ContainerManager { - roomManager: RoomManager - - constructor(roomManager: RoomManager) { - this.roomManager = roomManager - } - - runRemote() { - this.runSourceContainers() - } - - runCommune() { - this.runSourceContainers() - this.runFastFillerContainers() - this.runControllerContainer() - this.runMineralContainer() - } - - private runFastFillerContainers() { - const fastFillerContainers = this.roomManager.fastFillerContainers - if (!fastFillerContainers.length) return - - for (const container of fastFillerContainers) { - const energy = container.reserveStore.energy - const capacity = container.store.getCapacity() - - if (energy > capacity * 0.5) { - - this.roomManager.room.createRoomLogisticsRequest({ - target: container, - maxAmount: energy * 0.5, - onlyFull: true, - type: RoomLogisticsRequestTypes.offer, - priority: scalePriority( - capacity, - energy, - 10, - true, - ), - }) - } - - // If we're sufficiently full, we don't need to ask for more - if (energy < capacity * 0.6) { - - this.roomManager.room.createRoomLogisticsRequest({ - target: container, - type: RoomLogisticsRequestTypes.transfer, - onlyFull: true, - priority: scalePriority( - capacity, - energy, - 20, - ), - }) - } - } - } - - private runSourceContainers() { - for (const container of this.roomManager.sourceContainers) { - if (!container) continue - - this.roomManager.room.createRoomLogisticsRequest({ - target: container, - type: RoomLogisticsRequestTypes.withdraw, - onlyFull: true, - priority: scalePriority( - container.store.getCapacity(), - container.reserveStore.energy, - 20, - true, - ), - }) - } - } - - private runControllerContainer() { - const container = this.roomManager.controllerContainer - if (!container) return - - if (container.usedReserveStore > container.store.getCapacity() * 0.9) return - - let priority = - this.roomManager.room.controller.ticksToDowngrade < - this.roomManager.room.communeManager.controllerDowngradeUpgradeThreshold - ? 0 - : 50 - priority += scalePriority(container.store.getCapacity(), container.reserveStore.energy, 20) - - this.roomManager.room.createRoomLogisticsRequest({ - target: container, - type: RoomLogisticsRequestTypes.transfer, - onlyFull: true, - priority, - }) - } - - private runMineralContainer() { - const container = this.roomManager.mineralContainer - if (!container) return - - const resourceType = this.roomManager.mineral.mineralType - - this.roomManager.room.createRoomLogisticsRequest({ - target: container, - resourceType, - type: RoomLogisticsRequestTypes.withdraw, - onlyFull: true, - priority: - 20 + - scalePriority( - container.store.getCapacity(), - container.reserveStore[resourceType], - 20, - true, - ), - }) - } -} diff --git a/src/room/creeps/creepAdditions.ts b/src/room/creeps/creepAdditions.ts index 234286a76..4ed992256 100644 --- a/src/room/creeps/creepAdditions.ts +++ b/src/room/creeps/creepAdditions.ts @@ -9,9 +9,9 @@ import { import { customLog } from 'utils/logging' import { getRangeXY, getRange, isXYExit, isExit } from 'utils/utils' import { profiler } from 'other/profiler' -import { towerFunctions } from 'room/commune/towers' import { creepUtils } from './creepUtils' import { structureUtils } from 'room/structureUtils' +import { towerUtils } from 'room/commune/towerUtils' Object.defineProperties(Creep.prototype, { nameData: { @@ -364,7 +364,7 @@ const additions = { if (!structureUtils.isRCLActionable(tower)) continue if (tower.store.getUsedCapacity(RESOURCE_ENERGY) < TOWER_ENERGY_COST) continue - this._grossTowerDamage = towerFunctions.estimateDamageGross(tower, this.pos) + this._grossTowerDamage = towerUtils.estimateDamageGross(tower, this.pos) } return this._grossTowerDamage diff --git a/src/room/droppedResources.ts b/src/room/droppedResources.ts deleted file mode 100644 index 849142c99..000000000 --- a/src/room/droppedResources.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { customLog } from 'utils/logging' -import { scalePriority } from 'utils/utils' -import { RoomManager } from 'room/room' -import { RoomLogisticsRequestTypes } from 'international/constants' - -export class DroppedResourceManager { - roomManager: RoomManager - - constructor(roomManager: RoomManager) { - this.roomManager = roomManager - } - - runCommune() { - for (const resource of this.roomManager.droppedResources) { - if (resource.amount < 50) continue - - this.roomManager.room.createRoomLogisticsRequest({ - target: resource, - resourceType: resource.resourceType, - type: RoomLogisticsRequestTypes.pickup, - priority: Math.max(5, 20 - resource.reserveAmount / 200), - onlyFull: true, - }) - } - } - - runRemote() { - for (const resource of this.roomManager.droppedResources) { - if (resource.resourceType !== RESOURCE_ENERGY) continue - if (resource.amount < 50) continue - - this.roomManager.room.createRoomLogisticsRequest({ - target: resource, - type: RoomLogisticsRequestTypes.pickup, - priority: Math.max(5, 10 - resource.reserveAmount / 200), - }) - } - } -} diff --git a/src/room/logisticsProcs.ts b/src/room/logisticsProcs.ts new file mode 100644 index 000000000..2e7bb07a1 --- /dev/null +++ b/src/room/logisticsProcs.ts @@ -0,0 +1,200 @@ +import { RoomLogisticsRequestTypes } from 'international/constants' +import { scalePriority } from 'utils/utils' + +export class LogisticsProcs { + createCommuneContainerLogisticsRequests(room: Room) { + this.createSourceContainerRequests(room) + this.createFastFillerContainerRequests(room) + this.createControllerContainerRequests(room) + this.createMineralContainerRequests(room) + } + + createRemoteContainerLogisticsRequests(room: Room) { + this.createSourceContainerRequests(room) + } + + private createFastFillerContainerRequests(room: Room) { + const fastFillerContainers = room.roomManager.fastFillerContainers + if (!fastFillerContainers.length) return + + for (const container of fastFillerContainers) { + const energy = container.reserveStore.energy + const capacity = container.store.getCapacity() + + if (energy > capacity * 0.5) { + room.createRoomLogisticsRequest({ + target: container, + maxAmount: energy * 0.5, + onlyFull: true, + type: RoomLogisticsRequestTypes.offer, + priority: scalePriority(capacity, energy, 10, true), + }) + } + + // If we're sufficiently full, we don't need to ask for more + if (energy < capacity * 0.6) { + room.createRoomLogisticsRequest({ + target: container, + type: RoomLogisticsRequestTypes.transfer, + onlyFull: true, + priority: scalePriority(capacity, energy, 20), + }) + } + } + } + + private createSourceContainerRequests(room: Room) { + for (const container of room.roomManager.sourceContainers) { + if (!container) continue + + room.createRoomLogisticsRequest({ + target: container, + type: RoomLogisticsRequestTypes.withdraw, + onlyFull: true, + priority: scalePriority( + container.store.getCapacity(), + container.reserveStore.energy, + 20, + true, + ), + }) + } + } + + private createControllerContainerRequests(room: Room) { + const container = room.roomManager.controllerContainer + if (!container) return + + if (container.usedReserveStore > container.store.getCapacity() * 0.9) return + + let priority = + room.controller.ticksToDowngrade < room.communeManager.controllerDowngradeUpgradeThreshold + ? 0 + : 50 + priority += scalePriority(container.store.getCapacity(), container.reserveStore.energy, 20) + + room.createRoomLogisticsRequest({ + target: container, + type: RoomLogisticsRequestTypes.transfer, + onlyFull: true, + priority, + }) + } + + private createMineralContainerRequests(room: Room) { + const container = room.roomManager.mineralContainer + if (!container) return + + const resourceType = room.roomManager.mineral.mineralType + + room.createRoomLogisticsRequest({ + target: container, + resourceType, + type: RoomLogisticsRequestTypes.withdraw, + onlyFull: true, + priority: + 20 + + scalePriority( + container.store.getCapacity(), + container.reserveStore[resourceType], + 20, + true, + ), + }) + } + + createCommuneRuinLogisticsRequests(room: Room) { + for (const ruin of room.find(FIND_RUINS)) { + for (const key in ruin.reserveStore) { + const resourceType = key as ResourceConstant + const amount = ruin.reserveStore[resourceType] + if (amount < 50) continue + + room.createRoomLogisticsRequest({ + target: ruin, + resourceType: resourceType, + type: RoomLogisticsRequestTypes.withdraw, + priority: Math.max(5, 20 - amount / 200), + }) + } + } + } + + createCommuneTombstoneLogisticsRequests(room: Room) { + for (const tombstone of room.find(FIND_TOMBSTONES)) { + for (const key in tombstone.reserveStore) { + const resourceType = key as ResourceConstant + const amount = tombstone.reserveStore[resourceType] + if (amount < 50) continue + + room.createRoomLogisticsRequest({ + target: tombstone, + resourceType: resourceType, + type: RoomLogisticsRequestTypes.withdraw, + priority: Math.max(5, 20 - amount / 200), + }) + } + } + } + + createCommuneDroppedResourceLogisticsRequests(room: Room) { + for (const resource of room.roomManager.droppedResources) { + if (resource.amount < 50) continue + + room.createRoomLogisticsRequest({ + target: resource, + resourceType: resource.resourceType, + type: RoomLogisticsRequestTypes.pickup, + priority: Math.max(5, 20 - resource.reserveAmount / 200), + onlyFull: true, + }) + } + } + + createRemoteRuinLogisticsRequests(room: Room) { + const resourceType = RESOURCE_ENERGY + + for (const ruin of room.find(FIND_RUINS)) { + const amount = ruin.reserveStore[resourceType] + if (amount < 50) continue + + room.createRoomLogisticsRequest({ + target: ruin, + resourceType: resourceType, + type: RoomLogisticsRequestTypes.withdraw, + priority: Math.max(5, 20 - amount / 200), + }) + } + } + + createRemoteTombstoneLogisticsRequests(room: Room) { + const resourceType = RESOURCE_ENERGY + + for (const tombstone of room.find(FIND_TOMBSTONES)) { + const amount = tombstone.reserveStore[resourceType] + if (amount < 50) continue + + room.createRoomLogisticsRequest({ + target: tombstone, + resourceType: resourceType, + type: RoomLogisticsRequestTypes.withdraw, + priority: Math.max(5, 20 - amount / 200), + }) + } + } + + createRemoteDroppedResourceLogisticsRequests(room: Room) { + for (const resource of room.roomManager.droppedResources) { + if (resource.resourceType !== RESOURCE_ENERGY) continue + if (resource.amount < 50) continue + + room.createRoomLogisticsRequest({ + target: resource, + type: RoomLogisticsRequestTypes.pickup, + priority: Math.max(5, 10 - resource.reserveAmount / 200), + }) + } + } +} + +export const logisticsProcs = new LogisticsProcs() diff --git a/src/room/logisticsUtils.ts b/src/room/logisticsUtils.ts new file mode 100644 index 000000000..897d4d4a0 --- /dev/null +++ b/src/room/logisticsUtils.ts @@ -0,0 +1,5 @@ +export class LogisticsUtils { + +} + +export const logisticsUtils = new LogisticsUtils() diff --git a/src/room/remotePlanner.ts b/src/room/remotePlanner.ts index b14419a7a..58cfcab1f 100644 --- a/src/room/remotePlanner.ts +++ b/src/room/remotePlanner.ts @@ -61,7 +61,7 @@ import { BasePlans } from './construction/basePlans' import { RampartPlans } from './construction/rampartPlans' import { minCutToExit } from './construction/minCut' import { customPathFinder } from 'international/customPathFinder' -import { towerFunctions } from './commune/towers' +import { towerUtils } from './commune/towerUtils' const unprotectedCoordWeight = defaultRoadPlanningPlainCost * 16 const dynamicDistanceWeight = 8 @@ -2947,7 +2947,7 @@ export class RemotePlanner { let minIndividualDamage = Infinity for (const packedCoord of this.outsideMinCut) { - const damage = towerFunctions.estimateRangeDamage( + const damage = towerUtils.estimateRangeDamage( coord, unpackNumAsCoord(packedCoord), ) diff --git a/src/room/remoteProcs.ts b/src/room/remoteProcs.ts new file mode 100644 index 000000000..fb15c67cf --- /dev/null +++ b/src/room/remoteProcs.ts @@ -0,0 +1,7 @@ +import { RoomLogisticsRequestTypes } from 'international/constants' + +export class RemoteProcs { + +} + +export const remoteProcs = new RemoteProcs() diff --git a/src/room/remoteUtils.ts b/src/room/remoteUtils.ts new file mode 100644 index 000000000..085a0f779 --- /dev/null +++ b/src/room/remoteUtils.ts @@ -0,0 +1,5 @@ +export class RemoteUtils { + +} + +export const remoteUtils = new RemoteUtils() diff --git a/src/room/room.ts b/src/room/room.ts index 69283ab13..ad0fbaf84 100644 --- a/src/room/room.ts +++ b/src/room/room.ts @@ -41,25 +41,21 @@ import { sortBy, } from 'utils/utils' import { CommuneManager } from './commune/commune' -import { DroppedResourceManager } from './droppedResources' -import { ContainerManager } from './container' import { CreepRoleManager } from './creeps/creepRoleManager' import { EndTickCreepManager } from './creeps/endTickCreepManager' import { PowerCreepRoleManager } from './creeps/powerCreepRoleManager' import { RoomVisualsManager } from './roomVisuals' import { statsManager } from 'international/statsManager' import { CommunePlanner } from './construction/communePlanner' -import { TombstoneManager } from './tombstones' -import { RuinsManager } from './ruins' import { - packCoord, - packPosList, - packXYAsCoord, - unpackCoord, - unpackPos, - unpackPosAt, - unpackPosList, - unpackStampAnchors, + packCoord, + packPosList, + packXYAsCoord, + unpackCoord, + unpackPos, + unpackPosAt, + unpackPosList, + unpackStampAnchors, } from 'other/codec' import { BasePlans } from './construction/basePlans' import { RampartPlans } from './construction/rampartPlans' @@ -68,6 +64,8 @@ import { roomNameUtils } from './roomNameUtils' import { collectiveManager } from 'international/collective' import { customLog } from 'utils/logging' import { structureUtils } from './structureUtils' +import { remoteProcs } from './remoteProcs' +import { logisticsProcs } from './logisticsProcs' export interface InterpretedRoomEvent { eventType: EventConstant @@ -93,2110 +91,2063 @@ export interface NotMyConstructionSites { } export class RoomManager { - static roomManagers: { [roomName: string]: RoomManager } = {} - - // sub managers - - communePlanner: CommunePlanner - containerManager: ContainerManager - droppedResourceManager: DroppedResourceManager - tombstoneManager: TombstoneManager - ruinManager: RuinsManager - - creepRoleManager: CreepRoleManager - powerCreepRoleManager: PowerCreepRoleManager - endTickCreepManager: EndTickCreepManager - roomVisualsManager: RoomVisualsManager - - constructor() { - this.communePlanner = new CommunePlanner(this) - this.containerManager = new ContainerManager(this) - this.droppedResourceManager = new DroppedResourceManager(this) - this.tombstoneManager = new TombstoneManager(this) - this.ruinManager = new RuinsManager(this) - - this.creepRoleManager = new CreepRoleManager(this) - this.powerCreepRoleManager = new PowerCreepRoleManager(this) - this.endTickCreepManager = new EndTickCreepManager(this) - this.roomVisualsManager = new RoomVisualsManager(this) - } - - room: Room - /** - * Incremental order of recursive move request attempts - */ - recurseMoveRequestOrder = 0 - /** - * Incremental order of move request runs - */ - runMoveRequestOrder = 0 - /** - * Packed coords reserved by creeps - */ - reservedCoords: Map - roomLogisticsBlacklistCoords: Set = new Set() - - update(room: Room) { - delete this._structureUpdate - delete this.checkedCSiteUpdate - delete this._communeSources - delete this._remoteSources - delete this._mineral - delete this.checkedCSiteUpdate - delete this._structures - delete this._cSites - delete this._notMyCreeps - delete this._enemyAttackers - delete this._myDamagedCreeps - delete this._myDamagedPowerCreeps - delete this._allyDamagedCreeps - this._enemyCreepPositions = undefined - delete this._notMyConstructionSites - delete this._allyConstructionSitesByType - delete this._dismantleTargets - delete this._destructibleStructures - delete this._combatStructureTargets - delete this._remoteNamesByEfficacy - delete this._remoteSourceIndexesByEfficacy - - this._sourceContainers = undefined - this._fastFillerContainers = undefined - this._controllerContainer = undefined - this._mineralContainer = undefined - this._fastFillerLink = undefined - this._hubLink = undefined - this._droppedEnergy = undefined - this._droppedResources = undefined - this._actionableWalls = undefined - this._quadCostMatrix = undefined - this._quadBulldozeCostMatrix = undefined - this._enemyDamageThreat = undefined - this._enemyThreatCoords = undefined - this._enemyThreatGoals = undefined - /* this._flags = undefined */ - this._resourcesInStoringStructures = undefined - this._unprotectedEnemyCreeps = undefined - this._exitCoords = undefined - this._advancedLogistics = undefined - this._defaultCostMatrix = undefined - this._totalEnemyCombatStrength = undefined - this._factory = undefined - this._powerSpawn = undefined - this._nuker = undefined - this._observer = undefined - - if (randomTick()) { - delete this._nukeTargetCoords - this.roomLogisticsBlacklistCoords = new Set() - } - - this.reservedCoords = new Map() - - this.room = room - const roomMemory = room.memory - - // If it hasn't been scouted for 100~ ticks - if (Game.time - roomMemory[RoomMemoryKeys.lastScout] > Math.floor(Math.random() * 200)) { - room.basicScout() - roomNameUtils.cleanMemory(room.name) - } - - const roomType = roomMemory[RoomMemoryKeys.type] - if (roomTypesUsedForStats.includes(roomType)) { - statsManager.roomInitialRun(room.name, roomType) - } - - room.moveRequests = {} - room.creepPositions = {} - room.powerCreepPositions = {} - - // Single tick properties - - room.myCreeps = [] - room.myPowerCreeps = [] - - room.myCreepsByRole = {} - for (const role of creepRoles) room.myCreepsByRole[role] = [] - - room.myPowerCreepsByRole = {} - for (const className of powerCreepClassNames) room.myPowerCreepsByRole[className] = [] - - room.powerTasks = {} - - room.creepsOfSource = [] - for (const index in room.find(FIND_SOURCES)) room.creepsOfSource.push([]) - - room.squadRequests = new Set() - - room.roomLogisticsRequests = { - [RoomLogisticsRequestTypes.transfer]: {}, - [RoomLogisticsRequestTypes.withdraw]: {}, - [RoomLogisticsRequestTypes.offer]: {}, - [RoomLogisticsRequestTypes.pickup]: {}, - } - - if (!room.controller) return + static roomManagers: { [roomName: string]: RoomManager } = {} + + // sub managers + + communePlanner: CommunePlanner + + creepRoleManager: CreepRoleManager + powerCreepRoleManager: PowerCreepRoleManager + endTickCreepManager: EndTickCreepManager + roomVisualsManager: RoomVisualsManager + + constructor() { + this.communePlanner = new CommunePlanner(this) + + this.creepRoleManager = new CreepRoleManager(this) + this.powerCreepRoleManager = new PowerCreepRoleManager(this) + this.endTickCreepManager = new EndTickCreepManager(this) + this.roomVisualsManager = new RoomVisualsManager(this) + } + + room: Room + /** + * Incremental order of recursive move request attempts + */ + recurseMoveRequestOrder = 0 + /** + * Incremental order of move request runs + */ + runMoveRequestOrder = 0 + /** + * Packed coords reserved by creeps + */ + reservedCoords: Map + roomLogisticsBlacklistCoords: Set = new Set() + + update(room: Room) { + delete this._structureUpdate + delete this.checkedCSiteUpdate + delete this._communeSources + delete this._remoteSources + delete this._mineral + delete this.checkedCSiteUpdate + delete this._structures + delete this._cSites + delete this._notMyCreeps + delete this._enemyAttackers + delete this._myDamagedCreeps + delete this._myDamagedPowerCreeps + delete this._allyDamagedCreeps + this._enemyCreepPositions = undefined + delete this._notMyConstructionSites + delete this._allyConstructionSitesByType + delete this._dismantleTargets + delete this._destructibleStructures + delete this._combatStructureTargets + delete this._remoteNamesByEfficacy + delete this._remoteSourceIndexesByEfficacy + + this._sourceContainers = undefined + this._fastFillerContainers = undefined + this._controllerContainer = undefined + this._mineralContainer = undefined + this._fastFillerLink = undefined + this._hubLink = undefined + this._droppedEnergy = undefined + this._droppedResources = undefined + this._actionableWalls = undefined + this._quadCostMatrix = undefined + this._quadBulldozeCostMatrix = undefined + this._enemyDamageThreat = undefined + this._enemyThreatCoords = undefined + this._enemyThreatGoals = undefined + /* this._flags = undefined */ + this._resourcesInStoringStructures = undefined + this._unprotectedEnemyCreeps = undefined + this._exitCoords = undefined + this._advancedLogistics = undefined + this._defaultCostMatrix = undefined + this._totalEnemyCombatStrength = undefined + this._factory = undefined + this._powerSpawn = undefined + this._nuker = undefined + this._observer = undefined + + if (randomTick()) { + delete this._nukeTargetCoords + this.roomLogisticsBlacklistCoords = new Set() + } + + this.reservedCoords = new Map() + + this.room = room + const roomMemory = room.memory + + // If it hasn't been scouted for 100~ ticks + if (Game.time - roomMemory[RoomMemoryKeys.lastScout] > Math.floor(Math.random() * 200)) { + room.basicScout() + roomNameUtils.cleanMemory(room.name) + } + + const roomType = roomMemory[RoomMemoryKeys.type] + if (roomTypesUsedForStats.includes(roomType)) { + statsManager.roomInitialRun(room.name, roomType) + } + + room.moveRequests = {} + room.creepPositions = {} + room.powerCreepPositions = {} + + // Single tick properties + + room.myCreeps = [] + room.myPowerCreeps = [] + + room.myCreepsByRole = {} + for (const role of creepRoles) room.myCreepsByRole[role] = [] + + room.myPowerCreepsByRole = {} + for (const className of powerCreepClassNames) room.myPowerCreepsByRole[className] = [] + + room.powerTasks = {} + + room.creepsOfSource = [] + for (const index in room.find(FIND_SOURCES)) room.creepsOfSource.push([]) + + room.squadRequests = new Set() + + room.roomLogisticsRequests = { + [RoomLogisticsRequestTypes.transfer]: {}, + [RoomLogisticsRequestTypes.withdraw]: {}, + [RoomLogisticsRequestTypes.offer]: {}, + [RoomLogisticsRequestTypes.pickup]: {}, + } + + if (!room.controller) return + + // There is a controller + + if (this.updatePotentialCommune(room) === true) return - // There is a controller - - if (this.updatePotentialCommune(room) === true) return - - // The room isn't a commune + // The room isn't a commune + } + /** + * + * @returns wether or not the room is a commune + */ + private updatePotentialCommune(room: Room): boolean { + const roomMemory = Memory.rooms[room.name] + if (!this.room.controller.my) { + if (roomMemory[RoomMemoryKeys.type] === RoomTypes.commune) { + roomMemory[RoomMemoryKeys.type] = RoomTypes.neutral + roomNameUtils.cleanMemory(room.name) + } + return false } - /** - * - * @returns wether or not the room is a commune - */ - private updatePotentialCommune(room: Room): boolean { - - const roomMemory = Memory.rooms[room.name] + // If the type isn't a commune, make it so and clean its memory - if (!this.room.controller.my) { - - if (roomMemory[RoomMemoryKeys.type] === RoomTypes.commune) { - roomMemory[RoomMemoryKeys.type] = RoomTypes.neutral - roomNameUtils.cleanMemory(room.name) - } - return false - } - - // If the type isn't a commune, make it so and clean its memory + if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.commune) { + roomMemory[RoomMemoryKeys.type] = RoomTypes.commune + roomNameUtils.cleanMemory(room.name) + } - if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.commune) { + // If there is no communeManager for the room yet, make one and assign them together - roomMemory[RoomMemoryKeys.type] = RoomTypes.commune - roomNameUtils.cleanMemory(room.name) - } + room.communeManager = CommuneManager.communeManagers[room.name] + if (!room.communeManager) { + room.communeManager = new CommuneManager() + CommuneManager.communeManagers[room.name] = room.communeManager + } - // If there is no communeManager for the room yet, make one and assign them together + room.communeManager.update(room) + return true + } - room.communeManager = CommuneManager.communeManagers[room.name] - if (!room.communeManager) { + initRun() { + if (this.room.communeManager) { + this.room.communeManager.initRun() + return + } + } - room.communeManager = new CommuneManager() - CommuneManager.communeManagers[room.name] = room.communeManager - } + run() { + this.test() - room.communeManager.update(room) - return true + if (this.room.communeManager) { + this.room.communeManager.run() + return } - initRun() { - if (this.room.communeManager) { - this.room.communeManager.initRun() - return - } + if (this.room.memory[RoomMemoryKeys.type] === RoomTypes.remote) { + logisticsProcs.createRemoteContainerLogisticsRequests(this.room) + logisticsProcs.createRemoteDroppedResourceLogisticsRequests(this.room) + logisticsProcs.createRemoteTombstoneLogisticsRequests(this.room) + logisticsProcs.createRemoteRuinLogisticsRequests(this.room) } - run() { - this.test() - - if (this.room.communeManager) { - this.room.communeManager.run() - return - } + this.creepRoleManager.run() + this.powerCreepRoleManager.run() + this.endTickCreepManager.run() + this.roomVisualsManager.run() + } - if (this.room.memory[RoomMemoryKeys.type] === RoomTypes.remote) { - this.containerManager.runRemote() - this.droppedResourceManager.runRemote() - this.tombstoneManager.runRemote() - this.ruinManager.runRemote() - } + private test() {} - this.creepRoleManager.run() - this.powerCreepRoleManager.run() - this.endTickCreepManager.run() - this.roomVisualsManager.run() + /** + * Debug + */ + private visualizeReservedCoords() { + customLog('reservedCoords', JSON.stringify([...this.reservedCoords])) + for (const [packedCoord, reserveType] of this.reservedCoords) { + const coord = unpackCoord(packedCoord) + this.room.coordVisual(coord.x, coord.y, `hsl(${200}${reserveType * 50}, 100%, 60%)`) } + } - private test() { } + findRemoteSources(commune: Room) { + const anchor = commune.roomManager.anchor + if (!anchor) throw Error('No anchor for remote source harvest positions ' + this.room.name) - /** - * Debug - */ - private visualizeReservedCoords() { - customLog('reservedCoords', JSON.stringify([...this.reservedCoords])) - for (const [packedCoord, reserveType] of this.reservedCoords) { - const coord = unpackCoord(packedCoord) - this.room.coordVisual(coord.x, coord.y, `hsl(${200}${reserveType * 50}, 100%, 60%)`) - } - } + const sources = this.room.find(FIND_SOURCES) - findRemoteSources(commune: Room) { - const anchor = commune.roomManager.anchor - if (!anchor) throw Error('No anchor for remote source harvest positions ' + this.room.name) + sortBy( + sources, + ({ pos }) => + customPathFinder.findPath({ + origin: pos, + goals: [{ pos: anchor, range: 3 }], + }).length, + ) - const sources = this.room.find(FIND_SOURCES) + return sources.map(source => source.id) + } - sortBy( - sources, - ({ pos }) => - customPathFinder.findPath({ - origin: pos, - goals: [{ pos: anchor, range: 3 }], - }).length, - ) - - return sources.map(source => source.id) - } - - findRemoteSourceHarvestPositions(commune: Room, packedRemoteSources: Id[]) { - const anchor = commune.roomManager.anchor - if (!anchor) throw Error('No anchor for remote source harvest positions ' + this.room.name) - - const terrain = this.room.getTerrain() - const sourceHarvestPositions: RoomPosition[][] = [] + findRemoteSourceHarvestPositions(commune: Room, packedRemoteSources: Id[]) { + const anchor = commune.roomManager.anchor + if (!anchor) throw Error('No anchor for remote source harvest positions ' + this.room.name) - for (const sourceID of packedRemoteSources) { - const source = findObjectWithID(sourceID) - const positions = [] + const terrain = this.room.getTerrain() + const sourceHarvestPositions: RoomPosition[][] = [] - // Loop through each pos + for (const sourceID of packedRemoteSources) { + const source = findObjectWithID(sourceID) + const positions = [] - for (const pos of this.room.findAdjacentPositions(source.pos.x, source.pos.y)) { - // Iterate if terrain for pos is a wall + // Loop through each pos - if (terrain.get(pos.x, pos.y) === TERRAIN_MASK_WALL) continue + for (const pos of this.room.findAdjacentPositions(source.pos.x, source.pos.y)) { + // Iterate if terrain for pos is a wall - // Add pos to harvestPositions + if (terrain.get(pos.x, pos.y) === TERRAIN_MASK_WALL) continue - positions.push(pos) - } + // Add pos to harvestPositions - sortBy( - positions, - origin => - customPathFinder.findPath({ - origin, - goals: [{ pos: anchor, range: 3 }], - }).length, - ) + positions.push(pos) + } - sourceHarvestPositions.push(positions) - } - - return sourceHarvestPositions.map(positions => packPosList(positions)) - } - - findRemoteSourceFastFillerPaths( - commune: Room, - packedRemoteSourceHarvestPositions: string[], - weightCoords: { [packedCoord: string]: number }, - pathsThrough: Set, - ) { - const anchor = commune.roomManager.anchor - if (!anchor) throw Error('No anchor for remote source harvest paths' + this.room.name) - - const sourcePaths: RoomPosition[][] = [] - - for (const positions of packedRemoteSourceHarvestPositions) { - const origin = unpackPosAt(positions, 0) - const path = customPathFinder.findPath({ - origin, - goals: [{ pos: anchor, range: 3 }], - typeWeights: remoteTypeWeights, - plainCost: defaultRoadPlanningPlainCost, - weightCoords: { - [this.room.name]: weightCoords - }, - weightCoordMapsForRoomName(roomName) { - return roomNameUtils.diagonalCoords(roomName, commune) - }, - weightCommuneStructurePlans: true, - weightRemoteStructurePlans: { - remoteResourcePathType: RoomMemoryKeys.remoteSourceFastFillerPaths, - }, - }) - - for (const pos of path) { - pathsThrough.add(pos.roomName) - } - - sourcePaths.push(path) - } + sortBy( + positions, + origin => + customPathFinder.findPath({ + origin, + goals: [{ pos: anchor, range: 3 }], + }).length, + ) + + sourceHarvestPositions.push(positions) + } + + return sourceHarvestPositions.map(positions => packPosList(positions)) + } + + findRemoteSourceFastFillerPaths( + commune: Room, + packedRemoteSourceHarvestPositions: string[], + weightCoords: { [packedCoord: string]: number }, + pathsThrough: Set, + ) { + const anchor = commune.roomManager.anchor + if (!anchor) throw Error('No anchor for remote source harvest paths' + this.room.name) + + const sourcePaths: RoomPosition[][] = [] + + for (const positions of packedRemoteSourceHarvestPositions) { + const origin = unpackPosAt(positions, 0) + const path = customPathFinder.findPath({ + origin, + goals: [{ pos: anchor, range: 3 }], + typeWeights: remoteTypeWeights, + plainCost: defaultRoadPlanningPlainCost, + weightCoords: { + [this.room.name]: weightCoords, + }, + weightCoordMapsForRoomName(roomName) { + return roomNameUtils.diagonalCoords(roomName, commune) + }, + weightCommuneStructurePlans: true, + weightRemoteStructurePlans: { + remoteResourcePathType: RoomMemoryKeys.remoteSourceFastFillerPaths, + }, + }) + + for (const pos of path) { + pathsThrough.add(pos.roomName) + } + + sourcePaths.push(path) + } - /* + /* for (const index in sourcePaths) { const path = sourcePaths[index] if (!path.length) throw Error('no source path found for index ' + index + ' for ' + this.room.name + ', ' + JSON.stringify(sourcePaths) + ', ' + packedRemoteSourceHarvestPositions) } */ - return sourcePaths.map(path => packPosList(path)) + return sourcePaths.map(path => packPosList(path)) + } + + findRemoteSourceHubPaths( + commune: Room, + packedRemoteSourceHarvestPositions: string[], + weightCoords: { [packedCoord: string]: number }, + pathsThrough: Set, + ) { + const stampAnchors = commune.roomManager.stampAnchors + if (!stampAnchors) throw Error('no stampAnchors for ' + commune.name) + + const basePlans = commune.roomManager.basePlans + let goalPos: RoomPosition + + // find the coord of the planned storage and make that the goal + + forAdjacentCoords(stampAnchors.hub[0], coord => { + const coordData = basePlans.map[packCoord(coord)] + if (!coordData) return undefined + + for (const data of coordData) { + if (data.structureType !== STRUCTURE_STORAGE) continue + + goalPos = new RoomPosition(coord.x, coord.y, commune.name) + return Result.stop + } + return undefined + }) + + const sourcePaths: RoomPosition[][] = [] + + for (const positions of packedRemoteSourceHarvestPositions) { + const origin = unpackPosAt(positions, 0) + const path = customPathFinder.findPath({ + origin, + goals: [{ pos: goalPos, range: 1 }], + typeWeights: remoteTypeWeights, + plainCost: defaultRoadPlanningPlainCost, + weightCoords: { + [this.room.name]: weightCoords, + }, + weightCoordMapsForRoomName(roomName) { + return roomNameUtils.diagonalCoords(roomName, commune) + }, + weightCommuneStructurePlans: true, + weightRemoteStructurePlans: { + remoteResourcePathType: RoomMemoryKeys.remoteSourceHubPaths, + }, + }) + + for (const pos of path) { + pathsThrough.add(pos.roomName) + } + + sourcePaths.push(path) } - - findRemoteSourceHubPaths( - commune: Room, - packedRemoteSourceHarvestPositions: string[], - weightCoords: { [packedCoord: string]: number }, - pathsThrough: Set, - ) { - const stampAnchors = commune.roomManager.stampAnchors - if (!stampAnchors) throw Error('no stampAnchors for ' + commune.name) - - const basePlans = commune.roomManager.basePlans - let goalPos: RoomPosition - - // find the coord of the planned storage and make that the goal - - forAdjacentCoords(stampAnchors.hub[0], coord => { - const coordData = basePlans.map[packCoord(coord)] - if (!coordData) return undefined - - for (const data of coordData) { - if (data.structureType !== STRUCTURE_STORAGE) continue - - goalPos = new RoomPosition(coord.x, coord.y, commune.name) - return Result.stop - } - return undefined - }) - - const sourcePaths: RoomPosition[][] = [] - - for (const positions of packedRemoteSourceHarvestPositions) { - const origin = unpackPosAt(positions, 0) - const path = customPathFinder.findPath({ - origin, - goals: [{ pos: goalPos, range: 1 }], - typeWeights: remoteTypeWeights, - plainCost: defaultRoadPlanningPlainCost, - weightCoords: { - [this.room.name]: weightCoords - }, - weightCoordMapsForRoomName(roomName) { - return roomNameUtils.diagonalCoords(roomName, commune) - }, - weightCommuneStructurePlans: true, - weightRemoteStructurePlans: { - remoteResourcePathType: RoomMemoryKeys.remoteSourceHubPaths, - }, - }) - - for (const pos of path) { - pathsThrough.add(pos.roomName) - } - - sourcePaths.push(path) - } - /* + /* for (const index in sourcePaths) { const path = sourcePaths[index] if (!path.length) throw Error('no source path found for index ' + index + ' for ' + this.room.name + ', ' + JSON.stringify(sourcePaths) + ', ' + packedRemoteSourceHarvestPositions) } */ - return sourcePaths.map(path => packPosList(path)) + return sourcePaths.map(path => packPosList(path)) + } + + findRemoteControllerPositions(commune: Room) { + const anchor = commune.roomManager.anchor + if (!anchor) throw Error('no anchor found for controller positions ' + this.room.name) + + const positions: RoomPosition[] = [] + const controllerPos = this.room.controller.pos + const terrain = this.room.getTerrain() + + for (let offset of adjacentOffsets) { + const adjPos = new RoomPosition( + offset.x + controllerPos.x, + offset.y + controllerPos.y, + this.room.name, + ) + + if (terrain.get(adjPos.x, adjPos.y) === TERRAIN_MASK_WALL) continue + + positions.push(adjPos) + } + + sortBy( + positions, + origin => + customPathFinder.findPath({ + origin, + goals: [{ pos: anchor, range: 3 }], + }).length, + ) + + return packPosList(positions) + } + + findRemoteControllerPath( + commune: Room, + packedRemoteControllerPositions: string, + weightCoords: { [packedCoord: string]: number }, + pathsThrough: Set, + ) { + const anchor = commune.roomManager.anchor + if (!anchor) throw Error('No anchor for remote controller path' + this.room.name) + + const origin = unpackPosAt(packedRemoteControllerPositions, 0) + const path = customPathFinder.findPath({ + origin, + goals: [{ pos: anchor, range: 3 }], + typeWeights: remoteTypeWeights, + plainCost: defaultRoadPlanningPlainCost, + weightCoords: { + [this.room.name]: weightCoords, + }, + weightCoordMapsForRoomName(roomName) { + return roomNameUtils.diagonalCoords(roomName, commune) + }, + weightCommuneStructurePlans: true, + weightRemoteStructurePlans: { + remoteResourcePathType: RoomMemoryKeys.remoteSourceFastFillerPaths, + }, + }) + + for (const pos of path) { + pathsThrough.add(pos.roomName) + } + + return packPosList(path) + } + + isStartRoom() { + return ( + collectiveManager.communes.size === 1 && + this.room.controller.my && + this.room.controller.safeMode && + collectiveManager.communes.has(this.room.name) + ) + } + + reserveCoord(packedCoord: string, newCoordType: ReservedCoordTypes) { + const currentCoordType = this.reservedCoords.get(packedCoord) || ReservedCoordTypes.normal + if (currentCoordType) { + this.reservedCoords.set(packedCoord, Math.max(currentCoordType, newCoordType)) + return } - findRemoteControllerPositions(commune: Room) { - const anchor = commune.roomManager.anchor - if (!anchor) throw Error('no anchor found for controller positions ' + this.room.name) + this.reservedCoords.set(packedCoord, newCoordType) + } - const positions: RoomPosition[] = [] - const controllerPos = this.room.controller.pos - const terrain = this.room.getTerrain() + _anchor: RoomPosition + get anchor() { + if (this._anchor !== undefined) return this._anchor - for (let offset of adjacentOffsets) { - const adjPos = new RoomPosition( - offset.x + controllerPos.x, - offset.y + controllerPos.y, - this.room.name, - ) + const stampAnchors = this.stampAnchors + if (!stampAnchors) return false - if (terrain.get(adjPos.x, adjPos.y) === TERRAIN_MASK_WALL) continue - - positions.push(adjPos) - } - - sortBy( - positions, - origin => - customPathFinder.findPath({ - origin, - goals: [{ pos: anchor, range: 3 }], - }).length, - ) + return (this._anchor = new RoomPosition( + stampAnchors.fastFiller[0].x, + stampAnchors.fastFiller[0].y, + this.room.name, + )) + } - return packPosList(positions) - } - - findRemoteControllerPath( - commune: Room, - packedRemoteControllerPositions: string, - weightCoords: { [packedCoord: string]: number }, - pathsThrough: Set, - ) { - const anchor = commune.roomManager.anchor - if (!anchor) throw Error('No anchor for remote controller path' + this.room.name) - - const origin = unpackPosAt(packedRemoteControllerPositions, 0) - const path = customPathFinder.findPath({ - origin, - goals: [{ pos: anchor, range: 3 }], - typeWeights: remoteTypeWeights, - plainCost: defaultRoadPlanningPlainCost, - weightCoords: { - [this.room.name]: weightCoords - }, - weightCoordMapsForRoomName(roomName) { - return roomNameUtils.diagonalCoords(roomName, commune) - }, - weightCommuneStructurePlans: true, - weightRemoteStructurePlans: { - remoteResourcePathType: RoomMemoryKeys.remoteSourceFastFillerPaths, - }, - }) - - for (const pos of path) { - pathsThrough.add(pos.roomName) - } + _mineral: Mineral + get mineral() { + if (this._mineral) return this._mineral - return packPosList(path) - } + const mineralID = Memory.rooms[this.room.name][RoomMemoryKeys.mineral] + if (mineralID) return findObjectWithID(mineralID) - isStartRoom() { - return ( - collectiveManager.communes.size === 1 && - this.room.controller.my && - this.room.controller.safeMode && - collectiveManager.communes.has(this.room.name) - ) - } + const mineral = this.room.find(FIND_MINERALS)[0] + Memory.rooms[this.room.name][RoomMemoryKeys.mineral] = mineral.id - reserveCoord(packedCoord: string, newCoordType: ReservedCoordTypes) { - const currentCoordType = this.reservedCoords.get(packedCoord) || ReservedCoordTypes.normal - if (currentCoordType) { - this.reservedCoords.set(packedCoord, Math.max(currentCoordType, newCoordType)) - return - } + return (this._mineral = mineral) + } - this.reservedCoords.set(packedCoord, newCoordType) - } + _nukeTargetCoords: Uint8Array + get nukeTargetCoords() { + if (this._nukeTargetCoords) return this._nukeTargetCoords - _anchor: RoomPosition - get anchor() { - if (this._anchor !== undefined) return this._anchor + this._nukeTargetCoords = new Uint8Array(roomDimensions * roomDimensions) - const stampAnchors = this.stampAnchors - if (!stampAnchors) return false + for (const nuke of this.room.find(FIND_NUKES)) { + this._nukeTargetCoords[packAsNum(nuke.pos)] += NUKE_DAMAGE[0] - return (this._anchor = new RoomPosition( - stampAnchors.fastFiller[0].x, - stampAnchors.fastFiller[0].y, - this.room.name, - )) + forCoordsInRange(nuke.pos, 2, adjCoord => { + this._nukeTargetCoords[packAsNum(adjCoord)] += NUKE_DAMAGE[2] + }) } - _mineral: Mineral - get mineral() { - if (this._mineral) return this._mineral - - const mineralID = Memory.rooms[this.room.name][RoomMemoryKeys.mineral] - if (mineralID) return findObjectWithID(mineralID) + return this._nukeTargetCoords + } - const mineral = this.room.find(FIND_MINERALS)[0] - Memory.rooms[this.room.name][RoomMemoryKeys.mineral] = mineral.id + _stampAnchors: StampAnchors + get stampAnchors() { + if (this._stampAnchors !== undefined) return this._stampAnchors - return (this._mineral = mineral) - } + const packedStampAnchors = this.room.memory[RoomMemoryKeys.stampAnchors] + if (!packedStampAnchors) return false - _nukeTargetCoords: Uint8Array - get nukeTargetCoords() { - if (this._nukeTargetCoords) return this._nukeTargetCoords + return (this._stampAnchors = unpackStampAnchors(packedStampAnchors)) + } - this._nukeTargetCoords = new Uint8Array(roomDimensions * roomDimensions) + /** + * Sources sorted by optimal commune utilization + */ + _communeSources: Source[] + get communeSources() { + if (this._communeSources) return this._communeSources - for (const nuke of this.room.find(FIND_NUKES)) { - this._nukeTargetCoords[packAsNum(nuke.pos)] += NUKE_DAMAGE[0] + const sourceIDs = this.room.memory[RoomMemoryKeys.communeSources] + if (!sourceIDs) throw Error('No commune sources ' + this.room.name) + this._communeSources = [] - forCoordsInRange(nuke.pos, 2, adjCoord => { - this._nukeTargetCoords[packAsNum(adjCoord)] += NUKE_DAMAGE[2] - }) - } + for (let i = 0; i < sourceIDs.length; i++) { + const source = findObjectWithID(sourceIDs[i]) - return this._nukeTargetCoords + source.communeIndex = i + this._communeSources.push(source) } - _stampAnchors: StampAnchors - get stampAnchors() { - if (this._stampAnchors !== undefined) return this._stampAnchors + return this._communeSources + } - const packedStampAnchors = this.room.memory[RoomMemoryKeys.stampAnchors] - if (!packedStampAnchors) return false + /** + * Sources sorted for optimal remotes utilization + */ + _remoteSources: Source[] + get remoteSources() { + if (this._remoteSources) return this._remoteSources - return (this._stampAnchors = unpackStampAnchors(packedStampAnchors)) - } - - /** - * Sources sorted by optimal commune utilization - */ - _communeSources: Source[] - get communeSources() { - if (this._communeSources) return this._communeSources + const sourceIDs = this.room.memory[RoomMemoryKeys.remoteSources] + if (sourceIDs) { + this._remoteSources = [] - const sourceIDs = this.room.memory[RoomMemoryKeys.communeSources] - if (!sourceIDs) throw Error('No commune sources ' + this.room.name) - this._communeSources = [] + for (let i = 0; i < sourceIDs.length; i++) { + const source = findObjectWithID(sourceIDs[i]) - for (let i = 0; i < sourceIDs.length; i++) { - const source = findObjectWithID(sourceIDs[i]) + source.remoteIndex = i + this._remoteSources.push(source) + } - source.communeIndex = i - this._communeSources.push(source) - } - - return this._communeSources + return this._remoteSources } - /** - * Sources sorted for optimal remotes utilization - */ - _remoteSources: Source[] - get remoteSources() { - if (this._remoteSources) return this._remoteSources + throw Error('No remote sources ' + this.room.name) + } - const sourceIDs = this.room.memory[RoomMemoryKeys.remoteSources] - if (sourceIDs) { - this._remoteSources = [] + _sourceHarvestPositions: RoomPosition[][] + get sourceHarvestPositions() { + if (this._sourceHarvestPositions) return this._sourceHarvestPositions - for (let i = 0; i < sourceIDs.length; i++) { - const source = findObjectWithID(sourceIDs[i]) + const sourceHarvestPositions: RoomPosition[][] = [] + const terrain = this.room.getTerrain() + const sources = this.room.find(FIND_SOURCES) - source.remoteIndex = i - this._remoteSources.push(source) - } + for (let i = 0; i < sources.length; i++) { + const source = sources[i] + sourceHarvestPositions.push([]) - return this._remoteSources - } + for (const pos of this.room.findAdjacentPositions(source.pos.x, source.pos.y)) { + if (terrain.get(pos.x, pos.y) === TERRAIN_MASK_WALL) continue - throw Error('No remote sources ' + this.room.name) + sourceHarvestPositions[i].push(pos) + } } - _sourceHarvestPositions: RoomPosition[][] - get sourceHarvestPositions() { - if (this._sourceHarvestPositions) return this._sourceHarvestPositions + return (this._sourceHarvestPositions = sourceHarvestPositions) + } - const sourceHarvestPositions: RoomPosition[][] = [] - const terrain = this.room.getTerrain() - const sources = this.room.find(FIND_SOURCES) + _communeSourceHarvestPositions: RoomPosition[][] + get communeSourceHarvestPositions() { + if (this._communeSourceHarvestPositions) return this._communeSourceHarvestPositions - for (let i = 0; i < sources.length; i++) { - const source = sources[i] - sourceHarvestPositions.push([]) + const packedSourceHarvestPositions = + Memory.rooms[this.room.name][RoomMemoryKeys.communeSourceHarvestPositions] - for (const pos of this.room.findAdjacentPositions(source.pos.x, source.pos.y)) { - if (terrain.get(pos.x, pos.y) === TERRAIN_MASK_WALL) continue + if (!packedSourceHarvestPositions) + throw Error('No commune source harvest positions ' + this.room.name) - sourceHarvestPositions[i].push(pos) - } - } + return (this._communeSourceHarvestPositions = packedSourceHarvestPositions.map(positions => + unpackPosList(positions), + )) + } - return (this._sourceHarvestPositions = sourceHarvestPositions) - } + _remoteSourceHarvestPositions: RoomPosition[][] + get remoteSourceHarvestPositions() { + if (this._remoteSourceHarvestPositions) return this._remoteSourceHarvestPositions - _communeSourceHarvestPositions: RoomPosition[][] - get communeSourceHarvestPositions() { - if (this._communeSourceHarvestPositions) return this._communeSourceHarvestPositions + const packedSourceHarvestPositions = + Memory.rooms[this.room.name][RoomMemoryKeys.remoteSourceHarvestPositions] + if (!packedSourceHarvestPositions) + throw Error('No remote source harvest positions ' + this.room.name) - const packedSourceHarvestPositions = - Memory.rooms[this.room.name][RoomMemoryKeys.communeSourceHarvestPositions] + return (this._remoteSourceHarvestPositions = packedSourceHarvestPositions.map(positions => + unpackPosList(positions), + )) + } - if (!packedSourceHarvestPositions) - throw Error('No commune source harvest positions ' + this.room.name) + _communeSourcePaths: RoomPosition[][] + get communeSourcePaths() { + if (this._communeSourcePaths) return this._communeSourcePaths - return (this._communeSourceHarvestPositions = packedSourceHarvestPositions.map(positions => - unpackPosList(positions), - )) - } + const packedSourcePaths = Memory.rooms[this.room.name][RoomMemoryKeys.communeSourcePaths] + if (!packedSourcePaths) throw Error('No commune source paths ' + this.room.name) - _remoteSourceHarvestPositions: RoomPosition[][] - get remoteSourceHarvestPositions() { - if (this._remoteSourceHarvestPositions) return this._remoteSourceHarvestPositions + return (this._communeSourcePaths = packedSourcePaths.map(positions => unpackPosList(positions))) + } - const packedSourceHarvestPositions = - Memory.rooms[this.room.name][RoomMemoryKeys.remoteSourceHarvestPositions] - if (!packedSourceHarvestPositions) - throw Error('No remote source harvest positions ' + this.room.name) + _remoteSourcePaths: RoomPosition[][] + get remoteSourcePaths() { + if (this._remoteSourcePaths) return this._remoteSourcePaths - return (this._remoteSourceHarvestPositions = packedSourceHarvestPositions.map(positions => - unpackPosList(positions), - )) - } + const packedSourcePaths = + Memory.rooms[this.room.name][RoomMemoryKeys.remoteSourceFastFillerPaths] + if (!packedSourcePaths) throw Error('No remote source paths ' + this.room.name) - _communeSourcePaths: RoomPosition[][] - get communeSourcePaths() { - if (this._communeSourcePaths) return this._communeSourcePaths + return (this._remoteSourcePaths = packedSourcePaths.map(positions => unpackPosList(positions))) + } - const packedSourcePaths = Memory.rooms[this.room.name][RoomMemoryKeys.communeSourcePaths] - if (!packedSourcePaths) throw Error('No commune source paths ' + this.room.name) + _centerUpgradePos: RoomPosition + get centerUpgradePos() { + if (this._centerUpgradePos) return this._centerUpgradePos - return (this._communeSourcePaths = packedSourcePaths.map(positions => - unpackPosList(positions), - )) - } - - _remoteSourcePaths: RoomPosition[][] - get remoteSourcePaths() { - if (this._remoteSourcePaths) return this._remoteSourcePaths + const packedPos = Memory.rooms[this.room.name][RoomMemoryKeys.centerUpgradePos] + if (!packedPos) throw Error('No center upgrade pos ' + this.room.name) - const packedSourcePaths = - Memory.rooms[this.room.name][RoomMemoryKeys.remoteSourceFastFillerPaths] - if (!packedSourcePaths) throw Error('No remote source paths ' + this.room.name) + return (this._centerUpgradePos = unpackPos(packedPos)) + } - return (this._remoteSourcePaths = packedSourcePaths.map(positions => - unpackPosList(positions), - )) - } + _upgradePositions: RoomPosition[] + get upgradePositions() { + if (this._upgradePositions && !this.structureUpdate) return this._upgradePositions - _centerUpgradePos: RoomPosition - get centerUpgradePos() { - if (this._centerUpgradePos) return this._centerUpgradePos + // Get the center upgrade pos, stopping if it's undefined - const packedPos = Memory.rooms[this.room.name][RoomMemoryKeys.centerUpgradePos] - if (!packedPos) throw Error('No center upgrade pos ' + this.room.name) - - return (this._centerUpgradePos = unpackPos(packedPos)) - } + const centerUpgradePos = this.centerUpgradePos - _upgradePositions: RoomPosition[] - get upgradePositions() { - if (this._upgradePositions && !this.structureUpdate) return this._upgradePositions + const anchor = this.anchor + if (!anchor) throw Error('No anchor for upgrade positions ' + this.room.name) - // Get the center upgrade pos, stopping if it's undefined + const positions: RoomPosition[] = [] + const terrain = this.room.getTerrain() - const centerUpgradePos = this.centerUpgradePos + for (const offset of adjacentOffsets) { + const adjPos = new RoomPosition( + offset.x + centerUpgradePos.x, + offset.y + centerUpgradePos.y, + this.room.name, + ) - const anchor = this.anchor - if (!anchor) throw Error('No anchor for upgrade positions ' + this.room.name) + if (terrain.get(adjPos.x, adjPos.y) === TERRAIN_MASK_WALL) continue - const positions: RoomPosition[] = [] - const terrain = this.room.getTerrain() - - for (const offset of adjacentOffsets) { - const adjPos = new RoomPosition( - offset.x + centerUpgradePos.x, - offset.y + centerUpgradePos.y, - this.room.name, - ) - - if (terrain.get(adjPos.x, adjPos.y) === TERRAIN_MASK_WALL) continue - - positions.push(adjPos) - } + positions.push(adjPos) + } - sortBy( - positions, - origin => - customPathFinder.findPath({ - origin, - goals: [{ pos: anchor, range: 4 }], - }).length, - ) + sortBy( + positions, + origin => + customPathFinder.findPath({ + origin, + goals: [{ pos: anchor, range: 4 }], + }).length, + ) - /* + /* // Make the closest pos the last to be chosen positions.push(positions.shift()) */ - // Make the center pos the first to be chosen (we want upgraders to stand on the container) - const controllerLink = this.room.communeManager.controllerLink - if (!controllerLink) { - positions.shift() - positions.unshift(centerUpgradePos) - } - - return (this._upgradePositions = positions) + // Make the center pos the first to be chosen (we want upgraders to stand on the container) + const controllerLink = this.room.communeManager.controllerLink + if (!controllerLink) { + positions.shift() + positions.unshift(centerUpgradePos) } - _mineralHarvestPositions: RoomPosition[] - get mineralHarvestPositions() { - if (this._mineralHarvestPositions) return this._mineralHarvestPositions + return (this._upgradePositions = positions) + } - const packedPositions = this.room.memory[RoomMemoryKeys.mineralPositions] - if (!packedPositions) throw Error('No mineral harvest positions ' + this.room.name) + _mineralHarvestPositions: RoomPosition[] + get mineralHarvestPositions() { + if (this._mineralHarvestPositions) return this._mineralHarvestPositions - return (this._mineralHarvestPositions = unpackPosList(packedPositions)) - } + const packedPositions = this.room.memory[RoomMemoryKeys.mineralPositions] + if (!packedPositions) throw Error('No mineral harvest positions ' + this.room.name) - _remoteControllerPositions: RoomPosition[] - get remoteControllerPositions() { - if (this._remoteControllerPositions) return this._remoteControllerPositions + return (this._mineralHarvestPositions = unpackPosList(packedPositions)) + } - const roomMemory = Memory.rooms[this.room.name] - const packedRemoteControllerPositions = roomMemory[RoomMemoryKeys.remoteControllerPositions] - if (packedRemoteControllerPositions) { - return (this._remoteControllerPositions = unpackPosList( - packedRemoteControllerPositions, - )) - } + _remoteControllerPositions: RoomPosition[] + get remoteControllerPositions() { + if (this._remoteControllerPositions) return this._remoteControllerPositions - throw Error('No remote controller positions ' + this.room.name) + const roomMemory = Memory.rooms[this.room.name] + const packedRemoteControllerPositions = roomMemory[RoomMemoryKeys.remoteControllerPositions] + if (packedRemoteControllerPositions) { + return (this._remoteControllerPositions = unpackPosList(packedRemoteControllerPositions)) } - _remoteControllerPath: RoomPosition[] - get remoteControllerPath() { - if (this._remoteControllerPath) return this._remoteControllerPath + throw Error('No remote controller positions ' + this.room.name) + } - const packedPath = this.room.memory[RoomMemoryKeys.remoteControllerPath] - if (packedPath) { - return (this._remoteControllerPath = unpackPosList(packedPath)) - } + _remoteControllerPath: RoomPosition[] + get remoteControllerPath() { + if (this._remoteControllerPath) return this._remoteControllerPath - throw Error('No remote controller path ' + this.room.name) + const packedPath = this.room.memory[RoomMemoryKeys.remoteControllerPath] + if (packedPath) { + return (this._remoteControllerPath = unpackPosList(packedPath)) } - get cSiteTarget() { - const roomMemory = Memory.rooms[this.room.name] - if (roomMemory[RoomMemoryKeys.constructionSiteTarget]) { - const cSiteTarget = findObjectWithID(roomMemory[RoomMemoryKeys.constructionSiteTarget]) - if (cSiteTarget) return cSiteTarget - } + throw Error('No remote controller path ' + this.room.name) + } - if (!this.room.find(FIND_MY_CONSTRUCTION_SITES).length) return false + get cSiteTarget() { + const roomMemory = Memory.rooms[this.room.name] + if (roomMemory[RoomMemoryKeys.constructionSiteTarget]) { + const cSiteTarget = findObjectWithID(roomMemory[RoomMemoryKeys.constructionSiteTarget]) + if (cSiteTarget) return cSiteTarget + } - let totalX = 0 - let totalY = 0 - let count = 1 + if (!this.room.find(FIND_MY_CONSTRUCTION_SITES).length) return false - const anchor = this.anchor - if (anchor) { - totalX += anchor.x - totalY += anchor.y - } else { - totalX += 25 - totalX += 25 - } + let totalX = 0 + let totalY = 0 + let count = 1 - for (const creepName of this.room.myCreepsByRole.builder) { - const pos = Game.creeps[creepName].pos + const anchor = this.anchor + if (anchor) { + totalX += anchor.x + totalY += anchor.y + } else { + totalX += 25 + totalX += 25 + } - totalX += pos.x - totalY += pos.y - count += 1 - } + for (const creepName of this.room.myCreepsByRole.builder) { + const pos = Game.creeps[creepName].pos - const searchAnchor = new RoomPosition( - Math.floor(totalX / count), - Math.floor(totalY / count), - this.room.name, - ) - const cSites = this.cSites + totalX += pos.x + totalY += pos.y + count += 1 + } - // Loop through structuretypes of the build priority + const searchAnchor = new RoomPosition( + Math.floor(totalX / count), + Math.floor(totalY / count), + this.room.name, + ) + const cSites = this.cSites - for (const structureType of defaultStructureTypesByBuildPriority) { - const cSitesOfType = cSites[structureType] - if (!cSitesOfType.length) continue + // Loop through structuretypes of the build priority - let target = searchAnchor.findClosestByPath(cSitesOfType, { - ignoreCreeps: true, - ignoreDestructibleStructures: true, - range: 3, - }) + for (const structureType of defaultStructureTypesByBuildPriority) { + const cSitesOfType = cSites[structureType] + if (!cSitesOfType.length) continue - if (!target) target = findClosestObject(searchAnchor, cSitesOfType) + let target = searchAnchor.findClosestByPath(cSitesOfType, { + ignoreCreeps: true, + ignoreDestructibleStructures: true, + range: 3, + }) - roomMemory[RoomMemoryKeys.constructionSiteTarget] = target.id - return target - } + if (!target) target = findClosestObject(searchAnchor, cSitesOfType) - return false + roomMemory[RoomMemoryKeys.constructionSiteTarget] = target.id + return target } - allStructureIDs: Id>[] - /** - * true if there has been a structure update this tick - */ - _structureUpdate: boolean - /** - * Checks if there has been a structure cache update, running one if there hasn't. Only use this for static properties, and not hits, store, etc. - */ - get structureUpdate() { - if (this._structureUpdate === true) return false + return false + } - let newAllStructures: Structure[] + allStructureIDs: Id>[] + /** + * true if there has been a structure update this tick + */ + _structureUpdate: boolean + /** + * Checks if there has been a structure cache update, running one if there hasn't. Only use this for static properties, and not hits, store, etc. + */ + get structureUpdate() { + if (this._structureUpdate === true) return false - if (this.allStructureIDs) { - newAllStructures = this.room.find(FIND_STRUCTURES) + let newAllStructures: Structure[] - if (newAllStructures.length === this.allStructureIDs.length) { - const allStructures: Structure[] = [] - let change: true | undefined + if (this.allStructureIDs) { + newAllStructures = this.room.find(FIND_STRUCTURES) - for (const ID of this.allStructureIDs) { - const structure = findObjectWithID(ID) - if (!structure) { - change = true - break - } + if (newAllStructures.length === this.allStructureIDs.length) { + const allStructures: Structure[] = [] + let change: true | undefined - allStructures.push(structure) - } + for (const ID of this.allStructureIDs) { + const structure = findObjectWithID(ID) + if (!structure) { + change = true + break + } - if (!change && allStructures.length === this.allStructureIDs.length) { - return (this._structureUpdate = false) - } - } + allStructures.push(structure) } - // Structures have been added, destroyed or aren't yet initialized - - this._structureCoords = undefined - this.sourceContainerIDs = undefined + if (!change && allStructures.length === this.allStructureIDs.length) { + return (this._structureUpdate = false) + } + } + } - const communeManager = this.room.communeManager - if (communeManager) { - communeManager.actionableSpawningStructuresIDs = undefined - communeManager.spawningStructuresByPriorityIDs = undefined - communeManager._fastFillerSpawnEnergyCapacity = undefined - communeManager.sourceLinkIDs = undefined + // Structures have been added, destroyed or aren't yet initialized - this.fastFillerContainerIDs = undefined - this._upgradePositions = undefined - this._fastFillerPositions = undefined - } + this._structureCoords = undefined + this.sourceContainerIDs = undefined - if (!newAllStructures) newAllStructures = this.room.find(FIND_STRUCTURES) + const communeManager = this.room.communeManager + if (communeManager) { + communeManager.actionableSpawningStructuresIDs = undefined + communeManager.spawningStructuresByPriorityIDs = undefined + communeManager._fastFillerSpawnEnergyCapacity = undefined + communeManager.sourceLinkIDs = undefined - this.allStructureIDs = newAllStructures.map(structure => structure.id) - return (this._structureUpdate = true) + this.fastFillerContainerIDs = undefined + this._upgradePositions = undefined + this._fastFillerPositions = undefined } - _structureCoords: Map>[]> - get structureCoords() { - if (this._structureCoords && !this.structureUpdate) return this._structureCoords + if (!newAllStructures) newAllStructures = this.room.find(FIND_STRUCTURES) - // Construct storage of structures based on structureType + this.allStructureIDs = newAllStructures.map(structure => structure.id) + return (this._structureUpdate = true) + } - const structureCoords: Map>[]> = new Map() + _structureCoords: Map>[]> + get structureCoords() { + if (this._structureCoords && !this.structureUpdate) return this._structureCoords - // Group structures by structureType + // Construct storage of structures based on structureType - for (const structure of this.room.find(FIND_STRUCTURES)) { - const packedCoord = packCoord(structure.pos) + const structureCoords: Map>[]> = new Map() - const coordStructureIDs = structureCoords.get(packedCoord) - if (!coordStructureIDs) { - structureCoords.set(packedCoord, [structure.id]) - continue - } - coordStructureIDs.push(structure.id) - } + // Group structures by structureType - this._structureCoords = structureCoords - return this._structureCoords + for (const structure of this.room.find(FIND_STRUCTURES)) { + const packedCoord = packCoord(structure.pos) + + const coordStructureIDs = structureCoords.get(packedCoord) + if (!coordStructureIDs) { + structureCoords.set(packedCoord, [structure.id]) + continue + } + coordStructureIDs.push(structure.id) } - _structures: Partial - get structures() { - if (this._structures) return this._structures + this._structureCoords = structureCoords + return this._structureCoords + } - this._structures = {} - for (const structureType of allStructureTypes) this._structures[structureType] = [] + _structures: Partial + get structures() { + if (this._structures) return this._structures - // Group structures by structureType + this._structures = {} + for (const structureType of allStructureTypes) this._structures[structureType] = [] - for (const structure of this.room.find(FIND_STRUCTURES)) - this._structures[structure.structureType].push(structure as any) + // Group structures by structureType - return this._structures - } + for (const structure of this.room.find(FIND_STRUCTURES)) + this._structures[structure.structureType].push(structure as any) - cSiteIDs: Id>[] - checkedCSiteUpdate: boolean - get cSiteUpdate() { - if (this.checkedCSiteUpdate === true) return false + return this._structures + } - let newAllCSites: ConstructionSite[] + cSiteIDs: Id>[] + checkedCSiteUpdate: boolean + get cSiteUpdate() { + if (this.checkedCSiteUpdate === true) return false - if (this.cSiteIDs) { - newAllCSites = this.room.find(FIND_CONSTRUCTION_SITES) + let newAllCSites: ConstructionSite[] - if (newAllCSites.length === this.cSiteIDs.length) { - const allCSites: ConstructionSite[] = [] - let change: true | undefined + if (this.cSiteIDs) { + newAllCSites = this.room.find(FIND_CONSTRUCTION_SITES) - for (const ID of this.cSiteIDs) { - const cSite = findObjectWithID(ID) - if (!cSite) { - change = true - break - } + if (newAllCSites.length === this.cSiteIDs.length) { + const allCSites: ConstructionSite[] = [] + let change: true | undefined - allCSites.push(cSite) - } + for (const ID of this.cSiteIDs) { + const cSite = findObjectWithID(ID) + if (!cSite) { + change = true + break + } - if (!change && allCSites.length === this.cSiteIDs.length) { - return (this.checkedCSiteUpdate = false) - } - } + allCSites.push(cSite) } - // construction sites have been added, destroyed or aren't yet initialized + if (!change && allCSites.length === this.cSiteIDs.length) { + return (this.checkedCSiteUpdate = false) + } + } + } - delete this._cSiteCoords + // construction sites have been added, destroyed or aren't yet initialized - if (!newAllCSites) newAllCSites = this.room.find(FIND_CONSTRUCTION_SITES) + delete this._cSiteCoords - this.cSiteIDs = newAllCSites.map(cSite => cSite.id) - return (this.checkedCSiteUpdate = true) - } + if (!newAllCSites) newAllCSites = this.room.find(FIND_CONSTRUCTION_SITES) - _cSiteCoords: Map>[]> - get cSiteCoords() { - if (this._cSiteCoords && !this.cSiteUpdate) return this._cSiteCoords + this.cSiteIDs = newAllCSites.map(cSite => cSite.id) + return (this.checkedCSiteUpdate = true) + } - // Construct storage of structures based on structureType + _cSiteCoords: Map>[]> + get cSiteCoords() { + if (this._cSiteCoords && !this.cSiteUpdate) return this._cSiteCoords - const cSiteCoords: Map>[]> = - new Map() + // Construct storage of structures based on structureType - // Group structures by structureType + const cSiteCoords: Map>[]> = new Map() - for (const cSite of this.room.find(FIND_CONSTRUCTION_SITES)) { - const packedCoord = packCoord(cSite.pos) + // Group structures by structureType - const coordStructureIDs = cSiteCoords.get(packedCoord) - if (!coordStructureIDs) { - cSiteCoords.set(packedCoord, [cSite.id]) - continue - } - coordStructureIDs.push(cSite.id) - } + for (const cSite of this.room.find(FIND_CONSTRUCTION_SITES)) { + const packedCoord = packCoord(cSite.pos) - this._cSiteCoords = cSiteCoords - return this._cSiteCoords + const coordStructureIDs = cSiteCoords.get(packedCoord) + if (!coordStructureIDs) { + cSiteCoords.set(packedCoord, [cSite.id]) + continue + } + coordStructureIDs.push(cSite.id) } - _cSites: Partial[]>> - get cSites() { - if (this._cSites) return this._cSites + this._cSiteCoords = cSiteCoords + return this._cSiteCoords + } - this._cSites = {} - for (const structureType of allStructureTypes) this._cSites[structureType] = [] + _cSites: Partial[]>> + get cSites() { + if (this._cSites) return this._cSites - // Group structures by structureType + this._cSites = {} + for (const structureType of allStructureTypes) this._cSites[structureType] = [] - for (const cSite of this.room.find(FIND_CONSTRUCTION_SITES)) - this._cSites[cSite.structureType].push(cSite) + // Group structures by structureType - return this._cSites - } + for (const cSite of this.room.find(FIND_CONSTRUCTION_SITES)) + this._cSites[cSite.structureType].push(cSite) - _notMyCreeps: NotMyCreeps - /** - * Creeps that are not owned by me - */ - get notMyCreeps() { - if (this._notMyCreeps) return this._notMyCreeps + return this._cSites + } - const notMyCreeps: NotMyCreeps = { - ally: [], - enemy: [], - } + _notMyCreeps: NotMyCreeps + /** + * Creeps that are not owned by me + */ + get notMyCreeps() { + if (this._notMyCreeps) return this._notMyCreeps - for (const creep of this.room.find(FIND_HOSTILE_CREEPS)) { - if (isAlly(creep.owner.username)) { - notMyCreeps.ally.push(creep) - continue - } + const notMyCreeps: NotMyCreeps = { + ally: [], + enemy: [], + } - // The creep isn't of an ally, so it's of an enemy! + for (const creep of this.room.find(FIND_HOSTILE_CREEPS)) { + if (isAlly(creep.owner.username)) { + notMyCreeps.ally.push(creep) + continue + } - notMyCreeps.enemy.push(creep) - } + // The creep isn't of an ally, so it's of an enemy! - return (this._notMyCreeps = notMyCreeps) + notMyCreeps.enemy.push(creep) } - _enemyAttackers: Creep[] - get enemyAttackers() { - if (this._enemyAttackers) return this._enemyAttackers + return (this._notMyCreeps = notMyCreeps) + } - // If commune, include creeps that can damage structures + _enemyAttackers: Creep[] + get enemyAttackers() { + if (this._enemyAttackers) return this._enemyAttackers - if (Memory.rooms[this.room.name][RoomMemoryKeys.type] === RoomTypes.commune) { - const enemyAttackers = this.notMyCreeps.enemy.filter(function (creep) { - return ( - creep.parts.attack + - creep.parts.ranged_attack + - creep.parts.work + - creep.parts.heal > - 0 - ) - }) - return (this._enemyAttackers = enemyAttackers) - } + // If commune, include creeps that can damage structures - const enemyAttackers = this.notMyCreeps.enemy.filter(function (creep) { - return creep.parts.attack + creep.parts.ranged_attack + creep.parts.heal > 0 - }) - return (this._enemyAttackers = enemyAttackers) + if (Memory.rooms[this.room.name][RoomMemoryKeys.type] === RoomTypes.commune) { + const enemyAttackers = this.notMyCreeps.enemy.filter(function (creep) { + return ( + creep.parts.attack + creep.parts.ranged_attack + creep.parts.work + creep.parts.heal > 0 + ) + }) + return (this._enemyAttackers = enemyAttackers) } - _myDamagedCreeps: Creep[] - get myDamagedCreeps() { - if (this._myDamagedCreeps) return this._myDamagedCreeps + const enemyAttackers = this.notMyCreeps.enemy.filter(function (creep) { + return creep.parts.attack + creep.parts.ranged_attack + creep.parts.heal > 0 + }) + return (this._enemyAttackers = enemyAttackers) + } - const myDamagedCreeps = this.room.myCreeps.filter(creep => creep.hits < creep.hitsMax) + _myDamagedCreeps: Creep[] + get myDamagedCreeps() { + if (this._myDamagedCreeps) return this._myDamagedCreeps - return (this._myDamagedCreeps = myDamagedCreeps) - } + const myDamagedCreeps = this.room.myCreeps.filter(creep => creep.hits < creep.hitsMax) - _myDamagedPowerCreeps: PowerCreep[] - get myDamagedPowerCreeps() { - if (this._myDamagedPowerCreeps) return this._myDamagedPowerCreeps + return (this._myDamagedCreeps = myDamagedCreeps) + } - const myDamagedPowerCreeps = this.room.myPowerCreeps.filter(creep => creep.hits < creep.hitsMax) + _myDamagedPowerCreeps: PowerCreep[] + get myDamagedPowerCreeps() { + if (this._myDamagedPowerCreeps) return this._myDamagedPowerCreeps - return (this._myDamagedPowerCreeps = myDamagedPowerCreeps) - } + const myDamagedPowerCreeps = this.room.myPowerCreeps.filter(creep => creep.hits < creep.hitsMax) - _allyDamagedCreeps: Creep[] - get allyDamagedCreeps() { - if (this._allyDamagedCreeps) return this._allyDamagedCreeps + return (this._myDamagedPowerCreeps = myDamagedPowerCreeps) + } - const allyDamagedCreeps = this.notMyCreeps.enemy.filter(creep => { - return creep.hits < creep.hitsMax - }) + _allyDamagedCreeps: Creep[] + get allyDamagedCreeps() { + if (this._allyDamagedCreeps) return this._allyDamagedCreeps - return (this._allyDamagedCreeps = allyDamagedCreeps) - } + const allyDamagedCreeps = this.notMyCreeps.enemy.filter(creep => { + return creep.hits < creep.hitsMax + }) - _enemyCreepPositions: { [packedCoord: string]: Id } - get enemyCreepPositions() { - const enemyCreepPositions: { [packedCoord: string]: Id } = {} + return (this._allyDamagedCreeps = allyDamagedCreeps) + } - for (const creep of this.notMyCreeps.enemy) { - const packedCoord = packCoord(creep.pos) - enemyCreepPositions[packedCoord] = creep.id - } + _enemyCreepPositions: { [packedCoord: string]: Id } + get enemyCreepPositions() { + const enemyCreepPositions: { [packedCoord: string]: Id } = {} - return (this._enemyCreepPositions = enemyCreepPositions) + for (const creep of this.notMyCreeps.enemy) { + const packedCoord = packCoord(creep.pos) + enemyCreepPositions[packedCoord] = creep.id } - _enemySquadData: EnemySquadData - get enemySquadData() { - if (this._enemySquadData) return this._enemySquadData + return (this._enemyCreepPositions = enemyCreepPositions) + } - const highestEnemySquadData: EnemySquadData = { - highestMeleeDamage: 0, - highestRangedDamage: 0, - highestHeal: 0, - highestDismantle: 0, - } - const enemyCreeps = this.notMyCreeps.enemy - if (!enemyCreeps.length) return (this._enemySquadData = highestEnemySquadData) + _enemySquadData: EnemySquadData + get enemySquadData() { + if (this._enemySquadData) return this._enemySquadData - const enemyCreepIDs = new Set(enemyCreeps.map(creep => creep.id)) + const highestEnemySquadData: EnemySquadData = { + highestMeleeDamage: 0, + highestRangedDamage: 0, + highestHeal: 0, + highestDismantle: 0, + } + const enemyCreeps = this.notMyCreeps.enemy + if (!enemyCreeps.length) return (this._enemySquadData = highestEnemySquadData) - // For each creep, makeup a quad of creep around them + const enemyCreepIDs = new Set(enemyCreeps.map(creep => creep.id)) - for (const creepID of enemyCreepIDs) { - const creep = findObjectWithID(creepID) - const squadData: EnemySquadData = { - highestMeleeDamage: 0, - highestRangedDamage: 0, - highestHeal: 0, - highestDismantle: 0, - } + // For each creep, makeup a quad of creep around them - for (const offset of quadAttackMemberOffsets) { - const coord = { - x: creep.pos.x + offset.x, - y: creep.pos.y + offset.y, - } + for (const creepID of enemyCreepIDs) { + const creep = findObjectWithID(creepID) + const squadData: EnemySquadData = { + highestMeleeDamage: 0, + highestRangedDamage: 0, + highestHeal: 0, + highestDismantle: 0, + } - const creepIDAtPos = this.enemyCreepPositions[packCoord(coord)] - if (!creepIDAtPos) continue + for (const offset of quadAttackMemberOffsets) { + const coord = { + x: creep.pos.x + offset.x, + y: creep.pos.y + offset.y, + } - const creepAtPos = findObjectWithID(creepIDAtPos) - const creepAtPosCombatStrength = creepAtPos.combatStrength + const creepIDAtPos = this.enemyCreepPositions[packCoord(coord)] + if (!creepIDAtPos) continue - squadData.highestMeleeDamage += - creepAtPosCombatStrength.melee + creepAtPosCombatStrength.ranged - squadData.highestRangedDamage += creepAtPosCombatStrength.ranged - squadData.highestHeal += creepAtPosCombatStrength.heal - squadData.highestDismantle += creepAtPosCombatStrength.dismantle - } + const creepAtPos = findObjectWithID(creepIDAtPos) + const creepAtPosCombatStrength = creepAtPos.combatStrength - for (let x in squadData) { - const key = x as keyof EnemySquadData + squadData.highestMeleeDamage += + creepAtPosCombatStrength.melee + creepAtPosCombatStrength.ranged + squadData.highestRangedDamage += creepAtPosCombatStrength.ranged + squadData.highestHeal += creepAtPosCombatStrength.heal + squadData.highestDismantle += creepAtPosCombatStrength.dismantle + } - if (squadData[key] <= highestEnemySquadData[key]) continue + for (let x in squadData) { + const key = x as keyof EnemySquadData - highestEnemySquadData[key] = squadData[key] - } - } + if (squadData[key] <= highestEnemySquadData[key]) continue - return (this._enemySquadData = highestEnemySquadData) + highestEnemySquadData[key] = squadData[key] + } } - /* TODO */ - _events: { [targetID: string]: InterpretedRoomEvent } - get events() { - if (this._events) return this._events + return (this._enemySquadData = highestEnemySquadData) + } - const eventLog = this.room.getEventLog() - const events: { [targetID: string]: InterpretedRoomEvent } = {} + /* TODO */ + _events: { [targetID: string]: InterpretedRoomEvent } + get events() { + if (this._events) return this._events - for (const event of eventLog) { - } + const eventLog = this.room.getEventLog() + const events: { [targetID: string]: InterpretedRoomEvent } = {} - return (this._events = events) + for (const event of eventLog) { } - _deadCreepNames: DeadCreepNames - get deadCreepNames() { - if (this._deadCreepNames) return this._deadCreepNames + return (this._events = events) + } - const deadCreepNames: DeadCreepNames = { - my: new Set(), - enemy: new Set(), - ally: new Set(), - } + _deadCreepNames: DeadCreepNames + get deadCreepNames() { + if (this._deadCreepNames) return this._deadCreepNames - for (const tombstone of this.room.find(FIND_TOMBSTONES)) { - if (tombstone.creep.owner.username === Memory.me) { - deadCreepNames.my.add(tombstone.creep.name) - continue - } + const deadCreepNames: DeadCreepNames = { + my: new Set(), + enemy: new Set(), + ally: new Set(), + } - if (isAlly(tombstone.creep.owner.username)) { - deadCreepNames.ally.add(tombstone.creep.name) - } + for (const tombstone of this.room.find(FIND_TOMBSTONES)) { + if (tombstone.creep.owner.username === Memory.me) { + deadCreepNames.my.add(tombstone.creep.name) + continue + } - deadCreepNames.enemy.add(tombstone.creep.name) - } + if (isAlly(tombstone.creep.owner.username)) { + deadCreepNames.ally.add(tombstone.creep.name) + } - return (this._deadCreepNames = deadCreepNames) + deadCreepNames.enemy.add(tombstone.creep.name) } - _notMyConstructionSites: NotMyConstructionSites - get notMyConstructionSites() { - if (this._notMyConstructionSites) return this._notMyConstructionSites + return (this._deadCreepNames = deadCreepNames) + } - const notMyConstructionSites: NotMyConstructionSites = { - ally: [], - enemy: [], - } + _notMyConstructionSites: NotMyConstructionSites + get notMyConstructionSites() { + if (this._notMyConstructionSites) return this._notMyConstructionSites - const constructionSites = this.room.find(FIND_HOSTILE_CONSTRUCTION_SITES) - for (const cSite of constructionSites) { - if (isAlly(cSite.owner.username)) { - notMyConstructionSites.ally.push(cSite) - continue - } + const notMyConstructionSites: NotMyConstructionSites = { + ally: [], + enemy: [], + } - // The construction site isn't owned by an ally, so it is an enemy's! + const constructionSites = this.room.find(FIND_HOSTILE_CONSTRUCTION_SITES) + for (const cSite of constructionSites) { + if (isAlly(cSite.owner.username)) { + notMyConstructionSites.ally.push(cSite) + continue + } - notMyConstructionSites.enemy.push(cSite) - } + // The construction site isn't owned by an ally, so it is an enemy's! - return (this._notMyConstructionSites = notMyConstructionSites) + notMyConstructionSites.enemy.push(cSite) } - _allyConstructionSitesByType: Partial< - Record[]> - > - get allyConstructionSitesByType() { - if (this._allyConstructionSitesByType) return this._allyConstructionSitesByType + return (this._notMyConstructionSites = notMyConstructionSites) + } - const allyConstructionSitesByType: Partial< - Record[]> - > = {} + _allyConstructionSitesByType: Partial< + Record[]> + > + get allyConstructionSitesByType() { + if (this._allyConstructionSitesByType) return this._allyConstructionSitesByType - for (const structureType of allStructureTypes) { - allyConstructionSitesByType[structureType] = [] - } + const allyConstructionSitesByType: Partial< + Record[]> + > = {} - for (const cSite of this.notMyConstructionSites.ally) { - allyConstructionSitesByType[cSite.structureType].push(cSite) - } + for (const structureType of allStructureTypes) { + allyConstructionSitesByType[structureType] = [] + } - return (this._allyConstructionSitesByType = allyConstructionSitesByType) + for (const cSite of this.notMyConstructionSites.ally) { + allyConstructionSitesByType[cSite.structureType].push(cSite) } - _dismantleTargets: Structure[] - get dismantleTargets() { - if (this._dismantleTargets) return this._dismantleTargets + return (this._allyConstructionSitesByType = allyConstructionSitesByType) + } - // We own the room, attack enemy owned structures + _dismantleTargets: Structure[] + get dismantleTargets() { + if (this._dismantleTargets) return this._dismantleTargets - if (this.room.controller && this.room.controller.my) { - return (this._dismantleTargets = this.room.find(FIND_STRUCTURES, { - filter: structure => - (structure as OwnedStructure).owner && - !(structure as OwnedStructure).my && - structure.structureType !== STRUCTURE_INVADER_CORE, - })) - } + // We own the room, attack enemy owned structures - // We don't own the room, attack things that we can that aren't roads or containers + if (this.room.controller && this.room.controller.my) { + return (this._dismantleTargets = this.room.find(FIND_STRUCTURES, { + filter: structure => + (structure as OwnedStructure).owner && + !(structure as OwnedStructure).my && + structure.structureType !== STRUCTURE_INVADER_CORE, + })) + } - return (this._dismantleTargets = this.room.find(FIND_STRUCTURES, { - filter: structure => - structure.structureType !== STRUCTURE_ROAD && - structure.structureType !== STRUCTURE_CONTAINER && - structure.structureType !== STRUCTURE_CONTROLLER && - structure.structureType !== STRUCTURE_INVADER_CORE && - structure.structureType !== STRUCTURE_KEEPER_LAIR && - // We don't want to attack respawn or novice zone walls with infinite hits + // We don't own the room, attack things that we can that aren't roads or containers - structure.hits, - })) - } + return (this._dismantleTargets = this.room.find(FIND_STRUCTURES, { + filter: structure => + structure.structureType !== STRUCTURE_ROAD && + structure.structureType !== STRUCTURE_CONTAINER && + structure.structureType !== STRUCTURE_CONTROLLER && + structure.structureType !== STRUCTURE_INVADER_CORE && + structure.structureType !== STRUCTURE_KEEPER_LAIR && + // We don't want to attack respawn or novice zone walls with infinite hits - _destructibleStructures: Structure[] - get destructableStructures() { - if (this._destructibleStructures) return this._destructibleStructures + structure.hits, + })) + } - const destructibleStructures = this.room.find(FIND_STRUCTURES, { - filter: structure => - structure.structureType !== STRUCTURE_CONTROLLER && - structure.structureType !== STRUCTURE_INVADER_CORE, - }) - return (this._destructibleStructures = destructibleStructures) - } + _destructibleStructures: Structure[] + get destructableStructures() { + if (this._destructibleStructures) return this._destructibleStructures - _combatStructureTargets: Structure[] - get combatStructureTargets() { - if (this._combatStructureTargets) return this._combatStructureTargets + const destructibleStructures = this.room.find(FIND_STRUCTURES, { + filter: structure => + structure.structureType !== STRUCTURE_CONTROLLER && + structure.structureType !== STRUCTURE_INVADER_CORE, + }) + return (this._destructibleStructures = destructibleStructures) + } - const controller = this.room.controller - if (controller) { - // We don't want to target any structures in communes or remotes - if ( - controller.my || - Memory.rooms[this.room.name][RoomMemoryKeys.type] === RoomTypes.remote - ) { - return (this._combatStructureTargets = []) - } + _combatStructureTargets: Structure[] + get combatStructureTargets() { + if (this._combatStructureTargets) return this._combatStructureTargets - if (controller.owner && isAlly(controller.owner.username)) - return (this._combatStructureTargets = []) - if (controller.reservation && isAlly(controller.reservation.username)) - return (this._combatStructureTargets = []) + const controller = this.room.controller + if (controller) { + // We don't want to target any structures in communes or remotes + if (controller.my || Memory.rooms[this.room.name][RoomMemoryKeys.type] === RoomTypes.remote) { + return (this._combatStructureTargets = []) + } - return this._combatStructureTargets = [] - } + if (controller.owner && isAlly(controller.owner.username)) + return (this._combatStructureTargets = []) + if (controller.reservation && isAlly(controller.reservation.username)) + return (this._combatStructureTargets = []) - const combatStructureTargets = this.room.find(FIND_STRUCTURES, { - filter: structure => combatTargetStructureTypes.has(structure.structureType), - }) - return (this._combatStructureTargets = combatStructureTargets) + return (this._combatStructureTargets = []) } - _fastFillerPositions: RoomPosition[] - get fastFillerPositions() { - if (this._fastFillerPositions && !this.structureUpdate) return this._fastFillerPositions + const combatStructureTargets = this.room.find(FIND_STRUCTURES, { + filter: structure => combatTargetStructureTypes.has(structure.structureType), + }) + return (this._combatStructureTargets = combatStructureTargets) + } - const anchor = this.anchor - if (!anchor) throw Error('no anchor') + _fastFillerPositions: RoomPosition[] + get fastFillerPositions() { + if (this._fastFillerPositions && !this.structureUpdate) return this._fastFillerPositions - const fastFillerPositions: RoomPosition[] = [] - let rawFastFillerPositions = [ - new RoomPosition(anchor.x - 1, anchor.y - 1, this.room.name), - new RoomPosition(anchor.x - 1, anchor.y + 1, this.room.name), - new RoomPosition(anchor.x + 1, anchor.y - 1, this.room.name), - new RoomPosition(anchor.x + 1, anchor.y + 1, this.room.name), - ] - const structureCoords = this.structureCoords + const anchor = this.anchor + if (!anchor) throw Error('no anchor') - const fastFillerLink = this.fastFillerLink - const sufficientLink = fastFillerLink && structureUtils.isRCLActionable(fastFillerLink) + const fastFillerPositions: RoomPosition[] = [] + let rawFastFillerPositions = [ + new RoomPosition(anchor.x - 1, anchor.y - 1, this.room.name), + new RoomPosition(anchor.x - 1, anchor.y + 1, this.room.name), + new RoomPosition(anchor.x + 1, anchor.y - 1, this.room.name), + new RoomPosition(anchor.x + 1, anchor.y + 1, this.room.name), + ] + const structureCoords = this.structureCoords - for (const pos of rawFastFillerPositions) { - const adjacentStructuresOfTypes: Partial> = { - [STRUCTURE_SPAWN]: 0, - [STRUCTURE_EXTENSION]: 0, - [STRUCTURE_CONTAINER]: 0 - } + const fastFillerLink = this.fastFillerLink + const sufficientLink = fastFillerLink && structureUtils.isRCLActionable(fastFillerLink) - forAdjacentCoords(pos, adjacentCoord => { - const structuresAtCoord = structureCoords.get(packCoord(adjacentCoord)) - if (!structuresAtCoord) return + for (const pos of rawFastFillerPositions) { + const adjacentStructuresOfTypes: Partial> = { + [STRUCTURE_SPAWN]: 0, + [STRUCTURE_EXTENSION]: 0, + [STRUCTURE_CONTAINER]: 0, + } - for (const ID of structuresAtCoord) { - const structure = findObjectWithID(ID) + forAdjacentCoords(pos, adjacentCoord => { + const structuresAtCoord = structureCoords.get(packCoord(adjacentCoord)) + if (!structuresAtCoord) return - if (adjacentStructuresOfTypes[structure.structureType] === undefined) continue + for (const ID of structuresAtCoord) { + const structure = findObjectWithID(ID) - // Increase structure amount for this structureType on the adjacentPos + if (adjacentStructuresOfTypes[structure.structureType] === undefined) continue - adjacentStructuresOfTypes[structure.structureType] += 1 - } - }) + // Increase structure amount for this structureType on the adjacentPos - // If there is containers and spawning structures, make it an offial fastFillerPosition + adjacentStructuresOfTypes[structure.structureType] += 1 + } + }) - if ( - !sufficientLink && - adjacentStructuresOfTypes[STRUCTURE_CONTAINER] === 0 - ) - continue + // If there is containers and spawning structures, make it an offial fastFillerPosition - if ( - adjacentStructuresOfTypes[STRUCTURE_SPAWN] + - adjacentStructuresOfTypes[STRUCTURE_EXTENSION] === - 0 - ) - continue + if (!sufficientLink && adjacentStructuresOfTypes[STRUCTURE_CONTAINER] === 0) continue - fastFillerPositions.push(pos) - } + if ( + adjacentStructuresOfTypes[STRUCTURE_SPAWN] + + adjacentStructuresOfTypes[STRUCTURE_EXTENSION] === + 0 + ) + continue - return (this._fastFillerPositions = fastFillerPositions) + fastFillerPositions.push(pos) } - _remoteNamesByEfficacy: string[] - /** - * Some rooms may no longer be remotes when accesed later in the code - */ - get remoteNamesByEfficacy() { - if (this._remoteNamesByEfficacy) return this._remoteNamesByEfficacy + return (this._fastFillerPositions = fastFillerPositions) + } - const pathType = this.room.communeManager.remoteResourcePathType + _remoteNamesByEfficacy: string[] + /** + * Some rooms may no longer be remotes when accesed later in the code + */ + get remoteNamesByEfficacy() { + if (this._remoteNamesByEfficacy) return this._remoteNamesByEfficacy - // Filter rooms that have some sourceEfficacies recorded + const pathType = this.room.communeManager.remoteResourcePathType - const remoteNamesByEfficacy = Memory.rooms[this.room.name][RoomMemoryKeys.remotes].filter( - function (roomName) { - return Memory.rooms[roomName][pathType].length - }, - ) + // Filter rooms that have some sourceEfficacies recorded - // Sort the remotes based on lowest source efficacy - return remoteNamesByEfficacy.sort(function (roomName1, roomName2) { - return ( - Math.min( - ...Memory.rooms[roomName1][pathType].map(packedPath => packedPath.length), - ) - - Math.min(...Memory.rooms[roomName2][pathType].map(packedPath => packedPath.length)) - ) - }) - } + const remoteNamesByEfficacy = Memory.rooms[this.room.name][RoomMemoryKeys.remotes].filter( + function (roomName) { + return Memory.rooms[roomName][pathType].length + }, + ) - _remoteSourceIndexesByEfficacy: string[] - /** - * Some rooms may no longer be remotes when accessed later in the code - */ - get remoteSourceIndexesByEfficacy() { - if (this._remoteSourceIndexesByEfficacy) return this._remoteSourceIndexesByEfficacy + // Sort the remotes based on lowest source efficacy + return remoteNamesByEfficacy.sort(function (roomName1, roomName2) { + return ( + Math.min(...Memory.rooms[roomName1][pathType].map(packedPath => packedPath.length)) - + Math.min(...Memory.rooms[roomName2][pathType].map(packedPath => packedPath.length)) + ) + }) + } - const remoteSourceIndexesByEfficacy: string[] = [] + _remoteSourceIndexesByEfficacy: string[] + /** + * Some rooms may no longer be remotes when accessed later in the code + */ + get remoteSourceIndexesByEfficacy() { + if (this._remoteSourceIndexesByEfficacy) return this._remoteSourceIndexesByEfficacy - for (const remoteName of Memory.rooms[this.room.name][RoomMemoryKeys.remotes]) { - const remoteMemory = Memory.rooms[remoteName] - - for ( - let sourceIndex = 0; - sourceIndex < remoteMemory[RoomMemoryKeys.remoteSources].length; - sourceIndex++ - ) { - remoteSourceIndexesByEfficacy.push(remoteName + ' ' + sourceIndex) - } - } + const remoteSourceIndexesByEfficacy: string[] = [] - const pathType = this.room.communeManager.remoteResourcePathType + for (const remoteName of Memory.rooms[this.room.name][RoomMemoryKeys.remotes]) { + const remoteMemory = Memory.rooms[remoteName] - // If we can do reserving, prefer rooms with more efficient reserving and utility - if (this.room.energyCapacityAvailable >= BODYPART_COST[CLAIM] + BODYPART_COST[MOVE]) { - let score = 0 + for ( + let sourceIndex = 0; + sourceIndex < remoteMemory[RoomMemoryKeys.remoteSources].length; + sourceIndex++ + ) { + remoteSourceIndexesByEfficacy.push(remoteName + ' ' + sourceIndex) + } + } - // associate score for source with accompaning costs + const pathType = this.room.communeManager.remoteResourcePathType - // prefer based on rough energy / tick - // reserver cost is 650 / claimer lifetime - real path distance / source count - // - } + // If we can do reserving, prefer rooms with more efficient reserving and utility + if (this.room.energyCapacityAvailable >= BODYPART_COST[CLAIM] + BODYPART_COST[MOVE]) { + let score = 0 - return remoteSourceIndexesByEfficacy.sort(function (a, b) { - const aSplit = a.split(' ') - const bSplit = b.split(' ') + // associate score for source with accompaning costs - return ( - Memory.rooms[aSplit[0]][pathType][parseInt(aSplit[1])].length - - Memory.rooms[bSplit[0]][pathType][parseInt(bSplit[1])].length - ) - }) + // prefer based on rough energy / tick + // reserver cost is 650 / claimer lifetime - real path distance / source count + // } - sourceContainerIDs: Id[] - _sourceContainers: StructureContainer[] - get sourceContainers() { - if (this._sourceContainers) return this._sourceContainers + return remoteSourceIndexesByEfficacy.sort(function (a, b) { + const aSplit = a.split(' ') + const bSplit = b.split(' ') - if (this.sourceContainerIDs && !this.structureUpdate) { - const sourceContainers = this.sourceContainerIDs.map(ID => findObjectWithID(ID)) + return ( + Memory.rooms[aSplit[0]][pathType][parseInt(aSplit[1])].length - + Memory.rooms[bSplit[0]][pathType][parseInt(bSplit[1])].length + ) + }) + } - return (this._sourceContainers = sourceContainers) - } + sourceContainerIDs: Id[] + _sourceContainers: StructureContainer[] + get sourceContainers() { + if (this._sourceContainers) return this._sourceContainers - const sourceContainers: StructureContainer[] = [] - - const roomType = Memory.rooms[this.room.name][RoomMemoryKeys.type] - if (roomType === RoomTypes.commune) { - const positions = this.communeSourceHarvestPositions - for (let i = 0; i < positions.length; i++) { - const structure = this.room.findStructureAtCoord( - positions[i][0], - structure => structure.structureType === STRUCTURE_CONTAINER, - ) - if (!structure) continue - - sourceContainers[i] = structure as StructureContainer - } - } else if (roomType === RoomTypes.remote) { - const positions = this.remoteSourceHarvestPositions - for (let i = 0; i < positions.length; i++) { - const structure = this.room.findStructureAtCoord( - positions[i][0], - structure => structure.structureType === STRUCTURE_CONTAINER, - ) - if (!structure) continue - - sourceContainers[i] = structure as StructureContainer - } - } else { - const positions = this.sourceHarvestPositions - for (let i = 0; i < positions.length; i++) { - const structure = this.room.findStructureAtCoord( - positions[i][0], - structure => structure.structureType === STRUCTURE_CONTAINER, - ) - if (!structure) continue - - sourceContainers[i] = structure as StructureContainer - } - } + if (this.sourceContainerIDs && !this.structureUpdate) { + const sourceContainers = this.sourceContainerIDs.map(ID => findObjectWithID(ID)) - this.sourceContainerIDs = sourceContainers.map(container => container.id) - return (this._sourceContainers = sourceContainers) + return (this._sourceContainers = sourceContainers) } - fastFillerContainerIDs: Id[] - _fastFillerContainers: StructureContainer[] - get fastFillerContainers() { - if (this._fastFillerContainers) return this._fastFillerContainers + const sourceContainers: StructureContainer[] = [] - if (this.fastFillerContainerIDs && !this.structureUpdate) { - const fastFillerContainers = this.fastFillerContainerIDs.map(ID => findObjectWithID(ID)) - return (this._fastFillerContainers = fastFillerContainers) - } + const roomType = Memory.rooms[this.room.name][RoomMemoryKeys.type] + if (roomType === RoomTypes.commune) { + const positions = this.communeSourceHarvestPositions + for (let i = 0; i < positions.length; i++) { + const structure = this.room.findStructureAtCoord( + positions[i][0], + structure => structure.structureType === STRUCTURE_CONTAINER, + ) + if (!structure) continue + + sourceContainers[i] = structure as StructureContainer + } + } else if (roomType === RoomTypes.remote) { + const positions = this.remoteSourceHarvestPositions + for (let i = 0; i < positions.length; i++) { + const structure = this.room.findStructureAtCoord( + positions[i][0], + structure => structure.structureType === STRUCTURE_CONTAINER, + ) + if (!structure) continue + + sourceContainers[i] = structure as StructureContainer + } + } else { + const positions = this.sourceHarvestPositions + for (let i = 0; i < positions.length; i++) { + const structure = this.room.findStructureAtCoord( + positions[i][0], + structure => structure.structureType === STRUCTURE_CONTAINER, + ) + if (!structure) continue - const anchor = this.anchor - if (!anchor) throw Error('no anchor') - - const potentialFastFillerContainers = [ - this.room.findStructureAtXY( - anchor.x - 2, - anchor.y, - structure => structure.structureType === STRUCTURE_CONTAINER, - ), - this.room.findStructureAtXY( - anchor.x + 2, - anchor.y, - structure => structure.structureType === STRUCTURE_CONTAINER, - ), - ] - const fastFillerContainers: StructureContainer[] = [] - for (const container of potentialFastFillerContainers) { - if (!container) continue + sourceContainers[i] = structure as StructureContainer + } + } - fastFillerContainers.push(container) - } + this.sourceContainerIDs = sourceContainers.map(container => container.id) + return (this._sourceContainers = sourceContainers) + } + + fastFillerContainerIDs: Id[] + _fastFillerContainers: StructureContainer[] + get fastFillerContainers() { + if (this._fastFillerContainers) return this._fastFillerContainers - this.fastFillerContainerIDs = fastFillerContainers.map(container => container.id) - return (this._fastFillerContainers = fastFillerContainers) + if (this.fastFillerContainerIDs && !this.structureUpdate) { + const fastFillerContainers = this.fastFillerContainerIDs.map(ID => findObjectWithID(ID)) + return (this._fastFillerContainers = fastFillerContainers) } - // entire getter and cache logic for controllerContainer, similar mineralContainer and to the logic in roomAdditions.ts and room.ts + const anchor = this.anchor + if (!anchor) throw Error('no anchor') - controllerContainerID: Id - _controllerContainer: StructureContainer | false - get controllerContainer() { - if (this._controllerContainer !== undefined) return this._controllerContainer + const potentialFastFillerContainers = [ + this.room.findStructureAtXY( + anchor.x - 2, + anchor.y, + structure => structure.structureType === STRUCTURE_CONTAINER, + ), + this.room.findStructureAtXY( + anchor.x + 2, + anchor.y, + structure => structure.structureType === STRUCTURE_CONTAINER, + ), + ] + const fastFillerContainers: StructureContainer[] = [] + for (const container of potentialFastFillerContainers) { + if (!container) continue - if (this.controllerContainerID) { - const controllerContainer = findObjectWithID(this.controllerContainerID) - if (controllerContainer) { - this._controllerContainer = controllerContainer - return controllerContainer - } - } + fastFillerContainers.push(container) + } - const centerUpgradePos = this.centerUpgradePos - if (!centerUpgradePos) throw Error('no center upgrade pos') + this.fastFillerContainerIDs = fastFillerContainers.map(container => container.id) + return (this._fastFillerContainers = fastFillerContainers) + } - this._controllerContainer = this.room.findStructureAtCoord( - centerUpgradePos, - structure => structure.structureType === STRUCTURE_CONTAINER, - ) - if (!this._controllerContainer) { - return this._controllerContainer - } + // entire getter and cache logic for controllerContainer, similar mineralContainer and to the logic in roomAdditions.ts and room.ts - this.controllerContainerID = this._controllerContainer.id - return this._controllerContainer + controllerContainerID: Id + _controllerContainer: StructureContainer | false + get controllerContainer() { + if (this._controllerContainer !== undefined) return this._controllerContainer + + if (this.controllerContainerID) { + const controllerContainer = findObjectWithID(this.controllerContainerID) + if (controllerContainer) { + this._controllerContainer = controllerContainer + return controllerContainer + } } - mineralContainerID: Id - _mineralContainer: StructureContainer | false - get mineralContainer() { - if (this._mineralContainer !== undefined) return this._mineralContainer + const centerUpgradePos = this.centerUpgradePos + if (!centerUpgradePos) throw Error('no center upgrade pos') - if (this.mineralContainerID) { - const mineralContainer = findObjectWithID(this.mineralContainerID) - if (mineralContainer) return (this._mineralContainer = mineralContainer) - } + this._controllerContainer = this.room.findStructureAtCoord( + centerUpgradePos, + structure => structure.structureType === STRUCTURE_CONTAINER, + ) + if (!this._controllerContainer) { + return this._controllerContainer + } - const mineralHarvestPos = this.mineralHarvestPositions[0] - if (!mineralHarvestPos) throw Error('no mineral harvest pos') + this.controllerContainerID = this._controllerContainer.id + return this._controllerContainer + } - this._mineralContainer = this.room.findStructureAtCoord( - mineralHarvestPos, - structure => structure.structureType === STRUCTURE_CONTAINER, - ) - if (!this._mineralContainer) { - return this._mineralContainer - } + mineralContainerID: Id + _mineralContainer: StructureContainer | false + get mineralContainer() { + if (this._mineralContainer !== undefined) return this._mineralContainer - this.mineralContainerID = this._mineralContainer.id - return this._mineralContainer + if (this.mineralContainerID) { + const mineralContainer = findObjectWithID(this.mineralContainerID) + if (mineralContainer) return (this._mineralContainer = mineralContainer) } - fastFillerLinkID: Id - _fastFillerLink: StructureLink | false - get fastFillerLink() { - if (this._fastFillerLink !== undefined) return this._fastFillerLink + const mineralHarvestPos = this.mineralHarvestPositions[0] + if (!mineralHarvestPos) throw Error('no mineral harvest pos') - if (this.fastFillerLinkID) { - const fastFillerLink = findObjectWithID(this.fastFillerLinkID) - if (fastFillerLink) return (this._fastFillerLink = fastFillerLink) - } + this._mineralContainer = this.room.findStructureAtCoord( + mineralHarvestPos, + structure => structure.structureType === STRUCTURE_CONTAINER, + ) + if (!this._mineralContainer) { + return this._mineralContainer + } - const anchor = this.anchor - if (!anchor) throw Error('no anchor') + this.mineralContainerID = this._mineralContainer.id + return this._mineralContainer + } - this._fastFillerLink = this.room.findStructureAtCoord( - anchor, - structure => structure.structureType === STRUCTURE_LINK, - ) - if (!this._fastFillerLink) { - return this._fastFillerLink - } + fastFillerLinkID: Id + _fastFillerLink: StructureLink | false + get fastFillerLink() { + if (this._fastFillerLink !== undefined) return this._fastFillerLink - this.fastFillerLinkID = this._fastFillerLink.id - return this._fastFillerLink + if (this.fastFillerLinkID) { + const fastFillerLink = findObjectWithID(this.fastFillerLinkID) + if (fastFillerLink) return (this._fastFillerLink = fastFillerLink) } - hubLinkId: Id - _hubLink: StructureLink | false - get hubLink() { - if (this._hubLink !== undefined) return this._hubLink + const anchor = this.anchor + if (!anchor) throw Error('no anchor') - if (this.hubLinkId) { - const hubLink = findObjectWithID(this.hubLinkId) - if (hubLink) return (this._hubLink = hubLink) - } + this._fastFillerLink = this.room.findStructureAtCoord( + anchor, + structure => structure.structureType === STRUCTURE_LINK, + ) + if (!this._fastFillerLink) { + return this._fastFillerLink + } - const stampAnchors = this.stampAnchors - if (!stampAnchors) return (this._hubLink = false) + this.fastFillerLinkID = this._fastFillerLink.id + return this._fastFillerLink + } - this._hubLink = this.room.findStructureInRange( - stampAnchors.hub[0], - 1, - structure => structure.structureType === STRUCTURE_LINK, - ) - if (!this._hubLink) { - return this._hubLink - } + hubLinkId: Id + _hubLink: StructureLink | false + get hubLink() { + if (this._hubLink !== undefined) return this._hubLink - this.hubLinkId = this._hubLink.id - return this._hubLink + if (this.hubLinkId) { + const hubLink = findObjectWithID(this.hubLinkId) + if (hubLink) return (this._hubLink = hubLink) } - _droppedEnergy: Resource[] - get droppedEnergy() { - if (this._droppedEnergy) return this._droppedEnergy + const stampAnchors = this.stampAnchors + if (!stampAnchors) return (this._hubLink = false) - const droppedEnergy = this.room.find(FIND_DROPPED_RESOURCES, { - filter: resource => - resource.resourceType === RESOURCE_ENERGY && - !resource.room.roomManager.enemyThreatCoords.has(packCoord(resource.pos)), - }) - return (this._droppedEnergy = droppedEnergy) + this._hubLink = this.room.findStructureInRange( + stampAnchors.hub[0], + 1, + structure => structure.structureType === STRUCTURE_LINK, + ) + if (!this._hubLink) { + return this._hubLink } - _droppedResources: Resource[] - get droppedResources() { - if (this._droppedResources) return this._droppedResources + this.hubLinkId = this._hubLink.id + return this._hubLink + } - const droppedResources = this.room.find(FIND_DROPPED_RESOURCES, { - filter: resource => - !resource.room.roomManager.enemyThreatCoords.has(packCoord(resource.pos)), - }) - return (this._droppedResources = droppedResources) - } + _droppedEnergy: Resource[] + get droppedEnergy() { + if (this._droppedEnergy) return this._droppedEnergy - _actionableWalls: StructureWall[] - get actionableWalls() { - if (this._actionableWalls) return this._actionableWalls + const droppedEnergy = this.room.find(FIND_DROPPED_RESOURCES, { + filter: resource => + resource.resourceType === RESOURCE_ENERGY && + !resource.room.roomManager.enemyThreatCoords.has(packCoord(resource.pos)), + }) + return (this._droppedEnergy = droppedEnergy) + } - const actionableWalls = this.room.find(FIND_STRUCTURES, { - filter: structure => - structure.structureType === STRUCTURE_WALL && - !structure.room.roomManager.enemyThreatCoords.has(packCoord(structure.pos)), - }) - return (this._actionableWalls = actionableWalls) - } + _droppedResources: Resource[] + get droppedResources() { + if (this._droppedResources) return this._droppedResources - _quadCostMatrix: CostMatrix - /** - * a costMatrix for quad (combat mode) pathing - */ - get quadCostMatrix() { - if (this._quadCostMatrix) return this._quadCostMatrix + const droppedResources = this.room.find(FIND_DROPPED_RESOURCES, { + filter: resource => !resource.room.roomManager.enemyThreatCoords.has(packCoord(resource.pos)), + }) + return (this._droppedResources = droppedResources) + } - const quadCostMatrix = new PathFinder.CostMatrix() - const terrainCoords = new Uint8Array(collectiveManager.getTerrainBinary(this.room.name)) + _actionableWalls: StructureWall[] + get actionableWalls() { + if (this._actionableWalls) return this._actionableWalls - const roadCoords = new Set() - for (const road of this.structures.road) roadCoords.add(packCoord(road.pos)) + const actionableWalls = this.room.find(FIND_STRUCTURES, { + filter: structure => + structure.structureType === STRUCTURE_WALL && + !structure.room.roomManager.enemyThreatCoords.has(packCoord(structure.pos)), + }) + return (this._actionableWalls = actionableWalls) + } - // Avoid not my creeps + _quadCostMatrix: CostMatrix + /** + * a costMatrix for quad (combat mode) pathing + */ + get quadCostMatrix() { + if (this._quadCostMatrix) return this._quadCostMatrix - for (const creep of this.notMyCreeps.enemy) terrainCoords[packAsNum(creep.pos)] = 255 - for (const creep of this.notMyCreeps.ally) terrainCoords[packAsNum(creep.pos)] = 255 + const quadCostMatrix = new PathFinder.CostMatrix() + const terrainCoords = new Uint8Array(collectiveManager.getTerrainBinary(this.room.name)) - for (const creep of this.room.find(FIND_HOSTILE_POWER_CREEPS)) - terrainCoords[packAsNum(creep.pos)] = 255 + const roadCoords = new Set() + for (const road of this.structures.road) roadCoords.add(packCoord(road.pos)) - // Avoid impassible structures + // Avoid not my creeps - for (const rampart of this.structures.rampart) { - // If the rampart is mine + for (const creep of this.notMyCreeps.enemy) terrainCoords[packAsNum(creep.pos)] = 255 + for (const creep of this.notMyCreeps.ally) terrainCoords[packAsNum(creep.pos)] = 255 - if (rampart.my) continue + for (const creep of this.room.find(FIND_HOSTILE_POWER_CREEPS)) + terrainCoords[packAsNum(creep.pos)] = 255 - // Otherwise if the rampart is owned by an ally, iterate + // Avoid impassible structures - if (rampart.isPublic) continue + for (const rampart of this.structures.rampart) { + // If the rampart is mine - // Otherwise set the rampart's pos as impassible + if (rampart.my) continue - terrainCoords[packAsNum(rampart.pos)] = 255 - } + // Otherwise if the rampart is owned by an ally, iterate - // Loop through structureTypes of impassibleStructureTypes + if (rampart.isPublic) continue - for (const structureType of impassibleStructureTypes) { - for (const structure of this.structures[structureType]) { - // Set pos as impassible + // Otherwise set the rampart's pos as impassible - terrainCoords[packAsNum(structure.pos)] = 255 - } + terrainCoords[packAsNum(rampart.pos)] = 255 + } - for (const cSite of this.cSites[structureType]) { - // Set pos as impassible + // Loop through structureTypes of impassibleStructureTypes - terrainCoords[packAsNum(cSite.pos)] = 255 - } - } + for (const structureType of impassibleStructureTypes) { + for (const structure of this.structures[structureType]) { + // Set pos as impassible - // + terrainCoords[packAsNum(structure.pos)] = 255 + } - for (const portal of this.structures.portal) terrainCoords[packAsNum(portal.pos)] = 255 + for (const cSite of this.cSites[structureType]) { + // Set pos as impassible - // Loop trough each construction site belonging to an ally + terrainCoords[packAsNum(cSite.pos)] = 255 + } + } + + // - for (const cSite of this.notMyConstructionSites.ally) - terrainCoords[packAsNum(cSite.pos)] = 255 + for (const portal of this.structures.portal) terrainCoords[packAsNum(portal.pos)] = 255 - let x + // Loop trough each construction site belonging to an ally - // Configure y and loop through top exits + for (const cSite of this.notMyConstructionSites.ally) terrainCoords[packAsNum(cSite.pos)] = 255 - let y = 0 - for (x = 0; x < roomDimensions; x += 1) - terrainCoords[packXYAsNum(x, y)] = Math.max(terrainCoords[packXYAsNum(x, y)], 100) + let x - // Configure x and loop through left exits + // Configure y and loop through top exits - x = 0 - for (y = 0; y < roomDimensions; y += 1) - terrainCoords[packXYAsNum(x, y)] = Math.max(terrainCoords[packXYAsNum(x, y)], 100) + let y = 0 + for (x = 0; x < roomDimensions; x += 1) + terrainCoords[packXYAsNum(x, y)] = Math.max(terrainCoords[packXYAsNum(x, y)], 100) - // Configure y and loop through bottom exits + // Configure x and loop through left exits - y = roomDimensions - 1 - for (x = 0; x < roomDimensions; x += 1) - terrainCoords[packXYAsNum(x, y)] = Math.max(terrainCoords[packXYAsNum(x, y)], 100) + x = 0 + for (y = 0; y < roomDimensions; y += 1) + terrainCoords[packXYAsNum(x, y)] = Math.max(terrainCoords[packXYAsNum(x, y)], 100) - // Configure x and loop through right exits + // Configure y and loop through bottom exits - x = roomDimensions - 1 - for (y = 0; y < roomDimensions; y += 1) - terrainCoords[packXYAsNum(x, y)] = Math.max(terrainCoords[packXYAsNum(x, y)], 100) + y = roomDimensions - 1 + for (x = 0; x < roomDimensions; x += 1) + terrainCoords[packXYAsNum(x, y)] = Math.max(terrainCoords[packXYAsNum(x, y)], 100) - const terrainCM = this.room.getTerrain() + // Configure x and loop through right exits - // Assign impassible to tiles that aren't 2x2 passible + x = roomDimensions - 1 + for (y = 0; y < roomDimensions; y += 1) + terrainCoords[packXYAsNum(x, y)] = Math.max(terrainCoords[packXYAsNum(x, y)], 100) - for (let x = 0; x < roomDimensions; x += 1) { - for (let y = 0; y < roomDimensions; y += 1) { - const offsetCoords = [ - { - x, - y, - }, - { - x: x + 1, - y, - }, - { - x, - y: y + 1, - }, - { - x: x + 1, - y: y + 1, - }, - ] + const terrainCM = this.room.getTerrain() - let largestValue = terrainCoords[packXYAsNum(x, y)] + // Assign impassible to tiles that aren't 2x2 passible - for (const coord of offsetCoords) { - let coordValue = terrainCoords[packAsNum(coord)] - if (!coordValue || coordValue < 255) continue + for (let x = 0; x < roomDimensions; x += 1) { + for (let y = 0; y < roomDimensions; y += 1) { + const offsetCoords = [ + { + x, + y, + }, + { + x: x + 1, + y, + }, + { + x, + y: y + 1, + }, + { + x: x + 1, + y: y + 1, + }, + ] - if (roadCoords.has(packCoord(coord))) coordValue = 0 - if (coordValue <= largestValue) continue + let largestValue = terrainCoords[packXYAsNum(x, y)] - largestValue = coordValue - } + for (const coord of offsetCoords) { + let coordValue = terrainCoords[packAsNum(coord)] + if (!coordValue || coordValue < 255) continue - if (largestValue >= 50) { - largestValue = 50 + if (roadCoords.has(packCoord(coord))) coordValue = 0 + if (coordValue <= largestValue) continue - quadCostMatrix.set( - x, - y, - Math.max(terrainCoords[packXYAsNum(x, y)], largestValue), - ) - continue - } + largestValue = coordValue + } - largestValue = 0 + if (largestValue >= 50) { + largestValue = 50 - for (const coord of offsetCoords) { - const value = terrainCM.get(coord.x, coord.y) - if (!value) continue + quadCostMatrix.set(x, y, Math.max(terrainCoords[packXYAsNum(x, y)], largestValue)) + continue + } - if (roadCoords.has(packCoord(coord))) continue - if (value !== TERRAIN_MASK_SWAMP) continue + largestValue = 0 - largestValue = defaultSwampCost * 2 - } + for (const coord of offsetCoords) { + const value = terrainCM.get(coord.x, coord.y) + if (!value) continue - if (!largestValue) continue + if (roadCoords.has(packCoord(coord))) continue + if (value !== TERRAIN_MASK_SWAMP) continue - for (const coord of offsetCoords) { - quadCostMatrix.set(coord.x, coord.y, largestValue) - } - } + largestValue = defaultSwampCost * 2 } - /* this.room.visualizeCostMatrix(quadCostMatrix) */ + if (!largestValue) continue - return (this._quadCostMatrix = quadCostMatrix) + for (const coord of offsetCoords) { + quadCostMatrix.set(coord.x, coord.y, largestValue) + } + } } - _quadBulldozeCostMatrix: CostMatrix - get quadBulldozeCostMatrix() { - if (this._quadBulldozeCostMatrix) return this._quadBulldozeCostMatrix + /* this.room.visualizeCostMatrix(quadCostMatrix) */ + + return (this._quadCostMatrix = quadCostMatrix) + } - const quadBulldozeCostMatrix = new PathFinder.CostMatrix() - const terrainCoords = new Uint8Array(collectiveManager.getTerrainBinary(this.room.name)) + _quadBulldozeCostMatrix: CostMatrix + get quadBulldozeCostMatrix() { + if (this._quadBulldozeCostMatrix) return this._quadBulldozeCostMatrix - const roadCoords = new Set() - for (const road of this.structures.road) roadCoords.add(packCoord(road.pos)) + const quadBulldozeCostMatrix = new PathFinder.CostMatrix() + const terrainCoords = new Uint8Array(collectiveManager.getTerrainBinary(this.room.name)) - // Avoid not my creeps - /* + const roadCoords = new Set() + for (const road of this.structures.road) roadCoords.add(packCoord(road.pos)) + + // Avoid not my creeps + /* for (const creep of this.roomManager.notMyCreeps.enemy) terrainCoords[packAsNum(creep.pos)] = 255 for (const creep of this.roomManager.notMyCreeps.ally.ally) terrainCoords[packAsNum(creep.pos)] = 255 for (const creep of this.find(FIND_HOSTILE_POWER_CREEPS)) terrainCoords[packAsNum(creep.pos)] = 255 */ - const ramparts = this.structures.rampart - const constructedWalls = this.structures.constructedWall - const barricades = [...ramparts, ...constructedWalls] - const highestBarricadeHits = findHighestScore(barricades, structure => structure.hits) + const ramparts = this.structures.rampart + const constructedWalls = this.structures.constructedWall + const barricades = [...ramparts, ...constructedWalls] + const highestBarricadeHits = findHighestScore(barricades, structure => structure.hits) - for (const structure of ramparts) { - // If the rampart is mine + for (const structure of ramparts) { + // If the rampart is mine - if (structure.my) continue + if (structure.my) continue - // Otherwise set the rampart's pos as impassible + // Otherwise set the rampart's pos as impassible - terrainCoords[packAsNum(structure.pos)] = Math.floor( - ((highestBarricadeHits - structure.hits) / highestBarricadeHits) * 254, - ) - } - - // Loop through structureTypes of impassibleStructureTypes - - for (const structureType of impassibleStructureTypes) { - for (const structure of this.structures[structureType]) { - terrainCoords[ - packAsNum(structure.pos) - ] = 10 /* structure.hits / (structure.hitsMax / 10) */ - } + terrainCoords[packAsNum(structure.pos)] = Math.floor( + ((highestBarricadeHits - structure.hits) / highestBarricadeHits) * 254, + ) + } - for (const cSite of this.cSites[structureType]) { - // Set pos as impassible + // Loop through structureTypes of impassibleStructureTypes - terrainCoords[packAsNum(cSite.pos)] = 255 - } - } + for (const structureType of impassibleStructureTypes) { + for (const structure of this.structures[structureType]) { + terrainCoords[packAsNum(structure.pos)] = 10 /* structure.hits / (structure.hitsMax / 10) */ + } - for (const structure of constructedWalls) { - // Otherwise set the rampart's pos as impassible + for (const cSite of this.cSites[structureType]) { + // Set pos as impassible - terrainCoords[packAsNum(structure.pos)] = Math.floor( - ((highestBarricadeHits - structure.hits) / highestBarricadeHits) * 254, - ) - } + terrainCoords[packAsNum(cSite.pos)] = 255 + } + } - // + for (const structure of constructedWalls) { + // Otherwise set the rampart's pos as impassible - for (const portal of this.structures.portal) terrainCoords[packAsNum(portal.pos)] = 255 + terrainCoords[packAsNum(structure.pos)] = Math.floor( + ((highestBarricadeHits - structure.hits) / highestBarricadeHits) * 254, + ) + } - // Loop trough each construction site belonging to an ally + // - for (const cSite of this.notMyConstructionSites.ally) - terrainCoords[packAsNum(cSite.pos)] = 255 + for (const portal of this.structures.portal) terrainCoords[packAsNum(portal.pos)] = 255 - let x + // Loop trough each construction site belonging to an ally - // Configure y and loop through top exits + for (const cSite of this.notMyConstructionSites.ally) terrainCoords[packAsNum(cSite.pos)] = 255 - let y = 0 - for (x = 0; x < roomDimensions; x += 1) - terrainCoords[packXYAsNum(x, y)] = Math.max(terrainCoords[packXYAsNum(x, y)], 50) + let x - // Configure x and loop through left exits + // Configure y and loop through top exits - x = 0 - for (y = 0; y < roomDimensions; y += 1) - terrainCoords[packXYAsNum(x, y)] = Math.max(terrainCoords[packXYAsNum(x, y)], 50) + let y = 0 + for (x = 0; x < roomDimensions; x += 1) + terrainCoords[packXYAsNum(x, y)] = Math.max(terrainCoords[packXYAsNum(x, y)], 50) - // Configure y and loop through bottom exits + // Configure x and loop through left exits - y = roomDimensions - 1 - for (x = 0; x < roomDimensions; x += 1) - terrainCoords[packXYAsNum(x, y)] = Math.max(terrainCoords[packXYAsNum(x, y)], 50) + x = 0 + for (y = 0; y < roomDimensions; y += 1) + terrainCoords[packXYAsNum(x, y)] = Math.max(terrainCoords[packXYAsNum(x, y)], 50) - // Configure x and loop through right exits + // Configure y and loop through bottom exits - x = roomDimensions - 1 - for (y = 0; y < roomDimensions; y += 1) - terrainCoords[packXYAsNum(x, y)] = Math.max(terrainCoords[packXYAsNum(x, y)], 50) + y = roomDimensions - 1 + for (x = 0; x < roomDimensions; x += 1) + terrainCoords[packXYAsNum(x, y)] = Math.max(terrainCoords[packXYAsNum(x, y)], 50) - const terrainCM = this.room.getTerrain() + // Configure x and loop through right exits - // Assign impassible to tiles that aren't 2x2 passible + x = roomDimensions - 1 + for (y = 0; y < roomDimensions; y += 1) + terrainCoords[packXYAsNum(x, y)] = Math.max(terrainCoords[packXYAsNum(x, y)], 50) - for (let x = 0; x < roomDimensions; x += 1) { - for (let y = 0; y < roomDimensions; y += 1) { - const offsetCoords = [ - { - x, - y, - }, - { - x: x + 1, - y, - }, - { - x, - y: y + 1, - }, - { - x: x + 1, - y: y + 1, - }, - ] + const terrainCM = this.room.getTerrain() - let largestValue = terrainCoords[packXYAsNum(x, y)] + // Assign impassible to tiles that aren't 2x2 passible - for (const coord of offsetCoords) { - let coordValue = terrainCoords[packAsNum(coord)] - if (!coordValue || coordValue < 255) continue + for (let x = 0; x < roomDimensions; x += 1) { + for (let y = 0; y < roomDimensions; y += 1) { + const offsetCoords = [ + { + x, + y, + }, + { + x: x + 1, + y, + }, + { + x, + y: y + 1, + }, + { + x: x + 1, + y: y + 1, + }, + ] - if (roadCoords.has(packCoord(coord))) coordValue = 0 - if (coordValue <= largestValue) continue + let largestValue = terrainCoords[packXYAsNum(x, y)] - largestValue = coordValue - } + for (const coord of offsetCoords) { + let coordValue = terrainCoords[packAsNum(coord)] + if (!coordValue || coordValue < 255) continue - if (largestValue >= 50) { - largestValue = 50 + if (roadCoords.has(packCoord(coord))) coordValue = 0 + if (coordValue <= largestValue) continue - quadBulldozeCostMatrix.set( - x, - y, - Math.max(terrainCoords[packXYAsNum(x, y)], largestValue), - ) - continue - } + largestValue = coordValue + } - largestValue = 0 + if (largestValue >= 50) { + largestValue = 50 - for (const coord of offsetCoords) { - const value = terrainCM.get(coord.x, coord.y) - if (value === undefined) continue + quadBulldozeCostMatrix.set(x, y, Math.max(terrainCoords[packXYAsNum(x, y)], largestValue)) + continue + } - if (roadCoords.has(packCoord(coord))) continue - if (value !== TERRAIN_MASK_SWAMP) continue + largestValue = 0 - largestValue = defaultSwampCost * 2 - } + for (const coord of offsetCoords) { + const value = terrainCM.get(coord.x, coord.y) + if (value === undefined) continue - if (!largestValue) continue + if (roadCoords.has(packCoord(coord))) continue + if (value !== TERRAIN_MASK_SWAMP) continue - for (const coord of offsetCoords) { - quadBulldozeCostMatrix.set(coord.x, coord.y, largestValue) - } - } + largestValue = defaultSwampCost * 2 } - /* this.visualizeCostMatrix(quadBulldozeCostMatrix) */ + if (!largestValue) continue - return (this._quadBulldozeCostMatrix = quadBulldozeCostMatrix) + for (const coord of offsetCoords) { + quadBulldozeCostMatrix.set(coord.x, coord.y, largestValue) + } + } } - _enemyDamageThreat: boolean - /** - * Wether or not there is a damage threat from enemies in the room - */ - get enemyDamageThreat() { - if (this._enemyDamageThreat !== undefined) return this._enemyDamageThreat + /* this.visualizeCostMatrix(quadBulldozeCostMatrix) */ - if (this.room.controller && !this.room.controller.my && this.structures.tower.length) { - return (this._enemyDamageThreat = true) - } + return (this._quadBulldozeCostMatrix = quadBulldozeCostMatrix) + } - for (const enemyAttacker of this.enemyAttackers) { - if (!enemyAttacker.combatStrength.melee) { - return (this._enemyDamageThreat = true) - } + _enemyDamageThreat: boolean + /** + * Wether or not there is a damage threat from enemies in the room + */ + get enemyDamageThreat() { + if (this._enemyDamageThreat !== undefined) return this._enemyDamageThreat - if (enemyAttacker.combatStrength.ranged) { - return (this._enemyDamageThreat = true) - } - } + if (this.room.controller && !this.room.controller.my && this.structures.tower.length) { + return (this._enemyDamageThreat = true) + } + + for (const enemyAttacker of this.enemyAttackers) { + if (!enemyAttacker.combatStrength.melee) { + return (this._enemyDamageThreat = true) + } - return (this._enemyDamageThreat = false) + if (enemyAttacker.combatStrength.ranged) { + return (this._enemyDamageThreat = true) + } } - _enemyThreatCoords: Set - /** - * Coords which enemies might hurt us if our creeps step on them - */ - get enemyThreatCoords() { - if (this._enemyThreatCoords) return this._enemyThreatCoords + return (this._enemyDamageThreat = false) + } - const enemyThreatCoords = new Set() + _enemyThreatCoords: Set + /** + * Coords which enemies might hurt us if our creeps step on them + */ + get enemyThreatCoords() { + if (this._enemyThreatCoords) return this._enemyThreatCoords - // If there is a controller, it's mine, and it's in safemode, we're safe + const enemyThreatCoords = new Set() - if (this.room.controller && this.room.controller.my && this.room.controller.safeMode) { - return (this._enemyThreatCoords = enemyThreatCoords) - } + // If there is a controller, it's mine, and it's in safemode, we're safe - const enemyAttackers = this.enemyAttackers - // If there is no enemy threat - if (!enemyAttackers.length) return (this._enemyThreatCoords = enemyThreatCoords) + if (this.room.controller && this.room.controller.my && this.room.controller.safeMode) { + return (this._enemyThreatCoords = enemyThreatCoords) + } - const enemyMeleeAttackers: Creep[] = [] - const enemyRangedAttackers: Creep[] = [] + const enemyAttackers = this.enemyAttackers + // If there is no enemy threat + if (!enemyAttackers.length) return (this._enemyThreatCoords = enemyThreatCoords) - for (const enemyAttacker of enemyAttackers) { - if (enemyAttacker.parts.ranged_attack) { - enemyRangedAttackers.push(enemyAttacker) - continue - } - if (enemyAttacker.parts.attack) enemyMeleeAttackers.push(enemyAttacker) - } + const enemyMeleeAttackers: Creep[] = [] + const enemyRangedAttackers: Creep[] = [] - // avoid melee creeps in range 2 - for (const enemyAttacker of enemyMeleeAttackers) { - forCoordsInRange(enemyAttacker.pos, 2, coord => { - enemyThreatCoords.add(packCoord(coord)) - }) - } + for (const enemyAttacker of enemyAttackers) { + if (enemyAttacker.parts.ranged_attack) { + enemyRangedAttackers.push(enemyAttacker) + continue + } + if (enemyAttacker.parts.attack) enemyMeleeAttackers.push(enemyAttacker) + } - // avoid ranged creeps in range 3 - for (const enemyAttacker of enemyRangedAttackers) { - forCoordsInRange(enemyAttacker.pos, 3, coord => { - enemyThreatCoords.add(packCoord(coord)) - }) - } + // avoid melee creeps in range 2 + for (const enemyAttacker of enemyMeleeAttackers) { + forCoordsInRange(enemyAttacker.pos, 2, coord => { + enemyThreatCoords.add(packCoord(coord)) + }) + } - // if it's our room, ramparts protect us from enemies - if (this.room.controller && this.room.controller.my) { - const enemySquadData = this.enemySquadData - const highestDamage = Math.max( - enemySquadData.highestDismantle, - enemySquadData.highestMeleeDamage, - ) + // avoid ranged creeps in range 3 + for (const enemyAttacker of enemyRangedAttackers) { + forCoordsInRange(enemyAttacker.pos, 3, coord => { + enemyThreatCoords.add(packCoord(coord)) + }) + } - for (const rampart of this.structures.rampart) { - // Ignore ramparts that can be one shotted - if (rampart.hits < highestDamage) continue + // if it's our room, ramparts protect us from enemies + if (this.room.controller && this.room.controller.my) { + const enemySquadData = this.enemySquadData + const highestDamage = Math.max( + enemySquadData.highestDismantle, + enemySquadData.highestMeleeDamage, + ) - enemyThreatCoords.delete(packCoord(rampart.pos)) - } - } + for (const rampart of this.structures.rampart) { + // Ignore ramparts that can be one shotted + if (rampart.hits < highestDamage) continue - return (this._enemyThreatCoords = enemyThreatCoords) + enemyThreatCoords.delete(packCoord(rampart.pos)) + } } - _enemyThreatGoals: PathGoal[] - /** - * - */ - get enemyThreatGoals() { - if (this._enemyThreatGoals) return this._enemyThreatGoals + return (this._enemyThreatCoords = enemyThreatCoords) + } - const enemyThreatGoals: PathGoal[] = [] + _enemyThreatGoals: PathGoal[] + /** + * + */ + get enemyThreatGoals() { + if (this._enemyThreatGoals) return this._enemyThreatGoals - for (const enemyCreep of this.enemyAttackers) { - if (enemyCreep.parts.ranged_attack) { - enemyThreatGoals.push({ - pos: enemyCreep.pos, - range: 4, - }) - continue - } + const enemyThreatGoals: PathGoal[] = [] - if (!enemyCreep.parts.attack) continue + for (const enemyCreep of this.enemyAttackers) { + if (enemyCreep.parts.ranged_attack) { + enemyThreatGoals.push({ + pos: enemyCreep.pos, + range: 4, + }) + continue + } - enemyThreatGoals.push({ - pos: enemyCreep.pos, - range: 2, - }) - } + if (!enemyCreep.parts.attack) continue - return (this._enemyThreatGoals = enemyThreatGoals) + enemyThreatGoals.push({ + pos: enemyCreep.pos, + range: 2, + }) } - /* + + return (this._enemyThreatGoals = enemyThreatGoals) + } + /* _flags: Partial<{ [key in FlagNames]: Flag }> get flags() { if (this._flags) return this._flags @@ -2210,260 +2161,259 @@ export class RoomManager { return (this._flags = flags) } */ - _resourcesInStoringStructures: Partial<{ [key in ResourceConstant]: number }> - get resourcesInStoringStructures() { - if (this._resourcesInStoringStructures) return this._resourcesInStoringStructures + _resourcesInStoringStructures: Partial<{ [key in ResourceConstant]: number }> + get resourcesInStoringStructures() { + if (this._resourcesInStoringStructures) return this._resourcesInStoringStructures - const resourcesInStoringStructures: Partial<{ [key in ResourceConstant]: number }> = {} + const resourcesInStoringStructures: Partial<{ [key in ResourceConstant]: number }> = {} - const storingStructures: AnyStoreStructure[] = [this.room.storage, this.factory] - if (this.room.terminal && !this.room.terminal.effectsData.get(PWR_DISRUPT_TERMINAL)) { - storingStructures.push(this.room.terminal) - } - - for (const structure of storingStructures) { - if (!structure) continue - if (!structureUtils.isRCLActionable(structure)) continue + const storingStructures: AnyStoreStructure[] = [this.room.storage, this.factory] + if (this.room.terminal && !this.room.terminal.effectsData.get(PWR_DISRUPT_TERMINAL)) { + storingStructures.push(this.room.terminal) + } - for (const key in structure.store) { - const resourceType = key as ResourceConstant + for (const structure of storingStructures) { + if (!structure) continue + if (!structureUtils.isRCLActionable(structure)) continue - if (!resourcesInStoringStructures[resourceType]) { - resourcesInStoringStructures[resourceType] = structure.store[resourceType] - continue - } + for (const key in structure.store) { + const resourceType = key as ResourceConstant - resourcesInStoringStructures[resourceType] += structure.store[resourceType] - } + if (!resourcesInStoringStructures[resourceType]) { + resourcesInStoringStructures[resourceType] = structure.store[resourceType] + continue } - return (this._resourcesInStoringStructures = resourcesInStoringStructures) + resourcesInStoringStructures[resourceType] += structure.store[resourceType] + } } - _unprotectedEnemyCreeps: Creep[] - get unprotectedEnemyCreeps() { - if (this._unprotectedEnemyCreeps) return this._unprotectedEnemyCreeps + return (this._resourcesInStoringStructures = resourcesInStoringStructures) + } - const unprotectedEnemyCreeps = this.notMyCreeps.enemy.filter(enemyCreep => { - return !this.room.findStructureAtCoord( - enemyCreep.pos, - structure => structure.structureType === STRUCTURE_RAMPART, - ) - }) + _unprotectedEnemyCreeps: Creep[] + get unprotectedEnemyCreeps() { + if (this._unprotectedEnemyCreeps) return this._unprotectedEnemyCreeps - return (this._unprotectedEnemyCreeps = unprotectedEnemyCreeps) - } + const unprotectedEnemyCreeps = this.notMyCreeps.enemy.filter(enemyCreep => { + return !this.room.findStructureAtCoord( + enemyCreep.pos, + structure => structure.structureType === STRUCTURE_RAMPART, + ) + }) - _exitCoords: Set - get exitCoords() { - if (this._exitCoords) return this._exitCoords + return (this._unprotectedEnemyCreeps = unprotectedEnemyCreeps) + } - const exitCoords = new Set() - const terrain = this.room.getTerrain() + _exitCoords: Set + get exitCoords() { + if (this._exitCoords) return this._exitCoords - let x - let y = 0 - for (x = 0; x < roomDimensions; x += 1) { - if (terrain.get(x, y) === TERRAIN_MASK_WALL) continue - exitCoords.add(packXYAsCoord(x, y)) - } + const exitCoords = new Set() + const terrain = this.room.getTerrain() - // Configure x and loop through left exits + let x + let y = 0 + for (x = 0; x < roomDimensions; x += 1) { + if (terrain.get(x, y) === TERRAIN_MASK_WALL) continue + exitCoords.add(packXYAsCoord(x, y)) + } - x = 0 - for (y = 0; y < roomDimensions; y += 1) { - if (terrain.get(x, y) === TERRAIN_MASK_WALL) continue - exitCoords.add(packXYAsCoord(x, y)) - } + // Configure x and loop through left exits - // Configure y and loop through bottom exits + x = 0 + for (y = 0; y < roomDimensions; y += 1) { + if (terrain.get(x, y) === TERRAIN_MASK_WALL) continue + exitCoords.add(packXYAsCoord(x, y)) + } - y = roomDimensions - 1 - for (x = 0; x < roomDimensions; x += 1) { - if (terrain.get(x, y) === TERRAIN_MASK_WALL) continue - exitCoords.add(packXYAsCoord(x, y)) - } + // Configure y and loop through bottom exits - // Configure x and loop through right exits + y = roomDimensions - 1 + for (x = 0; x < roomDimensions; x += 1) { + if (terrain.get(x, y) === TERRAIN_MASK_WALL) continue + exitCoords.add(packXYAsCoord(x, y)) + } - x = roomDimensions - 1 - for (y = 0; y < roomDimensions; y += 1) { - if (terrain.get(x, y) === TERRAIN_MASK_WALL) continue - exitCoords.add(packXYAsCoord(x, y)) - } + // Configure x and loop through right exits - return (this._exitCoords = exitCoords) + x = roomDimensions - 1 + for (y = 0; y < roomDimensions; y += 1) { + if (terrain.get(x, y) === TERRAIN_MASK_WALL) continue + exitCoords.add(packXYAsCoord(x, y)) } - _advancedLogistics: boolean - get advancedLogistics() { - if (this._advancedLogistics !== undefined) return this._advancedLogistics + return (this._exitCoords = exitCoords) + } - if (Memory.rooms[this.room.name][RoomMemoryKeys.type] === RoomTypes.remote) { - return (this._advancedLogistics = true) - } + _advancedLogistics: boolean + get advancedLogistics() { + if (this._advancedLogistics !== undefined) return this._advancedLogistics - this._advancedLogistics = !!( - this.fastFillerContainers.length || - (this.room.controller.level >= 4 && this.room.storage) || - (this.room.controller.level >= 6 && this.room.terminal) - ) - return this._advancedLogistics + if (Memory.rooms[this.room.name][RoomMemoryKeys.type] === RoomTypes.remote) { + return (this._advancedLogistics = true) } - _defaultCostMatrix: CostMatrix - get defaultCostMatrix() { - if (this._defaultCostMatrix) return this._defaultCostMatrix + this._advancedLogistics = !!( + this.fastFillerContainers.length || + (this.room.controller.level >= 4 && this.room.storage) || + (this.room.controller.level >= 6 && this.room.terminal) + ) + return this._advancedLogistics + } - const cm = new PathFinder.CostMatrix() + _defaultCostMatrix: CostMatrix + get defaultCostMatrix() { + if (this._defaultCostMatrix) return this._defaultCostMatrix - for (const road of this.structures.road) cm.set(road.pos.x, road.pos.y, 1) + const cm = new PathFinder.CostMatrix() - for (const [packedCoord, coordType] of this.reservedCoords) { - if (coordType !== ReservedCoordTypes.important) continue + for (const road of this.structures.road) cm.set(road.pos.x, road.pos.y, 1) - const coord = unpackCoord(packedCoord) - cm.set(coord.x, coord.y, 20) - } + for (const [packedCoord, coordType] of this.reservedCoords) { + if (coordType !== ReservedCoordTypes.important) continue - for (const portal of this.structures.portal) cm.set(portal.pos.x, portal.pos.y, 255) + const coord = unpackCoord(packedCoord) + cm.set(coord.x, coord.y, 20) + } - // Loop trough each construction site belonging to an ally + for (const portal of this.structures.portal) cm.set(portal.pos.x, portal.pos.y, 255) - for (const cSite of this.notMyConstructionSites.ally) cm.set(cSite.pos.x, cSite.pos.y, 255) + // Loop trough each construction site belonging to an ally - // The controller isn't in safemode or it isn't ours, avoid enemies + for (const cSite of this.notMyConstructionSites.ally) cm.set(cSite.pos.x, cSite.pos.y, 255) - const controller = this.room.controller + // The controller isn't in safemode or it isn't ours, avoid enemies - if (!controller || !controller.safeMode || !controller.my) { - for (const packedCoord of this.enemyThreatCoords) { - const coord = unpackCoord(packedCoord) - cm.set(coord.x, coord.y, 255) - } - } + const controller = this.room.controller - if (!controller || !controller.safeMode) { - for (const creep of this.notMyCreeps.enemy) cm.set(creep.pos.x, creep.pos.y, 255) - for (const creep of this.notMyCreeps.ally) cm.set(creep.pos.x, creep.pos.y, 255) + if (!controller || !controller.safeMode || !controller.my) { + for (const packedCoord of this.enemyThreatCoords) { + const coord = unpackCoord(packedCoord) + cm.set(coord.x, coord.y, 255) + } + } - for (const creep of this.room.find(FIND_HOSTILE_POWER_CREEPS)) - cm.set(creep.pos.x, creep.pos.y, 255) - } + if (!controller || !controller.safeMode) { + for (const creep of this.notMyCreeps.enemy) cm.set(creep.pos.x, creep.pos.y, 255) + for (const creep of this.notMyCreeps.ally) cm.set(creep.pos.x, creep.pos.y, 255) - for (const rampart of this.structures.rampart) { - // If the rampart is mine + for (const creep of this.room.find(FIND_HOSTILE_POWER_CREEPS)) + cm.set(creep.pos.x, creep.pos.y, 255) + } - if (rampart.my) continue + for (const rampart of this.structures.rampart) { + // If the rampart is mine - // If the rampart is public and owned by an ally - // We don't want to try to walk through enemy public ramparts as it could trick our pathing + if (rampart.my) continue - if (rampart.isPublic && global.settings.allies.includes(rampart.owner.username)) - continue + // If the rampart is public and owned by an ally + // We don't want to try to walk through enemy public ramparts as it could trick our pathing - // Otherwise set the rampart's pos as impassible + if (rampart.isPublic && global.settings.allies.includes(rampart.owner.username)) continue - cm.set(rampart.pos.x, rampart.pos.y, 255) - } + // Otherwise set the rampart's pos as impassible - // Loop through structureTypes of impassibleStructureTypes + cm.set(rampart.pos.x, rampart.pos.y, 255) + } - for (const structureType of impassibleStructureTypes) { - for (const structure of this.structures[structureType]) { - // Set pos as impassible + // Loop through structureTypes of impassibleStructureTypes - cm.set(structure.pos.x, structure.pos.y, 255) - } + for (const structureType of impassibleStructureTypes) { + for (const structure of this.structures[structureType]) { + // Set pos as impassible - for (const cSite of this.cSites[structureType]) { - // Set pos as impassible + cm.set(structure.pos.x, structure.pos.y, 255) + } - cm.set(cSite.pos.x, cSite.pos.y, 255) - } - } + for (const cSite of this.cSites[structureType]) { + // Set pos as impassible - /* this.global.defaultCostMatrix = cm.serialize() */ - return (this._defaultCostMatrix = cm.clone()) + cm.set(cSite.pos.x, cSite.pos.y, 255) + } } - _totalEnemyCombatStrength: TotalEnemyCombatStrength - get totalEnemyCombatStrength() { - if (this._totalEnemyCombatStrength) return this._totalEnemyCombatStrength + /* this.global.defaultCostMatrix = cm.serialize() */ + return (this._defaultCostMatrix = cm.clone()) + } - const totalEnemyCombatStrength: TotalEnemyCombatStrength = { - melee: 0, - ranged: 0, - heal: 0, - dismantle: 0, - } + _totalEnemyCombatStrength: TotalEnemyCombatStrength + get totalEnemyCombatStrength() { + if (this._totalEnemyCombatStrength) return this._totalEnemyCombatStrength - for (const enemyCreep of this.enemyAttackers) { - const combatStrength = enemyCreep.combatStrength - totalEnemyCombatStrength.melee += combatStrength.melee - totalEnemyCombatStrength.ranged += combatStrength.ranged - totalEnemyCombatStrength.heal += combatStrength.heal - totalEnemyCombatStrength.dismantle += combatStrength.dismantle - } + const totalEnemyCombatStrength: TotalEnemyCombatStrength = { + melee: 0, + ranged: 0, + heal: 0, + dismantle: 0, + } - return (this._totalEnemyCombatStrength = totalEnemyCombatStrength) + for (const enemyCreep of this.enemyAttackers) { + const combatStrength = enemyCreep.combatStrength + totalEnemyCombatStrength.melee += combatStrength.melee + totalEnemyCombatStrength.ranged += combatStrength.ranged + totalEnemyCombatStrength.heal += combatStrength.heal + totalEnemyCombatStrength.dismantle += combatStrength.dismantle } - _factory?: StructureFactory - get factory() { - if (this._factory !== undefined) return this._factory + return (this._totalEnemyCombatStrength = totalEnemyCombatStrength) + } - return (this._factory = this.structures.factory[0]) - } + _factory?: StructureFactory + get factory() { + if (this._factory !== undefined) return this._factory - _powerSpawn?: StructurePowerSpawn - get powerSpawn() { - if (this._powerSpawn !== undefined) return this._powerSpawn + return (this._factory = this.structures.factory[0]) + } - return (this._powerSpawn = this.structures.powerSpawn[0]) - } + _powerSpawn?: StructurePowerSpawn + get powerSpawn() { + if (this._powerSpawn !== undefined) return this._powerSpawn - _nuker?: StructureNuker - get nuker() { - if (this._nuker !== undefined) return this._nuker + return (this._powerSpawn = this.structures.powerSpawn[0]) + } - return (this._nuker = this.structures.nuker[0]) - } + _nuker?: StructureNuker + get nuker() { + if (this._nuker !== undefined) return this._nuker - _observer?: StructureObserver - get observer() { - if (this._observer !== undefined) return this._observer + return (this._nuker = this.structures.nuker[0]) + } - return (this._observer = this.structures.observer[0]) - } + _observer?: StructureObserver + get observer() { + if (this._observer !== undefined) return this._observer - _basePlans: BasePlans - /** - * cached unpacked base plans, if they exist - */ - get basePlans() { - if (this._basePlans !== undefined) return this._basePlans + return (this._observer = this.structures.observer[0]) + } - this._basePlans = BasePlans.unpack(Memory.rooms[this.room.name][RoomMemoryKeys.basePlans]) - return this._basePlans - } + _basePlans: BasePlans + /** + * cached unpacked base plans, if they exist + */ + get basePlans() { + if (this._basePlans !== undefined) return this._basePlans - _rampartPlans: RampartPlans - /** - * cached unoacked rampart plans, if they exist - */ - get rampartPlans() { - if (this._rampartPlans !== undefined) return this._rampartPlans + this._basePlans = BasePlans.unpack(Memory.rooms[this.room.name][RoomMemoryKeys.basePlans]) + return this._basePlans + } - this._rampartPlans = RampartPlans.unpack( - Memory.rooms[this.room.name][RoomMemoryKeys.rampartPlans], - ) - return this._rampartPlans - } + _rampartPlans: RampartPlans + /** + * cached unoacked rampart plans, if they exist + */ + get rampartPlans() { + if (this._rampartPlans !== undefined) return this._rampartPlans - visualizePosHavers(posHavers: { pos: Coord }[]) { - for (const structure of posHavers) { - this.room.coordVisual(structure.pos.x, structure.pos.y) - } + this._rampartPlans = RampartPlans.unpack( + Memory.rooms[this.room.name][RoomMemoryKeys.rampartPlans], + ) + return this._rampartPlans + } + + visualizePosHavers(posHavers: { pos: Coord }[]) { + for (const structure of posHavers) { + this.room.coordVisual(structure.pos.x, structure.pos.y) } + } } diff --git a/src/room/roomNameUtils.ts b/src/room/roomNameUtils.ts index 965d74a8e..4ecd49c5c 100644 --- a/src/room/roomNameUtils.ts +++ b/src/room/roomNameUtils.ts @@ -36,289 +36,295 @@ type FloodForCoordCheck = ( ) => boolean | Result.stop export class RoomNameUtils { - abandonRemote(roomName: string, time: number) { - const roomMemory = Memory.rooms[roomName] - - if (roomMemory[RoomMemoryKeys.abandonRemote] >= time) return + abandonRemote(roomName: string, time: number) { + const roomMemory = Memory.rooms[roomName] + + if (roomMemory[RoomMemoryKeys.abandonRemote] >= time) return + + roomMemory[RoomMemoryKeys.abandonRemote] = time + delete roomMemory[RoomMemoryKeys.recursedAbandonment] + } + findDynamicScore(roomName: string) { + let dynamicScore = 0 + + let closestEnemy = 0 + let communeScore = 0 + let allyScore = 0 + + const roomCoord = this.pack(roomName) + forRoomNamesAroundRangeXY(roomCoord.x, roomCoord.y, dynamicScoreRoomRange, (x, y) => { + const searchRoomName = this.unpackXY(x, y) + const searchRoomMemory = Memory.rooms[searchRoomName] + if (!searchRoomMemory) return + + if (searchRoomMemory[RoomMemoryKeys.type] === RoomTypes.enemy) { + const score = this.advancedFindDistance(roomName, searchRoomName) + if (score <= closestEnemy) return + + closestEnemy = score + return + } + + if (searchRoomMemory[RoomMemoryKeys.type] === RoomTypes.commune) { + const searchRoom = Game.rooms[searchRoomName] + if (!searchRoom) return + + const score = + Math.pow( + Math.abs(this.advancedFindDistance(roomName, searchRoomName) - preferredCommuneRange), + 1.8, + ) + + (maxControllerLevel - searchRoom.controller.level) + if (score <= communeScore) return + + communeScore = score + return + } + + if (searchRoomMemory[RoomMemoryKeys.type] === RoomTypes.ally) { + const score = + Math.pow( + Math.abs(this.advancedFindDistance(roomName, searchRoomName) - preferredCommuneRange), + 1.5, + ) + + (searchRoomMemory[RoomMemoryKeys.RCL] || 0) * 0.3 + if (score <= allyScore) return + + allyScore = score + return + } + }) + + if (closestEnemy > 0) dynamicScore += Math.round(Math.pow(closestEnemy, -0.8) * 25) + dynamicScore += Math.round(communeScore * 50) + dynamicScore += allyScore + + // Prefer minerals with below average communes + + const roomMemory = Memory.rooms[roomName] + const mineralType = roomMemory[RoomMemoryKeys.mineralType] + const mineralScore = + collectiveManager.mineralNodes[mineralType] - collectiveManager.avgCommunesPerMineral + dynamicScore += mineralScore * 40 + + dynamicScore = roundTo(dynamicScore, 2) + /* customLog('Dynamic scores', `enemy ${closestEnemy} commune ${communeScore} ally ${allyScore} mineralScore ${mineralScore} val1 ${Math.round(Math.pow(closestEnemy, -0.8) * 25)} val2 ${Math.round(communeScore * 50)} val3 ${mineralScore * 40} val4 ${dynamicScore}`) */ + roomMemory[RoomMemoryKeys.dynamicScore] = dynamicScore + roomMemory[RoomMemoryKeys.dynamicScoreUpdate] = Game.time + + return dynamicScore + } + floodFillFor(roomName: string, seeds: Coord[], coordCheck: FloodForCoordCheck) { + const visitedCoords = new Uint8Array(2500) + + let depth = 0 + let thisGeneration = seeds + let nextGeneration: Coord[] = [] + + // Record seeds as visited + for (const coord of seeds) visitedCoords[packAsNum(coord)] = 1 + + while (thisGeneration.length) { + // Reset next gen + nextGeneration = [] + + for (const coord of thisGeneration) { + // Try to flood to adjacent coords + for (const adjacentCoord of findAdjacentCoordsToCoord(coord)) { + const packedAdjacentCoord = packAsNum(adjacentCoord) + // Make sure we haven't visited this coord before + if (visitedCoords[packedAdjacentCoord]) continue + + visitedCoords[packedAdjacentCoord] = 1 + + // Custom check for the coord + const checkResult = coordCheck(adjacentCoord, packedAdjacentCoord, depth) + if (checkResult === Result.stop) return adjacentCoord + if (!checkResult) continue + + nextGeneration.push(adjacentCoord) + } + } - roomMemory[RoomMemoryKeys.abandonRemote] = time - delete roomMemory[RoomMemoryKeys.recursedAbandonment] + // Set this gen to next gen + thisGeneration = nextGeneration + depth += 1 } - findDynamicScore(roomName: string) { - let dynamicScore = 0 - - let closestEnemy = 0 - let communeScore = 0 - let allyScore = 0 - - const roomCoord = this.pack(roomName) - forRoomNamesAroundRangeXY(roomCoord.x, roomCoord.y, dynamicScoreRoomRange, (x, y) => { - const searchRoomName = this.unpackXY(x, y) - const searchRoomMemory = Memory.rooms[searchRoomName] - if (!searchRoomMemory) return - - if (searchRoomMemory[RoomMemoryKeys.type] === RoomTypes.enemy) { - const score = this.advancedFindDistance(roomName, searchRoomName) - if (score <= closestEnemy) return - - closestEnemy = score - return - } - - if (searchRoomMemory[RoomMemoryKeys.type] === RoomTypes.commune) { - const searchRoom = Game.rooms[searchRoomName] - if (!searchRoom) return - - const score = - Math.pow( - Math.abs( - this.advancedFindDistance(roomName, searchRoomName) - preferredCommuneRange, - ), - 1.8, - ) + - (maxControllerLevel - searchRoom.controller.level) - if (score <= communeScore) return - - communeScore = score - return - } - - if (searchRoomMemory[RoomMemoryKeys.type] === RoomTypes.ally) { - const score = - Math.pow( - Math.abs( - this.advancedFindDistance(roomName, searchRoomName) - preferredCommuneRange, - ), - 1.5, - ) + - (searchRoomMemory[RoomMemoryKeys.RCL] || 0) * 0.3 - if (score <= allyScore) return - - allyScore = score - return - } - }) - - if (closestEnemy > 0) dynamicScore += Math.round(Math.pow(closestEnemy, -0.8) * 25) - dynamicScore += Math.round(communeScore * 50) - dynamicScore += allyScore - - // Prefer minerals with below average communes - - const roomMemory = Memory.rooms[roomName] - const mineralType = roomMemory[RoomMemoryKeys.mineralType] - const mineralScore = - collectiveManager.mineralNodes[mineralType] - collectiveManager.avgCommunesPerMineral - dynamicScore += mineralScore * 40 - dynamicScore = roundTo(dynamicScore, 2) - /* customLog('Dynamic scores', `enemy ${closestEnemy} commune ${communeScore} ally ${allyScore} mineralScore ${mineralScore} val1 ${Math.round(Math.pow(closestEnemy, -0.8) * 25)} val2 ${Math.round(communeScore * 50)} val3 ${mineralScore * 40} val4 ${dynamicScore}`) */ - roomMemory[RoomMemoryKeys.dynamicScore] = dynamicScore - roomMemory[RoomMemoryKeys.dynamicScoreUpdate] = Game.time + return false + } + floodFillCardinalFor() {} + isSourceSpawningStructure(roomName: string, structure: StructureExtension | StructureSpawn) { + const packedSourceHarvestPositions = + Memory.rooms[roomName][RoomMemoryKeys.communeSourceHarvestPositions] + for (const i in packedSourceHarvestPositions) { + const closestHarvestPos = unpackPosAt(packedSourceHarvestPositions[i], 0) - return dynamicScore + if (getRange(structure.pos, closestHarvestPos) <= 1) return true } - floodFillFor(roomName: string, seeds: Coord[], coordCheck: FloodForCoordCheck) { - const visitedCoords = new Uint8Array(2500) - let depth = 0 - let thisGeneration = seeds - let nextGeneration: Coord[] = [] + return false + } + /** + * Removes roomType-based values in the room's memory that don't match its type + */ + cleanMemory(roomName: string) { + const roomMemory = Memory.rooms[roomName] + for (const key in roomMemory) { + // Make sure key is a type-specific key + if (!roomTypeProperties.has(key as unknown as keyof RoomMemory)) continue + + // Make sure key is related to the roomType + if (roomTypes[roomMemory[RoomMemoryKeys.type]].has(key as unknown as keyof RoomMemory)) + continue + + delete roomMemory[key as unknown as keyof RoomMemory] + } + } + /** + * Finds the name of the closest commune, exluding the specified roomName + */ + findClosestCommuneName(roomName: string) { + const communesNotThis = [] - // Record seeds as visited - for (const coord of seeds) visitedCoords[packAsNum(coord)] = 1 + for (const communeName of collectiveManager.communes) { + if (roomName == communeName) continue - while (thisGeneration.length) { - // Reset next gen - nextGeneration = [] + communesNotThis.push(communeName) + } - for (const coord of thisGeneration) { - // Try to flood to adjacent coords - for (const adjacentCoord of findAdjacentCoordsToCoord(coord)) { - const packedAdjacentCoord = packAsNum(adjacentCoord) - // Make sure we haven't visited this coord before - if (visitedCoords[packedAdjacentCoord]) continue + return communesNotThis.sort( + (a, b) => + Game.map.getRoomLinearDistance(roomName, a) - Game.map.getRoomLinearDistance(roomName, b), + )[0] + } + findClosestClaimType(roomName: string) { + return Array.from(collectiveManager.communes).sort( + (a, b) => + Game.map.getRoomLinearDistance(roomName, a) - Game.map.getRoomLinearDistance(roomName, b), + )[0] + } + updateCreepsOfRemoteName(remoteName: string, communeManager: CommuneManager) { + const remoteMemory = Memory.rooms[remoteName] + + communeManager.room.creepsOfRemote[remoteName] = {} + for (const role of remoteRoles) { + communeManager.room.creepsOfRemote[remoteName][role] = [] + } - visitedCoords[packedAdjacentCoord] = 1 + communeManager.remoteSourceHarvesters[remoteName] = [] + for (const index in remoteMemory[RoomMemoryKeys.remoteSources]) { + communeManager.remoteSourceHarvesters[remoteName].push([]) + } + } + diagonalCoords(roomName: string, commune: Room) { + const anchor = commune.roomManager.anchor + if (!anchor) throw Error('no anchor for room: ' + roomName) - // Custom check for the coord - const checkResult = coordCheck(adjacentCoord, packedAdjacentCoord, depth) - if (checkResult === Result.stop) return adjacentCoord - if (!checkResult) continue + const diagonalCoords = new Uint8Array(2500) + const terrain = Game.map.getRoomTerrain(roomName) - nextGeneration.push(adjacentCoord) - } - } + for (let x = 0; x < roomDimensions; x++) { + for (let y = 0; y < roomDimensions; y++) { + if (terrain.get(x, y) === TERRAIN_MASK_WALL) continue - // Set this gen to next gen - thisGeneration = nextGeneration - depth += 1 - } + // Calculate the position of the cell relative to the anchor - return false - } - floodFillCardinalFor() {} - isSourceSpawningStructure(roomName: string, structure: StructureExtension | StructureSpawn) { - const packedSourceHarvestPositions = - Memory.rooms[roomName][RoomMemoryKeys.communeSourceHarvestPositions] - for (const i in packedSourceHarvestPositions) { - const closestHarvestPos = unpackPosAt(packedSourceHarvestPositions[i], 0) - - if (getRange(structure.pos, closestHarvestPos) <= 1) return true - } + const relX = x - anchor.x + const relY = y - anchor.y - return false - } - /** - * Removes roomType-based values in the room's memory that don't match its type - */ - cleanMemory(roomName: string) { - const roomMemory = Memory.rooms[roomName] - for (const key in roomMemory) { - // Make sure key is a type-specific key - if (!roomTypeProperties.has(key as unknown as keyof RoomMemory)) continue + // Check if the cell is part of a diagonal line + if (Math.abs(relX - 3 * relY) % 2 !== 0 && Math.abs(relX + 3 * relY) % 2 !== 0) continue - // Make sure key is related to the roomType - if (roomTypes[roomMemory[RoomMemoryKeys.type]].has(key as unknown as keyof RoomMemory)) - continue + const packedCoord = packXYAsNum(x, y) - delete roomMemory[key as unknown as keyof RoomMemory] + if (terrain.get(x, y) === TERRAIN_MASK_SWAMP) { + diagonalCoords[packedCoord] = 3 * defaultSwampCost + continue } + diagonalCoords[packedCoord] = 4 + } } - /** - * Finds the name of the closest commune, exluding the specified roomName - */ - findClosestCommuneName(roomName: string) { - const communesNotThis = [] - for (const communeName of collectiveManager.communes) { - if (roomName == communeName) continue + return diagonalCoords + } + pack(roomName: string) { + // Find the numbers in the room's name - communesNotThis.push(communeName) - } + let [name, cx, x, cy, y] = roomName.match(/^([WE])([0-9]+)([NS])([0-9]+)$/) - return communesNotThis.sort( - (a, b) => - Game.map.getRoomLinearDistance(roomName, a) - - Game.map.getRoomLinearDistance(roomName, b), - )[0] + return { + x: cx === 'W' ? ~x : parseInt(x), + y: cy === 'S' ? ~y : parseInt(y), } - findClosestClaimType(roomName: string) { - return Array.from(collectiveManager.communes).sort( - (a, b) => - Game.map.getRoomLinearDistance(roomName, a) - - Game.map.getRoomLinearDistance(roomName, b), - )[0] - } - updateCreepsOfRemoteName(remoteName: string, communeManager: CommuneManager) { - - const remoteMemory = Memory.rooms[remoteName] + } + + unpackXY(x: number, y: number) { + return ( + (x < 0 ? 'W' + String(~x) : 'E' + String(x)) + (y < 0 ? 'S' + String(~y) : 'N' + String(y)) + ) + } + + unpack(roomCoord: RoomCoord) { + return this.unpackXY(roomCoord.x, roomCoord.y) + } + /** + * Finds the distance between two rooms based on walkable exits while avoiding rooms with specified types + */ + advancedFindDistance( + originRoomName: string, + goalRoomName: string, + opts: { + typeWeights?: { [key: string]: number } + avoidDanger?: boolean + } = {}, + ) { + // Try to find a route from the origin room to the goal room + + const findRouteResult = Game.map.findRoute(originRoomName, goalRoomName, { + routeCallback(roomName) { + // If the goal is in the room + if (roomName === goalRoomName) return 1 - communeManager.room.creepsOfRemote[remoteName] = {} - for (const role of remoteRoles) { - communeManager.room.creepsOfRemote[remoteName][role] = [] - } + const roomMemory = Memory.rooms[roomName] + if (!roomMemory) return 10 - communeManager.remoteSourceHarvesters[remoteName] = [] - for (const index in remoteMemory[RoomMemoryKeys.remoteSources]) { - communeManager.remoteSourceHarvesters[remoteName].push([]) + if (opts.avoidDanger && roomMemory[RoomMemoryKeys.type] === RoomTypes.remote) { + if (roomMemory[RoomMemoryKeys.abandonRemote]) { + return 10 + } } - } - diagonalCoords(roomName: string, commune: Room) { - - const anchor = commune.roomManager.anchor - if (!anchor) throw Error('no anchor for room: ' + roomName) - - const diagonalCoords = new Uint8Array(2500) - const terrain = Game.map.getRoomTerrain(roomName) - for (let x = 0; x < roomDimensions; x++) { - for (let y = 0; y < roomDimensions; y++) { - if (terrain.get(x, y) === TERRAIN_MASK_WALL) continue + // If the type is in typeWeights, inform the weight for the type + if (opts.typeWeights && opts.typeWeights[roomMemory[RoomMemoryKeys.type]]) + return opts.typeWeights[roomMemory[RoomMemoryKeys.type]] - // Calculate the position of the cell relative to the anchor + return 1 + }, + }) - const relX = x - anchor.x - const relY = y - anchor.y + // If findRouteResult didn't work, inform a path length of Infinity - // Check if the cell is part of a diagonal line - if (Math.abs(relX - 3 * relY) % 2 !== 0 && Math.abs(relX + 3 * relY) % 2 !== 0) - continue + if (findRouteResult === ERR_NO_PATH) return Infinity - const packedCoord = packXYAsNum(x, y) + return findRouteResult.length + } - if (terrain.get(x, y) === TERRAIN_MASK_SWAMP) { - diagonalCoords[packedCoord] = 3 * defaultSwampCost - continue - } - diagonalCoords[packedCoord] = 4 - } - } + findClosestRoomName(roomName: string, targetRoomNames: Iterable) { + let minRange = Infinity + let closest = undefined - return diagonalCoords - } - pack(roomName: string) { - // Find the numbers in the room's name + for (const targetRoomName of targetRoomNames) { + const range = Game.map.getRoomLinearDistance(roomName, targetRoomName) - let [name, cx, x, cy, y] = roomName.match(/^([WE])([0-9]+)([NS])([0-9]+)$/) + if (range > minRange) continue - return { - x: cx === 'W' ? ~x : parseInt(x), - y: cy === 'S' ? ~y : parseInt(y), - } + minRange = range + closest = targetRoomName } - unpackXY(x: number, y: number) { - return ( - (x < 0 ? 'W' + String(~x) : 'E' + String(x)) + (y < 0 ? 'S' + String(~y) : 'N' + String(y)) - ) - } - - unpack(roomCoord: RoomCoord) { - return this.unpackXY(roomCoord.x, roomCoord.y) - } - /** - * Finds the distance between two rooms based on walkable exits while avoiding rooms with specified types - */ - advancedFindDistance( - originRoomName: string, - goalRoomName: string, - opts: { - typeWeights?: { [key: string]: number } - avoidDanger?: boolean - } = {}, - ) { - // Try to find a route from the origin room to the goal room - - const findRouteResult = Game.map.findRoute(originRoomName, goalRoomName, { - routeCallback(roomName) { - - // If the goal is in the room - if (roomName === goalRoomName) return 1 - - const roomMemory = Memory.rooms[roomName] - if (!roomMemory) return 10 - - if (opts.avoidDanger && roomMemory[RoomMemoryKeys.type] === RoomTypes.remote) { - if (roomMemory[RoomMemoryKeys.abandonRemote]) { - return 10 - } - } - - // If the type is in typeWeights, inform the weight for the type - if (opts.typeWeights && opts.typeWeights[roomMemory[RoomMemoryKeys.type]]) - return opts.typeWeights[roomMemory[RoomMemoryKeys.type]] - - return 1 - }, - }) - - // If findRouteResult didn't work, inform a path length of Infinity - - if (findRouteResult === ERR_NO_PATH) return Infinity - - return findRouteResult.length - } + return closest + } } export const roomNameUtils = new RoomNameUtils() diff --git a/src/room/ruins.ts b/src/room/ruins.ts deleted file mode 100644 index 0e97c7273..000000000 --- a/src/room/ruins.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { customLog } from 'utils/logging' -import { scalePriority } from 'utils/utils' -import { RoomManager } from 'room/room' -import { RoomLogisticsRequestTypes } from 'international/constants' - -export class RuinsManager { - roomManager: RoomManager - - constructor(roomManager: RoomManager) { - this.roomManager = roomManager - } - - runCommune() { - for (const ruin of this.roomManager.room.find(FIND_RUINS)) { - for (const key in ruin.reserveStore) { - const resourceType = key as ResourceConstant - const amount = ruin.reserveStore[resourceType] - if (amount < 50) continue - - this.roomManager.room.createRoomLogisticsRequest({ - target: ruin, - resourceType: resourceType, - type: RoomLogisticsRequestTypes.withdraw, - priority: Math.max(5, 20 - amount / 200), - }) - } - } - } - - runRemote() { - const resourceType = RESOURCE_ENERGY - - for (const ruin of this.roomManager.room.find(FIND_RUINS)) { - const amount = ruin.reserveStore[resourceType] - if (amount < 50) continue - - this.roomManager.room.createRoomLogisticsRequest({ - target: ruin, - resourceType: resourceType, - type: RoomLogisticsRequestTypes.withdraw, - priority: Math.max(5, 20 - amount / 200), - }) - } - } -} diff --git a/src/room/tombstones.ts b/src/room/tombstones.ts deleted file mode 100644 index c062e3cab..000000000 --- a/src/room/tombstones.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { customLog } from 'utils/logging' -import { scalePriority } from 'utils/utils' -import { RoomManager } from 'room/room' -import { RoomLogisticsRequestTypes } from 'international/constants' - -export class TombstoneManager { - roomManager: RoomManager - - constructor(roomManager: RoomManager) { - this.roomManager = roomManager - } - - runCommune() { - for (const tombstone of this.roomManager.room.find(FIND_TOMBSTONES)) { - for (const key in tombstone.reserveStore) { - const resourceType = key as ResourceConstant - const amount = tombstone.reserveStore[resourceType] - if (amount < 50) continue - - this.roomManager.room.createRoomLogisticsRequest({ - target: tombstone, - resourceType: resourceType, - type: RoomLogisticsRequestTypes.withdraw, - priority: Math.max(5, 20 - amount / 200), - }) - } - } - } - - runRemote() { - const resourceType = RESOURCE_ENERGY - - for (const tombstone of this.roomManager.room.find(FIND_TOMBSTONES)) { - const amount = tombstone.reserveStore[resourceType] - if (amount < 50) continue - - this.roomManager.room.createRoomLogisticsRequest({ - target: tombstone, - resourceType: resourceType, - type: RoomLogisticsRequestTypes.withdraw, - priority: Math.max(5, 20 - amount / 200), - }) - } - } -} diff --git a/src/types.d.ts b/src/types.d.ts index 15e5f7a02..59d0a0eda 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -24,6 +24,8 @@ import { PowerCreepTasks, RoomLogisticsRequestTypes, MovedTypes, + RoomStatsKeys, + RoomStatusKeys, } from 'international/constants' import { Operator } from 'room/creeps/powerCreeps/operator' import { MeleeDefender } from 'room/creeps/roleManagers/commune/defenders/meleeDefender' @@ -1217,6 +1219,7 @@ declare global { [RoomMemoryKeys.type]: RoomTypes [RoomMemoryKeys.lastScout]: number [RoomMemoryKeys.danger]?: number + [RoomMemoryKeys.status]: RoomStatusKeys /*** * The destination roomNames of each portal */ diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 9ebe83a18..169359bbc 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -406,22 +406,6 @@ export function findCreepInQueueMatchingRequest(queue: string[], requestPackedPo return undefined } -export function findClosestRoomName(start: string, targets: Iterable) { - let minRange = Infinity - let closest = undefined - - for (const target of targets) { - const range = Game.map.getRoomLinearDistance(start, target) - - if (range > minRange) continue - - minRange = range - closest = target - } - - return closest -} - /** * Generatesa a random integer between two thresholds */ From c4a910412bb82383bb2b64564fe065ccedea1713 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 13 Jan 2024 21:07:55 -0800 Subject: [PATCH 077/190] source procs, utils --- src/other/profilerRegister.ts | 8 ++++---- src/room/commune/commune.ts | 6 ++---- src/room/commune/sourceManager.ts | 24 ------------------------ src/room/sourceProcs.ts | 14 ++++++++++++++ src/room/sourceUtils.ts | 5 +++++ 5 files changed, 25 insertions(+), 32 deletions(-) delete mode 100644 src/room/commune/sourceManager.ts create mode 100644 src/room/sourceProcs.ts create mode 100644 src/room/sourceUtils.ts diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index 319c47236..1e824b5cf 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -11,7 +11,6 @@ import { ConstructionManager } from 'room/construction/construction' import { ObserverManager } from 'room/commune/observer' import { RemotesManager } from 'room/commune/remotesManager' import { HaulRequestManager } from 'room/commune/haulRequestManager' -import { SourceManager } from 'room/commune/sourceManager' import { WorkRequestManager } from 'room/commune/workRequest' import { Quad } from 'room/creeps/roleManagers/antifa/quad' import { DynamicSquad } from 'room/creeps/roleManagers/antifa/dynamicSquad' @@ -37,7 +36,6 @@ import { PowerCreepOrganizer } from 'international/powerCreepOrganizer' import { HaulerNeedManager } from 'room/commune/haulerNeed' import { LinkManager } from 'room/commune/links' import { StoringStructuresManager } from 'room/commune/storingStructures' -import { TowerManager } from 'room/commune/towers' import { DefenceManager } from 'room/commune/defence' import { PowerSpawnsManager } from 'room/commune/powerSpawn' import { NukerManager } from 'room/commune/nuker' @@ -105,6 +103,8 @@ import { LogisticsProcs } from 'room/logisticsProcs' import { LogisticsUtils } from 'room/logisticsUtils' import { TowerProcs } from 'room/commune/towerProcs' import { TowerUtils } from 'room/commune/towerUtils' +import { SourceProcs } from 'room/sourceProcs' +import { SourceUtils } from 'room/sourceUtils' export function profilerRegister() { // Classes @@ -149,13 +149,11 @@ export function profilerRegister() { profiler.registerClass(ObserverManager, 'ObserverManager') profiler.registerClass(RemotesManager, 'RemotesManager') profiler.registerClass(HaulRequestManager, 'HaulRequestManager') - profiler.registerClass(SourceManager, 'SourceManager') profiler.registerClass(WorkRequestManager, 'WorkRequestManager') profiler.registerClass(EndTickCreepManager, 'EndTickCreepManager') profiler.registerClass(HaulerNeedManager, 'HaulerNeedManager') profiler.registerClass(LinkManager, 'LinkManager') profiler.registerClass(StoringStructuresManager, 'StoringStructuresManager') - profiler.registerClass(TowerManager, 'TowerManager') profiler.registerClass(DefenceManager, 'DefenceManager') profiler.registerClass(PowerSpawnsManager, 'PowerSpawnsManager') profiler.registerClass(NukerManager, 'NukerManager') @@ -178,6 +176,8 @@ export function profilerRegister() { profiler.registerClass(LogisticsUtils, 'LogisticsUtils') profiler.registerClass(TowerProcs, 'TowerProcs') profiler.registerClass(TowerUtils, 'TowerUtils') + profiler.registerClass(SourceProcs, 'SourceProcs') + profiler.registerClass(SourceUtils, 'SourceUtils') // Creep classes diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index 1be5bcaea..b865ce5d3 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -34,7 +34,6 @@ import { WorkRequestManager } from './workRequest' import { CombatRequestManager } from './combatRequest' import { PowerSpawnsManager } from './powerSpawn' import './haulerSize' -import { SourceManager } from './sourceManager' import { DefenceManager } from './defence' import { SpawningStructuresManager } from './spawning/spawningStructures' import { HaulRequestManager } from './haulRequestManager' @@ -58,6 +57,7 @@ import { communeProcs } from './communeProcs' import { structureUtils } from 'room/structureUtils' import { logisticsProcs } from 'room/logisticsProcs' import { towerProcs } from './towerProcs' +import { sourceProcs } from 'room/sourceProcs' export type ResourceTargets = { min: Partial<{ [key in ResourceConstant]: number }> @@ -78,7 +78,6 @@ export class CommuneManager { powerSpawningStructuresManager: PowerSpawnsManager spawnRequestsManager: SpawnRequestsManager spawningStructuresManager: SpawningStructuresManager - sourceManager: SourceManager observerManager: ObserverManager terminalManager: TerminalManager @@ -128,7 +127,6 @@ export class CommuneManager { this.powerSpawningStructuresManager = new PowerSpawnsManager(this) this.spawnRequestsManager = new SpawnRequestsManager(this) this.spawningStructuresManager = new SpawningStructuresManager(this) - this.sourceManager = new SourceManager(this) this.observerManager = new ObserverManager(this) this.terminalManager = new TerminalManager(this) @@ -283,7 +281,7 @@ export class CommuneManager { this.combatRequestManager.run() this.haulRequestManager.run() - this.sourceManager.run() + sourceProcs.createPowerTasks(this.room) this.remotesManager.run() this.haulerNeedManager.run() diff --git a/src/room/commune/sourceManager.ts b/src/room/commune/sourceManager.ts deleted file mode 100644 index 7ab234b1b..000000000 --- a/src/room/commune/sourceManager.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { customLog } from 'utils/logging' -import { CommuneManager } from './commune' -import { roomUtils } from 'room/roomUtils' - -export class SourceManager { - communeManager: CommuneManager - - constructor(communeManager: CommuneManager) { - this.communeManager = communeManager - } - - run() { - this.createPowerTasks() - } - - private createPowerTasks() { - if (!this.communeManager.room.myPowerCreeps.length) return - - const sources = roomUtils.getSources(this.communeManager.room) - for (const source of sources) { - this.communeManager.room.createPowerTask(source, PWR_REGEN_SOURCE, 10) - } - } -} diff --git a/src/room/sourceProcs.ts b/src/room/sourceProcs.ts new file mode 100644 index 000000000..6407773bd --- /dev/null +++ b/src/room/sourceProcs.ts @@ -0,0 +1,14 @@ +import { roomUtils } from 'room/roomUtils' + +export class SourceProcs { + createPowerTasks(room: Room) { + if (!room.myPowerCreeps.length) return + + const sources = roomUtils.getSources(room) + for (const source of sources) { + room.createPowerTask(source, PWR_REGEN_SOURCE, 10) + } + } +} + +export const sourceProcs = new SourceProcs() diff --git a/src/room/sourceUtils.ts b/src/room/sourceUtils.ts new file mode 100644 index 000000000..9bf9de019 --- /dev/null +++ b/src/room/sourceUtils.ts @@ -0,0 +1,5 @@ +export class SourceUtils { + +} + +export const sourceUtils = new SourceUtils() From f150b63b10b5c053f737843d159d8773d3cccfdf Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 13 Jan 2024 21:36:23 -0800 Subject: [PATCH 078/190] (breaking) data manager optimizations recording of sourceCoords and controllerCoord in room memory --- src/international/constants.ts | 4 +- src/international/creepOrganizer.ts | 2 +- src/main.ts | 87 +- src/room/commune/communeData.ts | 18 +- src/room/creeps/creepData.ts | 18 +- src/room/creeps/myCreepUtils.ts | 27 +- src/room/roomData.ts | 26 +- src/room/roomFunctions.ts | 2118 +++++++++++++-------------- src/room/roomNameUtils.ts | 31 + src/settingsDefault.ts | 2 +- src/types.d.ts | 4 +- 11 files changed, 1169 insertions(+), 1168 deletions(-) diff --git a/src/international/constants.ts b/src/international/constants.ts index dc1637c18..945187529 100644 --- a/src/international/constants.ts +++ b/src/international/constants.ts @@ -236,7 +236,6 @@ export enum RoomMemoryKeys { * Tells (mostly civilians) if the room is safe (non-undefined number) and what tick it will refresh */ danger, - portalsTo, status, // Types specific @@ -269,6 +268,9 @@ export enum RoomMemoryKeys { dynamicScore, dynamicScoreUpdate, communePlanned, + portalsTo, + sourceCoords, + controllerCoord, // Commune diff --git a/src/international/creepOrganizer.ts b/src/international/creepOrganizer.ts index 310cff02a..29a3c3784 100644 --- a/src/international/creepOrganizer.ts +++ b/src/international/creepOrganizer.ts @@ -76,7 +76,7 @@ export class CreepOrganizer { } // initialize inter-tick data for the creep if it isn't already - creepDataManager.creepsData[creep.name] ??= {} + creepDataManager.data[creep.name] ??= {} creep.update() diff --git a/src/main.ts b/src/main.ts index 31fe31f72..1ee9e0dfc 100644 --- a/src/main.ts +++ b/src/main.ts @@ -37,60 +37,61 @@ import { creepDataManager } from 'room/creeps/creepData' import { roomDataManager } from 'room/roomData' import { utils } from 'utils/utils' import { procs } from 'utils/procs' +import { communeDataManager } from 'room/commune/communeData' export function originalLoop() { + memHack.run() + if (segmentsManager.run() === Result.stop) return - memHack.run() - if (segmentsManager.run() === Result.stop) return + if (Game.flags.deactivate) return + if (Game.cpu.bucket < CPUMaxPerTick) { + procs.outOfBucket() + return + } + if (global.userScript) global.userScript.initialRun() - if (Game.flags.deactivate) return - if (Game.cpu.bucket < CPUMaxPerTick) { - procs.outOfBucket() - return - } - if (global.userScript) global.userScript.initialRun() + profiler.wrap((): void => { + migrationManager.run() + respawnManager.run() + initManager.run() - profiler.wrap((): void => { - migrationManager.run() - respawnManager.run() - initManager.run() + tickInit.configGeneral() + statsManager.tickInit() + collectiveManager.update() + simpleAllies.initRun() + wasm.collaborator() - tickInit.configGeneral() - statsManager.tickInit() - collectiveManager.update() - simpleAllies.initRun() - wasm.collaborator() + roomsManager.updateRun() + roomDataManager.initRooms() + roomDataManager.updateRooms() + transactionsManager.run() + requestsManager.run() - roomDataManager.updateRooms() - roomsManager.updateRun() - transactionsManager.run() - requestsManager.run() + if (global.collectivizer) global.collectivizer.run() + if (global.userScript) global.userScript.run() + playerManager.run() + roomsManager.initRun() + creepOrganizer.run() + creepDataManager.updateCreeps() + powerCreepOrganizer.run() - if (global.collectivizer) global.collectivizer.run() - if (global.userScript) global.userScript.run() - playerManager.run() - roomsManager.initRun() - creepOrganizer.run() - creepDataManager.updateData() - powerCreepOrganizer.run() + roomPruningManager.run() + flagManager.run() + constructionSiteManager.run() + marketManager.run() - roomPruningManager.run() - flagManager.run() - constructionSiteManager.run() - marketManager.run() + roomsManager.run() - roomsManager.run() + mapVisualsManager.run() + simpleAllies.endRun() + marketManager.advancedSellPixels() + if (global.userScript) global.userScript.endRun() + statsManager.internationalEndRun() - mapVisualsManager.run() - simpleAllies.endRun() - marketManager.advancedSellPixels() - if (global.userScript) global.userScript.endRun() - statsManager.internationalEndRun() + collectiveManager.advancedGeneratePixel() - collectiveManager.advancedGeneratePixel() - - segmentsManager.endRun() - endTickManager.run() - }) + segmentsManager.endRun() + endTickManager.run() + }) } export const loop = ErrorMapper.wrapLoop(originalLoop) diff --git a/src/room/commune/communeData.ts b/src/room/commune/communeData.ts index 6aebe2fd6..727134025 100644 --- a/src/room/commune/communeData.ts +++ b/src/room/commune/communeData.ts @@ -16,15 +16,23 @@ interface CommuneData { * Handles cached data for communes */ export class CommuneDataManager { - data: {[roomName: string]: Partial} = {} + data: { [roomName: string]: Partial } = {} /** - * Handled by the RoomDataManager + * Called by the room's RoomManager */ - updateCommune(room: Room) { - + initCommune(room: Room) { this.data[room.name] ??= {} - const data = this.data[room.name] + } + + updateCommunes() { + for (const roomName in this.data) { + this.updateCommune(roomName) + } + } + + private updateCommune(roomName: string) { + const data = this.data[roomName] if (utils.isTickInterval(10)) { diff --git a/src/room/creeps/creepData.ts b/src/room/creeps/creepData.ts index 139edaf4e..87609f600 100644 --- a/src/room/creeps/creepData.ts +++ b/src/room/creeps/creepData.ts @@ -22,21 +22,19 @@ export interface CreepData { * Handles cached data for creeps we own */ export class CreepDataManager { - creepsData: {[creepName: string]: Partial } = {} - - updateData() { + data: { [creepName: string]: Partial } = {} + updateCreeps() { if (utils.isTickInterval(15)) { - this.updateCreeps() + for (const creepName in Game.creeps) { + this.updateCreep(creepName) + } } } - private updateCreeps() { - - for (const creepName in Game.creeps) { - - /* delete . */ - } + private updateCreep(creepName: string) { + const data = this.data[creepName] + /* delete . */ } } diff --git a/src/room/creeps/myCreepUtils.ts b/src/room/creeps/myCreepUtils.ts index 29105dfd7..f05411797 100644 --- a/src/room/creeps/myCreepUtils.ts +++ b/src/room/creeps/myCreepUtils.ts @@ -8,7 +8,7 @@ export class MyCreepUtils { * provides a cached number of parts for creeps we own */ parts(creep: Creep) { - const data = creepDataManager.creepsData[creep.name].parts + const data = creepDataManager.data[creep.name].parts if (data) return data const parts: typeof data = {} @@ -18,40 +18,39 @@ export class MyCreepUtils { // +1 for every part to its type category for (const part of creep.body) parts[part.type] += 1 - creepDataManager.creepsData[creep.name].parts = parts + creepDataManager.data[creep.name].parts = parts return parts } boosts(creep: Creep) { - const data = creepDataManager.creepsData[creep.name].boosts + const data = creepDataManager.data[creep.name].boosts if (data) return data const boosts: typeof data = {} for (const part of creep.body) { - const boost = part.boost as MineralBoostConstant - if (!boost) continue + const boost = part.boost as MineralBoostConstant + if (!boost) continue - if (!boosts[boost]) { + if (!boosts[boost]) { + boosts[boost] = 1 + continue + } - boosts[boost] = 1 - continue - } - - boosts[boost] += 1 + boosts[boost] += 1 } - creepDataManager.creepsData[creep.name].boosts = boosts + creepDataManager.data[creep.name].boosts = boosts return boosts } upgradeStrength(creep: Creep) { - const data = creepDataManager.creepsData[creep.name].upgradeStrength + const data = creepDataManager.data[creep.name].upgradeStrength if (data) return data const upgradeStrength = this.findUpgradeStrength(this.parts(creep).work, this.boosts(creep)) - creepDataManager.creepsData[creep.name].upgradeStrength = upgradeStrength + creepDataManager.data[creep.name].upgradeStrength = upgradeStrength return data } diff --git a/src/room/roomData.ts b/src/room/roomData.ts index 0e1616a48..2a43c32c7 100644 --- a/src/room/roomData.ts +++ b/src/room/roomData.ts @@ -1,3 +1,4 @@ +import { utils } from "utils/utils" import { communeDataManager } from "./commune/communeData" interface RoomData { @@ -10,22 +11,37 @@ interface RoomData { export class RoomDataManager { data: {[roomName: string]: Partial} = {} - updateRooms() { + initRooms() { for (const roomName in Game.rooms) { + const room = Game.rooms[roomName] - this.updateRoom(Game.rooms[roomName]) + this.initRoom(room) } } - private updateRoom(room: Room) { - + private initRoom(room: Room) { this.data[room.name] ??= {} if (room.controller && room.controller.my) { - communeDataManager.updateCommune(room) + communeDataManager.initCommune(room) } } + + updateRooms() { + for (const roomName in this.data) { + + + this.updateRoom(roomName) + } + } + + private updateRoom(roomName: string) { + + const data = this.data[roomName] + + + } } export const roomDataManager = new RoomDataManager() diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index c893c8b16..700ca5da4 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -1,68 +1,33 @@ import { - allStructureTypes, - WorkRequestKeys, - CombatRequestKeys, - defaultPlainCost, - defaultSwampCost, - impassibleStructureTypes, - impassibleStructureTypesSet, - maxRampartGroupSize, - maxRemoteRoomDistance, - customColors, - PlayerMemoryKeys, - roomDimensions, - roomTypeProperties, - roomTypes, - constantRoomTypes, - stamps, - defaultStructureTypesByBuildPriority, - Result, - adjacentOffsets, - CreepMemoryKeys, - RoomMemoryKeys, - RoomTypes, - packedPosLength, - maxRemotePathDistance, - RoomLogisticsRequestTypes, - remoteRoles, - RemoteResourcePathTypes, - FlagNames, + CombatRequestKeys, maxRampartGroupSize, + maxRemoteRoomDistance, + customColors, + PlayerMemoryKeys, + roomDimensions, constantRoomTypes, defaultStructureTypesByBuildPriority, + Result, RoomMemoryKeys, + RoomTypes, + packedPosLength, + maxRemotePathDistance, + RoomLogisticsRequestTypes, RemoteResourcePathTypes, + FlagNames } from 'international/constants' import { - areCoordsEqual, - createPosMap, findAdjacentCoordsToCoord, findCoordsInsideRect, - findObjectWithID, - getRangeXY, - isNearRoomEdge, - newID, - packAsNum, - packXYAsNum, - randomRange, - unpackNumAsCoord, - unpackNumAsPos, - doesCoordExist, - findClosestObjectInRange, - findClosestObject, + findObjectWithID, packAsNum, + packXYAsNum, unpackNumAsCoord, doesCoordExist, findClosestObject, randomIntRange, - roundTo, + roundTo } from 'utils/utils' import { collectiveManager } from 'international/collective' import { packCoord, packCoordList, - packXYAsCoord, - unpackCoord, - unpackCoordAsPos, - unpackPos, - unpackPosList, + packXYAsCoord, unpackPosList } from 'other/codec' -import { posix } from 'path' import { playerManager } from 'international/players' import { roomNameUtils } from './roomNameUtils' import { customLog } from 'utils/logging' -import { myCreepUtils } from './creeps/myCreepUtils' import { roomObjectUtils } from './roomObjectUtils' /** @@ -71,206 +36,173 @@ import { roomObjectUtils } from './roomObjectUtils' @param [type] The status of action performed */ Room.prototype.actionVisual = function (pos1, pos2, type?) { - const room = this + const room = this - // Stop if roomVisuals are disabled + // Stop if roomVisuals are disabled - if (!global.settings.roomVisuals) return + if (!global.settings.roomVisuals) return - // Construct colors for each type + // Construct colors for each type - const colorsForTypes: { [key: string]: string } = { - success: customColors.lightBlue, - fail: customColors.red, - } + const colorsForTypes: { [key: string]: string } = { + success: customColors.lightBlue, + fail: customColors.red, + } - // If no type, type is success. Construct type from color + // If no type, type is success. Construct type from color - if (!type) type = 'success' - const color: string = colorsForTypes[type] + if (!type) type = 'success' + const color: string = colorsForTypes[type] - // Create visuals + // Create visuals - room.visual.circle(pos2.x, pos2.y, { stroke: color }) - room.visual.line(pos1, pos2, { color }) + room.visual.circle(pos2.x, pos2.y, { stroke: color }) + room.visual.line(pos1, pos2, { color }) } Room.prototype.targetVisual = function (coord1, coord2, visualize = global.settings.roomVisuals) { - if (!visualize) return - - this.visual.line(coord1.x, coord1.y, coord2.x, coord2.y, { - color: customColors.green, - opacity: 0.3, - }) -} - -Room.prototype.scoutByRoomName = function () { - // Find the numbers in the room's name - - const [EWstring, NSstring] = this.name.match(/\d+/g) - - // Convert he numbers from strings into actual numbers - - const EW = parseInt(EWstring) - const NS = parseInt(NSstring) - - // Use the numbers to deduce some room types - cheaply! - - if (EW % 10 === 0 && NS % 10 === 0) - return (this.memory[RoomMemoryKeys.type] = RoomTypes.intersection) - if (EW % 10 === 0 || NS % 10 === 0) - return (this.memory[RoomMemoryKeys.type] = RoomTypes.highway) - if (EW % 5 === 0 && NS % 5 === 0) return (this.memory[RoomMemoryKeys.type] = RoomTypes.center) - if (Math.abs(5 - (EW % 10)) <= 1 && Math.abs(5 - (NS % 10)) <= 1) { - const roomMemory = Memory.rooms[this.name] + if (!visualize) return - // Record the positions of keeper lairs - - const lairCoords = this.roomManager.structures.keeperLair.map(lair => lair.pos) - roomMemory[RoomMemoryKeys.keeperLairCoords] = packCoordList(lairCoords) - - return (this.memory[RoomMemoryKeys.type] = RoomTypes.sourceKeeper) - } - - return false + this.visual.line(coord1.x, coord1.y, coord2.x, coord2.y, { + color: customColors.green, + opacity: 0.3, + }) } Room.prototype.scoutRemote = function (scoutingRoom) { - if (this.scoutEnemyReservedRemote()) return this.memory[RoomMemoryKeys.type] - if (this.scoutEnemyUnreservedRemote()) return this.memory[RoomMemoryKeys.type] + if (this.scoutEnemyReservedRemote()) return this.memory[RoomMemoryKeys.type] + if (this.scoutEnemyUnreservedRemote()) return this.memory[RoomMemoryKeys.type] - if (!scoutingRoom) return this.memory[RoomMemoryKeys.type] - return this.scoutMyRemote(scoutingRoom) + if (!scoutingRoom) return this.memory[RoomMemoryKeys.type] + return this.scoutMyRemote(scoutingRoom) } Room.prototype.scoutEnemyReservedRemote = function () { - const { controller } = this + const { controller } = this - if (!controller.reservation) return false - if (controller.reservation.username === Memory.me) return false - if (controller.reservation.username === 'Invader') return false + if (!controller.reservation) return false + if (controller.reservation.username === Memory.me) return false + if (controller.reservation.username === 'Invader') return false - // If there are roads or containers or sources harvested, inform false + // If there are roads or containers or sources harvested, inform false - if ( - !this.roomManager.structures.road && - !this.roomManager.structures.container && - !this.find(FIND_SOURCES, { - filter: source => source.ticksToRegeneration > 0, - }) - ) - return false + if ( + !this.roomManager.structures.road && + !this.roomManager.structures.container && + !this.find(FIND_SOURCES, { + filter: source => source.ticksToRegeneration > 0, + }) + ) + return false - // If the controller is not reserved by an ally + // If the controller is not reserved by an ally - if (!global.settings.allies.includes(controller.reservation.username)) { - this.memory[RoomMemoryKeys.owner] = controller.reservation.username - return (this.memory[RoomMemoryKeys.type] = RoomTypes.enemyRemote) - } + if (!global.settings.allies.includes(controller.reservation.username)) { + this.memory[RoomMemoryKeys.owner] = controller.reservation.username + return (this.memory[RoomMemoryKeys.type] = RoomTypes.enemyRemote) + } - // Otherwise if the room is reserved by an ally + // Otherwise if the room is reserved by an ally - this.memory[RoomMemoryKeys.owner] = controller.reservation.username - return (this.memory[RoomMemoryKeys.type] = RoomTypes.allyRemote) + this.memory[RoomMemoryKeys.owner] = controller.reservation.username + return (this.memory[RoomMemoryKeys.type] = RoomTypes.allyRemote) } Room.prototype.scoutEnemyUnreservedRemote = function () { - const { controller } = this + const { controller } = this - if (controller.reservation) { - if (controller.reservation.username === Memory.me) return false - if (controller.reservation.username === 'Invader') return false - } + if (controller.reservation) { + if (controller.reservation.username === Memory.me) return false + if (controller.reservation.username === 'Invader') return false + } - const harvestedSources = this.find(FIND_SOURCES, { - filter: source => source.ticksToRegeneration > 0, - }) - if (!harvestedSources.length) return false + const harvestedSources = this.find(FIND_SOURCES, { + filter: source => source.ticksToRegeneration > 0, + }) + if (!harvestedSources.length) return false - // Find creeps that I don't own that aren't invaders + // Find creeps that I don't own that aren't invaders - const creepsNotMine = this.roomManager.notMyCreeps.enemy.concat( - this.roomManager.notMyCreeps.ally, - ) + const creepsNotMine = this.roomManager.notMyCreeps.enemy.concat(this.roomManager.notMyCreeps.ally) - // Iterate through them + // Iterate through them - for (const creep of creepsNotMine) { - // If the creep is an invdader, iterate + for (const creep of creepsNotMine) { + // If the creep is an invdader, iterate - if (creep.owner.username === 'Invader') continue + if (creep.owner.username === 'Invader') continue - // If the creep has work parts + // If the creep has work parts - if (creep.parts.work > 0) { - // If the creep is owned by an ally + if (creep.parts.work > 0) { + // If the creep is owned by an ally - if (global.settings.allies.includes(creep.owner.username)) { - // Set type to allyRemote and stop + if (global.settings.allies.includes(creep.owner.username)) { + // Set type to allyRemote and stop - this.memory[RoomMemoryKeys.owner] = creep.owner.username - return (this.memory[RoomMemoryKeys.type] = RoomTypes.allyRemote) - } + this.memory[RoomMemoryKeys.owner] = creep.owner.username + return (this.memory[RoomMemoryKeys.type] = RoomTypes.allyRemote) + } - // If the creep is not owned by an ally + // If the creep is not owned by an ally - // Set type to enemyRemote and stop + // Set type to enemyRemote and stop - this.memory[RoomMemoryKeys.owner] = creep.owner.username + this.memory[RoomMemoryKeys.owner] = creep.owner.username - /* room.createAttackCombatRequest() */ - this.createHarassCombatRequest() + /* room.createAttackCombatRequest() */ + this.createHarassCombatRequest() - return (this.memory[RoomMemoryKeys.type] = RoomTypes.enemyRemote) - } + return (this.memory[RoomMemoryKeys.type] = RoomTypes.enemyRemote) } + } - return false + return false } Room.prototype.scoutMyRemote = function (scoutingRoom) { - const roomMemory = Memory.rooms[this.name] + const roomMemory = Memory.rooms[this.name] - // The room is a remote but its commune no longer exists, change to neutral + // The room is a remote but its commune no longer exists, change to neutral - if ( - roomMemory[RoomMemoryKeys.type] === RoomTypes.remote && - !collectiveManager.communes.has(roomMemory[RoomMemoryKeys.commune]) - ) - roomMemory[RoomMemoryKeys.type] = RoomTypes.neutral + if ( + roomMemory[RoomMemoryKeys.type] === RoomTypes.remote && + !collectiveManager.communes.has(roomMemory[RoomMemoryKeys.commune]) + ) + roomMemory[RoomMemoryKeys.type] = RoomTypes.neutral - // If the room is already a remote of the scoutingRoom + // If the room is already a remote of the scoutingRoom - if ( - roomMemory[RoomMemoryKeys.type] === RoomTypes.remote && - scoutingRoom.name === roomMemory[RoomMemoryKeys.commune] - ) - return roomMemory[RoomMemoryKeys.type] + if ( + roomMemory[RoomMemoryKeys.type] === RoomTypes.remote && + scoutingRoom.name === roomMemory[RoomMemoryKeys.commune] + ) + return roomMemory[RoomMemoryKeys.type] - let distance = Game.map.getRoomLinearDistance(scoutingRoom.name, this.name) + let distance = Game.map.getRoomLinearDistance(scoutingRoom.name, this.name) - if (distance > maxRemoteRoomDistance) return roomMemory[RoomMemoryKeys.type] + if (distance > maxRemoteRoomDistance) return roomMemory[RoomMemoryKeys.type] - // Find distance from scoutingRoom + // Find distance from scoutingRoom - if (distance <= maxRemoteRoomDistance) - distance = roomNameUtils.advancedFindDistance(scoutingRoom.name, this.name, { - typeWeights: { - keeper: Infinity, - enemy: Infinity, - enemyRemote: Infinity, - ally: Infinity, - allyRemote: Infinity, - }, - }) + if (distance <= maxRemoteRoomDistance) + distance = roomNameUtils.advancedFindDistance(scoutingRoom.name, this.name, { + typeWeights: { + keeper: Infinity, + enemy: Infinity, + enemyRemote: Infinity, + ally: Infinity, + allyRemote: Infinity, + }, + }) - if (distance > maxRemoteRoomDistance) return roomMemory[RoomMemoryKeys.type] + if (distance > maxRemoteRoomDistance) return roomMemory[RoomMemoryKeys.type] - // Get the anchor from the scoutingRoom, stopping if it's undefined + // Get the anchor from the scoutingRoom, stopping if it's undefined - const anchor = scoutingRoom.roomManager.anchor - if (!anchor) return roomMemory[RoomMemoryKeys.type] - /* + const anchor = scoutingRoom.roomManager.anchor + if (!anchor) return roomMemory[RoomMemoryKeys.type] + /* const newSourceEfficacies = [] let newSourceEfficaciesTotal = 0 @@ -327,245 +259,108 @@ Room.prototype.scoutMyRemote = function (scoutingRoom) { if (!newReservationEfficacy) return roomMemory[RoomMemoryKeys.type] */ - // If already a remote, apply special considerations - - if (roomMemory[RoomMemoryKeys.type] === RoomTypes.remote) { - // Generate new important positions - - let disable: boolean - let newCost = 0 - const pathsThrough = new Set() - - const packedRemoteSources = this.roomManager.findRemoteSources(scoutingRoom) - const packedRemoteSourceHarvestPositions = - this.roomManager.findRemoteSourceHarvestPositions(scoutingRoom, packedRemoteSources) - const packedRemoteControllerPositions = - this.roomManager.findRemoteControllerPositions(scoutingRoom) - - const weightCoords: { [packedCoord: string]: number } = {} - - for (const i in packedRemoteSources) { - for (const pos of unpackPosList(packedRemoteSourceHarvestPositions[i])) { - weightCoords[packCoord(pos)] = 20 - } - } - - for (const pos of unpackPosList(packedRemoteControllerPositions)) { - weightCoords[packCoord(pos)] = 20 - } - - const packedRemoteSourcePaths = { - [RoomMemoryKeys.remoteSourceFastFillerPaths]: - this.roomManager.findRemoteSourceFastFillerPaths( - scoutingRoom, - packedRemoteSourceHarvestPositions, - weightCoords, - pathsThrough, - ), - [RoomMemoryKeys.remoteSourceHubPaths]: this.roomManager.findRemoteSourceHubPaths( - scoutingRoom, - packedRemoteSourceHarvestPositions, - weightCoords, - pathsThrough, - ), - } - - for (const key in packedRemoteSourcePaths) { - const pathName = key as unknown as RemoteResourcePathTypes - const packedPath = packedRemoteSourcePaths[pathName] - - if (!packedPath.length) { - disable = true - break - } - const unpackedLength = packedPath.length / packedPosLength - - newCost += unpackedLength - if (unpackedLength > maxRemotePathDistance) disable = true - } + // If already a remote, apply special considerations - const packedRemoteControllerPath = this.roomManager.findRemoteControllerPath( - scoutingRoom, - packedRemoteControllerPositions, - weightCoords, - pathsThrough, - ) - if (!packedRemoteControllerPath.length) { - disable = true - } - if (packedRemoteControllerPath.length / packedPosLength > maxRemotePathDistance) - disable = true - - newCost += packedRemoteControllerPath.length / packedPosLength - - // Compare new, potential efficiency, to old efficiency - - let currentCost = 0 - for (const packedPath of roomMemory[RoomMemoryKeys.remoteSourceFastFillerPaths]) { - currentCost += packedPath.length / packedPosLength - } - currentCost += roomMemory[RoomMemoryKeys.remoteControllerPath].length / packedPosLength - - if (newCost >= currentCost) { - return roomMemory[RoomMemoryKeys.type] - } - - // Successful remote value generation, now assign them - - // reconcile old data - - const oldCommuneMemory = Memory.rooms[roomMemory[RoomMemoryKeys.commune]] - const index = oldCommuneMemory[RoomMemoryKeys.remotes].indexOf(this.name) - oldCommuneMemory[RoomMemoryKeys.remotes].splice(index, 1) - - // - - roomMemory[RoomMemoryKeys.disable] = disable - - roomMemory[RoomMemoryKeys.remoteSources] = packedRemoteSources - roomMemory[RoomMemoryKeys.remoteSourceHarvestPositions] = packedRemoteSourceHarvestPositions - roomMemory[RoomMemoryKeys.remoteSourceFastFillerPaths] = - packedRemoteSourcePaths[RoomMemoryKeys.remoteSourceFastFillerPaths] - roomMemory[RoomMemoryKeys.remoteSourceHubPaths] = - packedRemoteSourcePaths[RoomMemoryKeys.remoteSourceHubPaths] - roomMemory[RoomMemoryKeys.remoteControllerPositions] = packedRemoteControllerPositions - roomMemory[RoomMemoryKeys.remoteControllerPath] = packedRemoteControllerPath - // No reason to have the room or commune in the list - would result is uneeded searches - pathsThrough.delete(this.name) - pathsThrough.delete(scoutingRoom.name) - roomMemory[RoomMemoryKeys.pathsThrough] = Array.from(pathsThrough) - - roomMemory[RoomMemoryKeys.maxSourceIncome] = [] - roomMemory[RoomMemoryKeys.remoteSourceHarvesters] = [] - roomMemory[RoomMemoryKeys.haulers] = [] - roomMemory[RoomMemoryKeys.remoteSourceCredit] = [] - roomMemory[RoomMemoryKeys.hasContainer] = [] - roomMemory[RoomMemoryKeys.roads] = [] - roomMemory[RoomMemoryKeys.disableSources] = [] - - for (const i in packedRemoteSources) { - roomMemory[RoomMemoryKeys.remoteSourceCredit][i] = 0 - roomMemory[RoomMemoryKeys.hasContainer][i] = false - roomMemory[RoomMemoryKeys.roads][i] = 0 - } - roomMemory[RoomMemoryKeys.remoteSourceCreditChange] = [] - roomMemory[RoomMemoryKeys.remoteSourceCreditReservation] = [] - roomMemory[RoomMemoryKeys.remoteCoreAttacker] = 0 - roomMemory[RoomMemoryKeys.abandonRemote] = 0 - - // Add the room's name to the scoutingRoom's remotes data - roomNameUtils.updateCreepsOfRemoteName(this.name, scoutingRoom.communeManager) - - Memory.rooms[scoutingRoom.name][RoomMemoryKeys.remotes].push(this.name) - roomMemory[RoomMemoryKeys.commune] = scoutingRoom.name - roomMemory[RoomMemoryKeys.type] = RoomTypes.remote - - roomNameUtils.cleanMemory(this.name) - - return roomMemory[RoomMemoryKeys.type] - } - - // The room is not a remote + if (roomMemory[RoomMemoryKeys.type] === RoomTypes.remote) { + // Generate new important positions let disable: boolean - - // Generate new important positions + let newCost = 0 const pathsThrough = new Set() const packedRemoteSources = this.roomManager.findRemoteSources(scoutingRoom) const packedRemoteSourceHarvestPositions = this.roomManager.findRemoteSourceHarvestPositions( - scoutingRoom, - packedRemoteSources, + scoutingRoom, + packedRemoteSources, ) const packedRemoteControllerPositions = - this.roomManager.findRemoteControllerPositions(scoutingRoom) + this.roomManager.findRemoteControllerPositions(scoutingRoom) const weightCoords: { [packedCoord: string]: number } = {} for (const i in packedRemoteSources) { - for (const pos of unpackPosList(packedRemoteSourceHarvestPositions[i])) { - weightCoords[packCoord(pos)] = 20 - } + for (const pos of unpackPosList(packedRemoteSourceHarvestPositions[i])) { + weightCoords[packCoord(pos)] = 20 + } } for (const pos of unpackPosList(packedRemoteControllerPositions)) { - weightCoords[packCoord(pos)] = 20 + weightCoords[packCoord(pos)] = 20 } const packedRemoteSourcePaths = { - [RoomMemoryKeys.remoteSourceFastFillerPaths]: - this.roomManager.findRemoteSourceFastFillerPaths( - scoutingRoom, - packedRemoteSourceHarvestPositions, - weightCoords, - pathsThrough, - ), - [RoomMemoryKeys.remoteSourceHubPaths]: this.roomManager.findRemoteSourceHubPaths( - scoutingRoom, - packedRemoteSourceHarvestPositions, - weightCoords, - pathsThrough, + [RoomMemoryKeys.remoteSourceFastFillerPaths]: + this.roomManager.findRemoteSourceFastFillerPaths( + scoutingRoom, + packedRemoteSourceHarvestPositions, + weightCoords, + pathsThrough, ), + [RoomMemoryKeys.remoteSourceHubPaths]: this.roomManager.findRemoteSourceHubPaths( + scoutingRoom, + packedRemoteSourceHarvestPositions, + weightCoords, + pathsThrough, + ), } for (const key in packedRemoteSourcePaths) { - const pathName = key as unknown as RemoteResourcePathTypes - const packedPath = packedRemoteSourcePaths[pathName] + const pathName = key as unknown as RemoteResourcePathTypes + const packedPath = packedRemoteSourcePaths[pathName] - if (!packedPath.length) { - disable = true - break - } + if (!packedPath.length) { + disable = true + break + } + const unpackedLength = packedPath.length / packedPosLength - const unpackedLength = packedPath.length / packedPosLength - if (unpackedLength > maxRemotePathDistance) disable = true + newCost += unpackedLength + if (unpackedLength > maxRemotePathDistance) disable = true } const packedRemoteControllerPath = this.roomManager.findRemoteControllerPath( - scoutingRoom, - packedRemoteControllerPositions, - weightCoords, - pathsThrough, + scoutingRoom, + packedRemoteControllerPositions, + weightCoords, + pathsThrough, ) if (!packedRemoteControllerPath.length) { - disable = true + disable = true } if (packedRemoteControllerPath.length / packedPosLength > maxRemotePathDistance) disable = true - /* - roomMemory[RoomMemoryKeys.roads] = [] - roomMemory[RoomMemoryKeys.roadsQuota] = [] + newCost += packedRemoteControllerPath.length / packedPosLength - let sourceIndex = 0 - for (const key in packedRemoteSourcePaths) { + // Compare new, potential efficiency, to old efficiency - const pathName = key as unknown as RemoteResourcePathTypes - const packedPath = packedRemoteSourcePaths[pathName] + let currentCost = 0 + for (const packedPath of roomMemory[RoomMemoryKeys.remoteSourceFastFillerPaths]) { + currentCost += packedPath.length / packedPosLength + } + currentCost += roomMemory[RoomMemoryKeys.remoteControllerPath].length / packedPosLength - roomMemory[RoomMemoryKeys.roads][sourceIndex] = 0 - roomMemory[RoomMemoryKeys.roadsQuota][sourceIndex] = 0 + if (newCost >= currentCost) { + return roomMemory[RoomMemoryKeys.type] + } - const path = unpackPosList(packedPath) + // Successful remote value generation, now assign them - for (const pos of path) { - if (pos.roomName !== this.name) break + // reconcile old data - roomMemory[RoomMemoryKeys.roadsQuota][sourceIndex] += 1 - } + const oldCommuneMemory = Memory.rooms[roomMemory[RoomMemoryKeys.commune]] + const index = oldCommuneMemory[RoomMemoryKeys.remotes].indexOf(this.name) + oldCommuneMemory[RoomMemoryKeys.remotes].splice(index, 1) - if (path.length > maxRemotePathDistance) disable = true - } - */ - // Accept remote as own + // roomMemory[RoomMemoryKeys.disable] = disable roomMemory[RoomMemoryKeys.remoteSources] = packedRemoteSources roomMemory[RoomMemoryKeys.remoteSourceHarvestPositions] = packedRemoteSourceHarvestPositions roomMemory[RoomMemoryKeys.remoteSourceFastFillerPaths] = - packedRemoteSourcePaths[RoomMemoryKeys.remoteSourceFastFillerPaths] + packedRemoteSourcePaths[RoomMemoryKeys.remoteSourceFastFillerPaths] roomMemory[RoomMemoryKeys.remoteSourceHubPaths] = - packedRemoteSourcePaths[RoomMemoryKeys.remoteSourceHubPaths] + packedRemoteSourcePaths[RoomMemoryKeys.remoteSourceHubPaths] roomMemory[RoomMemoryKeys.remoteControllerPositions] = packedRemoteControllerPositions roomMemory[RoomMemoryKeys.remoteControllerPath] = packedRemoteControllerPath // No reason to have the room or commune in the list - would result is uneeded searches @@ -582,9 +377,9 @@ Room.prototype.scoutMyRemote = function (scoutingRoom) { roomMemory[RoomMemoryKeys.disableSources] = [] for (const i in packedRemoteSources) { - roomMemory[RoomMemoryKeys.remoteSourceCredit][i] = 0 - roomMemory[RoomMemoryKeys.hasContainer][i] = false - roomMemory[RoomMemoryKeys.roads][i] = 0 + roomMemory[RoomMemoryKeys.remoteSourceCredit][i] = 0 + roomMemory[RoomMemoryKeys.hasContainer][i] = false + roomMemory[RoomMemoryKeys.roads][i] = 0 } roomMemory[RoomMemoryKeys.remoteSourceCreditChange] = [] roomMemory[RoomMemoryKeys.remoteSourceCreditReservation] = [] @@ -601,231 +396,390 @@ Room.prototype.scoutMyRemote = function (scoutingRoom) { roomNameUtils.cleanMemory(this.name) return roomMemory[RoomMemoryKeys.type] + } + + // The room is not a remote + + let disable: boolean + + // Generate new important positions + const pathsThrough = new Set() + + const packedRemoteSources = this.roomManager.findRemoteSources(scoutingRoom) + const packedRemoteSourceHarvestPositions = this.roomManager.findRemoteSourceHarvestPositions( + scoutingRoom, + packedRemoteSources, + ) + const packedRemoteControllerPositions = + this.roomManager.findRemoteControllerPositions(scoutingRoom) + + const weightCoords: { [packedCoord: string]: number } = {} + + for (const i in packedRemoteSources) { + for (const pos of unpackPosList(packedRemoteSourceHarvestPositions[i])) { + weightCoords[packCoord(pos)] = 20 + } + } + + for (const pos of unpackPosList(packedRemoteControllerPositions)) { + weightCoords[packCoord(pos)] = 20 + } + + const packedRemoteSourcePaths = { + [RoomMemoryKeys.remoteSourceFastFillerPaths]: this.roomManager.findRemoteSourceFastFillerPaths( + scoutingRoom, + packedRemoteSourceHarvestPositions, + weightCoords, + pathsThrough, + ), + [RoomMemoryKeys.remoteSourceHubPaths]: this.roomManager.findRemoteSourceHubPaths( + scoutingRoom, + packedRemoteSourceHarvestPositions, + weightCoords, + pathsThrough, + ), + } + + for (const key in packedRemoteSourcePaths) { + const pathName = key as unknown as RemoteResourcePathTypes + const packedPath = packedRemoteSourcePaths[pathName] + + if (!packedPath.length) { + disable = true + break + } + + const unpackedLength = packedPath.length / packedPosLength + if (unpackedLength > maxRemotePathDistance) disable = true + } + + const packedRemoteControllerPath = this.roomManager.findRemoteControllerPath( + scoutingRoom, + packedRemoteControllerPositions, + weightCoords, + pathsThrough, + ) + if (!packedRemoteControllerPath.length) { + disable = true + } + if (packedRemoteControllerPath.length / packedPosLength > maxRemotePathDistance) disable = true + + /* + roomMemory[RoomMemoryKeys.roads] = [] + roomMemory[RoomMemoryKeys.roadsQuota] = [] + + let sourceIndex = 0 + for (const key in packedRemoteSourcePaths) { + + const pathName = key as unknown as RemoteResourcePathTypes + const packedPath = packedRemoteSourcePaths[pathName] + + roomMemory[RoomMemoryKeys.roads][sourceIndex] = 0 + roomMemory[RoomMemoryKeys.roadsQuota][sourceIndex] = 0 + + const path = unpackPosList(packedPath) + + for (const pos of path) { + if (pos.roomName !== this.name) break + + roomMemory[RoomMemoryKeys.roadsQuota][sourceIndex] += 1 + } + + if (path.length > maxRemotePathDistance) disable = true + } + */ + // Accept remote as own + + roomMemory[RoomMemoryKeys.disable] = disable + + roomMemory[RoomMemoryKeys.remoteSources] = packedRemoteSources + roomMemory[RoomMemoryKeys.remoteSourceHarvestPositions] = packedRemoteSourceHarvestPositions + roomMemory[RoomMemoryKeys.remoteSourceFastFillerPaths] = + packedRemoteSourcePaths[RoomMemoryKeys.remoteSourceFastFillerPaths] + roomMemory[RoomMemoryKeys.remoteSourceHubPaths] = + packedRemoteSourcePaths[RoomMemoryKeys.remoteSourceHubPaths] + roomMemory[RoomMemoryKeys.remoteControllerPositions] = packedRemoteControllerPositions + roomMemory[RoomMemoryKeys.remoteControllerPath] = packedRemoteControllerPath + // No reason to have the room or commune in the list - would result is uneeded searches + pathsThrough.delete(this.name) + pathsThrough.delete(scoutingRoom.name) + roomMemory[RoomMemoryKeys.pathsThrough] = Array.from(pathsThrough) + + roomMemory[RoomMemoryKeys.maxSourceIncome] = [] + roomMemory[RoomMemoryKeys.remoteSourceHarvesters] = [] + roomMemory[RoomMemoryKeys.haulers] = [] + roomMemory[RoomMemoryKeys.remoteSourceCredit] = [] + roomMemory[RoomMemoryKeys.hasContainer] = [] + roomMemory[RoomMemoryKeys.roads] = [] + roomMemory[RoomMemoryKeys.disableSources] = [] + + for (const i in packedRemoteSources) { + roomMemory[RoomMemoryKeys.remoteSourceCredit][i] = 0 + roomMemory[RoomMemoryKeys.hasContainer][i] = false + roomMemory[RoomMemoryKeys.roads][i] = 0 + } + roomMemory[RoomMemoryKeys.remoteSourceCreditChange] = [] + roomMemory[RoomMemoryKeys.remoteSourceCreditReservation] = [] + roomMemory[RoomMemoryKeys.remoteCoreAttacker] = 0 + roomMemory[RoomMemoryKeys.abandonRemote] = 0 + + // Add the room's name to the scoutingRoom's remotes data + roomNameUtils.updateCreepsOfRemoteName(this.name, scoutingRoom.communeManager) + + Memory.rooms[scoutingRoom.name][RoomMemoryKeys.remotes].push(this.name) + roomMemory[RoomMemoryKeys.commune] = scoutingRoom.name + roomMemory[RoomMemoryKeys.type] = RoomTypes.remote + + roomNameUtils.cleanMemory(this.name) + + return roomMemory[RoomMemoryKeys.type] } Room.prototype.scoutEnemyRoom = function () { - const { controller } = this - const playerName = controller.owner.username - const roomMemory = this.memory + const { controller } = this + const playerName = controller.owner.username + const roomMemory = this.memory - let player = Memory.players[playerName] - if (!player) { - player = playerManager.initPlayer(playerName) - } + let player = Memory.players[playerName] + if (!player) { + player = playerManager.initPlayer(playerName) + } - // General + // General - const level = controller.level - roomMemory[RoomMemoryKeys.RCL] = level + const level = controller.level + roomMemory[RoomMemoryKeys.RCL] = level - roomMemory[RoomMemoryKeys.powerEnabled] = controller.isPowerEnabled + roomMemory[RoomMemoryKeys.powerEnabled] = controller.isPowerEnabled - // Offensive threat + // Offensive threat - let threat = 0 + let threat = 0 - threat += Math.pow(level, 2) + threat += Math.pow(level, 2) - threat += this.roomManager.structures.spawn.length * 50 - threat += this.roomManager.structures.nuker.length * 300 - threat += Math.pow(this.roomManager.structures.lab.length * 10000, 0.4) + threat += this.roomManager.structures.spawn.length * 50 + threat += this.roomManager.structures.nuker.length * 300 + threat += Math.pow(this.roomManager.structures.lab.length * 10000, 0.4) - threat = Math.floor(threat) + threat = Math.floor(threat) - roomMemory[RoomMemoryKeys.offensiveThreat] = threat - Memory.players[playerName][PlayerMemoryKeys.offensiveThreat] = Math.max( - threat, - player[PlayerMemoryKeys.offensiveThreat], - ) + roomMemory[RoomMemoryKeys.offensiveThreat] = threat + Memory.players[playerName][PlayerMemoryKeys.offensiveThreat] = Math.max( + threat, + player[PlayerMemoryKeys.offensiveThreat], + ) - // Defensive threat + // Defensive threat - threat = 0 + threat = 0 - const energy = this.roomManager.resourcesInStoringStructures.energy + const energy = this.roomManager.resourcesInStoringStructures.energy - roomMemory[RoomMemoryKeys.energy] = energy - threat += Math.pow(energy, 0.5) + roomMemory[RoomMemoryKeys.energy] = energy + threat += Math.pow(energy, 0.5) - const ramparts = this.roomManager.structures.rampart - const avgRampartHits = - ramparts.reduce((total, rampart) => total + rampart.hits, 0) / ramparts.length + const ramparts = this.roomManager.structures.rampart + const avgRampartHits = + ramparts.reduce((total, rampart) => total + rampart.hits, 0) / ramparts.length - threat += Math.pow(avgRampartHits, 0.5) - threat += this.roomManager.structures.spawn.length * 100 - threat += this.roomManager.structures.tower.length * 300 - threat += Math.pow(this.roomManager.structures.extension.length * 400, 0.8) + threat += Math.pow(avgRampartHits, 0.5) + threat += this.roomManager.structures.spawn.length * 100 + threat += this.roomManager.structures.tower.length * 300 + threat += Math.pow(this.roomManager.structures.extension.length * 400, 0.8) - const hasTerminal = this.terminal !== undefined + const hasTerminal = this.terminal !== undefined - if (hasTerminal) { - threat += 800 + if (hasTerminal) { + threat += 800 - roomMemory[RoomMemoryKeys.terminal] = true - } + roomMemory[RoomMemoryKeys.terminal] = true + } - threat = Math.floor(threat) + threat = Math.floor(threat) - roomMemory[RoomMemoryKeys.defensiveStrength] = threat - Memory.players[playerName][PlayerMemoryKeys.defensiveStrength] = Math.max( - threat, - player[PlayerMemoryKeys.defensiveStrength], - ) + roomMemory[RoomMemoryKeys.defensiveStrength] = threat + Memory.players[playerName][PlayerMemoryKeys.defensiveStrength] = Math.max( + threat, + player[PlayerMemoryKeys.defensiveStrength], + ) - // Combat request creation - this.createAttackCombatRequest() + // Combat request creation + this.createAttackCombatRequest() - roomMemory[RoomMemoryKeys.type] = RoomTypes.enemy - return roomMemory[RoomMemoryKeys.type] + roomMemory[RoomMemoryKeys.type] = RoomTypes.enemy + return roomMemory[RoomMemoryKeys.type] } Room.prototype.basicScout = function () { - const { controller } = this + const { controller } = this - // Record that the room was scouted this tick + // Record that the room was scouted this tick - this.memory[RoomMemoryKeys.lastScout] = Game.time + this.memory[RoomMemoryKeys.lastScout] = Game.time - if (!controller) return this.memory[RoomMemoryKeys.type] + if (!controller) return this.memory[RoomMemoryKeys.type] - // If the contoller is owned + // If the contoller is owned - if (controller.owner) { - // Stop if the controller is owned by me + if (controller.owner) { + // Stop if the controller is owned by me - if (controller.my) return this.memory[RoomMemoryKeys.type] + if (controller.my) return this.memory[RoomMemoryKeys.type] - const owner = controller.owner.username - this.memory[RoomMemoryKeys.owner] = owner + const owner = controller.owner.username + this.memory[RoomMemoryKeys.owner] = owner - // If the controller is owned by an ally + // If the controller is owned by an ally - if (global.settings.allies.includes(owner)) - return (this.memory[RoomMemoryKeys.type] = RoomTypes.ally) + if (global.settings.allies.includes(owner)) + return (this.memory[RoomMemoryKeys.type] = RoomTypes.ally) - return this.scoutEnemyRoom() - } + return this.scoutEnemyRoom() + } - this.createWorkRequest() + this.createWorkRequest() - // No controller owner + // No controller owner - if (this.scoutRemote()) return this.memory[RoomMemoryKeys.type] + if (this.scoutRemote()) return this.memory[RoomMemoryKeys.type] - return (this.memory[RoomMemoryKeys.type] = RoomTypes.neutral) + return (this.memory[RoomMemoryKeys.type] = RoomTypes.neutral) } Room.prototype.advancedScout = function (scoutingRoom: Room) { - const { controller } = this + const roomMemory = Memory.rooms[this.name] - // Record that the room was scouted this tick + // Record that the room was scouted this tick + roomMemory[RoomMemoryKeys.lastScout] = Game.time - this.memory[RoomMemoryKeys.lastScout] = Game.time + // If the room already has a type and its type is constant, no need to go further + if (constantRoomTypes.has(roomMemory[RoomMemoryKeys.type])) { + return roomMemory[RoomMemoryKeys.type] + } - if (constantRoomTypes.has(this.memory[RoomMemoryKeys.type])) - return this.memory[RoomMemoryKeys.type] - if (this.scoutByRoomName()) return this.memory[RoomMemoryKeys.type] + const { controller } = this + if (controller) { + roomMemory[RoomMemoryKeys.controllerCoord] = packCoord(controller.pos) + } - // If there is a controller + const sources = this.find(FIND_SOURCES) + if (sources.length) { + const packedSourceCoords = packCoordList(sources.map(source => source.pos)) + roomMemory[RoomMemoryKeys.sourceCoords] = packedSourceCoords + } - if (controller) { - // If the contoller is owned + const roomNameScoutType = roomNameUtils.scoutByRoomName(this.name) + if (roomNameScoutType) { + if (roomNameScoutType === RoomTypes.sourceKeeper) { + // Record the positions of keeper lairs - if (controller.owner) { - // Stop if the controller is owned by me + const lairCoords = this.roomManager.structures.keeperLair.map(lair => lair.pos) + roomMemory[RoomMemoryKeys.keeperLairCoords] = packCoordList(lairCoords) + } - if (controller.my) return this.memory[RoomMemoryKeys.type] + return roomMemory[RoomMemoryKeys.type] + } - const owner = controller.owner.username + // If there is a controller + if (controller) { + // If the contoller is owned - this.memory[RoomMemoryKeys.owner] = owner + if (controller.owner) { + // Stop if the controller is owned by me - // If the controller is owned by an ally + if (controller.my) return this.memory[RoomMemoryKeys.type] - if (global.settings.allies.includes(owner)) - return (this.memory[RoomMemoryKeys.type] = RoomTypes.ally) + const owner = controller.owner.username - return this.scoutEnemyRoom() - } + this.memory[RoomMemoryKeys.owner] = owner - this.createWorkRequest() + // If the controller is owned by an ally - // No controlller owner + if (global.settings.allies.includes(owner)) + return (this.memory[RoomMemoryKeys.type] = RoomTypes.ally) - if (this.scoutRemote(scoutingRoom)) return this.memory[RoomMemoryKeys.type] - - return (this.memory[RoomMemoryKeys.type] = RoomTypes.neutral) + return this.scoutEnemyRoom() } - return this.memory[RoomMemoryKeys.type] + this.createWorkRequest() + + // No controlller owner + + if (this.scoutRemote(scoutingRoom)) return this.memory[RoomMemoryKeys.type] + + return (this.memory[RoomMemoryKeys.type] = RoomTypes.neutral) + } + + return this.memory[RoomMemoryKeys.type] } Room.prototype.createAttackCombatRequest = function (opts) { - if (!global.settings.autoAttack) return - if (this.controller && this.controller.safeMode) return + if (!global.settings.autoAttack) return + if (this.controller && this.controller.safeMode) return - let request = Memory.combatRequests[this.name] - if (request) { - if (request[CombatRequestKeys.type] !== 'attack') return + let request = Memory.combatRequests[this.name] + if (request) { + if (request[CombatRequestKeys.type] !== 'attack') return - if (!opts) return + if (!opts) return - Object.assign(request, opts) - return - } + Object.assign(request, opts) + return + } - if (global.settings.nonAggressionPlayers.includes(Memory.rooms[RoomMemoryKeys.owner])) return + if (global.settings.nonAggressionPlayers.includes(Memory.rooms[RoomMemoryKeys.owner])) return - request = Memory.combatRequests[this.name] = { - [CombatRequestKeys.type]: 'attack', - } + request = Memory.combatRequests[this.name] = { + [CombatRequestKeys.type]: 'attack', + } - request[CombatRequestKeys.maxTowerDamage] = Math.ceil( - this.roomManager.structures.tower.length * TOWER_POWER_ATTACK * 1.1, - ) + request[CombatRequestKeys.maxTowerDamage] = Math.ceil( + this.roomManager.structures.tower.length * TOWER_POWER_ATTACK * 1.1, + ) - request[CombatRequestKeys.minDamage] = 10 - request[CombatRequestKeys.minMeleeHeal] = 10 - request[CombatRequestKeys.minRangedHeal] = 10 - request[CombatRequestKeys.quadQuota] = 1 + request[CombatRequestKeys.minDamage] = 10 + request[CombatRequestKeys.minMeleeHeal] = 10 + request[CombatRequestKeys.minRangedHeal] = 10 + request[CombatRequestKeys.quadQuota] = 1 - if (opts) { - Object.assign(request, opts) - return - } + if (opts) { + Object.assign(request, opts) + return + } } Room.prototype.createHarassCombatRequest = function (opts) { - if (!global.settings.autoAttack) return + if (!global.settings.autoAttack) return - let request = Memory.combatRequests[this.name] - if (request) { - if (request[CombatRequestKeys.type] !== 'harass') return + let request = Memory.combatRequests[this.name] + if (request) { + if (request[CombatRequestKeys.type] !== 'harass') return - if (!opts) return + if (!opts) return - Object.assign(request, opts) - return - } + Object.assign(request, opts) + return + } - if (!this.roomManager.notMyCreeps.enemy.length) return - if (global.settings.nonAggressionPlayers.includes(this.memory[RoomMemoryKeys.owner])) return - if (this.roomManager.enemyAttackers.length > 0) return + if (!this.roomManager.notMyCreeps.enemy.length) return + if (global.settings.nonAggressionPlayers.includes(this.memory[RoomMemoryKeys.owner])) return + if (this.roomManager.enemyAttackers.length > 0) return - request = Memory.combatRequests[this.name] = { - [CombatRequestKeys.type]: 'harass', - } + request = Memory.combatRequests[this.name] = { + [CombatRequestKeys.type]: 'harass', + } - request[CombatRequestKeys.minDamage] = 10 - request[CombatRequestKeys.minMeleeHeal] = 10 - request[CombatRequestKeys.minRangedHeal] = 10 + request[CombatRequestKeys.minDamage] = 10 + request[CombatRequestKeys.minMeleeHeal] = 10 + request[CombatRequestKeys.minRangedHeal] = 10 - if (opts) { - Object.assign(request, opts) - return - } + if (opts) { + Object.assign(request, opts) + return + } - /* + /* const structures = this[CreepMemoryKeys.structureTarget]s let totalHits = 0 @@ -837,487 +791,473 @@ Room.prototype.createHarassCombatRequest = function (opts) { } Room.prototype.createDefendCombatRequest = function (opts) { - let request = Memory.combatRequests[this.name] - if (request) { - if (request[CombatRequestKeys.type] !== 'defend') return + let request = Memory.combatRequests[this.name] + if (request) { + if (request[CombatRequestKeys.type] !== 'defend') return - if (!opts) return + if (!opts) return - Object.assign(request, opts) - return - } + Object.assign(request, opts) + return + } - request = Memory.combatRequests[this.name] = { - [CombatRequestKeys.type]: 'defend', - } + request = Memory.combatRequests[this.name] = { + [CombatRequestKeys.type]: 'defend', + } - request[CombatRequestKeys.inactionTimer] = 0 - request[CombatRequestKeys.inactionTimerMax] = randomIntRange( - 2000, - 3000, - ) + request[CombatRequestKeys.inactionTimer] = 0 + request[CombatRequestKeys.inactionTimerMax] = randomIntRange(2000, 3000) - const enemySquadData = this.roomManager.enemySquadData + const enemySquadData = this.roomManager.enemySquadData - request[CombatRequestKeys.minRangedHeal] = Math.max(enemySquadData.highestRangedDamage, 1) - request[CombatRequestKeys.minMeleeHeal] = Math.max(enemySquadData.highestMeleeDamage, 1) - request[CombatRequestKeys.minDamage] = enemySquadData.highestHeal * 1.2 + request[CombatRequestKeys.minRangedHeal] = Math.max(enemySquadData.highestRangedDamage, 1) + request[CombatRequestKeys.minMeleeHeal] = Math.max(enemySquadData.highestMeleeDamage, 1) + request[CombatRequestKeys.minDamage] = enemySquadData.highestHeal * 1.2 - if (opts) { - Object.assign(request, opts) - return - } + if (opts) { + Object.assign(request, opts) + return + } } Room.prototype.distanceTransform = function ( - initialCoords, - visuals, - minAvoid = 1, - x1 = 0, - y1 = 0, - x2 = roomDimensions - 1, - y2 = roomDimensions - 1, + initialCoords, + visuals, + minAvoid = 1, + x1 = 0, + y1 = 0, + x2 = roomDimensions - 1, + y2 = roomDimensions - 1, ) { - // Use a costMatrix to record distances + // Use a costMatrix to record distances - const distanceCoords = new Uint8Array(2500) + const distanceCoords = new Uint8Array(2500) - if (!initialCoords) - initialCoords = new Uint8Array(collectiveManager.getTerrainBinary(this.name)) + if (!initialCoords) initialCoords = new Uint8Array(collectiveManager.getTerrainBinary(this.name)) - let x - let y - let minX = Math.max(x1 - 1, 0) - let minY = Math.max(y1 - 1, 0) - let maxX = Math.min(x2 + 1, roomDimensions - 1) - let maxY = Math.min(y2 + 1, roomDimensions - 1) - let packedCoord + let x + let y + let minX = Math.max(x1 - 1, 0) + let minY = Math.max(y1 - 1, 0) + let maxX = Math.min(x2 + 1, roomDimensions - 1) + let maxY = Math.min(y2 + 1, roomDimensions - 1) + let packedCoord - for (x = minX; x <= maxX; x += 1) { - for (y = minY; y <= maxY; y += 1) { - packedCoord = packXYAsNum(x, y) - distanceCoords[packedCoord] = initialCoords[packedCoord] >= minAvoid ? 0 : 255 - } + for (x = minX; x <= maxX; x += 1) { + for (y = minY; y <= maxY; y += 1) { + packedCoord = packXYAsNum(x, y) + distanceCoords[packedCoord] = initialCoords[packedCoord] >= minAvoid ? 0 : 255 } + } - let top - let left - let topLeft - let topRight - let bottomLeft + let top + let left + let topLeft + let topRight + let bottomLeft - // Loop through the xs and ys inside the bounds + // Loop through the xs and ys inside the bounds - for (x = x1; x <= x2; x += 1) { - for (y = y1; y <= y2; y += 1) { - top = distanceCoords[packXYAsNum(x, y - 1)] || 0 - left = distanceCoords[packXYAsNum(x - 1, y)] || 0 - topLeft = distanceCoords[packXYAsNum(x - 1, y - 1)] || 0 - topRight = distanceCoords[packXYAsNum(x + 1, y - 1)] || 0 - bottomLeft = distanceCoords[packXYAsNum(x - 1, y + 1)] || 0 - - packedCoord = packXYAsNum(x, y) - - distanceCoords[packedCoord] = Math.min( - Math.min(top, left, topLeft, topRight, bottomLeft) + 1, - distanceCoords[packedCoord], - ) - } + for (x = x1; x <= x2; x += 1) { + for (y = y1; y <= y2; y += 1) { + top = distanceCoords[packXYAsNum(x, y - 1)] || 0 + left = distanceCoords[packXYAsNum(x - 1, y)] || 0 + topLeft = distanceCoords[packXYAsNum(x - 1, y - 1)] || 0 + topRight = distanceCoords[packXYAsNum(x + 1, y - 1)] || 0 + bottomLeft = distanceCoords[packXYAsNum(x - 1, y + 1)] || 0 + + packedCoord = packXYAsNum(x, y) + + distanceCoords[packedCoord] = Math.min( + Math.min(top, left, topLeft, topRight, bottomLeft) + 1, + distanceCoords[packedCoord], + ) } + } - let bottom - let right - let bottomRight + let bottom + let right + let bottomRight - // Loop through the xs and ys inside the bounds + // Loop through the xs and ys inside the bounds - for (x = x2; x >= x1; x -= 1) { - for (y = y2; y >= y1; y -= 1) { - bottom = distanceCoords[packXYAsNum(x, y + 1)] || 0 - right = distanceCoords[packXYAsNum(x + 1, y)] || 0 - bottomRight = distanceCoords[packXYAsNum(x + 1, y + 1)] || 0 - topRight = distanceCoords[packXYAsNum(x + 1, y - 1)] || 0 - bottomLeft = distanceCoords[packXYAsNum(x - 1, y + 1)] || 0 + for (x = x2; x >= x1; x -= 1) { + for (y = y2; y >= y1; y -= 1) { + bottom = distanceCoords[packXYAsNum(x, y + 1)] || 0 + right = distanceCoords[packXYAsNum(x + 1, y)] || 0 + bottomRight = distanceCoords[packXYAsNum(x + 1, y + 1)] || 0 + topRight = distanceCoords[packXYAsNum(x + 1, y - 1)] || 0 + bottomLeft = distanceCoords[packXYAsNum(x - 1, y + 1)] || 0 - packedCoord = packXYAsNum(x, y) + packedCoord = packXYAsNum(x, y) - distanceCoords[packedCoord] = Math.min( - Math.min(bottom, right, bottomRight, topRight, bottomLeft) + 1, - distanceCoords[packedCoord], - ) - } + distanceCoords[packedCoord] = Math.min( + Math.min(bottom, right, bottomRight, topRight, bottomLeft) + 1, + distanceCoords[packedCoord], + ) } + } - if (visuals) { - // Loop through the xs and ys inside the bounds - - for (x = x1; x <= x2; x += 1) { - for (y = y1; y <= y2; y += 1) { - this.visual.rect(x - 0.5, y - 0.5, 1, 1, { - fill: `hsl(${200}${distanceCoords[packXYAsNum(x, y)] * 10}, 100%, 60%)`, - opacity: 0.4, - }) - this.visual.text(distanceCoords[packXYAsNum(x, y)].toString(), x, y) - } - } + if (visuals) { + // Loop through the xs and ys inside the bounds + + for (x = x1; x <= x2; x += 1) { + for (y = y1; y <= y2; y += 1) { + this.visual.rect(x - 0.5, y - 0.5, 1, 1, { + fill: `hsl(${200}${distanceCoords[packXYAsNum(x, y)] * 10}, 100%, 60%)`, + opacity: 0.4, + }) + this.visual.text(distanceCoords[packXYAsNum(x, y)].toString(), x, y) + } } + } - return distanceCoords + return distanceCoords } Room.prototype.diagonalDistanceTransform = function ( - initialCoords, - visuals, - minAvoid = 1, - x1 = 0, - y1 = 0, - x2 = roomDimensions - 1, - y2 = roomDimensions - 1, + initialCoords, + visuals, + minAvoid = 1, + x1 = 0, + y1 = 0, + x2 = roomDimensions - 1, + y2 = roomDimensions - 1, ) { - // Use a costMatrix to record distances + // Use a costMatrix to record distances - const distanceCoords = new Uint8Array(2500) + const distanceCoords = new Uint8Array(2500) - if (!initialCoords) - initialCoords = new Uint8Array(collectiveManager.getTerrainBinary(this.name)) + if (!initialCoords) initialCoords = new Uint8Array(collectiveManager.getTerrainBinary(this.name)) - let x - let y - let packedCoord + let x + let y + let packedCoord - for (x = x1; x <= x2; x += 1) { - for (y = y1; y <= y2; y += 1) { - packedCoord = packXYAsNum(x, y) - distanceCoords[packedCoord] = initialCoords[packedCoord] >= minAvoid ? 0 : 255 - } + for (x = x1; x <= x2; x += 1) { + for (y = y1; y <= y2; y += 1) { + packedCoord = packXYAsNum(x, y) + distanceCoords[packedCoord] = initialCoords[packedCoord] >= minAvoid ? 0 : 255 } + } - let top - let left + let top + let left - // Loop through the xs and ys inside the bounds + // Loop through the xs and ys inside the bounds - for (x = x1; x <= x2; x += 1) { - for (y = y1; y <= y2; y += 1) { - top = distanceCoords[packXYAsNum(x, y - 1)] || 0 - left = distanceCoords[packXYAsNum(x - 1, y)] || 0 + for (x = x1; x <= x2; x += 1) { + for (y = y1; y <= y2; y += 1) { + top = distanceCoords[packXYAsNum(x, y - 1)] || 0 + left = distanceCoords[packXYAsNum(x - 1, y)] || 0 - packedCoord = packXYAsNum(x, y) + packedCoord = packXYAsNum(x, y) - distanceCoords[packedCoord] = Math.min( - Math.min(top, left) + 1, - distanceCoords[packedCoord], - ) - } + distanceCoords[packedCoord] = Math.min(Math.min(top, left) + 1, distanceCoords[packedCoord]) } + } - let bottom - let right + let bottom + let right - // Loop through the xs and ys inside the bounds + // Loop through the xs and ys inside the bounds - for (x = x2; x >= x1; x -= 1) { - for (y = y2; y >= y1; y -= 1) { - bottom = distanceCoords[packXYAsNum(x, y + 1)] || 0 - right = distanceCoords[packXYAsNum(x + 1, y)] || 0 + for (x = x2; x >= x1; x -= 1) { + for (y = y2; y >= y1; y -= 1) { + bottom = distanceCoords[packXYAsNum(x, y + 1)] || 0 + right = distanceCoords[packXYAsNum(x + 1, y)] || 0 - packedCoord = packXYAsNum(x, y) + packedCoord = packXYAsNum(x, y) - distanceCoords[packedCoord] = Math.min( - Math.min(bottom, right) + 1, - distanceCoords[packedCoord], - ) - } + distanceCoords[packedCoord] = Math.min( + Math.min(bottom, right) + 1, + distanceCoords[packedCoord], + ) } + } - if (visuals) { - // Loop through the xs and ys inside the bounds - - for (x = x1; x <= x2; x += 1) { - for (y = y1; y <= y2; y += 1) { - this.visual.rect(x - 0.5, y - 0.5, 1, 1, { - fill: `hsl(${200}${distanceCoords[packXYAsNum(x, y)] * 10}, 100%, 60%)`, - opacity: 0.4, - }) - this.visual.text(distanceCoords[packXYAsNum(x, y)].toString(), x, y) - } - } + if (visuals) { + // Loop through the xs and ys inside the bounds + + for (x = x1; x <= x2; x += 1) { + for (y = y1; y <= y2; y += 1) { + this.visual.rect(x - 0.5, y - 0.5, 1, 1, { + fill: `hsl(${200}${distanceCoords[packXYAsNum(x, y)] * 10}, 100%, 60%)`, + opacity: 0.4, + }) + this.visual.text(distanceCoords[packXYAsNum(x, y)].toString(), x, y) + } } + } - return distanceCoords + return distanceCoords } Room.prototype.findClosestPos = function (opts) { - // Construct a cost matrix for visited tiles and add seeds to it + // Construct a cost matrix for visited tiles and add seeds to it - let visitedCoords = new Uint8Array(2500) + let visitedCoords = new Uint8Array(2500) - // Record startPos as visited + // Record startPos as visited - for (const coord of opts.sources) visitedCoords[packAsNum(coord)] = 1 + for (const coord of opts.sources) visitedCoords[packAsNum(coord)] = 1 - // Construct values for the check + // Construct values for the check - let thisGeneration = opts.sources - let nextGeneration: Coord[] = [] - let depth = 0 + let thisGeneration = opts.sources + let nextGeneration: Coord[] = [] + let depth = 0 - // So long as there are positions in this gen + // So long as there are positions in this gen - while (thisGeneration.length) { - // Reset nextGeneration + while (thisGeneration.length) { + // Reset nextGeneration - nextGeneration = [] + nextGeneration = [] - let localVisitedCoords = new Uint8Array(visitedCoords) + let localVisitedCoords = new Uint8Array(visitedCoords) - // Flood cardinal directions, excluding impassibles + // Flood cardinal directions, excluding impassibles - if (opts.cardinalFlood) { - // Iterate through positions of this gen + if (opts.cardinalFlood) { + // Iterate through positions of this gen - for (const coord of thisGeneration) { - // If the pos can be an anchor, inform it + for (const coord of thisGeneration) { + // If the pos can be an anchor, inform it - if (opts.targetCondition(coord)) - return new RoomPosition(coord.x, coord.y, this.name) + if (opts.targetCondition(coord)) return new RoomPosition(coord.x, coord.y, this.name) - // Otherwise construct a rect and get the positions in a range of 1 (not diagonals) + // Otherwise construct a rect and get the positions in a range of 1 (not diagonals) - const adjacentCoords = [ - { - x: coord.x - 1, - y: coord.y, - }, - { - x: coord.x + 1, - y: coord.y, - }, - { - x: coord.x, - y: coord.y - 1, - }, - { - x: coord.x, - y: coord.y + 1, - }, - ] + const adjacentCoords = [ + { + x: coord.x - 1, + y: coord.y, + }, + { + x: coord.x + 1, + y: coord.y, + }, + { + x: coord.x, + y: coord.y - 1, + }, + { + x: coord.x, + y: coord.y + 1, + }, + ] - // Loop through adjacent positions + // Loop through adjacent positions - for (const coord2 of adjacentCoords) { - if (!doesCoordExist(coord2)) continue + for (const coord2 of adjacentCoords) { + if (!doesCoordExist(coord2)) continue - // Iterate if the adjacent pos has been visited or isn't a tile + // Iterate if the adjacent pos has been visited or isn't a tile - if (localVisitedCoords[packAsNum(coord2)] === 1) continue + if (localVisitedCoords[packAsNum(coord2)] === 1) continue - // Otherwise record that it has been visited + // Otherwise record that it has been visited - localVisitedCoords[packAsNum(coord2)] = 1 + localVisitedCoords[packAsNum(coord2)] = 1 - if (opts.coordMap[packAsNum(coord2)] === 255) continue + if (opts.coordMap[packAsNum(coord2)] === 255) continue - // Add it tofastFillerSide the next gen + // Add it tofastFillerSide the next gen - nextGeneration.push(coord2) - } - } + nextGeneration.push(coord2) } + } + } - // Flood all adjacent positions excluding diagonals + // Flood all adjacent positions excluding diagonals - if (!nextGeneration.length) { - localVisitedCoords = new Uint8Array(visitedCoords) + if (!nextGeneration.length) { + localVisitedCoords = new Uint8Array(visitedCoords) - // Iterate through positions of this gen + // Iterate through positions of this gen - for (const coord of thisGeneration) { - // If the pos can be an anchor, inform it + for (const coord of thisGeneration) { + // If the pos can be an anchor, inform it - if (opts.targetCondition(coord)) - return new RoomPosition(coord.x, coord.y, this.name) + if (opts.targetCondition(coord)) return new RoomPosition(coord.x, coord.y, this.name) - // Otherwise construct a rect and get the positions in a range of 1 (not diagonals) + // Otherwise construct a rect and get the positions in a range of 1 (not diagonals) - const adjacentCoords = findCoordsInsideRect( - coord.x - 1, - coord.y - 1, - coord.x + 1, - coord.y + 1, - ) + const adjacentCoords = findCoordsInsideRect( + coord.x - 1, + coord.y - 1, + coord.x + 1, + coord.y + 1, + ) - // Loop through adjacent positions + // Loop through adjacent positions - for (const coord2 of adjacentCoords) { - if (!doesCoordExist(coord2)) continue + for (const coord2 of adjacentCoords) { + if (!doesCoordExist(coord2)) continue - // Iterate if the adjacent pos has been visited or isn't a tile + // Iterate if the adjacent pos has been visited or isn't a tile - if (localVisitedCoords[packAsNum(coord2)] === 1) continue + if (localVisitedCoords[packAsNum(coord2)] === 1) continue - // Otherwise record that it has been visited + // Otherwise record that it has been visited - localVisitedCoords[packAsNum(coord2)] = 1 + localVisitedCoords[packAsNum(coord2)] = 1 - if (opts.coordMap[packAsNum(coord2)] === 255) continue + if (opts.coordMap[packAsNum(coord2)] === 255) continue - // Add it tofastFillerSide the next gen + // Add it tofastFillerSide the next gen - nextGeneration.push(coord2) - } - } + nextGeneration.push(coord2) } + } + } - // Flood all adjacent positions, including diagonals - - if (!nextGeneration.length) { - localVisitedCoords = new Uint8Array(visitedCoords) + // Flood all adjacent positions, including diagonals - // Iterate through positions of this gen + if (!nextGeneration.length) { + localVisitedCoords = new Uint8Array(visitedCoords) - for (const coord of thisGeneration) { - // If the pos can be an anchor, inform it + // Iterate through positions of this gen - if (opts.targetCondition(coord)) - return new RoomPosition(coord.x, coord.y, this.name) + for (const coord of thisGeneration) { + // If the pos can be an anchor, inform it - // Otherwise construct a rect and get the positions in a range of 1 (not diagonals) + if (opts.targetCondition(coord)) return new RoomPosition(coord.x, coord.y, this.name) - const adjacentCoords = findCoordsInsideRect( - coord.x - 1, - coord.y - 1, - coord.x + 1, - coord.y + 1, - ) - // Loop through adjacent positions + // Otherwise construct a rect and get the positions in a range of 1 (not diagonals) - for (const coord2 of adjacentCoords) { - if (!doesCoordExist(coord2)) continue + const adjacentCoords = findCoordsInsideRect( + coord.x - 1, + coord.y - 1, + coord.x + 1, + coord.y + 1, + ) + // Loop through adjacent positions - // Iterate if the adjacent pos has been visited or isn't a tile + for (const coord2 of adjacentCoords) { + if (!doesCoordExist(coord2)) continue - if (localVisitedCoords[packAsNum(coord2)] === 1) continue + // Iterate if the adjacent pos has been visited or isn't a tile - // Otherwise record that it has been visited + if (localVisitedCoords[packAsNum(coord2)] === 1) continue - localVisitedCoords[packAsNum(coord2)] = 1 + // Otherwise record that it has been visited - // Add it tofastFillerSide the next gen + localVisitedCoords[packAsNum(coord2)] = 1 - nextGeneration.push(coord2) - } - } - } + // Add it tofastFillerSide the next gen - if (opts.visuals) { - for (const coord of nextGeneration) { - this.visual.text(opts.coordMap[packAsNum(coord)].toString(), coord.x, coord.y, { - font: 0.5, - color: customColors.yellow, - }) - - this.visual.text(depth.toString(), coord.x, coord.y + 0.5, { - font: 0.5, - color: customColors.green, - }) - } + nextGeneration.push(coord2) } + } + } - // Set this gen to next gen + if (opts.visuals) { + for (const coord of nextGeneration) { + this.visual.text(opts.coordMap[packAsNum(coord)].toString(), coord.x, coord.y, { + font: 0.5, + color: customColors.yellow, + }) - visitedCoords = new Uint8Array(localVisitedCoords) - thisGeneration = nextGeneration - depth += 1 + this.visual.text(depth.toString(), coord.x, coord.y + 0.5, { + font: 0.5, + color: customColors.green, + }) + } } - // Inform false if no value was found + // Set this gen to next gen - return false + visitedCoords = new Uint8Array(localVisitedCoords) + thisGeneration = nextGeneration + depth += 1 + } + + // Inform false if no value was found + + return false } Room.prototype.errorVisual = function (coord, visualize = global.settings.roomVisuals) { - if (!visualize) return - - this.visual.circle(coord.x, coord.y, { - fill: '', - stroke: customColors.red, - radius: 0.5, - strokeWidth: 0.15, - opacity: 0.3, - }) + if (!visualize) return + + this.visual.circle(coord.x, coord.y, { + fill: '', + stroke: customColors.red, + radius: 0.5, + strokeWidth: 0.15, + opacity: 0.3, + }) } Room.prototype.findAllyCSiteTargetID = function (creep) { - // If there are no sites inform false + // If there are no sites inform false - if (!this.roomManager.notMyConstructionSites.ally.length) return false + if (!this.roomManager.notMyConstructionSites.ally.length) return false - // Loop through structuretypes of the build priority + // Loop through structuretypes of the build priority - for (const structureType of defaultStructureTypesByBuildPriority) { - const cSitesOfType = this.roomManager.allyConstructionSitesByType[structureType] - if (!cSitesOfType.length) continue + for (const structureType of defaultStructureTypesByBuildPriority) { + const cSitesOfType = this.roomManager.allyConstructionSitesByType[structureType] + if (!cSitesOfType.length) continue - // Otherwise get the anchor, using the creep's pos if undefined, or using the center of the room if there is no creep + // Otherwise get the anchor, using the creep's pos if undefined, or using the center of the room if there is no creep - const anchor = this.roomManager.anchor || creep?.pos || new RoomPosition(25, 25, this.name) + const anchor = this.roomManager.anchor || creep?.pos || new RoomPosition(25, 25, this.name) - // Record the closest site to the anchor in the room's global and inform true + // Record the closest site to the anchor in the room's global and inform true - this.memory[RoomMemoryKeys.constructionSiteTarget] = findClosestObject( - anchor, - cSitesOfType, - ).id - return true - } + this.memory[RoomMemoryKeys.constructionSiteTarget] = findClosestObject(anchor, cSitesOfType).id + return true + } - // no target was found + // no target was found - return false + return false } Room.prototype.findUnprotectedCoords = function (visuals) { - // Construct a cost matrix for the flood + // Construct a cost matrix for the flood - this.unprotectedCoords = new Uint8Array(2500) - const visitedCoords = new Uint8Array(2500) + this.unprotectedCoords = new Uint8Array(2500) + const visitedCoords = new Uint8Array(2500) - // Construct values for the flood + // Construct values for the flood - let depth = 0 - let thisGeneration: Coord[] = this.find(FIND_EXIT) - let nextGeneration: Coord[] = [] + let depth = 0 + let thisGeneration: Coord[] = this.find(FIND_EXIT) + let nextGeneration: Coord[] = [] - // Loop through positions of seeds + // Loop through positions of seeds - for (const coord of thisGeneration) visitedCoords[packAsNum(coord)] = 1 + for (const coord of thisGeneration) visitedCoords[packAsNum(coord)] = 1 - // So long as there are positions in this gen + // So long as there are positions in this gen - while (thisGeneration.length) { - // Reset next gen + while (thisGeneration.length) { + // Reset next gen - nextGeneration = [] + nextGeneration = [] - // Iterate through positions of this gen + // Iterate through positions of this gen - for (const coord1 of thisGeneration) { - // If the depth isn't 0 + for (const coord1 of thisGeneration) { + // If the depth isn't 0 - if (depth > 0) { - const packedCoord1 = packAsNum(coord1) + if (depth > 0) { + const packedCoord1 = packAsNum(coord1) - // Iterate if the terrain is a wall + // Iterate if the terrain is a wall - if (this.rampartCoords[packedCoord1] > 0) continue + if (this.rampartCoords[packedCoord1] > 0) continue - // Otherwise so long as the pos isn't a wall record its depth in the flood cost matrix + // Otherwise so long as the pos isn't a wall record its depth in the flood cost matrix - this.unprotectedCoords[packedCoord1] = depth * 10 + 10 + this.unprotectedCoords[packedCoord1] = depth * 10 + 10 - // If visuals are enabled, show the depth on the pos - /* + // If visuals are enabled, show the depth on the pos + /* if (visuals) this.visual.rect(coord1.x - 0.5, coord1.y - 0.5, 1, 1, { fill: `hsl(${200}${depth * 2}, 100%, 60%)`, @@ -1325,312 +1265,312 @@ Room.prototype.findUnprotectedCoords = function (visuals) { }) this.visual.text(depth.toString(), coord1.x, coord1.y) */ - } + } - // Loop through adjacent positions + // Loop through adjacent positions - for (const coord2 of findCoordsInsideRect( - coord1.x - 1, - coord1.y - 1, - coord1.x + 1, - coord1.y + 1, - )) { - const packedCoord2 = packAsNum(coord2) + for (const coord2 of findCoordsInsideRect( + coord1.x - 1, + coord1.y - 1, + coord1.x + 1, + coord1.y + 1, + )) { + const packedCoord2 = packAsNum(coord2) - // Iterate if the adjacent pos has been visited or isn't a tile + // Iterate if the adjacent pos has been visited or isn't a tile - if (visitedCoords[packedCoord2] === 1) continue + if (visitedCoords[packedCoord2] === 1) continue - // Otherwise record that it has been visited + // Otherwise record that it has been visited - visitedCoords[packedCoord2] = 1 + visitedCoords[packedCoord2] = 1 - // Add it to the next gen + // Add it to the next gen - nextGeneration.push(coord2) - } - } + nextGeneration.push(coord2) + } + } - // Set this gen to next gen + // Set this gen to next gen - thisGeneration = nextGeneration + thisGeneration = nextGeneration - // Increment depth + // Increment depth - depth += 1 - } + depth += 1 + } } Room.prototype.groupRampartPositions = function (rampartPositions) { - const room = this + const room = this - // Construct a costMatrix to store visited positions + // Construct a costMatrix to store visited positions - const visitedCoords = new Uint8Array(2500) + const visitedCoords = new Uint8Array(2500) - const groupedPositions = [] - let groupIndex = 0 + const groupedPositions = [] + let groupIndex = 0 - // Loop through each pos of positions + // Loop through each pos of positions - for (const packedPos of rampartPositions) { - const pos = unpackNumAsCoord(packedPos) + for (const packedPos of rampartPositions) { + const pos = unpackNumAsCoord(packedPos) - // If the pos has already been visited, iterate + // If the pos has already been visited, iterate - if (visitedCoords[packAsNum(pos)] === 1) continue + if (visitedCoords[packAsNum(pos)] === 1) continue - // Record that this pos has been visited + // Record that this pos has been visited - visitedCoords[packAsNum(pos)] = 1 + visitedCoords[packAsNum(pos)] = 1 - // Construct the group for this index with the pos in it the group + // Construct the group for this index with the pos in it the group - groupedPositions[groupIndex] = [new RoomPosition(pos.x, pos.y, room.name)] + groupedPositions[groupIndex] = [new RoomPosition(pos.x, pos.y, room.name)] - // Construct values for floodFilling + // Construct values for floodFilling - let thisGeneration = [pos] - let nextGeneration: Coord[] = [] - let groupSize = 0 + let thisGeneration = [pos] + let nextGeneration: Coord[] = [] + let groupSize = 0 - // So long as there are positions in this gen + // So long as there are positions in this gen - while (thisGeneration.length) { - // Reset next gen + while (thisGeneration.length) { + // Reset next gen - nextGeneration = [] + nextGeneration = [] - // Iterate through positions of this gen + // Iterate through positions of this gen - for (const pos of thisGeneration) { - // Loop through adjacent positions + for (const pos of thisGeneration) { + // Loop through adjacent positions - for (const adjacentPos of findAdjacentCoordsToCoord(pos)) { - const packedAdjacentCoord = packAsNum(adjacentPos) + for (const adjacentPos of findAdjacentCoordsToCoord(pos)) { + const packedAdjacentCoord = packAsNum(adjacentPos) - // Iterate if the adjacent pos has been visited or isn't a tile + // Iterate if the adjacent pos has been visited or isn't a tile - if (visitedCoords[packedAdjacentCoord] === 1) continue + if (visitedCoords[packedAdjacentCoord] === 1) continue - // Otherwise record that it has been visited + // Otherwise record that it has been visited - visitedCoords[packedAdjacentCoord] = 1 + visitedCoords[packedAdjacentCoord] = 1 - // If a rampart is not planned for this position, iterate + // If a rampart is not planned for this position, iterate - if (this.rampartCoords[packAsNum(adjacentPos)] !== 1) continue + if (this.rampartCoords[packAsNum(adjacentPos)] !== 1) continue - // Add it to the next gen and this group + // Add it to the next gen and this group - groupedPositions[groupIndex].push( - new RoomPosition(adjacentPos.x, adjacentPos.y, room.name), - ) + groupedPositions[groupIndex].push( + new RoomPosition(adjacentPos.x, adjacentPos.y, room.name), + ) - groupSize += 1 - nextGeneration.push(adjacentPos) - } - } + groupSize += 1 + nextGeneration.push(adjacentPos) + } + } - if (groupSize >= maxRampartGroupSize) break + if (groupSize >= maxRampartGroupSize) break - // Set this gen to next gen + // Set this gen to next gen - thisGeneration = nextGeneration - } + thisGeneration = nextGeneration + } - // Increase the groupIndex + // Increase the groupIndex - groupIndex += 1 - } + groupIndex += 1 + } - // Inform groupedPositions + // Inform groupedPositions - return groupedPositions + return groupedPositions } Room.prototype.findPositionsInsideRect = function (x1, y1, x2, y2) { - // Construct positions + // Construct positions - const positions = [] + const positions = [] - // Loop through coordinates inside the rect + // Loop through coordinates inside the rect - for (let x = x1; x <= x2; x += 1) { - for (let y = y1; y <= y2; y += 1) { - // Iterate if the pos doesn't map onto a room + for (let x = x1; x <= x2; x += 1) { + for (let y = y1; y <= y2; y += 1) { + // Iterate if the pos doesn't map onto a room - if (x < 0 || x >= roomDimensions || y < 0 || y >= roomDimensions) continue + if (x < 0 || x >= roomDimensions || y < 0 || y >= roomDimensions) continue - // Otherwise ass the x and y to positions + // Otherwise ass the x and y to positions - positions.push(new RoomPosition(x, y, this.name)) - } + positions.push(new RoomPosition(x, y, this.name)) } + } - // Inform positions + // Inform positions - return positions + return positions } Room.prototype.findAdjacentPositions = function (rx, ry) { - // Construct positions + // Construct positions - const positions = [] + const positions = [] - // Loop through coordinates inside the rect + // Loop through coordinates inside the rect - for (let x = rx - 1; x <= rx + 1; x += 1) { - for (let y = ry - 1; y <= ry + 1; y += 1) { - if (x === rx && y === ry) continue + for (let x = rx - 1; x <= rx + 1; x += 1) { + for (let y = ry - 1; y <= ry + 1; y += 1) { + if (x === rx && y === ry) continue - // Iterate if the pos doesn't map onto a room + // Iterate if the pos doesn't map onto a room - if (x < 0 || x >= roomDimensions || y < 0 || y >= roomDimensions) continue + if (x < 0 || x >= roomDimensions || y < 0 || y >= roomDimensions) continue - // Otherwise ass the x and y to positions + // Otherwise ass the x and y to positions - positions.push(new RoomPosition(x, y, this.name)) - } + positions.push(new RoomPosition(x, y, this.name)) } + } - // Inform positions + // Inform positions - return positions + return positions } Room.prototype.createWorkRequest = function () { - if (this.find(FIND_SOURCES).length < 2) return false - if (Memory.workRequests[this.name]) return false + if (this.find(FIND_SOURCES).length < 2) return false + if (Memory.workRequests[this.name]) return false - roomNameUtils.findDynamicScore(this.name) + roomNameUtils.findDynamicScore(this.name) - const communePlanned = Memory.rooms[this.name][RoomMemoryKeys.communePlanned] - if (communePlanned === false) return false + const communePlanned = Memory.rooms[this.name][RoomMemoryKeys.communePlanned] + if (communePlanned === false) return false - if (communePlanned !== true) { - const result = this.roomManager.communePlanner.preTickRun(this) - if (result === Result.fail) { - this.memory[RoomMemoryKeys.communePlanned] = false - return false - } + if (communePlanned !== true) { + const result = this.roomManager.communePlanner.preTickRun(this) + if (result === Result.fail) { + this.memory[RoomMemoryKeys.communePlanned] = false + return false + } - if (result !== Result.success) { - return false - } + if (result !== Result.success) { + return false } + } - const request = (Memory.workRequests[this.name] = {}) + const request = (Memory.workRequests[this.name] = {}) - return true + return true } Room.prototype.findSwampPlainsRatio = function () { - const terrainAmounts = [0, 0, 0] + const terrainAmounts = [0, 0, 0] - const terrain = this.getTerrain() + const terrain = this.getTerrain() - for (let x = 0; x < roomDimensions; x += 1) { - for (let y = 0; y < roomDimensions; y += 1) { - terrainAmounts[terrain.get(x, y)] += 1 - } + for (let x = 0; x < roomDimensions; x += 1) { + for (let y = 0; y < roomDimensions; y += 1) { + terrainAmounts[terrain.get(x, y)] += 1 } + } - return terrainAmounts[TERRAIN_MASK_SWAMP] / terrainAmounts[0] + return terrainAmounts[TERRAIN_MASK_SWAMP] / terrainAmounts[0] } Room.prototype.visualizeCoordMap = function (coordMap, color, magnification = 2) { - if (color) { - for (let x = 0; x < roomDimensions; x += 1) { - for (let y = 0; y < roomDimensions; y += 1) { - this.visual.rect(x - 0.5, y - 0.5, 1, 1, { - fill: `hsl(${200}${coordMap[packXYAsNum(x, y)] * magnification}, 100%, 60%)`, - opacity: 0.4, - }) - } - } - - return + if (color) { + for (let x = 0; x < roomDimensions; x += 1) { + for (let y = 0; y < roomDimensions; y += 1) { + this.visual.rect(x - 0.5, y - 0.5, 1, 1, { + fill: `hsl(${200}${coordMap[packXYAsNum(x, y)] * magnification}, 100%, 60%)`, + opacity: 0.4, + }) + } } - for (let x = 0; x < roomDimensions; x += 1) { - for (let y = 0; y < roomDimensions; y += 1) { - this.visual.text(coordMap[packXYAsNum(x, y)].toString(), x, y, { - font: 0.5, - }) - } + return + } + + for (let x = 0; x < roomDimensions; x += 1) { + for (let y = 0; y < roomDimensions; y += 1) { + this.visual.text(coordMap[packXYAsNum(x, y)].toString(), x, y, { + font: 0.5, + }) } + } } Room.prototype.visualizeCostMatrix = function (cm, color, magnification = 2) { - if (color) { - for (let x = 0; x < roomDimensions; x += 1) { - for (let y = 0; y < roomDimensions; y += 1) { - this.visual.rect(x - 0.5, y - 0.5, 1, 1, { - fill: `hsl(${200}${cm.get(x, y) * magnification}, 100%, 60%)`, - opacity: 0.4, - }) - } - } - - return + if (color) { + for (let x = 0; x < roomDimensions; x += 1) { + for (let y = 0; y < roomDimensions; y += 1) { + this.visual.rect(x - 0.5, y - 0.5, 1, 1, { + fill: `hsl(${200}${cm.get(x, y) * magnification}, 100%, 60%)`, + opacity: 0.4, + }) + } } - for (let x = 0; x < roomDimensions; x += 1) { - for (let y = 0; y < roomDimensions; y += 1) { - this.visual.text(cm.get(x, y).toString(), x, y, { - font: 0.5, - }) - } + return + } + + for (let x = 0; x < roomDimensions; x += 1) { + for (let y = 0; y < roomDimensions; y += 1) { + this.visual.text(cm.get(x, y).toString(), x, y, { + font: 0.5, + }) } + } } Room.prototype.coordHasStructureTypes = function (coord, types) { - for (const structure of this.lookForAt(LOOK_STRUCTURES, coord.x, coord.y)) { - if (!types.has(structure.structureType)) continue + for (const structure of this.lookForAt(LOOK_STRUCTURES, coord.x, coord.y)) { + if (!types.has(structure.structureType)) continue - return true - } + return true + } - return false + return false } Room.prototype.createPowerTask = function (target, powerType, priority) { - // There is already has a power creep responding to this target with the power - customLog('MADE POWER TASK FOR', target) - if (target.reservePowers.has(powerType)) return false + // There is already has a power creep responding to this target with the power + customLog('MADE POWER TASK FOR', target) + if (target.reservePowers.has(powerType)) return false - // Create a power task with info on the cooldown + // Create a power task with info on the cooldown - const effect = target.effectsData.get(powerType) - const cooldown = effect ? effect.ticksRemaining : 0 + const effect = target.effectsData.get(powerType) + const cooldown = effect ? effect.ticksRemaining : 0 - const ID = collectiveManager.newTickID() + const ID = collectiveManager.newTickID() - return (this.powerTasks[ID] = { - taskID: ID, - targetID: target.id, - powerType, - packedCoord: packCoord(target.pos), - cooldown, - priority, - }) + return (this.powerTasks[ID] = { + taskID: ID, + targetID: target.id, + powerType, + packedCoord: packCoord(target.pos), + cooldown, + priority, + }) } Room.prototype.highestWeightedStoringStructures = function (resourceType) { - if (!this.storage && !this.terminal) return false + if (!this.storage && !this.terminal) return false - if (!this.storage) return this.terminal - if (!this.terminal) return this.storage + if (!this.storage) return this.terminal + if (!this.terminal) return this.storage - if ( - this.storage.store.getUsedCapacity(resourceType) / 3 > - this.terminal.store.getUsedCapacity(resourceType) - ) { + if ( + this.storage.store.getUsedCapacity(resourceType) / 3 > + this.terminal.store.getUsedCapacity(resourceType) + ) { return this.storage - } + } - return this.terminal + return this.terminal } Room.prototype.createRoomLogisticsRequest = function (args) { @@ -1686,14 +1626,20 @@ Room.prototype.createRoomLogisticsRequest = function (args) { if (Game.flags[FlagNames.debugRoomLogistics]) { if (args.type === RoomLogisticsRequestTypes.offer) { - this.visual.text('O ' + amount.toString(), args.target.pos.x, args.target.pos.y + 0.5, {font: '0.3'}) - this.visual.text(args.priority.toString(), args.target.pos, {font: '0.3'}) + this.visual.text('O ' + amount.toString(), args.target.pos.x, args.target.pos.y + 0.5, { + font: '0.3', + }) + this.visual.text(args.priority.toString(), args.target.pos, { font: '0.3' }) } else if (args.type === RoomLogisticsRequestTypes.transfer) { - this.visual.text('T ' + amount.toString(), args.target.pos.x, args.target.pos.y + 0.5, {font: '0.3'}) - this.visual.text(args.priority.toString(), args.target.pos, {font: '0.3'}) + this.visual.text('T ' + amount.toString(), args.target.pos.x, args.target.pos.y + 0.5, { + font: '0.3', + }) + this.visual.text(args.priority.toString(), args.target.pos, { font: '0.3' }) } else if (args.type === RoomLogisticsRequestTypes.withdraw) { - this.visual.text('W ' + amount.toString(), args.target.pos.x, args.target.pos.y + 0.5, {font: '0.3'}) - this.visual.text(args.priority.toString(), args.target.pos, {font: '0.3'}) + this.visual.text('W ' + amount.toString(), args.target.pos.x, args.target.pos.y + 0.5, { + font: '0.3', + }) + this.visual.text(args.priority.toString(), args.target.pos, { font: '0.3' }) } } @@ -1716,79 +1662,79 @@ Room.prototype.createRoomLogisticsRequest = function (args) { } Room.prototype.findStructureAtCoord = function ( - coord: Coord, - conditions: (structure: T) => boolean, + coord: Coord, + conditions: (structure: T) => boolean, ) { - return this.findStructureAtXY(coord.x, coord.y, conditions) + return this.findStructureAtXY(coord.x, coord.y, conditions) } Room.prototype.findStructureAtXY = function ( - x: number, - y: number, - conditions: (structure: T) => boolean, + x: number, + y: number, + conditions: (structure: T) => boolean, ) { - const structureIDs = this.roomManager.structureCoords.get(packXYAsCoord(x, y)) - if (!structureIDs) return false + const structureIDs = this.roomManager.structureCoords.get(packXYAsCoord(x, y)) + if (!structureIDs) return false - for (const ID of structureIDs) { - const structure = findObjectWithID(ID) as T - if (conditions(structure)) return structure - } + for (const ID of structureIDs) { + const structure = findObjectWithID(ID) as T + if (conditions(structure)) return structure + } - return false + return false } Room.prototype.findCSiteAtCoord = function ( - coord: Coord, - conditions: (cSite: T) => boolean, + coord: Coord, + conditions: (cSite: T) => boolean, ) { - return this.findCSiteAtXY(coord.x, coord.y, conditions) + return this.findCSiteAtXY(coord.x, coord.y, conditions) } Room.prototype.findCSiteAtXY = function ( - x: number, - y: number, - conditions: (cSite: T) => boolean, + x: number, + y: number, + conditions: (cSite: T) => boolean, ) { - const cSiteIDs = this.roomManager.cSiteCoords.get(packXYAsCoord(x, y)) - if (!cSiteIDs) return false + const cSiteIDs = this.roomManager.cSiteCoords.get(packXYAsCoord(x, y)) + if (!cSiteIDs) return false - for (const ID of cSiteIDs) { - const cSite = findObjectWithID(ID) as T - /* console.log('findCSite', cSite, ID) */ - if (conditions(cSite)) return cSite - } + for (const ID of cSiteIDs) { + const cSite = findObjectWithID(ID) as T + /* console.log('findCSite', cSite, ID) */ + if (conditions(cSite)) return cSite + } - return false + return false } Room.prototype.findStructureInRange = function ( - startCoord: Coord, - range: number, - condition: (structure: T) => boolean, + startCoord: Coord, + range: number, + condition: (structure: T) => boolean, ): T | false { - let structureID: Id + let structureID: Id - for (let x = startCoord.x - range; x <= startCoord.x + range; x += 1) { - for (let y = startCoord.y - range; y <= startCoord.y + range; y += 1) { - // Iterate if the pos doesn't map onto a room + for (let x = startCoord.x - range; x <= startCoord.x + range; x += 1) { + for (let y = startCoord.y - range; y <= startCoord.y + range; y += 1) { + // Iterate if the pos doesn't map onto a room - if (x < 0 || x >= roomDimensions || y < 0 || y >= roomDimensions) continue + if (x < 0 || x >= roomDimensions || y < 0 || y >= roomDimensions) continue - const structureIDs = this.roomManager.structureCoords.get(packXYAsCoord(x, y)) - if (!structureIDs) continue + const structureIDs = this.roomManager.structureCoords.get(packXYAsCoord(x, y)) + if (!structureIDs) continue - structureID = structureIDs.find(structureID => { - return condition(findObjectWithID(structureID) as T) - }) + structureID = structureIDs.find(structureID => { + return condition(findObjectWithID(structureID) as T) + }) - if (structureID) return findObjectWithID(structureID) as T - } + if (structureID) return findObjectWithID(structureID) as T } + } - return false + return false } Room.prototype.coordVisual = function (x, y, fill = customColors.lightBlue) { - this.visual.rect(x - 0.5, y - 0.5, 1, 1, { fill }) + this.visual.rect(x - 0.5, y - 0.5, 1, 1, { fill }) } diff --git a/src/room/roomNameUtils.ts b/src/room/roomNameUtils.ts index 4ecd49c5c..e1a84f165 100644 --- a/src/room/roomNameUtils.ts +++ b/src/room/roomNameUtils.ts @@ -325,6 +325,37 @@ export class RoomNameUtils { return closest } + + scoutByRoomName(roomName: string) { + // Find the numbers in the room's name + + const [EWstring, NSstring] = roomName.match(/\d+/g) + + // Convert he numbers from strings into actual numbers + + const EW = parseInt(EWstring) + const NS = parseInt(NSstring) + + const roomMemory = Memory.rooms[roomName] + + // Use the numbers to deduce some room types - cheaply! + + if (EW % 10 === 0 && NS % 10 === 0) { + return (roomMemory[RoomMemoryKeys.type] = RoomTypes.intersection) + } + + if (EW % 10 === 0 || NS % 10 === 0) { + return (roomMemory[RoomMemoryKeys.type] = RoomTypes.highway) + } + if (EW % 5 === 0 && NS % 5 === 0) { + return (roomMemory[RoomMemoryKeys.type] = RoomTypes.center) + } + if (Math.abs(5 - (EW % 10)) <= 1 && Math.abs(5 - (NS % 10)) <= 1) { + return (roomMemory[RoomMemoryKeys.type] = RoomTypes.sourceKeeper) + } + + return false + } } export const roomNameUtils = new RoomNameUtils() diff --git a/src/settingsDefault.ts b/src/settingsDefault.ts index 5de931169..7d61fd59e 100644 --- a/src/settingsDefault.ts +++ b/src/settingsDefault.ts @@ -4,7 +4,7 @@ import { Settings } from 'types/settings' * Default global.settings. DO NOT MODIFY for personal use; instead, include your preferences in global.settings.ts */ export const defaultSettings: Settings = { - breakingVersion: 124, + breakingVersion: 125, roomVisuals: false, mapVisuals: false, allies: ['MarvinTMB'], diff --git a/src/types.d.ts b/src/types.d.ts index 59d0a0eda..1900d54e7 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -537,8 +537,6 @@ declare global { */ deleteTask(taskID: any, responder: boolean): void - scoutByRoomName(): number | false - scoutRemote(scoutingRoom?: Room): number | false scoutEnemyReservedRemote(): number | false scoutEnemyUnreservedRemote(): number | false @@ -1224,6 +1222,8 @@ declare global { * The destination roomNames of each portal */ [RoomMemoryKeys.portalsTo]: string[] + [RoomMemoryKeys.sourceCoords]: string + [RoomMemoryKeys.controllerCoord]: string // Types specific From 572da25fc1a2d267ad64a2df8b03a106fc6f99db Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 13 Jan 2024 23:03:00 -0800 Subject: [PATCH 079/190] commune data and request room status fixes --- src/international/requests.ts | 4 +- src/main.ts | 2 +- src/room/commune/commune.ts | 15 +- src/room/construction/communePlanner.ts | 5522 +++++++++++------------ src/room/roomFunctions.ts | 2 +- 5 files changed, 2750 insertions(+), 2795 deletions(-) diff --git a/src/international/requests.ts b/src/international/requests.ts index 78766d0ac..1b99622cf 100644 --- a/src/international/requests.ts +++ b/src/international/requests.ts @@ -291,7 +291,7 @@ export class RequestsManager extends Sleepable { if (Game.map.getRoomStatus(requestName) !== Game.map.getRoomStatus(communeName)) { // We probably can't reach as it will likely be a respawn, novice, or closed - Memory.workRequests[requestName][WorkRequestKeys.abandon] = 20000 + request[CombatRequestKeys.abandon] = 20000 continue } @@ -364,7 +364,7 @@ export class RequestsManager extends Sleepable { if (Game.map.getRoomStatus(requestName) !== Game.map.getRoomStatus(communeName)) { // We probably can't reach as it will likely be a respawn, novice, or closed - Memory.workRequests[requestName][WorkRequestKeys.abandon] = 20000 + request[HaulRequestKeys.abandon] = 20000 continue } diff --git a/src/main.ts b/src/main.ts index 1ee9e0dfc..4cdce1c15 100644 --- a/src/main.ts +++ b/src/main.ts @@ -61,9 +61,9 @@ export function originalLoop() { simpleAllies.initRun() wasm.collaborator() - roomsManager.updateRun() roomDataManager.initRooms() roomDataManager.updateRooms() + roomsManager.updateRun() transactionsManager.run() requestsManager.run() diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index b865ce5d3..e2f639df4 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -27,7 +27,6 @@ import { } from 'international/constants' import './factory' import { LabManager } from './labs' -import './towers' import './links' import { RemotesManager } from './remotesManager' import { WorkRequestManager } from './workRequest' @@ -39,10 +38,7 @@ import { SpawningStructuresManager } from './spawning/spawningStructures' import { HaulRequestManager } from './haulRequestManager' import { HaulerSizeManager } from './haulerSize' import { HaulerNeedManager } from './haulerNeed' -import { - packCoord, - unpackPosAt, -} from 'other/codec' +import { packCoord, unpackPosAt } from 'other/codec' import { StoringStructuresManager } from './storingStructures' import { LinkManager } from './links' import { FactoryManager } from './factory' @@ -203,6 +199,7 @@ export class CommuneManager { roomMemory[RoomMemoryKeys.greatestRCL] = room.controller.level } + this.room.roomManager.communePlanner.attemptPlan(this.room) communeProcs.registerFunneling(room) communeProcs.getRCLUpdate(room) @@ -254,8 +251,6 @@ export class CommuneManager { initRun() { this.preTickTest() - this.room.roomManager.communePlanner.preTickRun(this.room) - const roomMemory = Memory.rooms[this.room.name] if (!roomMemory[RoomMemoryKeys.communePlanned]) return @@ -611,7 +606,7 @@ export class CommuneManager { // We can use links const controllerLink = this.controllerLink - if (!controllerLink || ! structureUtils.isRCLActionable(controllerLink)) return false + if (!controllerLink || !structureUtils.isRCLActionable(controllerLink)) return false const hubLink = this.room.roomManager.hubLink if (!hubLink || !structureUtils.isRCLActionable(hubLink)) return false @@ -812,8 +807,8 @@ export class CommuneManager { let actionableSpawningStructures: SpawningStructures = structures.spawn actionableSpawningStructures = actionableSpawningStructures.concat(structures.extension) - actionableSpawningStructures = actionableSpawningStructures.filter( - structure => structureUtils.isRCLActionable(structure), + actionableSpawningStructures = actionableSpawningStructures.filter(structure => + structureUtils.isRCLActionable(structure), ) this.actionableSpawningStructuresIDs = actionableSpawningStructures.map( diff --git a/src/room/construction/communePlanner.ts b/src/room/construction/communePlanner.ts index fa040d78d..1ee449b79 100644 --- a/src/room/construction/communePlanner.ts +++ b/src/room/construction/communePlanner.ts @@ -1,59 +1,59 @@ import { - CPUMaxPerTick, - defaultRoadPlanningPlainCost, - maxRampartGroupSize, - customColors, - roomDimensions, - stamps, - Result, - cardinalOffsets, - adjacentOffsets, - defaultMinCutDepth, - minOnboardingRamparts, - defaultSwampCost, - allStructureTypes, - buildableStructureTypes, - structureTypesToProtectSet, - RoomMemoryKeys, - basePlanCPUBucketThreshold, + CPUMaxPerTick, + defaultRoadPlanningPlainCost, + maxRampartGroupSize, + customColors, + roomDimensions, + stamps, + Result, + cardinalOffsets, + adjacentOffsets, + defaultMinCutDepth, + minOnboardingRamparts, + defaultSwampCost, + allStructureTypes, + buildableStructureTypes, + structureTypesToProtectSet, + RoomMemoryKeys, + basePlanCPUBucketThreshold, } from 'international/constants' import { - areCoordsEqual, - createPosMap, - findAdjacentCoordsToCoord, - findAdjacentCoordsToXY, - findAvgBetweenCoords, - findClosestCoord, - findClosestPos, - findCoordsInRange, - findCoordsInRangeXY, - findCoordsInsideRect, - forAdjacentCoords, - forCoordsInRange, - getRangeXY, - getRange, - isXYExit, - isXYInBorder, - isXYInRoom, - packAsNum, - packXYAsNum, - unpackNumAsCoord, - unpackNumAsPos, - forCoordsAroundRange, - randomIntRange, - sortBy, + areCoordsEqual, + createPosMap, + findAdjacentCoordsToCoord, + findAdjacentCoordsToXY, + findAvgBetweenCoords, + findClosestCoord, + findClosestPos, + findCoordsInRange, + findCoordsInRangeXY, + findCoordsInsideRect, + forAdjacentCoords, + forCoordsInRange, + getRangeXY, + getRange, + isXYExit, + isXYInBorder, + isXYInRoom, + packAsNum, + packXYAsNum, + unpackNumAsCoord, + unpackNumAsPos, + forCoordsAroundRange, + randomIntRange, + sortBy, } from 'utils/utils' import { collectiveManager } from 'international/collective' import { - packCoord, - packPos, - packPosList, - packStampAnchors, - packXYAsCoord, - reversePosList, - unpackCoord, - unpackPosList, - unpackStampAnchors, + packCoord, + packPos, + packPosList, + packStampAnchors, + packXYAsCoord, + reversePosList, + unpackCoord, + unpackPosList, + unpackStampAnchors, } from 'other/codec' import 'other/RoomVisual' import { CommuneManager } from 'room/commune/commune' @@ -69,356 +69,353 @@ const dynamicDistanceWeight = 8 const towerDistanceWeight = 25 interface PlanStampsArgs { - stampType: StampTypes - count: number - startCoords: Coord[] - dynamic?: boolean - weighted?: boolean - diagonalDT?: boolean - coordMap?: CoordMap - dynamicWeight?: Uint32Array - minAvoid?: number - cardinalFlood?: boolean - /** - * How to consider potential stampAnchors - */ - conditions?(coord: Coord): boolean - /** - * What to do with the stampAnchor resulting from a successful individual plan - * @param coord the stampAnchor - */ - consequence(coord: Coord): void + stampType: StampTypes + count: number + startCoords: Coord[] + dynamic?: boolean + weighted?: boolean + diagonalDT?: boolean + coordMap?: CoordMap + dynamicWeight?: Uint32Array + minAvoid?: number + cardinalFlood?: boolean + /** + * How to consider potential stampAnchors + */ + conditions?(coord: Coord): boolean + /** + * What to do with the stampAnchor resulting from a successful individual plan + * @param coord the stampAnchor + */ + consequence(coord: Coord): void } interface FindDynamicStampAnchorArgs { - stamp: Stamp - startCoords: Coord[] - minAvoid?: number - conditions?(coord: Coord): boolean + stamp: Stamp + startCoords: Coord[] + minAvoid?: number + conditions?(coord: Coord): boolean } interface FindDynamicStampAnchorWeightedArgs extends FindDynamicStampAnchorArgs { - dynamicWeight?: Uint32Array + dynamicWeight?: Uint32Array } interface FindStampAnchorArgs { - stamp: Stamp - startCoords: Coord[] - coordMap: CoordMap - minAvoid?: number - cardinalFlood?: boolean - conditions?(coord: Coord): boolean + stamp: Stamp + startCoords: Coord[] + coordMap: CoordMap + minAvoid?: number + cardinalFlood?: boolean + conditions?(coord: Coord): boolean } interface TowerDamageCoord extends Coord { - minDamage: number + minDamage: number } /** * */ export class CommunePlanner { - roomManager: RoomManager - room: Room - - // Holistic - - planAttempts: (BasePlanAttempt | false)[] - planVisualizeIndex: number - terrainCoords: CoordMap - - // - - centerUpgradePos: RoomPosition - upgradePath: RoomPosition[] - - inputLab2Coord: Coord - outputLabCoords: Coord[] - - sourceHarvestPositions: RoomPosition[][] - sourcePaths: RoomPosition[][] - sourceStructureCoords: Coord[][] - communeSources: Source[] - - mineralPath: RoomPosition[] - mineralHarvestPositions: RoomPosition[] - - unprotectedSources: number - isControllerProtected: boolean - - // Action checks - - plannedGridCoords: boolean - finishedGrid: boolean - generalShielded: boolean - finishedFastFillerRoadPrune: boolean - /** - * If the planner is in the process of recording a plan attempt - */ - recording: boolean - markSourcesAvoid: boolean - finishedTowerPaths: boolean - planConfiged: boolean - - // - - basePlans: BasePlans - rampartPlans: RampartPlans - baseCoords: Uint8Array - roadCoords: Uint8Array - rampartCoords: Uint8Array - weightedDiagonalCoords: Uint8Array - diagonalCoords: Uint8Array - gridCoords: Uint8Array - exitCoords: Coord[] - /** - * Coords adjacent to exits, including exit coords - */ - byExitCoords: Uint8Array - /** - * Coords adjacent to planned roads - */ - byPlannedRoad: Uint8Array - - /** - * Coords we should be protecting using ramparts - */ - protectCoords: Set - /** - * Coords protected by ramparts - */ - protectedCoords: Uint8Array - /** - * Coords outside of rampart protection or in range of defensive combat areas - */ - unprotectedCoords: Uint8Array - insideMinCut: Set - outsideMinCut: Set - bestTowerScore: number - bestTowerCoords: TowerDamageCoord[] - towerAttemptIndex: number - stampAnchors: Partial<{ [key in StampTypes]: Coord[] }> - fastFillerStartCoords: Coord[] - minCutCoords: Set - groupedMinCutCoords: Coord[][] - RCLPlannedStructureTypes: Partial<{ - [key in BuildableStructureConstant]: RCLPlannedStructureType - }> - /** - * Quotas for roads per RCL - */ - roadQuota: number[] - /** - * The preference towards a plan attempt. Lower score is better - */ - score: number - - constructor(roomManager: RoomManager) { - this.roomManager = roomManager - } - - preTickRun(room: Room) { - this.roomManager = room.roomManager - this.room = room - - if (this.room.memory[RoomMemoryKeys.communePlanned] !== undefined) return Result.noAction - - // Stop if there isn't sufficient CPU - if (Game.cpu.bucket < CPUMaxPerTick) return Result.noAction - if (collectiveManager.communes.size <= 1 && Game.cpu.bucket < basePlanCPUBucketThreshold) { - return Result.noAction - } - - - if (this.recording) this.record() - - // If planning is complete, choose the best plan using a scoring system - if ( - this.fastFillerStartCoords && - this.planAttempts.length === this.fastFillerStartCoords.length - ) { - // Filter and make sure we have at least one completed plan, if not, mark the room as failed - const planAttempts = this.planAttempts.filter( - (plan): plan is BasePlanAttempt => plan !== false, - ) - if (!planAttempts.length) return Result.fail - - /* this.visualizeBestPlan() */ - this.choosePlan(planAttempts) - - return Result.success - } + roomManager: RoomManager + room: Room + + // Holistic + + planAttempts: (BasePlanAttempt | false)[] + planVisualizeIndex: number + terrainCoords: CoordMap + + // + + centerUpgradePos: RoomPosition + upgradePath: RoomPosition[] + + inputLab2Coord: Coord + outputLabCoords: Coord[] + + sourceHarvestPositions: RoomPosition[][] + sourcePaths: RoomPosition[][] + sourceStructureCoords: Coord[][] + communeSources: Source[] + + mineralPath: RoomPosition[] + mineralHarvestPositions: RoomPosition[] + + unprotectedSources: number + isControllerProtected: boolean + + // Action checks + + plannedGridCoords: boolean + finishedGrid: boolean + generalShielded: boolean + finishedFastFillerRoadPrune: boolean + /** + * If the planner is in the process of recording a plan attempt + */ + recording: boolean + markSourcesAvoid: boolean + finishedTowerPaths: boolean + planConfiged: boolean + + // + + basePlans: BasePlans + rampartPlans: RampartPlans + baseCoords: Uint8Array + roadCoords: Uint8Array + rampartCoords: Uint8Array + weightedDiagonalCoords: Uint8Array + diagonalCoords: Uint8Array + gridCoords: Uint8Array + exitCoords: Coord[] + /** + * Coords adjacent to exits, including exit coords + */ + byExitCoords: Uint8Array + /** + * Coords adjacent to planned roads + */ + byPlannedRoad: Uint8Array + + /** + * Coords we should be protecting using ramparts + */ + protectCoords: Set + /** + * Coords protected by ramparts + */ + protectedCoords: Uint8Array + /** + * Coords outside of rampart protection or in range of defensive combat areas + */ + unprotectedCoords: Uint8Array + insideMinCut: Set + outsideMinCut: Set + bestTowerScore: number + bestTowerCoords: TowerDamageCoord[] + towerAttemptIndex: number + stampAnchors: Partial<{ [key in StampTypes]: Coord[] }> + fastFillerStartCoords: Coord[] + minCutCoords: Set + groupedMinCutCoords: Coord[][] + RCLPlannedStructureTypes: Partial<{ + [key in BuildableStructureConstant]: RCLPlannedStructureType + }> + /** + * Quotas for roads per RCL + */ + roadQuota: number[] + /** + * The preference towards a plan attempt. Lower score is better + */ + score: number + + constructor(roomManager: RoomManager) { + this.roomManager = roomManager + } + + attemptPlan(room: Room) { + this.roomManager = room.roomManager + this.room = room + + if (Memory.rooms[room.name][RoomMemoryKeys.communePlanned] !== undefined) return Result.noAction + + // Stop if there isn't sufficient CPU + if (Game.cpu.bucket < CPUMaxPerTick) return Result.noAction + if (collectiveManager.communes.size <= 1 && Game.cpu.bucket < basePlanCPUBucketThreshold) { + return Result.noAction + } - // Initial configuration + if (this.recording) this.record() - if (!this.terrainCoords) { - this.planAttempts = [] - this.terrainCoords = collectiveManager.getTerrainBinary(this.room.name) - } + // If planning is complete, choose the best plan using a scoring system + if ( + this.fastFillerStartCoords && + this.planAttempts.length === this.fastFillerStartCoords.length + ) { + // Filter and make sure we have at least one completed plan, if not, mark the room as failed + const planAttempts = this.planAttempts.filter( + (plan): plan is BasePlanAttempt => plan !== false, + ) + if (!planAttempts.length) return Result.fail - // Plan attempt / configuration + /* this.visualizeBestPlan() */ + this.choosePlan(planAttempts) - if (!this.planConfiged) { - this.baseCoords = new Uint8Array(this.terrainCoords) - this.roadCoords = new Uint8Array(this.terrainCoords) - this.rampartCoords = new Uint8Array(2500) - this.byPlannedRoad = new Uint8Array(2500) + return Result.success + } - this.byExitCoords = new Uint8Array(2500) - this.exitCoords = [] - this.recordExits() + // Initial configuration - this.basePlans = new BasePlans() - this.rampartPlans = new RampartPlans() - this.stampAnchors = {} - this.RCLPlannedStructureTypes = {} - for (const stampType in stamps) { - this.stampAnchors[stampType as StampTypes] = [] - } - for (const structureType of buildableStructureTypes) { - this.RCLPlannedStructureTypes[structureType] = { - structures: 0, - minRCL: 1, - } - } - this.roadQuota = [] - for (let level = 0; level < 8; level += 1) { - this.roadQuota.push(0) - } + if (!this.terrainCoords) { + this.planAttempts = [] + this.terrainCoords = collectiveManager.getTerrainBinary(this.room.name) + } - this.score = 0 - this.planConfiged = true - } + // Plan attempt / configuration + + if (!this.planConfiged) { + this.baseCoords = new Uint8Array(this.terrainCoords) + this.roadCoords = new Uint8Array(this.terrainCoords) + this.rampartCoords = new Uint8Array(2500) + this.byPlannedRoad = new Uint8Array(2500) + + this.byExitCoords = new Uint8Array(2500) + this.exitCoords = [] + this.recordExits() + + this.basePlans = new BasePlans() + this.rampartPlans = new RampartPlans() + this.stampAnchors = {} + this.RCLPlannedStructureTypes = {} + for (const stampType in stamps) { + this.stampAnchors[stampType as StampTypes] = [] + } + for (const structureType of buildableStructureTypes) { + this.RCLPlannedStructureTypes[structureType] = { + structures: 0, + minRCL: 1, + } + } + this.roadQuota = [] + for (let level = 0; level < 8; level += 1) { + this.roadQuota.push(0) + } + + this.score = 0 + this.planConfiged = true + } - this.avoidSources() - this.avoidMineral() - if (this.fastFiller() === Result.fail) { - this.planAttempts.push(false) + this.avoidSources() + this.avoidMineral() + if (this.fastFiller() === Result.fail) { + this.planAttempts.push(false) - return Result.noAction - } - this.postFastFillerConfig() - this.generateGrid() - /* this.pruneFastFillerRoads() */ - if (this.findCenterUpgradePos() === Result.fail) { - this.planAttempts.push(false) + return Result.noAction + } + this.postFastFillerConfig() + this.generateGrid() + /* this.pruneFastFillerRoads() */ + if (this.findCenterUpgradePos() === Result.fail) { + this.planAttempts.push(false) - return Result.noAction - } - this.findSourceHarvestPositions() - if (this.hub() === Result.fail) { - this.planAttempts.push(false) + return Result.noAction + } + this.findSourceHarvestPositions() + if (this.hub() === Result.fail) { + this.planAttempts.push(false) - return Result.noAction - } - if (this.labs() === Result.fail) { - this.planAttempts.push(false) + return Result.noAction + } + if (this.labs() === Result.fail) { + this.planAttempts.push(false) - return Result.noAction - } - this.sourceStructures() - if (this.gridExtensions() === Result.fail) { - this.planAttempts.push(false) + return Result.noAction + } + this.sourceStructures() + if (this.gridExtensions() === Result.fail) { + this.planAttempts.push(false) - return Result.noAction - } - this.gridExtensionSourcePaths() - if (this.nuker() === Result.fail) { - this.planAttempts.push(false) + return Result.noAction + } + this.gridExtensionSourcePaths() + if (this.nuker() === Result.fail) { + this.planAttempts.push(false) - return Result.noAction - } - if (this.powerSpawn() === Result.fail) { - this.planAttempts.push(false) + return Result.noAction + } + if (this.powerSpawn() === Result.fail) { + this.planAttempts.push(false) - return Result.noAction - } - if (this.observer() === Result.fail) { - this.planAttempts.push(false) + return Result.noAction + } + if (this.observer() === Result.fail) { + this.planAttempts.push(false) - return Result.noAction - } - this.planGridCoords() - this.runMinCut() - this.groupMinCutCoords() - this.findUnprotectedCoords() - this.planSourceStructures() - // Run for a second time to account for any failed source structures - this.planGridCoords() - this.onboardingRamparts() - this.findOutsideMinCut() - this.findInsideMinCut() - this.towers() - this.towerPaths() - this.mineral() - this.generalShield() - this.findRoadQuota() - this.visualizeCurrentPlan() - /* this.visualizeCurrentPlan() + return Result.noAction + } + this.planGridCoords() + this.runMinCut() + this.groupMinCutCoords() + this.findUnprotectedCoords() + this.planSourceStructures() + // Run for a second time to account for any failed source structures + this.planGridCoords() + this.onboardingRamparts() + this.findOutsideMinCut() + this.findInsideMinCut() + this.towers() + this.towerPaths() + this.mineral() + this.generalShield() + this.findRoadQuota() + this.visualizeCurrentPlan() + /* this.visualizeCurrentPlan() return Result.success */ - this.findScore() - this.record() - return Result.action - } - /** - * - * @returns the minRCL - */ - private setBasePlansXY( - x: number, - y: number, - structureType: BuildableStructureConstant, - minRCL?: number, - ) { - this.RCLPlannedStructureTypes[structureType].structures += 1 - - if (minRCL === undefined) { - while ( - this.RCLPlannedStructureTypes[structureType].structures > - CONTROLLER_STRUCTURES[structureType][ - this.RCLPlannedStructureTypes[structureType].minRCL - ] - ) { - this.RCLPlannedStructureTypes[structureType].minRCL += 1 - } - - minRCL = this.RCLPlannedStructureTypes[structureType].minRCL - } - - const packedCoord = packXYAsCoord(x, y) - const coordData = this.basePlans.map[packedCoord] - if (!coordData) { - this.basePlans.map[packedCoord] = [ - { - structureType, - minRCL, - }, - ] + this.findScore() + this.record() + return Result.action + } + /** + * + * @returns the minRCL + */ + private setBasePlansXY( + x: number, + y: number, + structureType: BuildableStructureConstant, + minRCL?: number, + ) { + this.RCLPlannedStructureTypes[structureType].structures += 1 + + if (minRCL === undefined) { + while ( + this.RCLPlannedStructureTypes[structureType].structures > + CONTROLLER_STRUCTURES[structureType][this.RCLPlannedStructureTypes[structureType].minRCL] + ) { + this.RCLPlannedStructureTypes[structureType].minRCL += 1 + } + + minRCL = this.RCLPlannedStructureTypes[structureType].minRCL + } - return minRCL - } + const packedCoord = packXYAsCoord(x, y) + const coordData = this.basePlans.map[packedCoord] + if (!coordData) { + this.basePlans.map[packedCoord] = [ + { + structureType, + minRCL, + }, + ] + + return minRCL + } - if (structureType === STRUCTURE_ROAD) { - coordData[0].minRCL = Math.min(coordData[0].minRCL, minRCL) - return minRCL - } + if (structureType === STRUCTURE_ROAD) { + coordData[0].minRCL = Math.min(coordData[0].minRCL, minRCL) + return minRCL + } - // Place in order of minRCL, ascending + // Place in order of minRCL, ascending - let i = 0 - for (; i < coordData.length; i++) { - const data = coordData[i] - if (minRCL > data.minRCL) break - } + let i = 0 + for (; i < coordData.length; i++) { + const data = coordData[i] + if (minRCL > data.minRCL) break + } - coordData.splice(i, 0, { - structureType, - minRCL, - }) + coordData.splice(i, 0, { + structureType, + minRCL, + }) - return minRCL + return minRCL - /* + /* const planCoord = this.basePlans.map[packedCoord] if (!planCoord) { this.basePlans.map[packedCoord] = [{ @@ -439,551 +436,549 @@ export class CommunePlanner { planCoord.minRCL = Math.min(planCoord.minRCL, minRCL) */ + } + private setRampartPlansXY( + x: number, + y: number, + minRCL: number, + coversStructure: boolean, + buildForNuke: boolean, + buildForThreat: boolean, + needsStoringStructure: boolean, + ) { + const packedCoord = packXYAsCoord(x, y) + + const coordData = this.rampartPlans.map[packedCoord] + if (coordData) { + this.rampartPlans.map[packedCoord] = { + minRCL: Math.min(coordData.minRCL, minRCL), + coversStructure: +coordData.coversStructure /* || +coversStructure */, + buildForNuke: +coordData.buildForNuke /* || +buildForNuke */, + buildForThreat: +coordData.buildForThreat /* || +buildForThreat */, + needsStoringStructure: +coordData.needsStoringStructure, + } } - private setRampartPlansXY( - x: number, - y: number, - minRCL: number, - coversStructure: boolean, - buildForNuke: boolean, - buildForThreat: boolean, - needsStoringStructure: boolean, - ) { - const packedCoord = packXYAsCoord(x, y) - - const coordData = this.rampartPlans.map[packedCoord] - if (coordData) { - this.rampartPlans.map[packedCoord] = { - minRCL: Math.min(coordData.minRCL, minRCL), - coversStructure: +coordData.coversStructure /* || +coversStructure */, - buildForNuke: +coordData.buildForNuke /* || +buildForNuke */, - buildForThreat: +coordData.buildForThreat /* || +buildForThreat */, - needsStoringStructure: +coordData.needsStoringStructure, - } - } - this.rampartPlans.map[packedCoord] = { - minRCL, - coversStructure: +coversStructure, - buildForNuke: +buildForNuke, - buildForThreat: +buildForThreat, - needsStoringStructure: +needsStoringStructure, - } + this.rampartPlans.map[packedCoord] = { + minRCL, + coversStructure: +coversStructure, + buildForNuke: +buildForNuke, + buildForThreat: +buildForThreat, + needsStoringStructure: +needsStoringStructure, } - private recordExits() { - for (const packedCoord of this.room.roomManager.exitCoords) { - const coord = unpackCoord(packedCoord) - this.exitCoords.push(coord) - forAdjacentCoords(coord, adjCoord => { - const packedAdjCoord = packAsNum(adjCoord) - if (this.terrainCoords[packedAdjCoord] === 255) return - - this.byExitCoords[packedAdjCoord] = 255 - this.baseCoords[packedAdjCoord] = 255 - }) - } + } + private recordExits() { + for (const packedCoord of this.room.roomManager.exitCoords) { + const coord = unpackCoord(packedCoord) + this.exitCoords.push(coord) + forAdjacentCoords(coord, adjCoord => { + const packedAdjCoord = packAsNum(adjCoord) + if (this.terrainCoords[packedAdjCoord] === 255) return + + this.byExitCoords[packedAdjCoord] = 255 + this.baseCoords[packedAdjCoord] = 255 + }) } - private generateGrid() { - if (this.finishedGrid) return + } + private generateGrid() { + if (this.finishedGrid) return - delete this.gridCoords - delete this.diagonalCoords - delete this.weightedDiagonalCoords + delete this.gridCoords + delete this.diagonalCoords + delete this.weightedDiagonalCoords - const terrain = this.room.getTerrain() - const gridSize = 4 - const anchor = new RoomPosition( - this.stampAnchors.fastFiller[0].x, - this.stampAnchors.fastFiller[0].y - 1, - this.room.name, - ) + const terrain = this.room.getTerrain() + const gridSize = 4 + const anchor = new RoomPosition( + this.stampAnchors.fastFiller[0].x, + this.stampAnchors.fastFiller[0].y - 1, + this.room.name, + ) - const inset = 1 + const inset = 1 - this.diagonalCoords = new Uint8Array(2500) - this.weightedDiagonalCoords = new Uint8Array(2500) + this.diagonalCoords = new Uint8Array(2500) + this.weightedDiagonalCoords = new Uint8Array(2500) - // Checkerboard + // Checkerboard - for (let x = 0; x < roomDimensions; x++) { - for (let y = 0; y < roomDimensions; y++) { - if (terrain.get(x, y) === TERRAIN_MASK_WALL) continue + for (let x = 0; x < roomDimensions; x++) { + for (let y = 0; y < roomDimensions; y++) { + if (terrain.get(x, y) === TERRAIN_MASK_WALL) continue - // Calculate the position of the cell relative to the anchor + // Calculate the position of the cell relative to the anchor - const relX = x - anchor.x - const relY = y - anchor.y + const relX = x - anchor.x + const relY = y - anchor.y - // Check if the cell is part of a diagonal line - if (Math.abs(relX - 3 * relY) % 2 !== 0 && Math.abs(relX + 3 * relY) % 2 !== 0) - continue + // Check if the cell is part of a diagonal line + if (Math.abs(relX - 3 * relY) % 2 !== 0 && Math.abs(relX + 3 * relY) % 2 !== 0) continue - const packedCoord = packXYAsNum(x, y) + const packedCoord = packXYAsNum(x, y) - if (terrain.get(x, y) === TERRAIN_MASK_SWAMP) { - this.diagonalCoords[packedCoord] = 3 * defaultSwampCost - this.weightedDiagonalCoords[packedCoord] = 8 * defaultSwampCost - continue - } - this.diagonalCoords[packedCoord] = 4 - this.weightedDiagonalCoords[packedCoord] = 8 - } + if (terrain.get(x, y) === TERRAIN_MASK_SWAMP) { + this.diagonalCoords[packedCoord] = 3 * defaultSwampCost + this.weightedDiagonalCoords[packedCoord] = 8 * defaultSwampCost + continue } + this.diagonalCoords[packedCoord] = 4 + this.weightedDiagonalCoords[packedCoord] = 8 + } + } - this.gridCoords = new Uint8Array(2500) - const gridCoordsArray: Coord[] = [] + this.gridCoords = new Uint8Array(2500) + const gridCoordsArray: Coord[] = [] - // Grid + // Grid - for (let x = inset; x < roomDimensions - inset; x++) { - for (let y = inset; y < roomDimensions - inset; y++) { - const packedCoord = packXYAsNum(x, y) - if (this.baseCoords[packedCoord] === 255) continue - if (this.byExitCoords[packedCoord] > 0) continue + for (let x = inset; x < roomDimensions - inset; x++) { + for (let y = inset; y < roomDimensions - inset; y++) { + const packedCoord = packXYAsNum(x, y) + if (this.baseCoords[packedCoord] === 255) continue + if (this.byExitCoords[packedCoord] > 0) continue - // Calculate the position of the cell relative to the anchor + // Calculate the position of the cell relative to the anchor - const relX = x - anchor.x - const relY = y - anchor.y + const relX = x - anchor.x + const relY = y - anchor.y - // Check if the cell is part of a diagonal line - if ( - Math.abs(relX - 3 * relY) % gridSize !== 0 && - Math.abs(relX + 3 * relY) % gridSize !== 0 - ) - continue + // Check if the cell is part of a diagonal line + if ( + Math.abs(relX - 3 * relY) % gridSize !== 0 && + Math.abs(relX + 3 * relY) % gridSize !== 0 + ) + continue - gridCoordsArray.push({ x, y }) + gridCoordsArray.push({ x, y }) - if (terrain.get(x, y) === TERRAIN_MASK_SWAMP) { - this.gridCoords[packedCoord] = 2 * defaultSwampCost - continue - } - this.gridCoords[packedCoord] = 2 - } + if (terrain.get(x, y) === TERRAIN_MASK_SWAMP) { + this.gridCoords[packedCoord] = 2 * defaultSwampCost + continue } + this.gridCoords[packedCoord] = 2 + } + } - // Group grid coords - - const gridGroups: Coord[][] = [] - let visitedCoords: Set = new Set() - let groupIndex = 0 - - for (const gridCoord of gridCoordsArray) { - const packedCoord = packCoord(gridCoord) - if (visitedCoords.has(packedCoord)) continue + // Group grid coords - visitedCoords.add(packedCoord) + const gridGroups: Coord[][] = [] + let visitedCoords: Set = new Set() + let groupIndex = 0 - gridGroups[groupIndex] = [gridCoord] + for (const gridCoord of gridCoordsArray) { + const packedCoord = packCoord(gridCoord) + if (visitedCoords.has(packedCoord)) continue - let thisGeneration = [gridCoord] - let nextGeneration: Coord[] - let groupSize = 0 + visitedCoords.add(packedCoord) - while (thisGeneration.length) { - nextGeneration = [] + gridGroups[groupIndex] = [gridCoord] - for (const coord of thisGeneration) { - for (const adjCoord of findAdjacentCoordsToCoord(coord)) { - const packedAdjCoord = packCoord(adjCoord) - if (visitedCoords.has(packedAdjCoord)) continue + let thisGeneration = [gridCoord] + let nextGeneration: Coord[] + let groupSize = 0 - visitedCoords.add(packedAdjCoord) + while (thisGeneration.length) { + nextGeneration = [] - if (this.gridCoords[packAsNum(adjCoord)] === 0) continue + for (const coord of thisGeneration) { + for (const adjCoord of findAdjacentCoordsToCoord(coord)) { + const packedAdjCoord = packCoord(adjCoord) + if (visitedCoords.has(packedAdjCoord)) continue - // Calculate the position of the cell relative to the anchor + visitedCoords.add(packedAdjCoord) - const relX = adjCoord.x - anchor.x - const relY = adjCoord.y - anchor.y + if (this.gridCoords[packAsNum(adjCoord)] === 0) continue - // Check if the cell is part of a diagonal line - if ( - Math.abs(relX - 3 * relY) % gridSize !== 0 && - Math.abs(relX + 3 * relY) % gridSize !== 0 - ) - continue + // Calculate the position of the cell relative to the anchor - groupSize += 1 - gridGroups[groupIndex].push(adjCoord) - nextGeneration.push(adjCoord) - } - } + const relX = adjCoord.x - anchor.x + const relY = adjCoord.y - anchor.y - if (groupSize > 20) break - thisGeneration = nextGeneration - } + // Check if the cell is part of a diagonal line + if ( + Math.abs(relX - 3 * relY) % gridSize !== 0 && + Math.abs(relX + 3 * relY) % gridSize !== 0 + ) + continue - groupIndex += 1 + groupSize += 1 + gridGroups[groupIndex].push(adjCoord) + nextGeneration.push(adjCoord) + } } - // Get group leaders - - interface SpecialCoord extends Coord { - index: number - } + if (groupSize > 20) break + thisGeneration = nextGeneration + } - const groupLeaders: SpecialCoord[] = [] + groupIndex += 1 + } - for (let i = 0; i < gridGroups.length; i++) { - const coord = gridGroups[i][0] as SpecialCoord + // Get group leaders - coord.index = i - groupLeaders.push(coord) - } + interface SpecialCoord extends Coord { + index: number + } - // Sort by closer to anchor + const groupLeaders: SpecialCoord[] = [] - groupLeaders.sort((a, b) => { - return getRange(a, anchor) - getRange(b, anchor) - }) + for (let i = 0; i < gridGroups.length; i++) { + const coord = gridGroups[i][0] as SpecialCoord - // Paths for grid groups + coord.index = i + groupLeaders.push(coord) + } - for (const leaderCoord of groupLeaders) { - const path = customPathFinder.findPath({ - origin: new RoomPosition(leaderCoord.x, leaderCoord.y, this.room.name), - goals: [{ pos: anchor, range: 3 }], - weightCoordMaps: [this.weightedDiagonalCoords, this.gridCoords, this.baseCoords], - plainCost: defaultRoadPlanningPlainCost * 6, - swampCost: defaultSwampCost * 6, - }) + // Sort by closer to anchor - // If the path failed, delete all members of the group + groupLeaders.sort((a, b) => { + return getRange(a, anchor) - getRange(b, anchor) + }) - if ( - !path.length && - !gridGroups[leaderCoord.index].find(coord => getRange(coord, anchor) <= 3) - ) { - for (const coord of gridGroups[leaderCoord.index]) { - this.gridCoords[packAsNum(coord)] = 0 - } - continue - } + // Paths for grid groups - for (const coord of path) { - if (terrain.get(coord.x, coord.y) === TERRAIN_MASK_SWAMP) { - this.gridCoords[packAsNum(coord)] = 2 * defaultSwampCost - continue - } - this.gridCoords[packAsNum(coord)] = 2 - } - } + for (const leaderCoord of groupLeaders) { + const path = customPathFinder.findPath({ + origin: new RoomPosition(leaderCoord.x, leaderCoord.y, this.room.name), + goals: [{ pos: anchor, range: 3 }], + weightCoordMaps: [this.weightedDiagonalCoords, this.gridCoords, this.baseCoords], + plainCost: defaultRoadPlanningPlainCost * 6, + swampCost: defaultSwampCost * 6, + }) - // Group exits + // If the path failed, delete all members of the group - const exitGroups: Coord[][] = [] - visitedCoords = new Set() - groupIndex = 0 + if ( + !path.length && + !gridGroups[leaderCoord.index].find(coord => getRange(coord, anchor) <= 3) + ) { + for (const coord of gridGroups[leaderCoord.index]) { + this.gridCoords[packAsNum(coord)] = 0 + } + continue + } - for (const packedCoord of this.room.roomManager.exitCoords) { - const exitCoord = unpackCoord(packedCoord) - if (visitedCoords.has(packedCoord)) continue + for (const coord of path) { + if (terrain.get(coord.x, coord.y) === TERRAIN_MASK_SWAMP) { + this.gridCoords[packAsNum(coord)] = 2 * defaultSwampCost + continue + } + this.gridCoords[packAsNum(coord)] = 2 + } + } - visitedCoords.add(packedCoord) + // Group exits - exitGroups[groupIndex] = [exitCoord] + const exitGroups: Coord[][] = [] + visitedCoords = new Set() + groupIndex = 0 - let thisGeneration = [exitCoord] - let nextGeneration: Coord[] - let groupSize = 0 + for (const packedCoord of this.room.roomManager.exitCoords) { + const exitCoord = unpackCoord(packedCoord) + if (visitedCoords.has(packedCoord)) continue - while (thisGeneration.length) { - nextGeneration = [] + visitedCoords.add(packedCoord) - for (const coord of thisGeneration) { - for (const adjCoord of findAdjacentCoordsToCoord(coord)) { - if (!isXYExit(adjCoord.x, adjCoord.y)) continue - if (this.terrainCoords[packAsNum(adjCoord)] === 255) continue + exitGroups[groupIndex] = [exitCoord] - const packedAdjCoord = packCoord(adjCoord) - if (visitedCoords.has(packedAdjCoord)) continue + let thisGeneration = [exitCoord] + let nextGeneration: Coord[] + let groupSize = 0 - visitedCoords.add(packedAdjCoord) + while (thisGeneration.length) { + nextGeneration = [] - groupSize += 1 - exitGroups[groupIndex].push(adjCoord) - nextGeneration.push(adjCoord) - } - } + for (const coord of thisGeneration) { + for (const adjCoord of findAdjacentCoordsToCoord(coord)) { + if (!isXYExit(adjCoord.x, adjCoord.y)) continue + if (this.terrainCoords[packAsNum(adjCoord)] === 255) continue - if (groupSize > 10) break - thisGeneration = nextGeneration - } + const packedAdjCoord = packCoord(adjCoord) + if (visitedCoords.has(packedAdjCoord)) continue - groupIndex += 1 - } + visitedCoords.add(packedAdjCoord) - // Paths for exit groups - - for (const group of exitGroups) { - const path = customPathFinder.findPath({ - origin: new RoomPosition(group[0].x, group[0].y, this.room.name), - goals: [{ pos: anchor, range: 3 }], - weightCoordMaps: [this.weightedDiagonalCoords, this.gridCoords], - plainCost: defaultRoadPlanningPlainCost * 6, - swampCost: defaultSwampCost * 6, - }) - - for (const coord of path) { - const packedCoord = packAsNum(coord) - if (this.baseCoords[packedCoord] === 255) continue - - if (terrain.get(coord.x, coord.y) === TERRAIN_MASK_SWAMP) { - this.gridCoords[packAsNum(coord)] = 2 * defaultSwampCost - continue - } - this.gridCoords[packAsNum(coord)] = 2 - } + groupSize += 1 + exitGroups[groupIndex].push(adjCoord) + nextGeneration.push(adjCoord) + } } - this.pruneGridCoords() + if (groupSize > 10) break + thisGeneration = nextGeneration + } - for (let x = 0; x < roomDimensions; x++) { - for (let y = 0; y < roomDimensions; y++) { - const packedCoord = packXYAsNum(x, y) - if (this.gridCoords[packedCoord] === 0) continue + groupIndex += 1 + } - for (const adjCoord of findAdjacentCoordsToXY(x, y)) { - const packedAdjCoord = packAsNum(adjCoord) + // Paths for exit groups - if (this.gridCoords[packedAdjCoord] > 0) continue - if (this.terrainCoords[packedAdjCoord] === 255) continue + for (const group of exitGroups) { + const path = customPathFinder.findPath({ + origin: new RoomPosition(group[0].x, group[0].y, this.room.name), + goals: [{ pos: anchor, range: 3 }], + weightCoordMaps: [this.weightedDiagonalCoords, this.gridCoords], + plainCost: defaultRoadPlanningPlainCost * 6, + swampCost: defaultSwampCost * 6, + }) - this.byPlannedRoad[packedAdjCoord] = 1 - } - } - } + for (const coord of path) { + const packedCoord = packAsNum(coord) + if (this.baseCoords[packedCoord] === 255) continue - this.finishedGrid = true - } - private pruneGridCoords() { - for (let x = 0; x < roomDimensions; x++) { - for (let y = 0; y < roomDimensions; y++) { - this.pruneGridXY(x, y) - } + if (terrain.get(coord.x, coord.y) === TERRAIN_MASK_SWAMP) { + this.gridCoords[packAsNum(coord)] = 2 * defaultSwampCost + continue } + this.gridCoords[packAsNum(coord)] = 2 + } } - private pruneGridXY(x: number, y: number) { - const packedCoord = packXYAsNum(x, y) - if (this.gridCoords[packedCoord] === 0) return - let adjNonGridCoords: Coord[] = [] - let adjGridCoords = 0 + this.pruneGridCoords() - for (const adjCoord of findAdjacentCoordsToXY(x, y)) { - const packedAdjCoord = packAsNum(adjCoord) + for (let x = 0; x < roomDimensions; x++) { + for (let y = 0; y < roomDimensions; y++) { + const packedCoord = packXYAsNum(x, y) + if (this.gridCoords[packedCoord] === 0) continue - if (this.gridCoords[packedAdjCoord] > 0) { - adjGridCoords += 1 - continue - } + for (const adjCoord of findAdjacentCoordsToXY(x, y)) { + const packedAdjCoord = packAsNum(adjCoord) - if (this.terrainCoords[packedAdjCoord] === 255) continue + if (this.gridCoords[packedAdjCoord] > 0) continue + if (this.terrainCoords[packedAdjCoord] === 255) continue - adjNonGridCoords.push(adjCoord) + this.byPlannedRoad[packedAdjCoord] = 1 } + } + } - if (adjGridCoords > 1) return - - // No reason to keep a coord that does nothing + this.finishedGrid = true + } + private pruneGridCoords() { + for (let x = 0; x < roomDimensions; x++) { + for (let y = 0; y < roomDimensions; y++) { + this.pruneGridXY(x, y) + } + } + } + private pruneGridXY(x: number, y: number) { + const packedCoord = packXYAsNum(x, y) + if (this.gridCoords[packedCoord] === 0) return - if (adjNonGridCoords.length <= 1) { - this.gridCoords[packedCoord] = 0 - return - } + let adjNonGridCoords: Coord[] = [] + let adjGridCoords = 0 - let noAltNonGridCoord: boolean + for (const adjCoord of findAdjacentCoordsToXY(x, y)) { + const packedAdjCoord = packAsNum(adjCoord) - for (const adjNonGridCoord of adjNonGridCoords) { - adjGridCoords = 0 + if (this.gridCoords[packedAdjCoord] > 0) { + adjGridCoords += 1 + continue + } - for (const adjCoord of findAdjacentCoordsToCoord(adjNonGridCoord)) { - if (this.gridCoords[packAsNum(adjCoord)] === 0) continue + if (this.terrainCoords[packedAdjCoord] === 255) continue - adjGridCoords += 1 - } + adjNonGridCoords.push(adjCoord) + } - if (adjGridCoords > 1) continue - if (noAltNonGridCoord) return + if (adjGridCoords > 1) return - noAltNonGridCoord = true - } + // No reason to keep a coord that does nothing - this.gridCoords[packedCoord] = 0 + if (adjNonGridCoords.length <= 1) { + this.gridCoords[packedCoord] = 0 + return } - /** - * - * @param coord - * @returns Result.action if the road should be removed - */ - private fastFillerPruneRoadCoord(coord: Coord) { - let adjSpawn: boolean - forAdjacentCoords(coord, adjCoord => { - const packedAdjCoord = packAsNum(adjCoord) - if (this.terrainCoords[packedAdjCoord] === 255) return - if (this.roadCoords[packedAdjCoord] !== 1 && this.gridCoords[packedAdjCoord] === 0) - this.byPlannedRoad[packedAdjCoord] = 1 + let noAltNonGridCoord: boolean - const coordData = this.basePlans.get(packCoord(adjCoord)) - if (!coordData) return + for (const adjNonGridCoord of adjNonGridCoords) { + adjGridCoords = 0 - if (coordData[0].structureType === STRUCTURE_SPAWN) adjSpawn = true - }) + for (const adjCoord of findAdjacentCoordsToCoord(adjNonGridCoord)) { + if (this.gridCoords[packAsNum(adjCoord)] === 0) continue - if (adjSpawn) return Result.noAction + adjGridCoords += 1 + } - let cardinalRoads = 0 + if (adjGridCoords > 1) continue + if (noAltNonGridCoord) return - for (const offset of cardinalOffsets) { - const adjCoord = { - x: offset.x + coord.x, - y: offset.y + coord.y, - } + noAltNonGridCoord = true + } - const packedAdjCoord = packAsNum(adjCoord) - if (this.roadCoords[packedAdjCoord] !== 1 && this.gridCoords[packedAdjCoord] === 0) - continue + this.gridCoords[packedCoord] = 0 + } + /** + * + * @param coord + * @returns Result.action if the road should be removed + */ + private fastFillerPruneRoadCoord(coord: Coord) { + let adjSpawn: boolean - cardinalRoads += 1 - } + forAdjacentCoords(coord, adjCoord => { + const packedAdjCoord = packAsNum(adjCoord) + if (this.terrainCoords[packedAdjCoord] === 255) return + if (this.roadCoords[packedAdjCoord] !== 1 && this.gridCoords[packedAdjCoord] === 0) + this.byPlannedRoad[packedAdjCoord] = 1 - if (cardinalRoads >= 3) return Result.action - return Result.noAction - } - /** - * Has some issues, is disabled - */ - private pruneFastFillerRoads() { - if (this.finishedFastFillerRoadPrune) return + const coordData = this.basePlans.get(packCoord(adjCoord)) + if (!coordData) return - const anchor = this.stampAnchors.fastFiller[0] + if (coordData[0].structureType === STRUCTURE_SPAWN) adjSpawn = true + }) - const rectCoords = findCoordsInsideRect( - anchor.x - stamps.fastFiller.offset, - anchor.y - stamps.fastFiller.offset, - anchor.x + stamps.fastFiller.offset, - anchor.y + stamps.fastFiller.offset, - ) + if (adjSpawn) return Result.noAction - for (const coord of rectCoords) { - const packedCoord = packAsNum(coord) - if (this.roadCoords[packedCoord] !== 1) continue + let cardinalRoads = 0 - if (this.fastFillerPruneRoadCoord(coord) === Result.action) { - this.roadCoords[packedCoord] = 0 - continue - } + for (const offset of cardinalOffsets) { + const adjCoord = { + x: offset.x + coord.x, + y: offset.y + coord.y, + } - this.setBasePlansXY(coord.x, coord.y, STRUCTURE_ROAD, 3) - this.roadCoords[packedCoord] = 1 - this.byPlannedRoad[packedCoord] = 0 - } + const packedAdjCoord = packAsNum(adjCoord) + if (this.roadCoords[packedAdjCoord] !== 1 && this.gridCoords[packedAdjCoord] === 0) continue - this.finishedFastFillerRoadPrune = true + cardinalRoads += 1 } - private avoidSources() { - if (this.markSourcesAvoid) return - for (const source of this.room.find(FIND_SOURCES)) { - forAdjacentCoords(source.pos, adjCoord => { - const packedCoord = packAsNum(adjCoord) + if (cardinalRoads >= 3) return Result.action + return Result.noAction + } + /** + * Has some issues, is disabled + */ + private pruneFastFillerRoads() { + if (this.finishedFastFillerRoadPrune) return + + const anchor = this.stampAnchors.fastFiller[0] + + const rectCoords = findCoordsInsideRect( + anchor.x - stamps.fastFiller.offset, + anchor.y - stamps.fastFiller.offset, + anchor.x + stamps.fastFiller.offset, + anchor.y + stamps.fastFiller.offset, + ) + + for (const coord of rectCoords) { + const packedCoord = packAsNum(coord) + if (this.roadCoords[packedCoord] !== 1) continue + + if (this.fastFillerPruneRoadCoord(coord) === Result.action) { + this.roadCoords[packedCoord] = 0 + continue + } + + this.setBasePlansXY(coord.x, coord.y, STRUCTURE_ROAD, 3) + this.roadCoords[packedCoord] = 1 + this.byPlannedRoad[packedCoord] = 0 + } - this.baseCoords[packedCoord] = 255 - }) - } + this.finishedFastFillerRoadPrune = true + } + private avoidSources() { + if (this.markSourcesAvoid) return - this.markSourcesAvoid = true + for (const source of this.room.find(FIND_SOURCES)) { + forAdjacentCoords(source.pos, adjCoord => { + const packedCoord = packAsNum(adjCoord) + + this.baseCoords[packedCoord] = 255 + }) } - private avoidMineral() { - if (this.mineralHarvestPositions) return - const mineralHarvestPositions: RoomPosition[] = [] - const mineralPos = this.room.roomManager.mineral.pos + this.markSourcesAvoid = true + } + private avoidMineral() { + if (this.mineralHarvestPositions) return - for (const offset of adjacentOffsets) { - const adjPos = new RoomPosition( - offset.x + mineralPos.x, - offset.y + mineralPos.y, - this.room.name, - ) + const mineralHarvestPositions: RoomPosition[] = [] + const mineralPos = this.room.roomManager.mineral.pos - const packedCoord = packAsNum(adjPos) - if (this.terrainCoords[packedCoord] === 255) continue + for (const offset of adjacentOffsets) { + const adjPos = new RoomPosition( + offset.x + mineralPos.x, + offset.y + mineralPos.y, + this.room.name, + ) - this.roadCoords[packedCoord] = 20 - this.baseCoords[packedCoord] = 255 - mineralHarvestPositions.push(adjPos) - } + const packedCoord = packAsNum(adjPos) + if (this.terrainCoords[packedCoord] === 255) continue - this.mineralHarvestPositions = mineralHarvestPositions + this.roadCoords[packedCoord] = 20 + this.baseCoords[packedCoord] = 255 + mineralHarvestPositions.push(adjPos) } - private postFastFillerConfig() { - if (this.communeSources) return - - const fastFillerPos = new RoomPosition( - this.stampAnchors.fastFiller[0].x, - this.stampAnchors.fastFiller[0].y, - this.room.name, - ) - const sources = this.room.find(FIND_SOURCES) - sortBy( - sources, - ({ pos }) => - customPathFinder.findPath({ - origin: pos, - goals: [ - { - pos: fastFillerPos, - range: 3, - }, - ], - weightCoordMaps: [this.diagonalCoords, this.roadCoords], - plainCost: defaultRoadPlanningPlainCost, - }).length, - ) - // re-allow some building around the controller while respecting existing disallowed tiles - for (const coord of findCoordsInRange(this.room.controller.pos, 2)) { - const packedCoord = packAsNum(coord) - if (this.baseCoords[packedCoord] === 255) continue - this.baseCoords[packedCoord] = this.terrainCoords[packedCoord] - } - - this.communeSources = sources + this.mineralHarvestPositions = mineralHarvestPositions + } + private postFastFillerConfig() { + if (this.communeSources) return + + const fastFillerPos = new RoomPosition( + this.stampAnchors.fastFiller[0].x, + this.stampAnchors.fastFiller[0].y, + this.room.name, + ) + const sources = this.room.find(FIND_SOURCES) + sortBy( + sources, + ({ pos }) => + customPathFinder.findPath({ + origin: pos, + goals: [ + { + pos: fastFillerPos, + range: 3, + }, + ], + weightCoordMaps: [this.diagonalCoords, this.roadCoords], + plainCost: defaultRoadPlanningPlainCost, + }).length, + ) + + // re-allow some building around the controller while respecting existing disallowed tiles + for (const coord of findCoordsInRange(this.room.controller.pos, 2)) { + const packedCoord = packAsNum(coord) + if (this.baseCoords[packedCoord] === 255) continue + this.baseCoords[packedCoord] = this.terrainCoords[packedCoord] } - private findSourceHarvestPositions() { - if (this.sourceHarvestPositions) return - const fastFillerAnchor = new RoomPosition( - this.stampAnchors.fastFiller[0].x, - this.stampAnchors.fastFiller[0].y, - this.room.name, - ) + this.communeSources = sources + } + private findSourceHarvestPositions() { + if (this.sourceHarvestPositions) return - const sourceHarvestPositions: RoomPosition[][] = [] + const fastFillerAnchor = new RoomPosition( + this.stampAnchors.fastFiller[0].x, + this.stampAnchors.fastFiller[0].y, + this.room.name, + ) - for (const i in this.communeSources) { - sourceHarvestPositions.push([]) + const sourceHarvestPositions: RoomPosition[][] = [] - const sourcePos = this.communeSources[i].pos - for (const offset of adjacentOffsets) { - const adjPos = new RoomPosition( - offset.x + sourcePos.x, - offset.y + sourcePos.y, - this.room.name, - ) - const packedCoord = packAsNum(adjPos) + for (const i in this.communeSources) { + sourceHarvestPositions.push([]) - if (this.terrainCoords[packedCoord] === 255) continue - if (this.baseCoords[packedCoord] !== 255) continue + const sourcePos = this.communeSources[i].pos + for (const offset of adjacentOffsets) { + const adjPos = new RoomPosition( + offset.x + sourcePos.x, + offset.y + sourcePos.y, + this.room.name, + ) + const packedCoord = packAsNum(adjPos) - sourceHarvestPositions[i].push(adjPos) - } + if (this.terrainCoords[packedCoord] === 255) continue + if (this.baseCoords[packedCoord] !== 255) continue + + sourceHarvestPositions[i].push(adjPos) + } - /* + /* // Remove source harvest positions overlapping with upgrade positions or other source harvest positions // Loop through each pos index @@ -994,147 +989,147 @@ export class CommunePlanner { } */ - sortBy( - sourceHarvestPositions[i], - origin => - customPathFinder.findPath({ - origin, - goals: [ - { - pos: fastFillerAnchor, - range: 3, - }, - ], - weightCoordMaps: [this.diagonalCoords, this.roadCoords], - plainCost: defaultRoadPlanningPlainCost, - }).length, - ) - - const closestHarvestPos = sourceHarvestPositions[i][0] - - if (!closestHarvestPos) { - /* console.log(sourceHarvestPositions) */ - throw Error('no closest harvest pos ' + this.room.name) - } - - this.setBasePlansXY(closestHarvestPos.x, closestHarvestPos.y, STRUCTURE_CONTAINER, 3) - const packedCoord = packAsNum(closestHarvestPos) - this.roadCoords[packedCoord] = 20 - } - - for (const i in this.communeSources) { - const origin = sourceHarvestPositions[i][0] - - const path = customPathFinder.findPath({ - origin: origin, - goals: [ - { - pos: fastFillerAnchor, - range: 3, - }, - ], - weightCoordMaps: [this.diagonalCoords, this.roadCoords], - plainCost: defaultRoadPlanningPlainCost * 2, - swampCost: defaultSwampCost * 2, - }) - - let j = 0 - let pos = path[j] - while (pos && getRange(pos, this.communeSources[i].pos) <= 2) { - this.baseCoords[packAsNum(pos)] = 255 - - j += 1 - pos = path[j] - } - } - - this.sourceHarvestPositions = sourceHarvestPositions - } - private mineral() { - if (this.mineralPath) return - - const goal = new RoomPosition( - this.stampAnchors.hub[0].x, - this.stampAnchors.hub[0].y, - this.room.name, - ) - - sortBy( - this.mineralHarvestPositions, - origin => - customPathFinder.findPath({ - origin, - goals: [ - { - pos: goal, - range: 3, - }, - ], - weightCoordMaps: [this.diagonalCoords, this.roadCoords], - plainCost: defaultRoadPlanningPlainCost, - }).length, - ) - - const path = customPathFinder.findPath({ - origin: this.mineralHarvestPositions[0], - goals: [{ pos: goal, range: 1 }], + sortBy( + sourceHarvestPositions[i], + origin => + customPathFinder.findPath({ + origin, + goals: [ + { + pos: fastFillerAnchor, + range: 3, + }, + ], weightCoordMaps: [this.diagonalCoords, this.roadCoords], - plainCost: defaultRoadPlanningPlainCost * 2, - swampCost: defaultSwampCost * 2, - }) + plainCost: defaultRoadPlanningPlainCost, + }).length, + ) - for (const pos of path) { - this.roadCoords[packAsNum(pos)] = 1 - this.setBasePlansXY(pos.x, pos.y, STRUCTURE_ROAD, 6) - } + const closestHarvestPos = sourceHarvestPositions[i][0] - const closestMineralHarvestPos = this.mineralHarvestPositions[0] + if (!closestHarvestPos) { + /* console.log(sourceHarvestPositions) */ + throw Error('no closest harvest pos ' + this.room.name) + } - this.setBasePlansXY( - closestMineralHarvestPos.x, - closestMineralHarvestPos.y, - STRUCTURE_CONTAINER, - 6, - ) - const packedCoord = packAsNum(closestMineralHarvestPos) - this.roadCoords[packedCoord] = 20 - this.baseCoords[packedCoord] = 255 - - const mineralPos = this.room.roomManager.mineral.pos - this.setBasePlansXY(mineralPos.x, mineralPos.y, STRUCTURE_EXTRACTOR, 6) + this.setBasePlansXY(closestHarvestPos.x, closestHarvestPos.y, STRUCTURE_CONTAINER, 3) + const packedCoord = packAsNum(closestHarvestPos) + this.roadCoords[packedCoord] = 20 + } - this.mineralHarvestPositions = this.mineralHarvestPositions.filter(pos => { - return getRange(closestMineralHarvestPos, pos) <= 1 - }) + for (const i in this.communeSources) { + const origin = sourceHarvestPositions[i][0] + + const path = customPathFinder.findPath({ + origin: origin, + goals: [ + { + pos: fastFillerAnchor, + range: 3, + }, + ], + weightCoordMaps: [this.diagonalCoords, this.roadCoords], + plainCost: defaultRoadPlanningPlainCost * 2, + swampCost: defaultSwampCost * 2, + }) + + let j = 0 + let pos = path[j] + while (pos && getRange(pos, this.communeSources[i].pos) <= 2) { + this.baseCoords[packAsNum(pos)] = 255 + + j += 1 + pos = path[j] + } + } - this.mineralPath = path + this.sourceHarvestPositions = sourceHarvestPositions + } + private mineral() { + if (this.mineralPath) return + + const goal = new RoomPosition( + this.stampAnchors.hub[0].x, + this.stampAnchors.hub[0].y, + this.room.name, + ) + + sortBy( + this.mineralHarvestPositions, + origin => + customPathFinder.findPath({ + origin, + goals: [ + { + pos: goal, + range: 3, + }, + ], + weightCoordMaps: [this.diagonalCoords, this.roadCoords], + plainCost: defaultRoadPlanningPlainCost, + }).length, + ) + + const path = customPathFinder.findPath({ + origin: this.mineralHarvestPositions[0], + goals: [{ pos: goal, range: 1 }], + weightCoordMaps: [this.diagonalCoords, this.roadCoords], + plainCost: defaultRoadPlanningPlainCost * 2, + swampCost: defaultSwampCost * 2, + }) + + for (const pos of path) { + this.roadCoords[packAsNum(pos)] = 1 + this.setBasePlansXY(pos.x, pos.y, STRUCTURE_ROAD, 6) } - private sourceStructures() { - if (this.sourceStructureCoords) return - const fastFillerAnchor = new RoomPosition( - this.stampAnchors.fastFiller[0].x, - this.stampAnchors.fastFiller[0].y, - this.room.name, - ) - const avoidCoords: Set = new Set() - - for (let i = 0; i < this.sourceHarvestPositions.length; i++) { - const closestHarvestPos = this.sourceHarvestPositions[i][0] - - const path = customPathFinder.findPath({ - origin: closestHarvestPos, - goals: [ - { - pos: fastFillerAnchor, - range: 3, - }, - ], - weightCoordMaps: [this.diagonalCoords, this.roadCoords], - plainCost: defaultRoadPlanningPlainCost * 2, - swampCost: defaultSwampCost * 2, - }) - /* + const closestMineralHarvestPos = this.mineralHarvestPositions[0] + + this.setBasePlansXY( + closestMineralHarvestPos.x, + closestMineralHarvestPos.y, + STRUCTURE_CONTAINER, + 6, + ) + const packedCoord = packAsNum(closestMineralHarvestPos) + this.roadCoords[packedCoord] = 20 + this.baseCoords[packedCoord] = 255 + + const mineralPos = this.room.roomManager.mineral.pos + this.setBasePlansXY(mineralPos.x, mineralPos.y, STRUCTURE_EXTRACTOR, 6) + + this.mineralHarvestPositions = this.mineralHarvestPositions.filter(pos => { + return getRange(closestMineralHarvestPos, pos) <= 1 + }) + + this.mineralPath = path + } + private sourceStructures() { + if (this.sourceStructureCoords) return + + const fastFillerAnchor = new RoomPosition( + this.stampAnchors.fastFiller[0].x, + this.stampAnchors.fastFiller[0].y, + this.room.name, + ) + const avoidCoords: Set = new Set() + + for (let i = 0; i < this.sourceHarvestPositions.length; i++) { + const closestHarvestPos = this.sourceHarvestPositions[i][0] + + const path = customPathFinder.findPath({ + origin: closestHarvestPos, + goals: [ + { + pos: fastFillerAnchor, + range: 3, + }, + ], + weightCoordMaps: [this.diagonalCoords, this.roadCoords], + plainCost: defaultRoadPlanningPlainCost * 2, + swampCost: defaultSwampCost * 2, + }) + /* // Temporary fix if (!path.length) { @@ -1143,971 +1138,957 @@ export class CommunePlanner { return } */ - for (const pos of path) { - avoidCoords.add(packAsNum(pos)) - this.room.coordVisual(pos.x, pos.y) - } - } + for (const pos of path) { + avoidCoords.add(packAsNum(pos)) + this.room.coordVisual(pos.x, pos.y) + } + } - const sourceStructureCoords: Coord[][] = [] + const sourceStructureCoords: Coord[][] = [] - for (let i = 0; i < this.sourceHarvestPositions.length; i++) { - const closestHarvestPos = this.sourceHarvestPositions[i][0] + for (let i = 0; i < this.sourceHarvestPositions.length; i++) { + const closestHarvestPos = this.sourceHarvestPositions[i][0] - sourceStructureCoords.push([]) + sourceStructureCoords.push([]) - forAdjacentCoords(closestHarvestPos, adjCoord => { - const packedAdjCoord = packAsNum(adjCoord) + forAdjacentCoords(closestHarvestPos, adjCoord => { + const packedAdjCoord = packAsNum(adjCoord) - if (avoidCoords.has(packedAdjCoord)) return - if (this.baseCoords[packedAdjCoord] === 255) return - if (this.roadCoords[packedAdjCoord] > 0) return + if (avoidCoords.has(packedAdjCoord)) return + if (this.baseCoords[packedAdjCoord] === 255) return + if (this.roadCoords[packedAdjCoord] > 0) return - sourceStructureCoords[i].push(adjCoord) - this.baseCoords[packedAdjCoord] = 255 - this.roadCoords[packedAdjCoord] = 255 - }) - } - - this.sourceStructureCoords = sourceStructureCoords + sourceStructureCoords[i].push(adjCoord) + this.baseCoords[packedAdjCoord] = 255 + this.roadCoords[packedAdjCoord] = 255 + }) } - private planSourceStructures() { - if (this.stampAnchors.sourceLink.length) return - - const sourceLinkCoords: Coord[] = [] - const sourceExtensionCoords: Coord[] = [] - const hubAnchor = this.stampAnchors.hub[0] - for (let i = 0; i < this.sourceStructureCoords.length; i++) { - let closestCoordIndex: number - let closestRange = Infinity + this.sourceStructureCoords = sourceStructureCoords + } + private planSourceStructures() { + if (this.stampAnchors.sourceLink.length) return - for (let j = this.sourceStructureCoords[i].length - 1; j >= 0; j--) { - const coord = this.sourceStructureCoords[i][j] - const packedCoord = packAsNum(coord) + const sourceLinkCoords: Coord[] = [] + const sourceExtensionCoords: Coord[] = [] + const hubAnchor = this.stampAnchors.hub[0] - if (this.minCutCoords.has(packedCoord)) { - this.roadCoords[packedCoord] = 0 - continue - } + for (let i = 0; i < this.sourceStructureCoords.length; i++) { + let closestCoordIndex: number + let closestRange = Infinity - const range = getRange(hubAnchor, coord) - if (range >= closestRange) continue - - closestCoordIndex = j - closestRange = range - } + for (let j = this.sourceStructureCoords[i].length - 1; j >= 0; j--) { + const coord = this.sourceStructureCoords[i][j] + const packedCoord = packAsNum(coord) - if (!closestCoordIndex) { + if (this.minCutCoords.has(packedCoord)) { + this.roadCoords[packedCoord] = 0 + continue + } - // add a position that we won't use to fill the index - sourceLinkCoords.push({ x: 0, y: 0 }) - continue - } + const range = getRange(hubAnchor, coord) + if (range >= closestRange) continue - const closestCoord = this.sourceStructureCoords[i][closestCoordIndex] - this.sourceStructureCoords[i].splice(closestCoordIndex, 1) + closestCoordIndex = j + closestRange = range + } - sourceLinkCoords.push(closestCoord) - this.setBasePlansXY(closestCoord.x, closestCoord.y, STRUCTURE_LINK) + if (!closestCoordIndex) { + // add a position that we won't use to fill the index + sourceLinkCoords.push({ x: 0, y: 0 }) + continue + } - const packedCoord = packAsNum(closestCoord) - this.baseCoords[packedCoord] = 255 - this.roadCoords[packedCoord] = 255 + const closestCoord = this.sourceStructureCoords[i][closestCoordIndex] + this.sourceStructureCoords[i].splice(closestCoordIndex, 1) - for (const coord of this.sourceStructureCoords[i]) { - const packedCoord = packAsNum(coord) - if (this.minCutCoords.has(packedCoord)) { - this.roadCoords[packedCoord] = 0 - continue - } + sourceLinkCoords.push(closestCoord) + this.setBasePlansXY(closestCoord.x, closestCoord.y, STRUCTURE_LINK) - sourceExtensionCoords.push(coord) - this.setBasePlansXY(coord.x, coord.y, STRUCTURE_EXTENSION) + const packedCoord = packAsNum(closestCoord) + this.baseCoords[packedCoord] = 255 + this.roadCoords[packedCoord] = 255 - this.baseCoords[packedCoord] = 255 - this.roadCoords[packedCoord] = 255 - } + for (const coord of this.sourceStructureCoords[i]) { + const packedCoord = packAsNum(coord) + if (this.minCutCoords.has(packedCoord)) { + this.roadCoords[packedCoord] = 0 + continue } - this.stampAnchors.sourceExtension = sourceExtensionCoords - this.stampAnchors.sourceLink = sourceLinkCoords - } - private findCenterUpgradePos() { - if (this.centerUpgradePos) return false - const controllerPos = this.room.controller.pos + sourceExtensionCoords.push(coord) + this.setBasePlansXY(coord.x, coord.y, STRUCTURE_EXTENSION) - let bestCoords: Set = new Set() - let bestScore = 0 + this.baseCoords[packedCoord] = 255 + this.roadCoords[packedCoord] = 255 + } + } - forCoordsAroundRange(controllerPos, 2, coord => { - const packedCoord = packAsNum(coord) - if (this.roadCoords[packAsNum(coord)] > 0) return + this.stampAnchors.sourceExtension = sourceExtensionCoords + this.stampAnchors.sourceLink = sourceLinkCoords + } + private findCenterUpgradePos() { + if (this.centerUpgradePos) return false + const controllerPos = this.room.controller.pos + + let bestCoords: Set = new Set() + let bestScore = 0 + + forCoordsAroundRange(controllerPos, 2, coord => { + const packedCoord = packAsNum(coord) + if (this.roadCoords[packAsNum(coord)] > 0) return + + let score = 0 + + forAdjacentCoords(coord, adjCoord => { + if (this.roadCoords[packAsNum(adjCoord)] > 0) return + + score += 1 + }) + + if (score > bestScore) { + bestCoords = new Set([packedCoord]) + bestScore = score + return + } + if (score === bestScore) { + bestCoords.add(packedCoord) + return + } + }) + + if (!bestCoords.size) return Result.fail + + const centerUpgradePos = this.room.findClosestPos({ + coordMap: this.roadCoords, + sources: [this.stampAnchors.fastFiller[0]], + targetCondition: coord => { + return bestCoords.has(packAsNum(coord)) + }, + }) + + if (!centerUpgradePos) return Result.fail + + const packedCoord = packAsNum(centerUpgradePos) + this.setBasePlansXY(centerUpgradePos.x, centerUpgradePos.y, STRUCTURE_CONTAINER, 2) + this.setBasePlansXY(centerUpgradePos.x, centerUpgradePos.y, STRUCTURE_LINK) + + forCoordsAroundRange(centerUpgradePos, 1, adjCoord => { + const packedAdjCoord = packAsNum(adjCoord) + this.baseCoords[packedAdjCoord] = 255 + this.roadCoords[packedAdjCoord] = 20 + }) + + this.roadCoords[packedCoord] = 255 + this.baseCoords[packedCoord] = 255 + + this.centerUpgradePos = centerUpgradePos + return Result.success + } + private planGridCoords() { + if (this.plannedGridCoords) return + + for (let x = 0; x < roomDimensions; x++) { + for (let y = 0; y < roomDimensions; y++) { + const packedCoord = packXYAsNum(x, y) + if (this.gridCoords[packedCoord] === 0) continue + if (this.roadCoords[packedCoord] === 1) continue + if (this.baseCoords[packedCoord] === 255) continue - let score = 0 + let minRCL = Infinity - forAdjacentCoords(coord, adjCoord => { - if (this.roadCoords[packAsNum(adjCoord)] > 0) return + forAdjacentCoords({ x: x, y: y }, adjCoord => { + const coordData = this.basePlans.get(packCoord(adjCoord)) + if (!coordData) return + if (coordData[0].structureType === STRUCTURE_ROAD) return - score += 1 - }) + const RCL = coordData[0].minRCL + if (RCL >= minRCL) return - if (score > bestScore) { - bestCoords = new Set([packedCoord]) - bestScore = score - return - } - if (score === bestScore) { - bestCoords.add(packedCoord) - return - } + minRCL = RCL }) - if (!bestCoords.size) return Result.fail + if (minRCL === Infinity) continue - const centerUpgradePos = this.room.findClosestPos({ - coordMap: this.roadCoords, - sources: [this.stampAnchors.fastFiller[0]], - targetCondition: coord => { - return bestCoords.has(packAsNum(coord)) - }, - }) + this.setBasePlansXY(x, y, STRUCTURE_ROAD, minRCL) + this.roadCoords[packedCoord] = 1 + } + } - if (!centerUpgradePos) return Result.fail + this.plannedGridCoords = true + } + private flipStructuresVertical(stamp: Stamp) { + const flippedStructures: Partial<{ [key in StructureConstant]: Coord[] }> = {} + + for (const structureType in stamp.structures) { + const coords = stamp.structures[structureType] + flippedStructures[structureType as StructureConstant] = coords.map(coord => ({ + x: coord.x, + y: stamp.size + stamp.offset - coord.y - 1, + })) + } - const packedCoord = packAsNum(centerUpgradePos) - this.setBasePlansXY(centerUpgradePos.x, centerUpgradePos.y, STRUCTURE_CONTAINER, 2) - this.setBasePlansXY(centerUpgradePos.x, centerUpgradePos.y, STRUCTURE_LINK) + return flippedStructures + } - forCoordsAroundRange(centerUpgradePos, 1, adjCoord => { - const packedAdjCoord = packAsNum(adjCoord) - this.baseCoords[packedAdjCoord] = 255 - this.roadCoords[packedAdjCoord] = 20 - }) + private flipStructuresHorizontal(stamp: Stamp) { + const flippedStructures: Partial<{ [key in StructureConstant]: Coord[] }> = {} - this.roadCoords[packedCoord] = 255 - this.baseCoords[packedCoord] = 255 - - this.centerUpgradePos = centerUpgradePos - return Result.success + for (const structureType in stamp.structures) { + const coords = stamp.structures[structureType] + flippedStructures[structureType as StructureConstant] = coords.map(coord => ({ + x: stamp.size + stamp.offset - coord.x - 1, + y: coord.y, + })) } - private planGridCoords() { - if (this.plannedGridCoords) return - for (let x = 0; x < roomDimensions; x++) { - for (let y = 0; y < roomDimensions; y++) { - const packedCoord = packXYAsNum(x, y) - if (this.gridCoords[packedCoord] === 0) continue - if (this.roadCoords[packedCoord] === 1) continue - if (this.baseCoords[packedCoord] === 255) continue + return flippedStructures + } + private planStamps(args: PlanStampsArgs) { + if (!args.coordMap) args.coordMap = this.baseCoords - let minRCL = Infinity + const stamp = stamps[args.stampType] - forAdjacentCoords({ x: x, y: y }, adjCoord => { - const coordData = this.basePlans.get(packCoord(adjCoord)) - if (!coordData) return - if (coordData[0].structureType === STRUCTURE_ROAD) return + args.count -= this.stampAnchors[args.stampType].length - const RCL = coordData[0].minRCL - if (RCL >= minRCL) return + for (; args.count > 0; args.count -= 1) { + let stampAnchor: Coord | false - minRCL = RCL - }) + if (args.dynamic) { + if (args.weighted) { + stampAnchor = this.findDynamicStampAnchorWeighted({ + stamp, + startCoords: args.startCoords, + conditions: args.conditions, + dynamicWeight: args.dynamicWeight, + }) + if (!stampAnchor) return Result.fail - if (minRCL === Infinity) continue + args.consequence(stampAnchor) + this.stampAnchors[args.stampType].push(stampAnchor) - this.setBasePlansXY(x, y, STRUCTURE_ROAD, minRCL) - this.roadCoords[packedCoord] = 1 - } + continue } + stampAnchor = this.findDynamicStampAnchor({ + stamp, + startCoords: args.startCoords, + conditions: args.conditions, + }) + if (!stampAnchor) return Result.fail - this.plannedGridCoords = true - } - private flipStructuresVertical(stamp: Stamp) { - const flippedStructures: Partial<{ [key in StructureConstant]: Coord[] }> = {} + args.consequence(stampAnchor) + this.stampAnchors[args.stampType].push(stampAnchor) - for (const structureType in stamp.structures) { - const coords = stamp.structures[structureType] - flippedStructures[structureType as StructureConstant] = coords.map(coord => ({ - x: coord.x, - y: stamp.size + stamp.offset - coord.y - 1, - })) - } + continue + } - return flippedStructures - } + // Not dynamic - private flipStructuresHorizontal(stamp: Stamp) { - const flippedStructures: Partial<{ [key in StructureConstant]: Coord[] }> = {} + // Run distance transform with the baseCM - for (const structureType in stamp.structures) { - const coords = stamp.structures[structureType] - flippedStructures[structureType as StructureConstant] = coords.map(coord => ({ - x: stamp.size + stamp.offset - coord.x - 1, - y: coord.y, - })) - } + const distanceCoords = args.diagonalDT + ? this.room.diagonalDistanceTransform(args.coordMap, false, args.minAvoid) + : this.room.distanceTransform(args.coordMap, false, args.minAvoid) + + stampAnchor = this.findStampAnchor({ + stamp, + startCoords: args.startCoords, + cardinalFlood: args.cardinalFlood, + coordMap: distanceCoords, + }) + if (!stampAnchor) return Result.fail - return flippedStructures + args.consequence(stampAnchor) + this.stampAnchors[args.stampType].push(stampAnchor) } - private planStamps(args: PlanStampsArgs) { - if (!args.coordMap) args.coordMap = this.baseCoords - const stamp = stamps[args.stampType] + return Result.success + } + private findStampAnchor(args: FindStampAnchorArgs) { + let visitedCoords = new Uint8Array(2500) + for (const coord of args.startCoords) visitedCoords[packAsNum(coord)] = 1 - args.count -= this.stampAnchors[args.stampType].length + let thisGeneration = args.startCoords + let nextGeneration: Coord[] - for (; args.count > 0; args.count -= 1) { - let stampAnchor: Coord | false + while (thisGeneration.length) { + nextGeneration = [] - if (args.dynamic) { - if (args.weighted) { - stampAnchor = this.findDynamicStampAnchorWeighted({ - stamp, - startCoords: args.startCoords, - conditions: args.conditions, - dynamicWeight: args.dynamicWeight, - }) - if (!stampAnchor) return Result.fail + let localVisitedCoords = new Uint8Array(visitedCoords) - args.consequence(stampAnchor) - this.stampAnchors[args.stampType].push(stampAnchor) + // Flood cardinal directions, excluding impassibles - continue - } - stampAnchor = this.findDynamicStampAnchor({ - stamp, - startCoords: args.startCoords, - conditions: args.conditions, - }) - if (!stampAnchor) return Result.fail + if (args.cardinalFlood) { + // Iterate through positions of this gen - args.consequence(stampAnchor) - this.stampAnchors[args.stampType].push(stampAnchor) + for (const coord1 of thisGeneration) { + if (this.isViableStampAnchor(args, coord1)) return coord1 - continue - } + // Add viable adjacent coords to the next generation - // Not dynamic + for (const offset of cardinalOffsets) { + const coord2 = { + x: coord1.x + offset.x, + y: coord1.y + offset.y, + } - // Run distance transform with the baseCM + if (!isXYInRoom(coord2.x, coord2.y)) continue - const distanceCoords = args.diagonalDT - ? this.room.diagonalDistanceTransform(args.coordMap, false, args.minAvoid) - : this.room.distanceTransform(args.coordMap, false, args.minAvoid) + if (localVisitedCoords[packAsNum(coord2)] === 1) continue + localVisitedCoords[packAsNum(coord2)] = 1 - stampAnchor = this.findStampAnchor({ - stamp, - startCoords: args.startCoords, - cardinalFlood: args.cardinalFlood, - coordMap: distanceCoords, - }) - if (!stampAnchor) return Result.fail + if (args.coordMap[packAsNum(coord2)] === 0) continue - args.consequence(stampAnchor) - this.stampAnchors[args.stampType].push(stampAnchor) + nextGeneration.push(coord2) + } } + } - return Result.success - } - private findStampAnchor(args: FindStampAnchorArgs) { - let visitedCoords = new Uint8Array(2500) - for (const coord of args.startCoords) visitedCoords[packAsNum(coord)] = 1 + // Flood all adjacent positions - let thisGeneration = args.startCoords - let nextGeneration: Coord[] + if (!nextGeneration.length) { + localVisitedCoords = new Uint8Array(visitedCoords) - while (thisGeneration.length) { - nextGeneration = [] + // Iterate through positions of this gen - let localVisitedCoords = new Uint8Array(visitedCoords) + for (const coord1 of thisGeneration) { + if (this.isViableStampAnchor(args, coord1)) return coord1 - // Flood cardinal directions, excluding impassibles + // Add viable adjacent coords to the next generation - if (args.cardinalFlood) { - // Iterate through positions of this gen + for (const offset of adjacentOffsets) { + const coord2 = { + x: coord1.x + offset.x, + y: coord1.y + offset.y, + } - for (const coord1 of thisGeneration) { - if (this.isViableStampAnchor(args, coord1)) return coord1 + if (!isXYInRoom(coord2.x, coord2.y)) continue - // Add viable adjacent coords to the next generation + if (localVisitedCoords[packAsNum(coord2)] === 1) continue + localVisitedCoords[packAsNum(coord2)] = 1 - for (const offset of cardinalOffsets) { - const coord2 = { - x: coord1.x + offset.x, - y: coord1.y + offset.y, - } + if (args.coordMap[packAsNum(coord2)] === 0) continue - if (!isXYInRoom(coord2.x, coord2.y)) continue + nextGeneration.push(coord2) + } + } + } - if (localVisitedCoords[packAsNum(coord2)] === 1) continue - localVisitedCoords[packAsNum(coord2)] = 1 + // Flood all adjacent positions, including diagonals - if (args.coordMap[packAsNum(coord2)] === 0) continue + if (!nextGeneration.length) { + localVisitedCoords = new Uint8Array(visitedCoords) - nextGeneration.push(coord2) - } - } - } + // Iterate through positions of this gen - // Flood all adjacent positions + for (const coord1 of thisGeneration) { + if (this.isViableStampAnchor(args, coord1)) return coord1 - if (!nextGeneration.length) { - localVisitedCoords = new Uint8Array(visitedCoords) + // Add viable adjacent coords to the next generation + + for (const offset of adjacentOffsets) { + const coord2 = { + x: coord1.x + offset.x, + y: coord1.y + offset.y, + } - // Iterate through positions of this gen + if (!isXYInRoom(coord2.x, coord2.y)) continue - for (const coord1 of thisGeneration) { - if (this.isViableStampAnchor(args, coord1)) return coord1 + if (localVisitedCoords[packAsNum(coord2)] === 1) continue + localVisitedCoords[packAsNum(coord2)] = 1 - // Add viable adjacent coords to the next generation + nextGeneration.push(coord2) + } + } + } - for (const offset of adjacentOffsets) { - const coord2 = { - x: coord1.x + offset.x, - y: coord1.y + offset.y, - } + // Set this gen to next gen - if (!isXYInRoom(coord2.x, coord2.y)) continue + visitedCoords = new Uint8Array(localVisitedCoords) + thisGeneration = nextGeneration + } - if (localVisitedCoords[packAsNum(coord2)] === 1) continue - localVisitedCoords[packAsNum(coord2)] = 1 + // No stampAnchor was found - if (args.coordMap[packAsNum(coord2)] === 0) continue + return false + } + private isViableStampAnchor(args: FindStampAnchorArgs, coord1: Coord) { + // Get the value of the pos - nextGeneration.push(coord2) - } - } - } + const posValue = args.coordMap[packAsNum(coord1)] + if (posValue === 255) return false + if (posValue === 0) return false + if (posValue < args.stamp.size) return false + if (this.isCloseToExit(coord1, args.stamp.protectionOffset + 1)) return false + return true + } + private findDynamicStampAnchor(args: FindDynamicStampAnchorArgs) { + let visitedCoords = new Uint8Array(2500) + for (const coord of args.startCoords) visitedCoords[packAsNum(coord)] = 1 - // Flood all adjacent positions, including diagonals + let thisGeneration = args.startCoords + let nextGeneration: Coord[] - if (!nextGeneration.length) { - localVisitedCoords = new Uint8Array(visitedCoords) + while (thisGeneration.length) { + nextGeneration = [] - // Iterate through positions of this gen + let localVisitedCoords = new Uint8Array(visitedCoords) - for (const coord1 of thisGeneration) { - if (this.isViableStampAnchor(args, coord1)) return coord1 + // Flood all adjacent positions - // Add viable adjacent coords to the next generation + if (!nextGeneration.length) { + localVisitedCoords = new Uint8Array(visitedCoords) - for (const offset of adjacentOffsets) { - const coord2 = { - x: coord1.x + offset.x, - y: coord1.y + offset.y, - } + // Iterate through positions of this gen - if (!isXYInRoom(coord2.x, coord2.y)) continue + for (const coord1 of thisGeneration) { + if (this.isViableDynamicStampAnchor(args, coord1)) return coord1 - if (localVisitedCoords[packAsNum(coord2)] === 1) continue - localVisitedCoords[packAsNum(coord2)] = 1 + // Add viable adjacent coords to the next generation - nextGeneration.push(coord2) - } - } + for (const offset of adjacentOffsets) { + const coord2 = { + x: coord1.x + offset.x, + y: coord1.y + offset.y, } - // Set this gen to next gen + if (!isXYInRoom(coord2.x, coord2.y)) continue - visitedCoords = new Uint8Array(localVisitedCoords) - thisGeneration = nextGeneration - } + if (localVisitedCoords[packAsNum(coord2)] === 1) continue + localVisitedCoords[packAsNum(coord2)] = 1 - // No stampAnchor was found + if (this.baseCoords[packAsNum(coord2)] === 255) continue - return false - } - private isViableStampAnchor(args: FindStampAnchorArgs, coord1: Coord) { - // Get the value of the pos + nextGeneration.push(coord2) + } + } + } - const posValue = args.coordMap[packAsNum(coord1)] - if (posValue === 255) return false - if (posValue === 0) return false - if (posValue < args.stamp.size) return false - if (this.isCloseToExit(coord1, args.stamp.protectionOffset + 1)) return false - return true - } - private findDynamicStampAnchor(args: FindDynamicStampAnchorArgs) { - let visitedCoords = new Uint8Array(2500) - for (const coord of args.startCoords) visitedCoords[packAsNum(coord)] = 1 + // Flood all adjacent positions, including diagonals - let thisGeneration = args.startCoords - let nextGeneration: Coord[] + if (!nextGeneration.length) { + localVisitedCoords = new Uint8Array(visitedCoords) - while (thisGeneration.length) { - nextGeneration = [] + // Iterate through positions of this gen - let localVisitedCoords = new Uint8Array(visitedCoords) + for (const coord1 of thisGeneration) { + if (this.isViableDynamicStampAnchor(args, coord1)) return coord1 - // Flood all adjacent positions + // Add viable adjacent coords to the next generation - if (!nextGeneration.length) { - localVisitedCoords = new Uint8Array(visitedCoords) + for (const offset of adjacentOffsets) { + const coord2 = { + x: coord1.x + offset.x, + y: coord1.y + offset.y, + } - // Iterate through positions of this gen + if (!isXYInRoom(coord2.x, coord2.y)) continue - for (const coord1 of thisGeneration) { - if (this.isViableDynamicStampAnchor(args, coord1)) return coord1 + if (localVisitedCoords[packAsNum(coord2)] === 1) continue + localVisitedCoords[packAsNum(coord2)] = 1 - // Add viable adjacent coords to the next generation + nextGeneration.push(coord2) + } + } + } - for (const offset of adjacentOffsets) { - const coord2 = { - x: coord1.x + offset.x, - y: coord1.y + offset.y, - } + // Set this gen to next gen - if (!isXYInRoom(coord2.x, coord2.y)) continue + visitedCoords = new Uint8Array(localVisitedCoords) + thisGeneration = nextGeneration + } - if (localVisitedCoords[packAsNum(coord2)] === 1) continue - localVisitedCoords[packAsNum(coord2)] = 1 + // No stampAnchor was found - if (this.baseCoords[packAsNum(coord2)] === 255) continue + return false + } + private findDynamicStampAnchorWeighted(args: FindDynamicStampAnchorWeightedArgs) { + let visitedCoords = new Uint8Array(2500) + for (const coord of args.startCoords) visitedCoords[packAsNum(coord)] = 1 - nextGeneration.push(coord2) - } - } - } + let fromOrigin = new Uint8Array(2500) + let lowestNextGenCost = Infinity + let thisGeneration = args.startCoords + let nextGeneration: Coord[] - // Flood all adjacent positions, including diagonals + while (thisGeneration.length) { + nextGeneration = [] + let lowestGenCost = lowestNextGenCost + lowestNextGenCost = Infinity - if (!nextGeneration.length) { - localVisitedCoords = new Uint8Array(visitedCoords) + let localVisitedCoords = new Uint8Array(visitedCoords) - // Iterate through positions of this gen + // Flood adjacent coords that are passible - for (const coord1 of thisGeneration) { - if (this.isViableDynamicStampAnchor(args, coord1)) return coord1 + for (const coord of thisGeneration) { + const packedCoord = packAsNum(coord) + const coordCostFromOrigin = fromOrigin[packedCoord] + const coordCost = args.dynamicWeight[packedCoord] + coordCostFromOrigin - // Add viable adjacent coords to the next generation + if (coordCost > lowestGenCost) { + nextGeneration.push(coord) + continue + } - for (const offset of adjacentOffsets) { - const coord2 = { - x: coord1.x + offset.x, - y: coord1.y + offset.y, - } + if (this.isViableDynamicStampAnchor(args, coord)) return coord - if (!isXYInRoom(coord2.x, coord2.y)) continue + // Add viable adjacent coords to the next generation - if (localVisitedCoords[packAsNum(coord2)] === 1) continue - localVisitedCoords[packAsNum(coord2)] = 1 + for (const offset of adjacentOffsets) { + const adjCoord = { + x: coord.x + offset.x, + y: coord.y + offset.y, + } - nextGeneration.push(coord2) - } - } - } + if (!isXYInRoom(coord.x, coord.y)) continue - // Set this gen to next gen + const packedAdjCoord = packAsNum(adjCoord) - visitedCoords = new Uint8Array(localVisitedCoords) - thisGeneration = nextGeneration - } + if (localVisitedCoords[packedAdjCoord] === 1) continue + localVisitedCoords[packedAdjCoord] = 1 - // No stampAnchor was found + if (this.baseCoords[packedAdjCoord] === 255) continue - return false - } - private findDynamicStampAnchorWeighted(args: FindDynamicStampAnchorWeightedArgs) { - let visitedCoords = new Uint8Array(2500) - for (const coord of args.startCoords) visitedCoords[packAsNum(coord)] = 1 + nextGeneration.push(adjCoord) - let fromOrigin = new Uint8Array(2500) - let lowestNextGenCost = Infinity - let thisGeneration = args.startCoords - let nextGeneration: Coord[] + const adjCostFromOrigin = (fromOrigin[packedAdjCoord] = + coordCostFromOrigin + dynamicDistanceWeight) + const adjCoordCost = args.dynamicWeight[packedAdjCoord] + adjCostFromOrigin - while (thisGeneration.length) { - nextGeneration = [] - let lowestGenCost = lowestNextGenCost - lowestNextGenCost = Infinity + if (adjCoordCost < lowestNextGenCost) lowestNextGenCost = adjCoordCost + } + } - let localVisitedCoords = new Uint8Array(visitedCoords) + // Flood all adjacent coords - // Flood adjacent coords that are passible + if (!nextGeneration.length) { + localVisitedCoords = new Uint8Array(visitedCoords) - for (const coord of thisGeneration) { - const packedCoord = packAsNum(coord) - const coordCostFromOrigin = fromOrigin[packedCoord] - const coordCost = args.dynamicWeight[packedCoord] + coordCostFromOrigin + for (const coord of thisGeneration) { + const packedCoord = packAsNum(coord) + const coordCostFromOrigin = fromOrigin[packedCoord] + const coordCost = args.dynamicWeight[packedCoord] + coordCostFromOrigin - if (coordCost > lowestGenCost) { - nextGeneration.push(coord) - continue - } + if (coordCost > lowestGenCost) { + nextGeneration.push(coord) + continue + } - if (this.isViableDynamicStampAnchor(args, coord)) return coord + if (this.isViableDynamicStampAnchor(args, coord)) return coord - // Add viable adjacent coords to the next generation + // Add viable adjacent coords to the next generation - for (const offset of adjacentOffsets) { - const adjCoord = { - x: coord.x + offset.x, - y: coord.y + offset.y, - } + for (const offset of adjacentOffsets) { + const adjCoord = { + x: coord.x + offset.x, + y: coord.y + offset.y, + } - if (!isXYInRoom(coord.x, coord.y)) continue + if (!isXYInRoom(coord.x, coord.y)) continue - const packedAdjCoord = packAsNum(adjCoord) + const packedAdjCoord = packAsNum(adjCoord) - if (localVisitedCoords[packedAdjCoord] === 1) continue - localVisitedCoords[packedAdjCoord] = 1 + if (localVisitedCoords[packedAdjCoord] === 1) continue + localVisitedCoords[packedAdjCoord] = 1 - if (this.baseCoords[packedAdjCoord] === 255) continue + nextGeneration.push(adjCoord) - nextGeneration.push(adjCoord) + const adjCostFromOrigin = (fromOrigin[packedAdjCoord] = + coordCostFromOrigin + dynamicDistanceWeight) + const adjCoordCost = args.dynamicWeight[packedAdjCoord] + adjCostFromOrigin - const adjCostFromOrigin = (fromOrigin[packedAdjCoord] = - coordCostFromOrigin + dynamicDistanceWeight) - const adjCoordCost = args.dynamicWeight[packedAdjCoord] + adjCostFromOrigin + if (adjCoordCost < lowestNextGenCost) lowestNextGenCost = adjCoordCost + } + } + } - if (adjCoordCost < lowestNextGenCost) lowestNextGenCost = adjCoordCost - } - } + // Set this gen to next gen - // Flood all adjacent coords + visitedCoords = new Uint8Array(localVisitedCoords) + thisGeneration = nextGeneration + } - if (!nextGeneration.length) { - localVisitedCoords = new Uint8Array(visitedCoords) + // No stampAnchor was found + + return false + } + private isViableDynamicStampAnchor(args: FindDynamicStampAnchorArgs, coord1: Coord) { + // Get the value of the pos + /* this.room.visual.rect(coord1.x - 0.5, coord1.y - 0.5, 1, 1, { fill: customColors.red }) */ + if (this.baseCoords[packAsNum(coord1)] === 255) return false + if (this.roadCoords[packAsNum(coord1)] > 0) return false + if (this.isCloseToExit(coord1, args.stamp.protectionOffset + 2)) return false + if (!args.conditions(coord1)) return false + + return true + } + /** + * Finds wether the coord is in a specified range to an exit, flooding while avoiding walls + * @param startCoord The string coordinate + * @param range The max number of generations to do + */ + private isCloseToExit(startCoord: Coord, range: number) { + let visitedCoords = new Uint8Array(2500) + visitedCoords[packAsNum(startCoord)] = 1 + + let generations = 0 + let thisGeneration = [startCoord] + let nextGeneration: Coord[] + + while (thisGeneration.length && generations < range) { + nextGeneration = [] + + // Iterate through positions of this gen + + for (const coord1 of thisGeneration) { + // Add viable adjacent coords to the next generation - for (const coord of thisGeneration) { - const packedCoord = packAsNum(coord) - const coordCostFromOrigin = fromOrigin[packedCoord] - const coordCost = args.dynamicWeight[packedCoord] + coordCostFromOrigin + for (const offset of adjacentOffsets) { + const coord2 = { + x: coord1.x + offset.x, + y: coord1.y + offset.y, + } - if (coordCost > lowestGenCost) { - nextGeneration.push(coord) - continue - } + if (visitedCoords[packAsNum(coord2)] === 1) continue + visitedCoords[packAsNum(coord2)] = 1 - if (this.isViableDynamicStampAnchor(args, coord)) return coord + if (this.room.roomManager.exitCoords.has(packCoord(coord2))) return true - // Add viable adjacent coords to the next generation + if (this.terrainCoords[packAsNum(coord2)] === 255) continue - for (const offset of adjacentOffsets) { - const adjCoord = { - x: coord.x + offset.x, - y: coord.y + offset.y, - } + nextGeneration.push(coord2) + } + } - if (!isXYInRoom(coord.x, coord.y)) continue + // Set up for next generation - const packedAdjCoord = packAsNum(adjCoord) + generations += 1 + thisGeneration = nextGeneration + } - if (localVisitedCoords[packedAdjCoord] === 1) continue - localVisitedCoords[packedAdjCoord] = 1 + return false + } + private findFastFillerOrigin() { + if (this.fastFillerStartCoords) return this.fastFillerStartCoords[this.planAttempts.length] - nextGeneration.push(adjCoord) + // Controller - const adjCostFromOrigin = (fromOrigin[packedAdjCoord] = - coordCostFromOrigin + dynamicDistanceWeight) - const adjCoordCost = args.dynamicWeight[packedAdjCoord] + adjCostFromOrigin + const origins: Coord[] = [this.room.controller.pos] - if (adjCoordCost < lowestNextGenCost) lowestNextGenCost = adjCoordCost - } - } - } + // Both sources - // Set this gen to next gen + const sources = this.room.find(FIND_SOURCES) + for (const source of sources) origins.push(source.pos) - visitedCoords = new Uint8Array(localVisitedCoords) - thisGeneration = nextGeneration - } + // Find the closest source pos and its path to the controller - // No stampAnchor was found + let shortestPath: RoomPosition[] - return false - } - private isViableDynamicStampAnchor(args: FindDynamicStampAnchorArgs, coord1: Coord) { - // Get the value of the pos - /* this.room.visual.rect(coord1.x - 0.5, coord1.y - 0.5, 1, 1, { fill: customColors.red }) */ - if (this.baseCoords[packAsNum(coord1)] === 255) return false - if (this.roadCoords[packAsNum(coord1)] > 0) return false - if (this.isCloseToExit(coord1, args.stamp.protectionOffset + 2)) return false - if (!args.conditions(coord1)) return false + for (const source of sources) { + const path = customPathFinder.findPath({ + origin: source.pos, + goals: [{ pos: this.room.controller.pos, range: 1 }], + plainCost: defaultRoadPlanningPlainCost, + }) + if (shortestPath && path.length >= shortestPath.length) continue - return true + shortestPath = path } - /** - * Finds wether the coord is in a specified range to an exit, flooding while avoiding walls - * @param startCoord The string coordinate - * @param range The max number of generations to do - */ - private isCloseToExit(startCoord: Coord, range: number) { - let visitedCoords = new Uint8Array(2500) - visitedCoords[packAsNum(startCoord)] = 1 - let generations = 0 - let thisGeneration = [startCoord] - let nextGeneration: Coord[] + let origin = shortestPath[Math.floor(shortestPath.length / 2)] + if (origin) origins.push(origin) - while (thisGeneration.length && generations < range) { - nextGeneration = [] + // Avg path between sources, if more than 1 - // Iterate through positions of this gen + if (sources.length > 1) { + const path = customPathFinder.findPath({ + origin: sources[0].pos, + goals: [{ pos: sources[1].pos, range: 1 }], + plainCost: defaultRoadPlanningPlainCost, + }) - for (const coord1 of thisGeneration) { - // Add viable adjacent coords to the next generation + origin = path[Math.floor(path.length / 2)] + if (origin) origins.push(origin) + } - for (const offset of adjacentOffsets) { - const coord2 = { - x: coord1.x + offset.x, - y: coord1.y + offset.y, - } + this.fastFillerStartCoords = origins + return this.fastFillerStartCoords[this.planAttempts.length] + } + private fastFiller() { + if (this.stampAnchors.fastFiller.length) return Result.noAction - if (visitedCoords[packAsNum(coord2)] === 1) continue - visitedCoords[packAsNum(coord2)] = 1 + for (const coord of findCoordsInRange(this.room.controller.pos, 2)) { + this.baseCoords[packAsNum(coord)] = 255 + } - if (this.room.roomManager.exitCoords.has(packCoord(coord2))) return true + return this.planStamps({ + stampType: 'fastFiller', + count: 1, + startCoords: [this.findFastFillerOrigin()], + cardinalFlood: true, + consequence: stampAnchor => { + const stampOffset = stamps.fastFiller.offset + const structures = stamps.fastFiller.structures + + for (const coord of structures.road) { + const properCoord = { + x: coord.x + stampAnchor.x - stampOffset, + y: coord.y + stampAnchor.y - stampOffset, + } + const packedCoord = packAsNum(properCoord) + this.setBasePlansXY(properCoord.x, properCoord.y, STRUCTURE_ROAD, 3) + this.roadCoords[packedCoord] = 1 + this.byPlannedRoad[packedCoord] = 0 + } + + const properCoord = { + x: structures.link[0].x + stampAnchor.x - stampOffset, + y: structures.link[0].y + stampAnchor.y - stampOffset, + } + const packedCoord = packAsNum(properCoord) + this.setBasePlansXY(properCoord.x, properCoord.y, STRUCTURE_LINK, 6) + this.baseCoords[packedCoord] = 255 + this.roadCoords[packedCoord] = 255 - if (this.terrainCoords[packAsNum(coord2)] === 255) continue + const fastFillerPos = new RoomPosition(stampAnchor.x, stampAnchor.y, this.room.name) + const sources = this.room.find(FIND_SOURCES) + sortBy( + sources, + ({ pos }) => + customPathFinder.findPath({ + origin: pos, + goals: [ + { + pos: fastFillerPos, + range: 3, + }, + ], + weightCoordMaps: [this.diagonalCoords, this.roadCoords], + plainCost: defaultRoadPlanningPlainCost, + }).length, + ) - nextGeneration.push(coord2) - } - } + const fastFillerCoords = structures.empty + sortBy( + fastFillerCoords, + ({ x, y }) => + customPathFinder.findPath({ + origin: new RoomPosition( + x + stampAnchor.x - stampOffset, + y + stampAnchor.y - stampOffset, + this.room.name, + ), + goals: [ + { + pos: sources[0].pos, + range: 1, + }, + ], + weightCoordMaps: [this.diagonalCoords, this.roadCoords], + plainCost: defaultRoadPlanningPlainCost, + }).length, + ) - // Set up for next generation + let containerMinRCL = 1 + const containerCoords = [...structures.container] + const extensionCoords = [...structures.extension] + const spawnCoords = [...structures.spawn] - generations += 1 - thisGeneration = nextGeneration - } + for (let i = 0; i < fastFillerCoords.length; i++) { + const coord = fastFillerCoords[i] - return false - } - private findFastFillerOrigin() { - if (this.fastFillerStartCoords) return this.fastFillerStartCoords[this.planAttempts.length] + for (let j = extensionCoords.length - 1; j >= 0; j--) { + const structureCoord = extensionCoords[j] + if (getRange(coord, structureCoord) > 1) continue - // Controller + const properCoord = { + x: structureCoord.x + stampAnchor.x - stampOffset, + y: structureCoord.y + stampAnchor.y - stampOffset, + } + const packedCoord = packAsNum(properCoord) + this.setBasePlansXY(properCoord.x, properCoord.y, STRUCTURE_EXTENSION) + this.baseCoords[packedCoord] = 255 + this.roadCoords[packedCoord] = 255 - const origins: Coord[] = [this.room.controller.pos] + extensionCoords.splice(j, 1) + } - // Both sources + for (let j = spawnCoords.length - 1; j >= 0; j--) { + const structureCoord = spawnCoords[j] + if (getRange(coord, structureCoord) > 1) continue - const sources = this.room.find(FIND_SOURCES) - for (const source of sources) origins.push(source.pos) + const properCoord = { + x: structureCoord.x + stampAnchor.x - stampOffset, + y: structureCoord.y + stampAnchor.y - stampOffset, + } + const packedCoord = packAsNum(properCoord) + this.setBasePlansXY(properCoord.x, properCoord.y, STRUCTURE_SPAWN) + this.baseCoords[packedCoord] = 255 + this.roadCoords[packedCoord] = 255 - // Find the closest source pos and its path to the controller + // It's not our first room, have a rampart planned to build the spawn under - let shortestPath: RoomPosition[] + if (i === 0 && !this.roomManager.isStartRoom()) { + this.setRampartPlansXY(properCoord.x, properCoord.y, 2, false, false, false, false) + } - for (const source of sources) { - const path = customPathFinder.findPath({ - origin: source.pos, - goals: [{ pos: this.room.controller.pos, range: 1 }], - plainCost: defaultRoadPlanningPlainCost, - }) - if (shortestPath && path.length >= shortestPath.length) continue + spawnCoords.splice(j, 1) + break + } - shortestPath = path - } + for (let j = containerCoords.length - 1; j >= 0; j--) { + const structureCoord = containerCoords[j] + if (getRange(coord, structureCoord) > 1) continue - let origin = shortestPath[Math.floor(shortestPath.length / 2)] - if (origin) origins.push(origin) + const properCoord = { + x: structureCoord.x + stampAnchor.x - stampOffset, + y: structureCoord.y + stampAnchor.y - stampOffset, + } + const packedCoord = packAsNum(properCoord) + this.setBasePlansXY(properCoord.x, properCoord.y, STRUCTURE_CONTAINER, containerMinRCL) + this.baseCoords[packedCoord] = 255 + this.roadCoords[packedCoord] = 255 - // Avg path between sources, if more than 1 + containerMinRCL += 2 + containerCoords.splice(j, 1) + break + } + } + }, + }) + } + private hub() { + const fastFillerPos = new RoomPosition( + this.stampAnchors.fastFiller[0].x, + this.stampAnchors.fastFiller[0].y, + this.room.name, + ) + + let closestSource: Source + let closestSourceDistance = Infinity + + for (const source of this.room.find(FIND_SOURCES)) { + const range = customPathFinder.findPath({ + origin: source.pos, + goals: [ + { + pos: fastFillerPos, + range: 3, + }, + ], + plainCost: defaultRoadPlanningPlainCost, + }).length + if (range > closestSourceDistance) continue + + closestSourceDistance = range + closestSource = source + } - if (sources.length > 1) { - const path = customPathFinder.findPath({ - origin: sources[0].pos, - goals: [{ pos: sources[1].pos, range: 1 }], - plainCost: defaultRoadPlanningPlainCost, - }) + let pathOrigin: RoomPosition + if (getRange(fastFillerPos, this.centerUpgradePos) >= 10) { + pathOrigin = this.centerUpgradePos + } else { + pathOrigin = closestSource.pos + } - origin = path[Math.floor(path.length / 2)] - if (origin) origins.push(origin) + const path = customPathFinder.findPath({ + origin: pathOrigin, + goals: [{ pos: fastFillerPos, range: 3 }], + weightCoordMaps: [this.roadCoords], + plainCost: defaultRoadPlanningPlainCost, + }) + const origin = path[path.length - 1] || pathOrigin + + return this.planStamps({ + stampType: 'hub', + count: 1, + startCoords: [origin], + dynamic: true, + weighted: true, + dynamicWeight: this.reverseExitFlood, + /** + * Don't place on a gridCoord and ensure cardinal directions aren't gridCoords but are each adjacent to one + */ + conditions: coord => { + if (this.gridCoords[packAsNum(coord)] > 0) return false + + for (const offsets of cardinalOffsets) { + const packedCoord = packXYAsNum(coord.x + offsets.x, coord.y + offsets.y) + if (this.roadCoords[packedCoord] > 0) return false + if (this.byPlannedRoad[packedCoord] !== 1) return false } - this.fastFillerStartCoords = origins - return this.fastFillerStartCoords[this.planAttempts.length] - } - private fastFiller() { - if (this.stampAnchors.fastFiller.length) return Result.noAction + return true + }, + consequence: stampAnchor => { + this.room.errorVisual(stampAnchor) + this.baseCoords[packAsNum(stampAnchor)] = 255 + this.roadCoords[packAsNum(stampAnchor)] = 20 - for (const coord of findCoordsInRange(this.room.controller.pos, 2)) { - this.baseCoords[packAsNum(coord)] = 255 - } + const structureCoords: Coord[] = [] - return this.planStamps({ - stampType: 'fastFiller', - count: 1, - startCoords: [this.findFastFillerOrigin()], - cardinalFlood: true, - consequence: stampAnchor => { - const stampOffset = stamps.fastFiller.offset - const structures = stamps.fastFiller.structures - - for (const coord of structures.road) { - const properCoord = { - x: coord.x + stampAnchor.x - stampOffset, - y: coord.y + stampAnchor.y - stampOffset, - } - const packedCoord = packAsNum(properCoord) - this.setBasePlansXY(properCoord.x, properCoord.y, STRUCTURE_ROAD, 3) - this.roadCoords[packedCoord] = 1 - this.byPlannedRoad[packedCoord] = 0 - } - - const properCoord = { - x: structures.link[0].x + stampAnchor.x - stampOffset, - y: structures.link[0].y + stampAnchor.y - stampOffset, - } - const packedCoord = packAsNum(properCoord) - this.setBasePlansXY(properCoord.x, properCoord.y, STRUCTURE_LINK, 6) - this.baseCoords[packedCoord] = 255 - this.roadCoords[packedCoord] = 255 - - const fastFillerPos = new RoomPosition(stampAnchor.x, stampAnchor.y, this.room.name) - const sources = this.room.find(FIND_SOURCES) - sortBy( - sources, - ({ pos }) => - customPathFinder.findPath({ - origin: pos, - goals: [ - { - pos: fastFillerPos, - range: 3, - }, - ], - weightCoordMaps: [this.diagonalCoords, this.roadCoords], - plainCost: defaultRoadPlanningPlainCost, - }).length, - ) - - const fastFillerCoords = structures.empty - sortBy( - fastFillerCoords, - ({ x, y }) => - customPathFinder.findPath({ - origin: new RoomPosition( - x + stampAnchor.x - stampOffset, - y + stampAnchor.y - stampOffset, - this.room.name, - ), - goals: [ - { - pos: sources[0].pos, - range: 1, - }, - ], - weightCoordMaps: [this.diagonalCoords, this.roadCoords], - plainCost: defaultRoadPlanningPlainCost, - }).length, - ) - - let containerMinRCL = 1 - const containerCoords = [...structures.container] - const extensionCoords = [...structures.extension] - const spawnCoords = [...structures.spawn] - - for (let i = 0; i < fastFillerCoords.length; i++) { - const coord = fastFillerCoords[i] - - for (let j = extensionCoords.length - 1; j >= 0; j--) { - const structureCoord = extensionCoords[j] - if (getRange(coord, structureCoord) > 1) continue - - const properCoord = { - x: structureCoord.x + stampAnchor.x - stampOffset, - y: structureCoord.y + stampAnchor.y - stampOffset, - } - const packedCoord = packAsNum(properCoord) - this.setBasePlansXY(properCoord.x, properCoord.y, STRUCTURE_EXTENSION) - this.baseCoords[packedCoord] = 255 - this.roadCoords[packedCoord] = 255 - - extensionCoords.splice(j, 1) - } - - for (let j = spawnCoords.length - 1; j >= 0; j--) { - const structureCoord = spawnCoords[j] - if (getRange(coord, structureCoord) > 1) continue - - const properCoord = { - x: structureCoord.x + stampAnchor.x - stampOffset, - y: structureCoord.y + stampAnchor.y - stampOffset, - } - const packedCoord = packAsNum(properCoord) - this.setBasePlansXY(properCoord.x, properCoord.y, STRUCTURE_SPAWN) - this.baseCoords[packedCoord] = 255 - this.roadCoords[packedCoord] = 255 - - // It's not our first room, have a rampart planned to build the spawn under - - if (i === 0 && !this.roomManager.isStartRoom()) { - this.setRampartPlansXY( - properCoord.x, - properCoord.y, - 2, - false, - false, - false, - false, - ) - } - - spawnCoords.splice(j, 1) - break - } - - for (let j = containerCoords.length - 1; j >= 0; j--) { - const structureCoord = containerCoords[j] - if (getRange(coord, structureCoord) > 1) continue - - const properCoord = { - x: structureCoord.x + stampAnchor.x - stampOffset, - y: structureCoord.y + stampAnchor.y - stampOffset, - } - const packedCoord = packAsNum(properCoord) - this.setBasePlansXY( - properCoord.x, - properCoord.y, - STRUCTURE_CONTAINER, - containerMinRCL, - ) - this.baseCoords[packedCoord] = 255 - this.roadCoords[packedCoord] = 255 - - containerMinRCL += 2 - containerCoords.splice(j, 1) - break - } - } - }, - }) - } - private hub() { - const fastFillerPos = new RoomPosition( - this.stampAnchors.fastFiller[0].x, - this.stampAnchors.fastFiller[0].y, - this.room.name, - ) + for (const offset of cardinalOffsets) { + structureCoords.push({ + x: stampAnchor.x + offset.x, + y: stampAnchor.y + offset.y, + }) + } + + let [coord, i] = this.findStorageCoord(structureCoords) + structureCoords.splice(i, 1) + this.setBasePlansXY(coord.x, coord.y, STRUCTURE_STORAGE, 4) + this.baseCoords[packAsNum(coord)] = 255 + this.roadCoords[packAsNum(coord)] = 255 + + if (stampAnchor.y === coord.y) + coord = { + x: stampAnchor.x - coord.x + stampAnchor.x, + y: coord.y, + } + else + coord = { + x: coord.x, + y: stampAnchor.y - coord.y + stampAnchor.y, + } + + for (i = 0; i < structureCoords.length; i++) { + if (areCoordsEqual(coord, structureCoords[i])) break + } + + structureCoords.splice(i, 1) + this.setBasePlansXY(coord.x, coord.y, STRUCTURE_TERMINAL, 6) + this.baseCoords[packAsNum(coord)] = 255 + this.roadCoords[packAsNum(coord)] = 255 - let closestSource: Source - let closestSourceDistance = Infinity - - for (const source of this.room.find(FIND_SOURCES)) { - const range = customPathFinder.findPath({ - origin: source.pos, - goals: [ - { - pos: fastFillerPos, - range: 3, - }, - ], - plainCost: defaultRoadPlanningPlainCost, - }).length - if (range > closestSourceDistance) continue - - closestSourceDistance = range - closestSource = source - } + // + ;[coord, i] = findClosestCoord(this.room.controller.pos, structureCoords) + structureCoords.splice(i, 1) + this.setBasePlansXY(coord.x, coord.y, STRUCTURE_LINK, 5) + this.baseCoords[packAsNum(coord)] = 255 + this.roadCoords[packAsNum(coord)] = 255 - let pathOrigin: RoomPosition - if (getRange(fastFillerPos, this.centerUpgradePos) >= 10) { - pathOrigin = this.centerUpgradePos - } else { - pathOrigin = closestSource.pos - } + coord = structureCoords[0] + this.setBasePlansXY(coord.x, coord.y, STRUCTURE_FACTORY, 7) + this.baseCoords[packAsNum(coord)] = 255 + this.roadCoords[packAsNum(coord)] = 255 const path = customPathFinder.findPath({ - origin: pathOrigin, - goals: [{ pos: fastFillerPos, range: 3 }], - weightCoordMaps: [this.roadCoords], - plainCost: defaultRoadPlanningPlainCost, - }) - const origin = path[path.length - 1] || pathOrigin - - return this.planStamps({ - stampType: 'hub', - count: 1, - startCoords: [origin], - dynamic: true, - weighted: true, - dynamicWeight: this.reverseExitFlood, - /** - * Don't place on a gridCoord and ensure cardinal directions aren't gridCoords but are each adjacent to one - */ - conditions: coord => { - if (this.gridCoords[packAsNum(coord)] > 0) return false - - for (const offsets of cardinalOffsets) { - const packedCoord = packXYAsNum(coord.x + offsets.x, coord.y + offsets.y) - if (this.roadCoords[packedCoord] > 0) return false - if (this.byPlannedRoad[packedCoord] !== 1) return false - } - - return true - }, - consequence: stampAnchor => { - this.room.errorVisual(stampAnchor) - this.baseCoords[packAsNum(stampAnchor)] = 255 - this.roadCoords[packAsNum(stampAnchor)] = 20 - - const structureCoords: Coord[] = [] - - for (const offset of cardinalOffsets) { - structureCoords.push({ - x: stampAnchor.x + offset.x, - y: stampAnchor.y + offset.y, - }) - } - - let [coord, i] = this.findStorageCoord(structureCoords) - structureCoords.splice(i, 1) - this.setBasePlansXY(coord.x, coord.y, STRUCTURE_STORAGE, 4) - this.baseCoords[packAsNum(coord)] = 255 - this.roadCoords[packAsNum(coord)] = 255 - - if (stampAnchor.y === coord.y) - coord = { - x: stampAnchor.x - coord.x + stampAnchor.x, - y: coord.y, - } - else - coord = { - x: coord.x, - y: stampAnchor.y - coord.y + stampAnchor.y, - } - - for (i = 0; i < structureCoords.length; i++) { - if (areCoordsEqual(coord, structureCoords[i])) break - } - - structureCoords.splice(i, 1) - this.setBasePlansXY(coord.x, coord.y, STRUCTURE_TERMINAL, 6) - this.baseCoords[packAsNum(coord)] = 255 - this.roadCoords[packAsNum(coord)] = 255 - - // - ;[coord, i] = findClosestCoord(this.room.controller.pos, structureCoords) - structureCoords.splice(i, 1) - this.setBasePlansXY(coord.x, coord.y, STRUCTURE_LINK, 5) - this.baseCoords[packAsNum(coord)] = 255 - this.roadCoords[packAsNum(coord)] = 255 - - coord = structureCoords[0] - this.setBasePlansXY(coord.x, coord.y, STRUCTURE_FACTORY, 7) - this.baseCoords[packAsNum(coord)] = 255 - this.roadCoords[packAsNum(coord)] = 255 - - const path = customPathFinder.findPath({ - origin: new RoomPosition(stampAnchor.x, stampAnchor.y, this.room.name), - goals: [{ pos: fastFillerPos, range: 3 }], - weightCoordMaps: [this.diagonalCoords, this.gridCoords, this.roadCoords], - plainCost: defaultRoadPlanningPlainCost * 2, - swampCost: defaultSwampCost * 2, - }) - - for (const pos of path) { - this.setBasePlansXY(pos.x, pos.y, STRUCTURE_ROAD, 3) - this.roadCoords[packAsNum(pos)] = 1 - } - }, + origin: new RoomPosition(stampAnchor.x, stampAnchor.y, this.room.name), + goals: [{ pos: fastFillerPos, range: 3 }], + weightCoordMaps: [this.diagonalCoords, this.gridCoords, this.roadCoords], + plainCost: defaultRoadPlanningPlainCost * 2, + swampCost: defaultSwampCost * 2, }) - } - private findStorageCoord(structureCoords: Coord[]): [Coord, number] { - /* + + for (const pos of path) { + this.setBasePlansXY(pos.x, pos.y, STRUCTURE_ROAD, 3) + this.roadCoords[packAsNum(pos)] = 1 + } + }, + }) + } + private findStorageCoord(structureCoords: Coord[]): [Coord, number] { + /* for (let i = 0; i < structureCoords.length; i++) { const coord = structureCoords[i] @@ -2122,783 +2103,778 @@ export class CommunePlanner { return [coord, i] } */ - return findClosestCoord(this.stampAnchors.fastFiller[0], structureCoords) - } - private labs() { - return this.planStamps({ - stampType: 'inputLab', - count: 1, - startCoords: [this.stampAnchors.hub[0]], - dynamic: true, - weighted: true, - dynamicWeight: this.reverseExitFlood, - /** - * Ensure we can place all 10 labs where they are in range 2 of the 2 inputs, so can all be utilized for reactions - */ - conditions: coord1 => { - const packedNumCoord1 = packAsNum(coord1) - if (this.byPlannedRoad[packedNumCoord1] !== 1) return false - if (this.roadCoords[packedNumCoord1] > 0) return false - - let outputLabCoords: Coord[] - - // Record - - const packedAdjCoords1: Set = new Set() - const range = 2 - for (let x = coord1.x - range; x <= coord1.x + range; x += 1) { - for (let y = coord1.y - range; y <= coord1.y + range; y += 1) { - const packedCoordNum = packXYAsNum(x, y) - if (this.byPlannedRoad[packedCoordNum] !== 1) continue - if (this.roadCoords[packedCoordNum] > 0) continue - - packedAdjCoords1.add(packXYAsCoord(x, y)) - } - } - - const packedCoord1 = packCoord(coord1) - - for (const coord2 of findCoordsInRangeXY(coord1.x, coord1.y, range)) { - const packedCoord2Num = packAsNum(coord2) - if (this.byPlannedRoad[packedCoord2Num] !== 1) continue - if (this.roadCoords[packedCoord2Num] > 0) continue - - const packedCoord2 = packCoord(coord2) - if (packedCoord1 === packedCoord2) continue - - outputLabCoords = [] - - for (const adjCoord2 of findCoordsInRangeXY(coord2.x, coord2.y, range)) { - const packedAdjCoord2 = packCoord(adjCoord2) - if (packedCoord1 === packedAdjCoord2) continue - if (packedCoord2 === packedAdjCoord2) continue - if (!packedAdjCoords1.has(packedAdjCoord2)) continue - - outputLabCoords.push(adjCoord2) - if (outputLabCoords.length >= 8) { - this.inputLab2Coord = coord2 - this.outputLabCoords = outputLabCoords - return true - } - } - } - - return false - }, - consequence: stampAnchor => { - this.setBasePlansXY(stampAnchor.x, stampAnchor.y, STRUCTURE_LAB, 6) - this.baseCoords[packAsNum(stampAnchor)] = 255 - this.roadCoords[packAsNum(stampAnchor)] = 255 - - this.setBasePlansXY(this.inputLab2Coord.x, this.inputLab2Coord.y, STRUCTURE_LAB, 6) - this.baseCoords[packAsNum(this.inputLab2Coord)] = 255 - this.roadCoords[packAsNum(this.inputLab2Coord)] = 255 - - const goal = new RoomPosition( - this.stampAnchors.hub[0].x, - this.stampAnchors.hub[0].y, - this.room.name, - ) - - sortBy( - this.outputLabCoords, - ({ x, y }) => - customPathFinder.findPath({ - origin: new RoomPosition(x, y, this.room.name), - goals: [ - { - pos: goal, - range: 3, - }, - ], - weightCoordMaps: [this.gridCoords, this.roadCoords], - plainCost: defaultRoadPlanningPlainCost, - }).length, - ) - - for (const coord of this.outputLabCoords) { - this.setBasePlansXY(coord.x, coord.y, STRUCTURE_LAB) - this.baseCoords[packAsNum(coord)] = 255 - this.roadCoords[packAsNum(coord)] = 255 - } - }, - }) - } - private gridExtensions() { - return this.planStamps({ - stampType: 'gridExtension', - count: - CONTROLLER_STRUCTURES.extension[8] - - stamps.fastFiller.structures[STRUCTURE_EXTENSION].length - - this.stampAnchors.sourceExtension.length, - startCoords: [this.stampAnchors.hub[0]], - dynamic: true, - weighted: true, - dynamicWeight: this.reverseExitFlood, - /** - * Don't place on a gridCoord and ensure there is a gridCoord adjacent - */ - conditions: coord => { - const packedCoord = packAsNum(coord) - if (this.baseCoords[packedCoord] === 255) return false - if (this.byPlannedRoad[packedCoord] !== 1) return false - - return true - }, - consequence: stampAnchor => { - this.setBasePlansXY(stampAnchor.x, stampAnchor.y, STRUCTURE_EXTENSION) - this.baseCoords[packAsNum(stampAnchor)] = 255 - this.roadCoords[packAsNum(stampAnchor)] = 255 - }, - }) - } - private gridExtensionSourcePaths() { - if (this.sourcePaths) return - - const hubAnchorPos = new RoomPosition( - this.stampAnchors.hub[0].x, - this.stampAnchors.hub[0].y, - this.room.name, - ) - - for (let i = this.stampAnchors.gridExtension.length - 1; i >= 0; i -= 5) { - const coord = this.stampAnchors.gridExtension[i] - - const path = customPathFinder.findPath({ - origin: new RoomPosition(coord.x, coord.y, this.room.name), - goals: [{ pos: hubAnchorPos, range: 2 }], - weightCoordMaps: [this.diagonalCoords, this.gridCoords, this.roadCoords], - plainCost: defaultRoadPlanningPlainCost * 2, - swampCost: defaultSwampCost * 2, - }) + return findClosestCoord(this.stampAnchors.fastFiller[0], structureCoords) + } + private labs() { + return this.planStamps({ + stampType: 'inputLab', + count: 1, + startCoords: [this.stampAnchors.hub[0]], + dynamic: true, + weighted: true, + dynamicWeight: this.reverseExitFlood, + /** + * Ensure we can place all 10 labs where they are in range 2 of the 2 inputs, so can all be utilized for reactions + */ + conditions: coord1 => { + const packedNumCoord1 = packAsNum(coord1) + if (this.byPlannedRoad[packedNumCoord1] !== 1) return false + if (this.roadCoords[packedNumCoord1] > 0) return false - const minRCL = this.basePlans.getXY(coord.x, coord.y)[0].minRCL + let outputLabCoords: Coord[] - for (const pos of path) { - this.setBasePlansXY(pos.x, pos.y, STRUCTURE_ROAD, minRCL) - this.roadCoords[packAsNum(pos)] = 1 - } - } + // Record - const fastFillerAnchor = new RoomPosition( - this.stampAnchors.fastFiller[0].x, - this.stampAnchors.fastFiller[0].y, - this.room.name, - ) - const sourcePaths: RoomPosition[][] = [] - - for (let i = this.communeSources.length - 1; i >= 0; i -= 1) { - const origin = this.sourceHarvestPositions[i][0] - - const path = customPathFinder.findPath({ - origin: origin, - goals: [ - { - pos: fastFillerAnchor, - range: 3, - }, - ], - weightCoordMaps: [this.diagonalCoords, this.roadCoords], - plainCost: defaultRoadPlanningPlainCost * 2, - swampCost: defaultSwampCost * 2, - }) - - for (const pos of path) { - this.setBasePlansXY(pos.x, pos.y, STRUCTURE_ROAD, 3) - this.roadCoords[packAsNum(pos)] = 1 - } + const packedAdjCoords1: Set = new Set() + const range = 2 + for (let x = coord1.x - range; x <= coord1.x + range; x += 1) { + for (let y = coord1.y - range; y <= coord1.y + range; y += 1) { + const packedCoordNum = packXYAsNum(x, y) + if (this.byPlannedRoad[packedCoordNum] !== 1) continue + if (this.roadCoords[packedCoordNum] > 0) continue - sourcePaths.push(path) + packedAdjCoords1.add(packXYAsCoord(x, y)) + } } - const upgradePath = customPathFinder.findPath({ - origin: this.centerUpgradePos, - goals: [ - { - pos: new RoomPosition( - this.stampAnchors.fastFiller[0].x, - this.stampAnchors.fastFiller[0].y, - this.room.name, - ), - range: 3, - }, - ], - weightCoordMaps: [this.diagonalCoords, this.roadCoords], - plainCost: defaultRoadPlanningPlainCost * 2, - swampCost: defaultSwampCost * 2, - }) + const packedCoord1 = packCoord(coord1) - for (const pos of upgradePath) { - this.roadCoords[packAsNum(pos)] = 1 - this.setBasePlansXY(pos.x, pos.y, STRUCTURE_ROAD, 3) - } + for (const coord2 of findCoordsInRangeXY(coord1.x, coord1.y, range)) { + const packedCoord2Num = packAsNum(coord2) + if (this.byPlannedRoad[packedCoord2Num] !== 1) continue + if (this.roadCoords[packedCoord2Num] > 0) continue - this.upgradePath = upgradePath - this.sourcePaths = sourcePaths.reverse() - } - private observer() { - return this.planStamps({ - stampType: 'observer', - count: 1, - startCoords: [this.stampAnchors.hub[0]], - dynamic: true, - weighted: true, - dynamicWeight: this.reverseExitFlood, - /** - * Don't place on a gridCoord and ensure there is a gridCoord adjacent - */ - conditions: coord => { - const packedCoord = packAsNum(coord) - if (this.baseCoords[packedCoord] === 255) return false - if (this.gridCoords[packedCoord] > 0) return false - - return true - }, - consequence: stampAnchor => { - this.setBasePlansXY(stampAnchor.x, stampAnchor.y, STRUCTURE_OBSERVER, 8) - this.baseCoords[packAsNum(stampAnchor)] = 255 - this.roadCoords[packAsNum(stampAnchor)] = 255 - }, - }) - } - private nuker() { - return this.planStamps({ - stampType: 'nuker', - count: 1, - startCoords: [this.stampAnchors.hub[0]], - dynamic: true, - weighted: true, - dynamicWeight: this.reverseExitFlood, - /** - * Don't place on a gridCoord and ensure there is a gridCoord adjacent - */ - conditions: coord => { - const packedCoord = packAsNum(coord) - if (this.baseCoords[packedCoord] === 255) return false - if (this.byPlannedRoad[packedCoord] !== 1) return false - - return true - }, - consequence: stampAnchor => { - this.setBasePlansXY(stampAnchor.x, stampAnchor.y, STRUCTURE_NUKER, 8) - this.baseCoords[packAsNum(stampAnchor)] = 255 - this.roadCoords[packAsNum(stampAnchor)] = 255 - }, - }) - } - private powerSpawn() { - return this.planStamps({ - stampType: 'powerSpawn', - count: 1, - startCoords: [this.stampAnchors.hub[0]], - dynamic: true, - weighted: true, - dynamicWeight: this.reverseExitFlood, - /** - * Don't place on a gridCoord and ensure there is a gridCoord adjacent - */ - conditions: coord => { - const packedCoord = packAsNum(coord) - if (this.baseCoords[packedCoord] === 255) return false - if (this.byPlannedRoad[packedCoord] !== 1) return false - - return true - }, - consequence: stampAnchor => { - this.setBasePlansXY(stampAnchor.x, stampAnchor.y, STRUCTURE_POWER_SPAWN, 8) - this.baseCoords[packAsNum(stampAnchor)] = 255 - this.roadCoords[packAsNum(stampAnchor)] = 255 - }, - }) - } - private runMinCut() { - if (this.minCutCoords) return + const packedCoord2 = packCoord(coord2) + if (packedCoord1 === packedCoord2) continue - const cm = new PathFinder.CostMatrix() - const terrain = this.room.getTerrain() + outputLabCoords = [] - for (let x = 0; x < roomDimensions; x++) { - for (let y = 0; y < roomDimensions; y++) { - if (terrain.get(x, y) !== TERRAIN_MASK_WALL) continue + for (const adjCoord2 of findCoordsInRangeXY(coord2.x, coord2.y, range)) { + const packedAdjCoord2 = packCoord(adjCoord2) + if (packedCoord1 === packedAdjCoord2) continue + if (packedCoord2 === packedAdjCoord2) continue + if (!packedAdjCoords1.has(packedAdjCoord2)) continue - cm.set(x, y, 255) + outputLabCoords.push(adjCoord2) + if (outputLabCoords.length >= 8) { + this.inputLab2Coord = coord2 + this.outputLabCoords = outputLabCoords + return true } + } } - const protectionCoords: Set = new Set() + return false + }, + consequence: stampAnchor => { + this.setBasePlansXY(stampAnchor.x, stampAnchor.y, STRUCTURE_LAB, 6) + this.baseCoords[packAsNum(stampAnchor)] = 255 + this.roadCoords[packAsNum(stampAnchor)] = 255 - // General stamps + this.setBasePlansXY(this.inputLab2Coord.x, this.inputLab2Coord.y, STRUCTURE_LAB, 6) + this.baseCoords[packAsNum(this.inputLab2Coord)] = 255 + this.roadCoords[packAsNum(this.inputLab2Coord)] = 255 - for (const key in this.stampAnchors) { - const stampType = key as StampTypes - const stamp = stamps[stampType] + const goal = new RoomPosition( + this.stampAnchors.hub[0].x, + this.stampAnchors.hub[0].y, + this.room.name, + ) - for (const coord of this.stampAnchors[stampType]) { - for (const nearbyCoord of findCoordsInRange(coord, stamp.protectionOffset)) { - const packedNearbyCoord = packAsNum(nearbyCoord) - if (this.terrainCoords[packedNearbyCoord] === 255) continue - if (this.byExitCoords[packedNearbyCoord] === 255) continue + sortBy( + this.outputLabCoords, + ({ x, y }) => + customPathFinder.findPath({ + origin: new RoomPosition(x, y, this.room.name), + goals: [ + { + pos: goal, + range: 3, + }, + ], + weightCoordMaps: [this.gridCoords, this.roadCoords], + plainCost: defaultRoadPlanningPlainCost, + }).length, + ) - protectionCoords.add(packedNearbyCoord) - } - } - } + for (const coord of this.outputLabCoords) { + this.setBasePlansXY(coord.x, coord.y, STRUCTURE_LAB) + this.baseCoords[packAsNum(coord)] = 255 + this.roadCoords[packAsNum(coord)] = 255 + } + }, + }) + } + private gridExtensions() { + return this.planStamps({ + stampType: 'gridExtension', + count: + CONTROLLER_STRUCTURES.extension[8] - + stamps.fastFiller.structures[STRUCTURE_EXTENSION].length - + this.stampAnchors.sourceExtension.length, + startCoords: [this.stampAnchors.hub[0]], + dynamic: true, + weighted: true, + dynamicWeight: this.reverseExitFlood, + /** + * Don't place on a gridCoord and ensure there is a gridCoord adjacent + */ + conditions: coord => { + const packedCoord = packAsNum(coord) + if (this.baseCoords[packedCoord] === 255) return false + if (this.byPlannedRoad[packedCoord] !== 1) return false - // the controllerStructure would be impassible when the link is built - cm.set(this.centerUpgradePos.x, this.centerUpgradePos.y, 255) + return true + }, + consequence: stampAnchor => { + this.setBasePlansXY(stampAnchor.x, stampAnchor.y, STRUCTURE_EXTENSION) + this.baseCoords[packAsNum(stampAnchor)] = 255 + this.roadCoords[packAsNum(stampAnchor)] = 255 + }, + }) + } + private gridExtensionSourcePaths() { + if (this.sourcePaths) return + + const hubAnchorPos = new RoomPosition( + this.stampAnchors.hub[0].x, + this.stampAnchors.hub[0].y, + this.room.name, + ) + + for (let i = this.stampAnchors.gridExtension.length - 1; i >= 0; i -= 5) { + const coord = this.stampAnchors.gridExtension[i] + + const path = customPathFinder.findPath({ + origin: new RoomPosition(coord.x, coord.y, this.room.name), + goals: [{ pos: hubAnchorPos, range: 2 }], + weightCoordMaps: [this.diagonalCoords, this.gridCoords, this.roadCoords], + plainCost: defaultRoadPlanningPlainCost * 2, + swampCost: defaultSwampCost * 2, + }) + + const minRCL = this.basePlans.getXY(coord.x, coord.y)[0].minRCL + + for (const pos of path) { + this.setBasePlansXY(pos.x, pos.y, STRUCTURE_ROAD, minRCL) + this.roadCoords[packAsNum(pos)] = 1 + } + } - const hubAnchor = new RoomPosition( - this.stampAnchors.hub[0].x, - this.stampAnchors.hub[0].y, - this.room.name, - ) - const fastFillerAnchor = new RoomPosition( + const fastFillerAnchor = new RoomPosition( + this.stampAnchors.fastFiller[0].x, + this.stampAnchors.fastFiller[0].y, + this.room.name, + ) + const sourcePaths: RoomPosition[][] = [] + + for (let i = this.communeSources.length - 1; i >= 0; i -= 1) { + const origin = this.sourceHarvestPositions[i][0] + + const path = customPathFinder.findPath({ + origin: origin, + goals: [ + { + pos: fastFillerAnchor, + range: 3, + }, + ], + weightCoordMaps: [this.diagonalCoords, this.roadCoords], + plainCost: defaultRoadPlanningPlainCost * 2, + swampCost: defaultSwampCost * 2, + }) + + for (const pos of path) { + this.setBasePlansXY(pos.x, pos.y, STRUCTURE_ROAD, 3) + this.roadCoords[packAsNum(pos)] = 1 + } + + sourcePaths.push(path) + } + + const upgradePath = customPathFinder.findPath({ + origin: this.centerUpgradePos, + goals: [ + { + pos: new RoomPosition( this.stampAnchors.fastFiller[0].x, this.stampAnchors.fastFiller[0].y, this.room.name, - ) + ), + range: 3, + }, + ], + weightCoordMaps: [this.diagonalCoords, this.roadCoords], + plainCost: defaultRoadPlanningPlainCost * 2, + swampCost: defaultSwampCost * 2, + }) + + for (const pos of upgradePath) { + this.roadCoords[packAsNum(pos)] = 1 + this.setBasePlansXY(pos.x, pos.y, STRUCTURE_ROAD, 3) + } - let path = customPathFinder.findPath({ - origin: hubAnchor, - goals: [ - { - pos: fastFillerAnchor, - range: 3, - }, - ], - weightCoordMaps: [this.diagonalCoords, this.roadCoords], - plainCost: defaultRoadPlanningPlainCost * 2, - swampCost: defaultSwampCost * 2, - }) + this.upgradePath = upgradePath + this.sourcePaths = sourcePaths.reverse() + } + private observer() { + return this.planStamps({ + stampType: 'observer', + count: 1, + startCoords: [this.stampAnchors.hub[0]], + dynamic: true, + weighted: true, + dynamicWeight: this.reverseExitFlood, + /** + * Don't place on a gridCoord and ensure there is a gridCoord adjacent + */ + conditions: coord => { + const packedCoord = packAsNum(coord) + if (this.baseCoords[packedCoord] === 255) return false + if (this.gridCoords[packedCoord] > 0) return false - for (const pos of path) { - for (const adjCoord of findCoordsInRange(pos, 3)) { - const adjPackedCoord = packAsNum(adjCoord) - if (this.terrainCoords[adjPackedCoord] > 0) continue - if (this.byExitCoords[adjPackedCoord] > 0) continue + return true + }, + consequence: stampAnchor => { + this.setBasePlansXY(stampAnchor.x, stampAnchor.y, STRUCTURE_OBSERVER, 8) + this.baseCoords[packAsNum(stampAnchor)] = 255 + this.roadCoords[packAsNum(stampAnchor)] = 255 + }, + }) + } + private nuker() { + return this.planStamps({ + stampType: 'nuker', + count: 1, + startCoords: [this.stampAnchors.hub[0]], + dynamic: true, + weighted: true, + dynamicWeight: this.reverseExitFlood, + /** + * Don't place on a gridCoord and ensure there is a gridCoord adjacent + */ + conditions: coord => { + const packedCoord = packAsNum(coord) + if (this.baseCoords[packedCoord] === 255) return false + if (this.byPlannedRoad[packedCoord] !== 1) return false - protectionCoords.add(adjPackedCoord) - } - } + return true + }, + consequence: stampAnchor => { + this.setBasePlansXY(stampAnchor.x, stampAnchor.y, STRUCTURE_NUKER, 8) + this.baseCoords[packAsNum(stampAnchor)] = 255 + this.roadCoords[packAsNum(stampAnchor)] = 255 + }, + }) + } + private powerSpawn() { + return this.planStamps({ + stampType: 'powerSpawn', + count: 1, + startCoords: [this.stampAnchors.hub[0]], + dynamic: true, + weighted: true, + dynamicWeight: this.reverseExitFlood, + /** + * Don't place on a gridCoord and ensure there is a gridCoord adjacent + */ + conditions: coord => { + const packedCoord = packAsNum(coord) + if (this.baseCoords[packedCoord] === 255) return false + if (this.byPlannedRoad[packedCoord] !== 1) return false - // Prune protection coords not contigious with fastFiller anchor group + return true + }, + consequence: stampAnchor => { + this.setBasePlansXY(stampAnchor.x, stampAnchor.y, STRUCTURE_POWER_SPAWN, 8) + this.baseCoords[packAsNum(stampAnchor)] = 255 + this.roadCoords[packAsNum(stampAnchor)] = 255 + }, + }) + } + private runMinCut() { + if (this.minCutCoords) return + + const cm = new PathFinder.CostMatrix() + const terrain = this.room.getTerrain() + + for (let x = 0; x < roomDimensions; x++) { + for (let y = 0; y < roomDimensions; y++) { + if (terrain.get(x, y) !== TERRAIN_MASK_WALL) continue + + cm.set(x, y, 255) + } + } - const startCoords = this.stampAnchors.fastFiller - const contigiousProtectionCoords: Set = new Set() - let visitedCoords = new Uint8Array(2500) + const protectionCoords: Set = new Set() - for (const coord of startCoords) { - const packedCoord = packAsNum(coord) - visitedCoords[packedCoord] = 1 - contigiousProtectionCoords.add(coord) - cm.set(coord.x, coord.y, 1) - } + // General stamps - let thisGeneration = startCoords - let nextGeneration: Coord[] + for (const key in this.stampAnchors) { + const stampType = key as StampTypes + const stamp = stamps[stampType] - while (thisGeneration.length) { - nextGeneration = [] + for (const coord of this.stampAnchors[stampType]) { + for (const nearbyCoord of findCoordsInRange(coord, stamp.protectionOffset)) { + const packedNearbyCoord = packAsNum(nearbyCoord) + if (this.terrainCoords[packedNearbyCoord] === 255) continue + if (this.byExitCoords[packedNearbyCoord] === 255) continue - // Iterate through positions of this gen + protectionCoords.add(packedNearbyCoord) + } + } + } - for (const coord1 of thisGeneration) { - // Add viable adjacent coords to the next generation + // the controllerStructure would be impassible when the link is built + cm.set(this.centerUpgradePos.x, this.centerUpgradePos.y, 255) + + const hubAnchor = new RoomPosition( + this.stampAnchors.hub[0].x, + this.stampAnchors.hub[0].y, + this.room.name, + ) + const fastFillerAnchor = new RoomPosition( + this.stampAnchors.fastFiller[0].x, + this.stampAnchors.fastFiller[0].y, + this.room.name, + ) + + let path = customPathFinder.findPath({ + origin: hubAnchor, + goals: [ + { + pos: fastFillerAnchor, + range: 3, + }, + ], + weightCoordMaps: [this.diagonalCoords, this.roadCoords], + plainCost: defaultRoadPlanningPlainCost * 2, + swampCost: defaultSwampCost * 2, + }) + + for (const pos of path) { + for (const adjCoord of findCoordsInRange(pos, 3)) { + const adjPackedCoord = packAsNum(adjCoord) + if (this.terrainCoords[adjPackedCoord] > 0) continue + if (this.byExitCoords[adjPackedCoord] > 0) continue + + protectionCoords.add(adjPackedCoord) + } + } - for (const offset of adjacentOffsets) { - const adjCoord = { - x: coord1.x + offset.x, - y: coord1.y + offset.y, - } - const packedAdjCoord = packAsNum(adjCoord) + // Prune protection coords not contigious with fastFiller anchor group - if (visitedCoords[packedAdjCoord] === 1) continue - visitedCoords[packedAdjCoord] = 1 + const startCoords = this.stampAnchors.fastFiller + const contigiousProtectionCoords: Set = new Set() + let visitedCoords = new Uint8Array(2500) - if (!protectionCoords.has(packedAdjCoord)) continue + for (const coord of startCoords) { + const packedCoord = packAsNum(coord) + visitedCoords[packedCoord] = 1 + contigiousProtectionCoords.add(coord) + cm.set(coord.x, coord.y, 1) + } - contigiousProtectionCoords.add(adjCoord) - cm.set(adjCoord.x, adjCoord.y, defaultMinCutDepth) - nextGeneration.push(adjCoord) - } - } + let thisGeneration = startCoords + let nextGeneration: Coord[] - // Set this gen to next gen + while (thisGeneration.length) { + nextGeneration = [] - thisGeneration = nextGeneration - } + // Iterate through positions of this gen - // Flood from contigious protectionCoords to get depth for distance-weighting + for (const coord1 of thisGeneration) { + // Add viable adjacent coords to the next generation - visitedCoords = new Uint8Array(2500) + for (const offset of adjacentOffsets) { + const adjCoord = { + x: coord1.x + offset.x, + y: coord1.y + offset.y, + } + const packedAdjCoord = packAsNum(adjCoord) + + if (visitedCoords[packedAdjCoord] === 1) continue + visitedCoords[packedAdjCoord] = 1 - for (const coord of contigiousProtectionCoords) { - thisGeneration.push(coord) - visitedCoords[packAsNum(coord)] = 1 + if (!protectionCoords.has(packedAdjCoord)) continue + + contigiousProtectionCoords.add(adjCoord) + cm.set(adjCoord.x, adjCoord.y, defaultMinCutDepth) + nextGeneration.push(adjCoord) } + } + + // Set this gen to next gen - let depth = defaultMinCutDepth + 1 + thisGeneration = nextGeneration + } - while (thisGeneration.length) { - nextGeneration = [] + // Flood from contigious protectionCoords to get depth for distance-weighting - // Flood all adjacent positions + visitedCoords = new Uint8Array(2500) - if (!nextGeneration.length) { - // Iterate through positions of this gen + for (const coord of contigiousProtectionCoords) { + thisGeneration.push(coord) + visitedCoords[packAsNum(coord)] = 1 + } - for (const coord1 of thisGeneration) { - // Add viable adjacent coords to the next generation + let depth = defaultMinCutDepth + 1 - for (const offset of adjacentOffsets) { - const adjCoord = { - x: coord1.x + offset.x, - y: coord1.y + offset.y, - } - const packedAdjCoord = packAsNum(adjCoord) + while (thisGeneration.length) { + nextGeneration = [] - if (!isXYInRoom(adjCoord.x, adjCoord.y)) continue + // Flood all adjacent positions - if (visitedCoords[packedAdjCoord] === 1) continue - visitedCoords[packedAdjCoord] = 1 + if (!nextGeneration.length) { + // Iterate through positions of this gen - if (this.terrainCoords[packedAdjCoord] === 255) continue + for (const coord1 of thisGeneration) { + // Add viable adjacent coords to the next generation - cm.set(adjCoord.x, adjCoord.y, depth) - nextGeneration.push(adjCoord) - } - } + for (const offset of adjacentOffsets) { + const adjCoord = { + x: coord1.x + offset.x, + y: coord1.y + offset.y, } + const packedAdjCoord = packAsNum(adjCoord) - // Set this gen to next gen + if (!isXYInRoom(adjCoord.x, adjCoord.y)) continue - thisGeneration = nextGeneration - depth += 1 + if (visitedCoords[packedAdjCoord] === 1) continue + visitedCoords[packedAdjCoord] = 1 + + if (this.terrainCoords[packedAdjCoord] === 255) continue + + cm.set(adjCoord.x, adjCoord.y, depth) + nextGeneration.push(adjCoord) + } } + } - // + // Set this gen to next gen + + thisGeneration = nextGeneration + depth += 1 + } + + // - const result = minCutToExit(Array.from(contigiousProtectionCoords), cm) - const minCutCoords: Set = new Set() - // Build ramparts later in the starting room + const result = minCutToExit(Array.from(contigiousProtectionCoords), cm) + const minCutCoords: Set = new Set() + // Build ramparts later in the starting room - for (const coord of result) { - const packedCoord = packAsNum(coord) - this.rampartCoords[packedCoord] = 1 + for (const coord of result) { + const packedCoord = packAsNum(coord) + this.rampartCoords[packedCoord] = 1 - minCutCoords.add(packedCoord) + minCutCoords.add(packedCoord) - this.stampAnchors.minCutRampart.push(coord) - /* this.roadCoords[packedCoord] = 1 + this.stampAnchors.minCutRampart.push(coord) + /* this.roadCoords[packedCoord] = 1 this.basePlans.setXY(coord.x, coord.y, STRUCTURE_ROAD, 4) */ - this.setRampartPlansXY(coord.x, coord.y, 4, false, false, false, true) - } - /* + this.setRampartPlansXY(coord.x, coord.y, 4, false, false, false, true) + } + /* for (const coord of contigiousProtectionCoords) this.room.coordVisual(coord.x, coord.y) for (const packedCoord of minCutCoords) { const coord = unpackNumAsCoord(packedCoord) this.room.coordVisual(coord.x, coord.y, customColors.green) } */ - this.minCutCoords = minCutCoords - } - private groupMinCutCoords() { - if (this.groupedMinCutCoords) return - - // Construct a costMatrix to store visited positions + this.minCutCoords = minCutCoords + } + private groupMinCutCoords() { + if (this.groupedMinCutCoords) return - const visitedCoords = new Uint8Array(2500) + // Construct a costMatrix to store visited positions - const groupedMinCutCoords: Coord[][] = [] - let groupIndex = 0 + const visitedCoords = new Uint8Array(2500) - // Loop through each pos of positions + const groupedMinCutCoords: Coord[][] = [] + let groupIndex = 0 - for (const packedCoord of this.minCutCoords) { - const coord = unpackNumAsCoord(packedCoord) + // Loop through each pos of positions - if (visitedCoords[packAsNum(coord)] === 1) continue - visitedCoords[packAsNum(coord)] = 1 + for (const packedCoord of this.minCutCoords) { + const coord = unpackNumAsCoord(packedCoord) - groupedMinCutCoords[groupIndex] = [new RoomPosition(coord.x, coord.y, this.room.name)] + if (visitedCoords[packAsNum(coord)] === 1) continue + visitedCoords[packAsNum(coord)] = 1 - // Construct values for floodFilling + groupedMinCutCoords[groupIndex] = [new RoomPosition(coord.x, coord.y, this.room.name)] - let thisGeneration = [coord] - let nextGeneration: Coord[] = [] - let groupSize = 0 + // Construct values for floodFilling - // So long as there are positions in this gen + let thisGeneration = [coord] + let nextGeneration: Coord[] = [] + let groupSize = 0 - while (thisGeneration.length) { - // Reset next gen + // So long as there are positions in this gen - nextGeneration = [] + while (thisGeneration.length) { + // Reset next gen - // Iterate through positions of this gen + nextGeneration = [] - for (const pos of thisGeneration) { - // Loop through adjacent positions + // Iterate through positions of this gen - for (const adjCoord of findAdjacentCoordsToCoord(pos)) { - const packedAdjacentCoord = packAsNum(adjCoord) + for (const pos of thisGeneration) { + // Loop through adjacent positions - // Iterate if the adjacent pos has been visited or isn't a tile + for (const adjCoord of findAdjacentCoordsToCoord(pos)) { + const packedAdjacentCoord = packAsNum(adjCoord) - if (visitedCoords[packedAdjacentCoord] === 1) continue - visitedCoords[packedAdjacentCoord] = 1 + // Iterate if the adjacent pos has been visited or isn't a tile - // If a rampart is not planned for this position, iterate + if (visitedCoords[packedAdjacentCoord] === 1) continue + visitedCoords[packedAdjacentCoord] = 1 - if (!this.minCutCoords.has(packedAdjacentCoord)) continue + // If a rampart is not planned for this position, iterate - // Add it to the next gen and this group + if (!this.minCutCoords.has(packedAdjacentCoord)) continue - groupedMinCutCoords[groupIndex].push( - new RoomPosition(adjCoord.x, adjCoord.y, this.room.name), - ) + // Add it to the next gen and this group - groupSize += 1 - nextGeneration.push(adjCoord) - } - } + groupedMinCutCoords[groupIndex].push( + new RoomPosition(adjCoord.x, adjCoord.y, this.room.name), + ) - if (groupSize >= maxRampartGroupSize) break + groupSize += 1 + nextGeneration.push(adjCoord) + } + } - // Set this gen to next gen + if (groupSize >= maxRampartGroupSize) break - thisGeneration = nextGeneration - } + // Set this gen to next gen - // Config for next group + thisGeneration = nextGeneration + } - groupIndex += 1 - } + // Config for next group - this.groupedMinCutCoords = groupedMinCutCoords + groupIndex += 1 } - /** - * Flood fill from exits, recording coords that aren't procted - */ - private findUnprotectedCoords() { - if (this.unprotectedCoords) return - - const unprotectedCoords = new Uint8Array(2500) - let visitedCoords = new Uint8Array(2500) - let thisGeneration = this.exitCoords - let nextGeneration: Coord[] - - for (const coord of thisGeneration) { - const packedCoord = packAsNum(coord) - visitedCoords[packedCoord] = 1 - unprotectedCoords[packedCoord] = 255 - } - while (thisGeneration.length) { - nextGeneration = [] + this.groupedMinCutCoords = groupedMinCutCoords + } + /** + * Flood fill from exits, recording coords that aren't procted + */ + private findUnprotectedCoords() { + if (this.unprotectedCoords) return + + const unprotectedCoords = new Uint8Array(2500) + let visitedCoords = new Uint8Array(2500) + let thisGeneration = this.exitCoords + let nextGeneration: Coord[] + + for (const coord of thisGeneration) { + const packedCoord = packAsNum(coord) + visitedCoords[packedCoord] = 1 + unprotectedCoords[packedCoord] = 255 + } - // Iterate through positions of this gen + while (thisGeneration.length) { + nextGeneration = [] - for (const coord of thisGeneration) { - // Add viable adjacent coords to the next generation + // Iterate through positions of this gen - for (const offset of adjacentOffsets) { - const adjCoord = { - x: coord.x + offset.x, - y: coord.y + offset.y, - } + for (const coord of thisGeneration) { + // Add viable adjacent coords to the next generation - if (!isXYInRoom(adjCoord.x, adjCoord.y)) continue + for (const offset of adjacentOffsets) { + const adjCoord = { + x: coord.x + offset.x, + y: coord.y + offset.y, + } - const packedAdjCoord = packAsNum(adjCoord) + if (!isXYInRoom(adjCoord.x, adjCoord.y)) continue - if (visitedCoords[packedAdjCoord] === 1) continue - visitedCoords[packedAdjCoord] = 1 + const packedAdjCoord = packAsNum(adjCoord) - // We have hit a barrier + if (visitedCoords[packedAdjCoord] === 1) continue + visitedCoords[packedAdjCoord] = 1 - if (this.terrainCoords[packedAdjCoord] === 255) continue - if (this.minCutCoords.has(packedAdjCoord)) continue + // We have hit a barrier - unprotectedCoords[packedAdjCoord] = 255 - nextGeneration.push(adjCoord) + if (this.terrainCoords[packedAdjCoord] === 255) continue + if (this.minCutCoords.has(packedAdjCoord)) continue - for (const adjCoord2 of findCoordsInRange(adjCoord, 3)) { - const packedAdjCoord2 = packAsNum(adjCoord2) - if (this.terrainCoords[packedAdjCoord2] > 0) continue - if (this.minCutCoords.has(packedAdjCoord2)) continue + unprotectedCoords[packedAdjCoord] = 255 + nextGeneration.push(adjCoord) - const currentWeight = unprotectedCoords[packedAdjCoord2] + for (const adjCoord2 of findCoordsInRange(adjCoord, 3)) { + const packedAdjCoord2 = packAsNum(adjCoord2) + if (this.terrainCoords[packedAdjCoord2] > 0) continue + if (this.minCutCoords.has(packedAdjCoord2)) continue - if (this.roadCoords[packedAdjCoord2] === 1) { - unprotectedCoords[packedAdjCoord2] = Math.max( - unprotectedCoordWeight * 0.5, - currentWeight, - ) - continue - } + const currentWeight = unprotectedCoords[packedAdjCoord2] - unprotectedCoords[packedAdjCoord2] = Math.max( - unprotectedCoordWeight, - currentWeight, - ) - } - } + if (this.roadCoords[packedAdjCoord2] === 1) { + unprotectedCoords[packedAdjCoord2] = Math.max( + unprotectedCoordWeight * 0.5, + currentWeight, + ) + continue } - // Set up for next generation - - thisGeneration = nextGeneration + unprotectedCoords[packedAdjCoord2] = Math.max(unprotectedCoordWeight, currentWeight) + } } + } - const addedMinCutRamparts: Coord[] = [] + // Set up for next generation - // Weight coords near ramparts that could be ranged attacked + thisGeneration = nextGeneration + } - for (const packedCoord of this.minCutCoords) { - const coord = unpackNumAsCoord(packedCoord) + const addedMinCutRamparts: Coord[] = [] - forCoordsInRange(coord, 2, adjCoord => { - const packedAdjCoord = packAsNum(adjCoord) - if (this.terrainCoords[packedAdjCoord] > 0) return - if (unprotectedCoords[packedAdjCoord] === 255) return + // Weight coords near ramparts that could be ranged attacked - if (!this.minCutCoords.has(packedAdjCoord) && getRange(coord, adjCoord) === 1) { - this.setRampartPlansXY(adjCoord.x, adjCoord.y, 4, false, false, true, true) - this.rampartCoords[packedAdjCoord] = 1 + for (const packedCoord of this.minCutCoords) { + const coord = unpackNumAsCoord(packedCoord) - addedMinCutRamparts.push(adjCoord) - } + forCoordsInRange(coord, 2, adjCoord => { + const packedAdjCoord = packAsNum(adjCoord) + if (this.terrainCoords[packedAdjCoord] > 0) return + if (unprotectedCoords[packedAdjCoord] === 255) return - if (this.roadCoords[packedAdjCoord] === 1) { - unprotectedCoords[packedAdjCoord] = unprotectedCoordWeight * 0.5 - return - } + if (!this.minCutCoords.has(packedAdjCoord) && getRange(coord, adjCoord) === 1) { + this.setRampartPlansXY(adjCoord.x, adjCoord.y, 4, false, false, true, true) + this.rampartCoords[packedAdjCoord] = 1 + + addedMinCutRamparts.push(adjCoord) + } - unprotectedCoords[packedAdjCoord] = unprotectedCoordWeight - }) + if (this.roadCoords[packedAdjCoord] === 1) { + unprotectedCoords[packedAdjCoord] = unprotectedCoordWeight * 0.5 + return } - this.stampAnchors.minCutRampart = - this.stampAnchors.minCutRampart.concat(addedMinCutRamparts) - this.unprotectedCoords = unprotectedCoords + unprotectedCoords[packedAdjCoord] = unprotectedCoordWeight + }) } - private onboardingRamparts() { - if (this.stampAnchors.onboardingRampart.length) return - const onboardingCoords: Set = new Set() - const hubAnchorPos = new RoomPosition( - this.stampAnchors.hub[0].x, - this.stampAnchors.hub[0].y, - this.room.name, - ) + this.stampAnchors.minCutRampart = this.stampAnchors.minCutRampart.concat(addedMinCutRamparts) + this.unprotectedCoords = unprotectedCoords + } + private onboardingRamparts() { + if (this.stampAnchors.onboardingRampart.length) return - for (const group of this.groupedMinCutCoords) { - const [closestCoord] = findClosestCoord(hubAnchorPos, group) + const onboardingCoords: Set = new Set() + const hubAnchorPos = new RoomPosition( + this.stampAnchors.hub[0].x, + this.stampAnchors.hub[0].y, + this.room.name, + ) - // Path from the hubAnchor to the cloestPosToAnchor + for (const group of this.groupedMinCutCoords) { + const [closestCoord] = findClosestCoord(hubAnchorPos, group) - const path = customPathFinder.findPath({ - origin: new RoomPosition(closestCoord.x, closestCoord.y, this.room.name), - goals: [{ pos: hubAnchorPos, range: 2 }], - weightCoordMaps: [this.diagonalCoords, this.roadCoords, this.unprotectedCoords], - plainCost: defaultRoadPlanningPlainCost * 2, - swampCost: defaultSwampCost * 2, - }) + // Path from the hubAnchor to the cloestPosToAnchor - // Construct the onboardingIndex + const path = customPathFinder.findPath({ + origin: new RoomPosition(closestCoord.x, closestCoord.y, this.room.name), + goals: [{ pos: hubAnchorPos, range: 2 }], + weightCoordMaps: [this.diagonalCoords, this.roadCoords, this.unprotectedCoords], + plainCost: defaultRoadPlanningPlainCost * 2, + swampCost: defaultSwampCost * 2, + }) - let onboardingIndex = 0 - let onboardingCount = 0 - let forThreat = false + // Construct the onboardingIndex - // So long as there is a pos in path with an index of onboardingIndex + let onboardingIndex = 0 + let onboardingCount = 0 + let forThreat = false - while (path[onboardingIndex]) { - // Get the pos in path with an index of onboardingIndex + // So long as there is a pos in path with an index of onboardingIndex - const coord = path[onboardingIndex] - const packedCoord = packAsNum(coord) + while (path[onboardingIndex]) { + // Get the pos in path with an index of onboardingIndex - onboardingIndex += 1 + const coord = path[onboardingIndex] + const packedCoord = packAsNum(coord) - // If there are already rampart plans at this pos + onboardingIndex += 1 - if (this.minCutCoords.has(packedCoord) && !onboardingCoords.has(packedCoord)) - continue + // If there are already rampart plans at this pos - // Record the coord + if (this.minCutCoords.has(packedCoord) && !onboardingCoords.has(packedCoord)) continue - /* this.roadCoords[packedCoord] = 1 - this.basePlans.setXY(coord.x, coord.y, STRUCTURE_ROAD, 4) */ - onboardingCoords.add(packedCoord) - this.rampartCoords[packedCoord] = 1 + // Record the coord - this.setRampartPlansXY(coord.x, coord.y, 4, false, false, forThreat, true) + /* this.roadCoords[packedCoord] = 1 + this.basePlans.setXY(coord.x, coord.y, STRUCTURE_ROAD, 4) */ + onboardingCoords.add(packedCoord) + this.rampartCoords[packedCoord] = 1 - onboardingCount += 1 - if (forThreat) break - if (onboardingCount === minOnboardingRamparts) forThreat = true - } + this.setRampartPlansXY(coord.x, coord.y, 4, false, false, forThreat, true) - for (let i = Math.max(onboardingIndex - 1, 0); i < path.length; i++) { - const pos = path[i] + onboardingCount += 1 + if (forThreat) break + if (onboardingCount === minOnboardingRamparts) forThreat = true + } - this.roadCoords[packAsNum(pos)] = 1 - this.setBasePlansXY(pos.x, pos.y, STRUCTURE_ROAD, 4) - } - } + for (let i = Math.max(onboardingIndex - 1, 0); i < path.length; i++) { + const pos = path[i] - this.stampAnchors.onboardingRampart = Array.from(onboardingCoords).map(packedCoord => - unpackNumAsCoord(packedCoord), - ) + this.roadCoords[packAsNum(pos)] = 1 + this.setBasePlansXY(pos.x, pos.y, STRUCTURE_ROAD, 4) + } } - private findOutsideMinCut() { - if (this.outsideMinCut) return - const outsideMinCut: Set = new Set() + this.stampAnchors.onboardingRampart = Array.from(onboardingCoords).map(packedCoord => + unpackNumAsCoord(packedCoord), + ) + } + private findOutsideMinCut() { + if (this.outsideMinCut) return - const visitedCoords = new Uint8Array(2500) - let thisGeneration = this.minCutCoords - for (const packedCoord of thisGeneration) { - visitedCoords[packedCoord] = 1 - } + const outsideMinCut: Set = new Set() - let nextGeneration: Set - let depth = 0 + const visitedCoords = new Uint8Array(2500) + let thisGeneration = this.minCutCoords + for (const packedCoord of thisGeneration) { + visitedCoords[packedCoord] = 1 + } - while (thisGeneration.size) { - nextGeneration = new Set() + let nextGeneration: Set + let depth = 0 - for (const packedCoord of thisGeneration) { - const coord = unpackNumAsCoord(packedCoord) - forAdjacentCoords(coord, adjCoord => { - const packedAdjCoord = packAsNum(adjCoord) + while (thisGeneration.size) { + nextGeneration = new Set() - if (visitedCoords[packedAdjCoord] === 1) return - visitedCoords[packedAdjCoord] = 1 + for (const packedCoord of thisGeneration) { + const coord = unpackNumAsCoord(packedCoord) + forAdjacentCoords(coord, adjCoord => { + const packedAdjCoord = packAsNum(adjCoord) - if (this.unprotectedCoords[packedAdjCoord] !== 255) return + if (visitedCoords[packedAdjCoord] === 1) return + visitedCoords[packedAdjCoord] = 1 - outsideMinCut.add(packedAdjCoord) - nextGeneration.add(packedAdjCoord) - }) - } + if (this.unprotectedCoords[packedAdjCoord] !== 255) return - depth += 1 - if (depth >= 4) break + outsideMinCut.add(packedAdjCoord) + nextGeneration.add(packedAdjCoord) + }) + } - thisGeneration = nextGeneration - depth += 1 - } + depth += 1 + if (depth >= 4) break - this.outsideMinCut = outsideMinCut + thisGeneration = nextGeneration + depth += 1 } - private findInsideMinCut() { - if (this.insideMinCut) return - const insideMinCut: Set = new Set() - /* + this.outsideMinCut = outsideMinCut + } + private findInsideMinCut() { + if (this.insideMinCut) return + + const insideMinCut: Set = new Set() + /* for (let x = 0; x < roomDimensions; x++) { for (let y = 0; y < roomDimensions; y++) { const packedCoord = packXYAsNum(x, y) @@ -2911,542 +2887,526 @@ export class CommunePlanner { } */ - const visitedCoords = new Uint8Array(2500) - let thisGeneration = this.minCutCoords - for (const packedCoord of thisGeneration) { - visitedCoords[packedCoord] = 1 - } - let nextGeneration: Set - let depth = 0 - - while (thisGeneration.size) { - nextGeneration = new Set() + const visitedCoords = new Uint8Array(2500) + let thisGeneration = this.minCutCoords + for (const packedCoord of thisGeneration) { + visitedCoords[packedCoord] = 1 + } + let nextGeneration: Set + let depth = 0 - for (const packedCoord of thisGeneration) { - const coord = unpackNumAsCoord(packedCoord) - forAdjacentCoords(coord, adjCoord => { - const packedAdjCoord = packAsNum(adjCoord) + while (thisGeneration.size) { + nextGeneration = new Set() - if (visitedCoords[packedAdjCoord] === 1) return - visitedCoords[packedAdjCoord] = 1 + for (const packedCoord of thisGeneration) { + const coord = unpackNumAsCoord(packedCoord) + forAdjacentCoords(coord, adjCoord => { + const packedAdjCoord = packAsNum(adjCoord) - if (this.roadCoords[packedAdjCoord] > 0) return - if (this.unprotectedCoords[packedAdjCoord] === 255) return + if (visitedCoords[packedAdjCoord] === 1) return + visitedCoords[packedAdjCoord] = 1 - nextGeneration.add(packedAdjCoord) + if (this.roadCoords[packedAdjCoord] > 0) return + if (this.unprotectedCoords[packedAdjCoord] === 255) return - if (this.rampartCoords[packedAdjCoord] === 1) return - insideMinCut.add(packedAdjCoord) - }) - } + nextGeneration.add(packedAdjCoord) - depth += 1 - if (depth >= 5) break + if (this.rampartCoords[packedAdjCoord] === 1) return + insideMinCut.add(packedAdjCoord) + }) + } - thisGeneration = nextGeneration - } + depth += 1 + if (depth >= 5) break - this.insideMinCut = insideMinCut + thisGeneration = nextGeneration } - /** - * Sort of genetic algorithm to find best tower placement combination - */ - private towers() { - if (this.stampAnchors.tower.length) return - if (this.bestTowerScore === undefined) { - this.bestTowerScore = 0 - this.bestTowerCoords = [] - this.towerAttemptIndex = 0 - } - - for (; this.towerAttemptIndex < 1000; this.towerAttemptIndex++) { - const towerOptions = Array.from(this.insideMinCut) - const towerCoords: TowerDamageCoord[] = [] - const damageMap = new Uint32Array(roomDimensions * roomDimensions) - const limit = Math.min(CONTROLLER_STRUCTURES.tower[8], towerOptions.length) - - for (let towers = 0; towers < limit; towers++) { - const index = randomIntRange(0, towerOptions.length) - const packedCoord = towerOptions[index] + this.insideMinCut = insideMinCut + } + /** + * Sort of genetic algorithm to find best tower placement combination + */ + private towers() { + if (this.stampAnchors.tower.length) return + + if (this.bestTowerScore === undefined) { + this.bestTowerScore = 0 + this.bestTowerCoords = [] + this.towerAttemptIndex = 0 + } - towerOptions.splice(index, 1) + for (; this.towerAttemptIndex < 1000; this.towerAttemptIndex++) { + const towerOptions = Array.from(this.insideMinCut) + const towerCoords: TowerDamageCoord[] = [] + const damageMap = new Uint32Array(roomDimensions * roomDimensions) + const limit = Math.min(CONTROLLER_STRUCTURES.tower[8], towerOptions.length) - const coord = unpackNumAsCoord(packedCoord) as TowerDamageCoord - let minIndividualDamage = Infinity + for (let towers = 0; towers < limit; towers++) { + const index = randomIntRange(0, towerOptions.length) + const packedCoord = towerOptions[index] - for (const packedCoord of this.outsideMinCut) { - const damage = towerUtils.estimateRangeDamage( - coord, - unpackNumAsCoord(packedCoord), - ) - damageMap[packedCoord] += damage + towerOptions.splice(index, 1) - if (damage >= minIndividualDamage) continue - minIndividualDamage = damage - } + const coord = unpackNumAsCoord(packedCoord) as TowerDamageCoord + let minIndividualDamage = Infinity - coord.minDamage = minIndividualDamage - towerCoords.push(coord) - } + for (const packedCoord of this.outsideMinCut) { + const damage = towerUtils.estimateRangeDamage(coord, unpackNumAsCoord(packedCoord)) + damageMap[packedCoord] += damage - let minDamage = Infinity + if (damage >= minIndividualDamage) continue + minIndividualDamage = damage + } - for (let x = 0; x < roomDimensions; x++) { - for (let y = 0; y < roomDimensions; y++) { - const damage = damageMap[packXYAsNum(x, y)] - if (damage === 0 || damage >= minDamage) continue + coord.minDamage = minIndividualDamage + towerCoords.push(coord) + } - minDamage = damage - } - } + let minDamage = Infinity - if (minDamage <= this.bestTowerScore) continue + for (let x = 0; x < roomDimensions; x++) { + for (let y = 0; y < roomDimensions; y++) { + const damage = damageMap[packXYAsNum(x, y)] + if (damage === 0 || damage >= minDamage) continue - this.bestTowerScore = minDamage - this.bestTowerCoords = towerCoords + minDamage = damage } + } - // Make sure we plan and path for the best towers first - - const hubAnchor = this.stampAnchors.hub[0] + if (minDamage <= this.bestTowerScore) continue - // Weight by distance and damage - prefer closer and higher damage towers to be built first + this.bestTowerScore = minDamage + this.bestTowerCoords = towerCoords + } - this.bestTowerCoords - .sort( - (a, b) => - a.minDamage - - getRange(a, hubAnchor) * towerDistanceWeight - - (b.minDamage - getRange(b, hubAnchor) * towerDistanceWeight), - ) - .reverse() + // Make sure we plan and path for the best towers first - for (const coord of this.bestTowerCoords) { - this.setBasePlansXY(coord.x, coord.y, STRUCTURE_TOWER) + const hubAnchor = this.stampAnchors.hub[0] - const packedCoord = packXYAsNum(coord.x, coord.y) - this.baseCoords[packedCoord] = 255 - this.roadCoords[packedCoord] = 255 - } + // Weight by distance and damage - prefer closer and higher damage towers to be built first - this.stampAnchors.tower = this.bestTowerCoords - } - private towerPaths() { - if (this.finishedTowerPaths) return + this.bestTowerCoords + .sort( + (a, b) => + a.minDamage - + getRange(a, hubAnchor) * towerDistanceWeight - + (b.minDamage - getRange(b, hubAnchor) * towerDistanceWeight), + ) + .reverse() - const hubAnchorPos = new RoomPosition( - this.stampAnchors.hub[0].x, - this.stampAnchors.hub[0].y, - this.room.name, - ) + for (const coord of this.bestTowerCoords) { + this.setBasePlansXY(coord.x, coord.y, STRUCTURE_TOWER) - for (const coord of this.bestTowerCoords) { - const minRCL = this.basePlans.getXY(coord.x, coord.y)[0].minRCL - - const path = customPathFinder.findPath({ - origin: new RoomPosition(coord.x, coord.y, this.room.name), - goals: [ - { - pos: hubAnchorPos, - range: 2, - }, - ], - weightCoordMaps: [this.diagonalCoords, this.roadCoords, this.unprotectedCoords], - plainCost: defaultRoadPlanningPlainCost * 2, - swampCost: defaultSwampCost * 2, - }) - - for (const pos of path) { - this.setBasePlansXY(pos.x, pos.y, STRUCTURE_ROAD, minRCL) - this.roadCoords[packAsNum(pos)] = 1 - } - } + const packedCoord = packXYAsNum(coord.x, coord.y) + this.baseCoords[packedCoord] = 255 + this.roadCoords[packedCoord] = 255 + } - this.finishedTowerPaths = true + this.stampAnchors.tower = this.bestTowerCoords + } + private towerPaths() { + if (this.finishedTowerPaths) return + + const hubAnchorPos = new RoomPosition( + this.stampAnchors.hub[0].x, + this.stampAnchors.hub[0].y, + this.room.name, + ) + + for (const coord of this.bestTowerCoords) { + const minRCL = this.basePlans.getXY(coord.x, coord.y)[0].minRCL + + const path = customPathFinder.findPath({ + origin: new RoomPosition(coord.x, coord.y, this.room.name), + goals: [ + { + pos: hubAnchorPos, + range: 2, + }, + ], + weightCoordMaps: [this.diagonalCoords, this.roadCoords, this.unprotectedCoords], + plainCost: defaultRoadPlanningPlainCost * 2, + swampCost: defaultSwampCost * 2, + }) + + for (const pos of path) { + this.setBasePlansXY(pos.x, pos.y, STRUCTURE_ROAD, minRCL) + this.roadCoords[packAsNum(pos)] = 1 + } } - private protectFromNuke(coord: Coord, minRCL: number) {} - private shield(coord: Coord, minRCL: number, coversStructure: boolean = true) { - const packedCoord = packAsNum(coord) - if (this.unprotectedCoords[packedCoord] === 0) return - this.setRampartPlansXY(coord.x, coord.y, 4, coversStructure, false, false, true) - this.stampAnchors.shieldRampart.push(coord) - this.rampartCoords[packedCoord] = 1 - this.unprotectedCoords[packedCoord] = 0 + this.finishedTowerPaths = true + } + private protectFromNuke(coord: Coord, minRCL: number) {} + private shield(coord: Coord, minRCL: number, coversStructure: boolean = true) { + const packedCoord = packAsNum(coord) + if (this.unprotectedCoords[packedCoord] === 0) return + + this.setRampartPlansXY(coord.x, coord.y, 4, coversStructure, false, false, true) + this.stampAnchors.shieldRampart.push(coord) + this.rampartCoords[packedCoord] = 1 + this.unprotectedCoords[packedCoord] = 0 + } + private generalShield() { + if (this.generalShielded) return + + let unprotectedSources = 0 + + // Protect source structures and best harvest pos + + for (const coord of this.stampAnchors.sourceExtension) this.shield(coord, 4) + for (const coord of this.stampAnchors.sourceLink) this.shield(coord, 4) + for (const sourceIndex in this.sourceHarvestPositions) { + if (this.unprotectedCoords[packAsNum(this.sourceHarvestPositions[sourceIndex][0])] === 255) { + unprotectedSources += 1 + } + this.shield(this.sourceHarvestPositions[sourceIndex][0], 4, false) } - private generalShield() { - if (this.generalShielded) return - let unprotectedSources = 0 + // Protect upgrade structure - // Protect source structures and best harvest pos + this.shield(this.centerUpgradePos, 4) - for (const coord of this.stampAnchors.sourceExtension) this.shield(coord, 4) - for (const coord of this.stampAnchors.sourceLink) this.shield(coord, 4) - for (const sourceIndex in this.sourceHarvestPositions) { - if ( - this.unprotectedCoords[packAsNum(this.sourceHarvestPositions[sourceIndex][0])] === - 255 - ) { - unprotectedSources += 1 - } - this.shield(this.sourceHarvestPositions[sourceIndex][0], 4, false) - } + // Protect around the controller - // Protect upgrade structure + forAdjacentCoords(this.room.controller.pos, adjCoord => { + if (this.unprotectedCoords[packAsNum(adjCoord)] !== 255) return + this.isControllerProtected = false - this.shield(this.centerUpgradePos, 4) + this.shield(adjCoord, 4, false) + }) - // Protect around the controller + // Protect important structures - forAdjacentCoords(this.room.controller.pos, adjCoord => { - if (this.unprotectedCoords[packAsNum(adjCoord)] !== 255) return - this.isControllerProtected = false + for (const packedCoord in this.basePlans.map) { + const coord = unpackCoord(packedCoord) + const packedNumCoord = packAsNum(coord) + const coordData = this.basePlans.map[packedCoord] - this.shield(adjCoord, 4, false) - }) + for (const data of coordData) { + if (!structureTypesToProtectSet.has(data.structureType)) continue + if (this.rampartPlans.getXY(coord.x, coord.y)) continue - // Protect important structures - - for (const packedCoord in this.basePlans.map) { - const coord = unpackCoord(packedCoord) - const packedNumCoord = packAsNum(coord) - const coordData = this.basePlans.map[packedCoord] - - for (const data of coordData) { - if (!structureTypesToProtectSet.has(data.structureType)) continue - if (this.rampartPlans.getXY(coord.x, coord.y)) continue - - const isProtected = this.unprotectedCoords[packedNumCoord] === 0 - this.setRampartPlansXY( - coord.x, - coord.y, - data.minRCL, - true, - isProtected, - false, - true, - ) - - this.stampAnchors.shieldRampart.push(coord) - this.rampartCoords[packedNumCoord] = 1 - this.unprotectedCoords[packedNumCoord] = 0 - } - } + const isProtected = this.unprotectedCoords[packedNumCoord] === 0 + this.setRampartPlansXY(coord.x, coord.y, data.minRCL, true, isProtected, false, true) - this.unprotectedSources = unprotectedSources - this.generalShielded = true + this.stampAnchors.shieldRampart.push(coord) + this.rampartCoords[packedNumCoord] = 1 + this.unprotectedCoords[packedNumCoord] = 0 + } } - private findRoadQuota() { - for (const packedCoord in this.basePlans.map) { - const coordData = this.basePlans.map[packedCoord] - for (let i = 0; i < coordData.length; i++) { - const data = coordData[i] - if (data.structureType !== STRUCTURE_ROAD) continue + this.unprotectedSources = unprotectedSources + this.generalShielded = true + } + private findRoadQuota() { + for (const packedCoord in this.basePlans.map) { + const coordData = this.basePlans.map[packedCoord] - for (let rcl = data.minRCL - 1; rcl < 8; rcl += 1) { - this.roadQuota[rcl] += 1 - } + for (let i = 0; i < coordData.length; i++) { + const data = coordData[i] + if (data.structureType !== STRUCTURE_ROAD) continue - break - } + for (let rcl = data.minRCL - 1; rcl < 8; rcl += 1) { + this.roadQuota[rcl] += 1 } - } - private findScore() { - if (this.score) return - - let score = 0 - score += this.room.findSwampPlainsRatio() * 10 - score += this.sourcePaths.length - // Prefer protecting the source even more if there is only one - - score += this.unprotectedSources * (30 / this.sourcePaths.length) + break + } + } + } + private findScore() { + if (this.score) return - // Early RCL we want to have 3 or more harvest positions + let score = 0 + score += this.room.findSwampPlainsRatio() * 10 + score += this.sourcePaths.length - for (const positions of this.sourceHarvestPositions) { - if (positions.length >= 3) continue - score += (3 - positions.length) * 5 - } - score += this.upgradePath.length - score += this.mineralPath.length / 100 - score += - this.stampAnchors.minCutRampart.length * 2 + - this.stampAnchors.shieldRampart.length + - this.stampAnchors.onboardingRampart.length - score += getRange(this.stampAnchors.hub[0], this.centerUpgradePos) / 10 - if (!this.isControllerProtected) score += 15 - score += (CONTROLLER_STRUCTURES.tower[8] * TOWER_POWER_ATTACK - this.bestTowerScore) / 100 - score += this.RCLPlannedStructureTypes[STRUCTURE_ROAD].structures / 100 - - // We want more exits - - score += 6 * 4 - for (const key in Game.map.describeExits(this.room.name)) { - score -= 6 - } + // Prefer protecting the source even more if there is only one - this.score = Math.round(score) - } - private record() { - this.recording = true - - this.planAttempts.push({ - score: this.score, - stampAnchors: packStampAnchors(this.stampAnchors), - basePlans: this.basePlans.pack(), - rampartPlans: this.rampartPlans.pack(), - roadQuota: this.roadQuota, - communeSources: this.communeSources.map(source => source.id), - sourceHarvestPositions: this.sourceHarvestPositions.map(positions => - packPosList(positions), - ), - sourcePaths: this.sourcePaths.map(path => packPosList(path)), - mineralHarvestPositions: packPosList(this.mineralHarvestPositions), - mineralPath: packPosList(this.mineralPath), - centerUpgradePos: packPos(this.centerUpgradePos), - upgradePath: packPosList(this.upgradePath), - }) + score += this.unprotectedSources * (30 / this.sourcePaths.length) - // Delete plan-specific properties - - delete this.basePlans - delete this.rampartPlans - delete this.baseCoords - delete this.roadCoords - delete this.rampartCoords - delete this.byExitCoords - delete this.exitCoords - delete this.weightedDiagonalCoords - delete this.diagonalCoords - delete this.gridCoords - delete this.byPlannedRoad - delete this.protectCoords - delete this.protectedCoords - delete this.unprotectedCoords - delete this.minCutCoords - delete this.groupedMinCutCoords - delete this.insideMinCut - delete this.outsideMinCut - delete this.bestTowerScore - delete this.bestTowerCoords - delete this.towerAttemptIndex - delete this.RCLPlannedStructureTypes - - delete this.planConfiged - delete this.plannedGridCoords - delete this.finishedGrid - delete this.generalShielded - delete this.finishedFastFillerRoadPrune - delete this.markSourcesAvoid - delete this.finishedTowerPaths - - delete this.sourceHarvestPositions - delete this.sourcePaths - delete this.sourceStructureCoords - delete this.communeSources - delete this.mineralHarvestPositions - delete this.mineralPath - delete this.centerUpgradePos - delete this.upgradePath - delete this.inputLab2Coord - delete this.outputLabCoords - delete this.unprotectedSources - delete this.isControllerProtected - - this.recording = false - } - /** - * Find the plan with the lowest score - */ - private findBestPlanIndex(planAttempts: BasePlanAttempt[]) { - let bestScore = Infinity - let bestPlanIndex: number | undefined - - for (let i = 0; i < planAttempts.length; i++) { - const plan = planAttempts[i] as BasePlanAttempt - - if (plan.score >= bestScore) continue - - bestScore = plan.score - bestPlanIndex = i - } + // Early RCL we want to have 3 or more harvest positions - return bestPlanIndex + for (const positions of this.sourceHarvestPositions) { + if (positions.length >= 3) continue + score += (3 - positions.length) * 5 + } + score += this.upgradePath.length + score += this.mineralPath.length / 100 + score += + this.stampAnchors.minCutRampart.length * 2 + + this.stampAnchors.shieldRampart.length + + this.stampAnchors.onboardingRampart.length + score += getRange(this.stampAnchors.hub[0], this.centerUpgradePos) / 10 + if (!this.isControllerProtected) score += 15 + score += (CONTROLLER_STRUCTURES.tower[8] * TOWER_POWER_ATTACK - this.bestTowerScore) / 100 + score += this.RCLPlannedStructureTypes[STRUCTURE_ROAD].structures / 100 + + // We want more exits + + score += 6 * 4 + for (const key in Game.map.describeExits(this.room.name)) { + score -= 6 } - private choosePlan(planAttempts: BasePlanAttempt[]) { - const plan = planAttempts[this.findBestPlanIndex(planAttempts)] as BasePlanAttempt - const roomMemory = Memory.rooms[this.room.name] - - roomMemory[RoomMemoryKeys.mineralType] = this.room.roomManager.mineral.mineralType - - // plan values - - roomMemory[RoomMemoryKeys.score] = plan.score - roomMemory[RoomMemoryKeys.basePlans] = plan.basePlans - roomMemory[RoomMemoryKeys.rampartPlans] = plan.rampartPlans - roomMemory[RoomMemoryKeys.stampAnchors] = plan.stampAnchors - roomMemory[RoomMemoryKeys.roadQuota] = plan.roadQuota - roomMemory[RoomMemoryKeys.communeSources] = plan.communeSources - roomMemory[RoomMemoryKeys.communeSourceHarvestPositions] = plan.sourceHarvestPositions - roomMemory[RoomMemoryKeys.communeSourcePaths] = plan.sourcePaths - roomMemory[RoomMemoryKeys.mineralPositions] = plan.mineralHarvestPositions - roomMemory[RoomMemoryKeys.mineralPath] = plan.mineralPath - roomMemory[RoomMemoryKeys.centerUpgradePos] = plan.centerUpgradePos - roomMemory[RoomMemoryKeys.upgradePath] = plan.upgradePath - - roomMemory[RoomMemoryKeys.communePlanned] = true - // Delete uneeded plan data from global to free up space - /* delete this.planAttempts */ - for (var key in this){ - if (this.hasOwnProperty(key)){ - delete this[key]; - } - } + this.score = Math.round(score) + } + private record() { + this.recording = true + + this.planAttempts.push({ + score: this.score, + stampAnchors: packStampAnchors(this.stampAnchors), + basePlans: this.basePlans.pack(), + rampartPlans: this.rampartPlans.pack(), + roadQuota: this.roadQuota, + communeSources: this.communeSources.map(source => source.id), + sourceHarvestPositions: this.sourceHarvestPositions.map(positions => packPosList(positions)), + sourcePaths: this.sourcePaths.map(path => packPosList(path)), + mineralHarvestPositions: packPosList(this.mineralHarvestPositions), + mineralPath: packPosList(this.mineralPath), + centerUpgradePos: packPos(this.centerUpgradePos), + upgradePath: packPosList(this.upgradePath), + }) + + // Delete plan-specific properties + + delete this.basePlans + delete this.rampartPlans + delete this.baseCoords + delete this.roadCoords + delete this.rampartCoords + delete this.byExitCoords + delete this.exitCoords + delete this.weightedDiagonalCoords + delete this.diagonalCoords + delete this.gridCoords + delete this.byPlannedRoad + delete this.protectCoords + delete this.protectedCoords + delete this.unprotectedCoords + delete this.minCutCoords + delete this.groupedMinCutCoords + delete this.insideMinCut + delete this.outsideMinCut + delete this.bestTowerScore + delete this.bestTowerCoords + delete this.towerAttemptIndex + delete this.RCLPlannedStructureTypes + + delete this.planConfiged + delete this.plannedGridCoords + delete this.finishedGrid + delete this.generalShielded + delete this.finishedFastFillerRoadPrune + delete this.markSourcesAvoid + delete this.finishedTowerPaths + + delete this.sourceHarvestPositions + delete this.sourcePaths + delete this.sourceStructureCoords + delete this.communeSources + delete this.mineralHarvestPositions + delete this.mineralPath + delete this.centerUpgradePos + delete this.upgradePath + delete this.inputLab2Coord + delete this.outputLabCoords + delete this.unprotectedSources + delete this.isControllerProtected + + this.recording = false + } + /** + * Find the plan with the lowest score + */ + private findBestPlanIndex(planAttempts: BasePlanAttempt[]) { + let bestScore = Infinity + let bestPlanIndex: number | undefined + + for (let i = 0; i < planAttempts.length; i++) { + const plan = planAttempts[i] as BasePlanAttempt + + if (plan.score >= bestScore) continue + + bestScore = plan.score + bestPlanIndex = i } - private visualizeGrid() { - for (let x = 0; x < roomDimensions; x++) { - for (let y = 0; y < roomDimensions; y++) { - const packedCoord = packXYAsNum(x, y) - if (this.baseCoords[packedCoord] === 255) continue - if (this.gridCoords[packedCoord] === 0) continue - this.room.visual.structure(x, y, STRUCTURE_ROAD) - } - } + return bestPlanIndex + } + private choosePlan(planAttempts: BasePlanAttempt[]) { + const plan = planAttempts[this.findBestPlanIndex(planAttempts)] as BasePlanAttempt + const roomMemory = Memory.rooms[this.room.name] + + roomMemory[RoomMemoryKeys.mineralType] = this.room.roomManager.mineral.mineralType + + // plan values + + roomMemory[RoomMemoryKeys.score] = plan.score + roomMemory[RoomMemoryKeys.basePlans] = plan.basePlans + roomMemory[RoomMemoryKeys.rampartPlans] = plan.rampartPlans + roomMemory[RoomMemoryKeys.stampAnchors] = plan.stampAnchors + roomMemory[RoomMemoryKeys.roadQuota] = plan.roadQuota + roomMemory[RoomMemoryKeys.communeSources] = plan.communeSources + roomMemory[RoomMemoryKeys.communeSourceHarvestPositions] = plan.sourceHarvestPositions + roomMemory[RoomMemoryKeys.communeSourcePaths] = plan.sourcePaths + roomMemory[RoomMemoryKeys.mineralPositions] = plan.mineralHarvestPositions + roomMemory[RoomMemoryKeys.mineralPath] = plan.mineralPath + roomMemory[RoomMemoryKeys.centerUpgradePos] = plan.centerUpgradePos + roomMemory[RoomMemoryKeys.upgradePath] = plan.upgradePath + + roomMemory[RoomMemoryKeys.communePlanned] = true + + // Delete uneeded plan data from global to free up space + /* delete this.planAttempts */ + for (var key in this) { + if (this.hasOwnProperty(key)) { + delete this[key] + } } + } + private visualizeGrid() { + for (let x = 0; x < roomDimensions; x++) { + for (let y = 0; y < roomDimensions; y++) { + const packedCoord = packXYAsNum(x, y) + if (this.baseCoords[packedCoord] === 255) continue + if (this.gridCoords[packedCoord] === 0) continue - private visualizePlans() { - if (this.planVisualizeIndex === undefined) this.planVisualizeIndex = 0 - else { - if (this.planVisualizeIndex >= this.planAttempts.length - 1) this.planVisualizeIndex = 0 - else this.planVisualizeIndex += 1 - } + this.room.visual.structure(x, y, STRUCTURE_ROAD) + } + } + } - this.visualizePlan(this.planVisualizeIndex) + private visualizePlans() { + if (this.planVisualizeIndex === undefined) this.planVisualizeIndex = 0 + else { + if (this.planVisualizeIndex >= this.planAttempts.length - 1) this.planVisualizeIndex = 0 + else this.planVisualizeIndex += 1 } - private visualizePlan(planIndex: number) { - const plan = this.planAttempts[planIndex] - // Type safety, there's no reason the plan should ever actually be invalid - if (!plan) return - const basePlans = BasePlans.unpack(plan.basePlans) + this.visualizePlan(this.planVisualizeIndex) + } + private visualizePlan(planIndex: number) { + const plan = this.planAttempts[planIndex] + // Type safety, there's no reason the plan should ever actually be invalid + if (!plan) return - for (const packedCoord in basePlans.map) { - const coord = unpackCoord(packedCoord) - const coordData = basePlans.map[packedCoord] + const basePlans = BasePlans.unpack(plan.basePlans) - for (const data of coordData) { - if (data.structureType !== STRUCTURE_ROAD) continue + for (const packedCoord in basePlans.map) { + const coord = unpackCoord(packedCoord) + const coordData = basePlans.map[packedCoord] - this.room.visual.structure(coord.x, coord.y, data.structureType) - } - } + for (const data of coordData) { + if (data.structureType !== STRUCTURE_ROAD) continue - this.room.visual.connectRoads({ - opacity: 1, - }) + this.room.visual.structure(coord.x, coord.y, data.structureType) + } + } - for (const packedCoord in basePlans.map) { - const coord = unpackCoord(packedCoord) - const coordData = basePlans.map[packedCoord] + this.room.visual.connectRoads({ + opacity: 1, + }) - for (const data of coordData) { - if (data.structureType === STRUCTURE_ROAD) { - this.room.visual.text(data.minRCL.toString(), coord.x, coord.y) - continue - } + for (const packedCoord in basePlans.map) { + const coord = unpackCoord(packedCoord) + const coordData = basePlans.map[packedCoord] - this.room.visual.structure(coord.x, coord.y, data.structureType) - this.room.visual.text(data.minRCL.toString(), coord.x, coord.y) - } + for (const data of coordData) { + if (data.structureType === STRUCTURE_ROAD) { + this.room.visual.text(data.minRCL.toString(), coord.x, coord.y) + continue } - const rampartPlans = RampartPlans.unpack(plan.rampartPlans) + this.room.visual.structure(coord.x, coord.y, data.structureType) + this.room.visual.text(data.minRCL.toString(), coord.x, coord.y) + } + } - for (const packedCoord in rampartPlans.map) { - const coord = unpackCoord(packedCoord) + const rampartPlans = RampartPlans.unpack(plan.rampartPlans) - if (rampartPlans.get(packedCoord).buildForNuke) { - this.room.visual.structure(coord.x, coord.y, STRUCTURE_RAMPART, { opacity: 0.2 }) - continue - } + for (const packedCoord in rampartPlans.map) { + const coord = unpackCoord(packedCoord) - if (rampartPlans.get(packedCoord).buildForThreat) { - this.room.visual.structure(coord.x, coord.y, STRUCTURE_RAMPART, { opacity: 0.2 }) - continue - } + if (rampartPlans.get(packedCoord).buildForNuke) { + this.room.visual.structure(coord.x, coord.y, STRUCTURE_RAMPART, { opacity: 0.2 }) + continue + } - if (rampartPlans.get(packedCoord).buildForThreat) { - this.room.visual.structure(coord.x, coord.y, STRUCTURE_RAMPART, { - opacity: 0.2, - fill: customColors.lightBlue, - }) - continue - } + if (rampartPlans.get(packedCoord).buildForThreat) { + this.room.visual.structure(coord.x, coord.y, STRUCTURE_RAMPART, { opacity: 0.2 }) + continue + } - this.room.visual.structure(coord.x, coord.y, STRUCTURE_RAMPART, { opacity: 0.5 }) - } + if (rampartPlans.get(packedCoord).buildForThreat) { + this.room.visual.structure(coord.x, coord.y, STRUCTURE_RAMPART, { + opacity: 0.2, + fill: customColors.lightBlue, + }) + continue + } - const fastFillerStartCoord = this.fastFillerStartCoords[planIndex] - this.room.coordVisual(fastFillerStartCoord.x, fastFillerStartCoord.y, customColors.yellow) + this.room.visual.structure(coord.x, coord.y, STRUCTURE_RAMPART, { opacity: 0.5 }) + } - const stampAnchors = unpackStampAnchors(plan.stampAnchors) + const fastFillerStartCoord = this.fastFillerStartCoords[planIndex] + this.room.coordVisual(fastFillerStartCoord.x, fastFillerStartCoord.y, customColors.yellow) - this.room.visual.text( - 'Attempt: ' + (planIndex + 1), - stampAnchors.fastFiller[0].x, - stampAnchors.fastFiller[0].y, - ) - } - private visualizeCurrentPlan() { - for (const packedCoord in this.basePlans.map) { - const coord = unpackCoord(packedCoord) - const coordData = this.basePlans.map[packedCoord] + const stampAnchors = unpackStampAnchors(plan.stampAnchors) - for (const data of coordData) { - if (data.structureType !== STRUCTURE_ROAD) continue + this.room.visual.text( + 'Attempt: ' + (planIndex + 1), + stampAnchors.fastFiller[0].x, + stampAnchors.fastFiller[0].y, + ) + } + private visualizeCurrentPlan() { + for (const packedCoord in this.basePlans.map) { + const coord = unpackCoord(packedCoord) + const coordData = this.basePlans.map[packedCoord] - this.room.visual.structure(coord.x, coord.y, data.structureType) - } - } + for (const data of coordData) { + if (data.structureType !== STRUCTURE_ROAD) continue - this.room.visual.connectRoads({ - opacity: 1, - }) + this.room.visual.structure(coord.x, coord.y, data.structureType) + } + } - for (const packedCoord in this.basePlans.map) { - const coord = unpackCoord(packedCoord) - const coordData = this.basePlans.map[packedCoord] + this.room.visual.connectRoads({ + opacity: 1, + }) - for (const data of coordData) { - if (data.structureType === STRUCTURE_ROAD) { - this.room.visual.text(data.minRCL.toString(), coord.x, coord.y) - continue - } + for (const packedCoord in this.basePlans.map) { + const coord = unpackCoord(packedCoord) + const coordData = this.basePlans.map[packedCoord] - this.room.visual.structure(coord.x, coord.y, data.structureType) - this.room.visual.text(data.minRCL.toString(), coord.x, coord.y) - } + for (const data of coordData) { + if (data.structureType === STRUCTURE_ROAD) { + this.room.visual.text(data.minRCL.toString(), coord.x, coord.y) + continue } - for (const packedCoord in this.rampartPlans.map) { - const coord = unpackCoord(packedCoord) + this.room.visual.structure(coord.x, coord.y, data.structureType) + this.room.visual.text(data.minRCL.toString(), coord.x, coord.y) + } + } - if (this.rampartPlans.get(packedCoord).buildForThreat) { - this.room.visual.structure(coord.x, coord.y, STRUCTURE_RAMPART, { opacity: 0.2 }) - continue - } - this.room.visual.structure(coord.x, coord.y, STRUCTURE_RAMPART, { opacity: 0.5 }) - } + for (const packedCoord in this.rampartPlans.map) { + const coord = unpackCoord(packedCoord) + + if (this.rampartPlans.get(packedCoord).buildForThreat) { + this.room.visual.structure(coord.x, coord.y, STRUCTURE_RAMPART, { opacity: 0.2 }) + continue + } + this.room.visual.structure(coord.x, coord.y, STRUCTURE_RAMPART, { opacity: 0.5 }) + } - // Labs + // Labs - /* + /* this.room.coordVisual(this.stampAnchors.labs[0].x, this.stampAnchors.labs[0].y, customColors.orange) this.room.coordVisual(this.inputLab2Coord.x, this.inputLab2Coord.y, customColors.orange) @@ -3455,57 +3415,57 @@ export class CommunePlanner { this.room.visual.line(coord.x, coord.y, this.inputLab2Coord.x, this.inputLab2Coord.y) } */ - /* this.room.visualizeCoordMap(this.reverseExitFlood) */ - /* this.room.visualizeCoordMap(this.byPlannedRoad, true, 100) */ - /* this.room.visualizeCoordMap(this.terrainCoords, true) */ - } - - _reverseExitFlood: Uint32Array - get reverseExitFlood() { - if (this._reverseExitFlood) return this._reverseExitFlood - - this._reverseExitFlood = new Uint32Array(2500) + /* this.room.visualizeCoordMap(this.reverseExitFlood) */ + /* this.room.visualizeCoordMap(this.byPlannedRoad, true, 100) */ + /* this.room.visualizeCoordMap(this.terrainCoords, true) */ + } - let visitedCoords = new Uint8Array(2500) - for (const coord of this.exitCoords) visitedCoords[packAsNum(coord)] = 1 + _reverseExitFlood: Uint32Array + get reverseExitFlood() { + if (this._reverseExitFlood) return this._reverseExitFlood - let depth = -1 - let thisGeneration = this.exitCoords - let nextGeneration: Coord[] + this._reverseExitFlood = new Uint32Array(2500) - while (thisGeneration.length) { - nextGeneration = [] + let visitedCoords = new Uint8Array(2500) + for (const coord of this.exitCoords) visitedCoords[packAsNum(coord)] = 1 - // Iterate through positions of this gen + let depth = -1 + let thisGeneration = this.exitCoords + let nextGeneration: Coord[] - for (const coord1 of thisGeneration) { - this._reverseExitFlood[packAsNum(coord1)] = depth + while (thisGeneration.length) { + nextGeneration = [] - // Add viable adjacent coords to the next generation + // Iterate through positions of this gen - for (const offset of adjacentOffsets) { - const coord2 = { - x: coord1.x + offset.x, - y: coord1.y + offset.y, - } + for (const coord1 of thisGeneration) { + this._reverseExitFlood[packAsNum(coord1)] = depth - if (!isXYInRoom(coord2.x, coord2.y)) continue + // Add viable adjacent coords to the next generation - if (visitedCoords[packAsNum(coord2)] === 1) continue - visitedCoords[packAsNum(coord2)] = 1 + for (const offset of adjacentOffsets) { + const coord2 = { + x: coord1.x + offset.x, + y: coord1.y + offset.y, + } - if (this.terrainCoords[packAsNum(coord2)] === 255) continue + if (!isXYInRoom(coord2.x, coord2.y)) continue - nextGeneration.push(coord2) - } - } + if (visitedCoords[packAsNum(coord2)] === 1) continue + visitedCoords[packAsNum(coord2)] = 1 - // Set up for next generation + if (this.terrainCoords[packAsNum(coord2)] === 255) continue - depth -= 1 - thisGeneration = nextGeneration + nextGeneration.push(coord2) } + } - return this._reverseExitFlood + // Set up for next generation + + depth -= 1 + thisGeneration = nextGeneration } + + return this._reverseExitFlood + } } diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index 700ca5da4..c01594e5d 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -1449,7 +1449,7 @@ Room.prototype.createWorkRequest = function () { if (communePlanned === false) return false if (communePlanned !== true) { - const result = this.roomManager.communePlanner.preTickRun(this) + const result = this.roomManager.communePlanner.attemptPlan(this) if (result === Result.fail) { this.memory[RoomMemoryKeys.communePlanned] = false return false From 26e226cdceb499edb7e7e08c456114b345cfb26a Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sun, 14 Jan 2024 00:52:14 -0800 Subject: [PATCH 080/190] (migration) creep names refactor --- src/debug/debugUtils.ts | 218 ++-- src/international/constants.ts | 5 +- src/international/creepOrganizer.ts | 3 +- src/international/migration.ts | 33 +- .../spawning/spawnRequestConstructors.ts | 7 +- src/room/commune/spawning/spawnUtils.ts | 35 +- .../commune/spawning/spawningStructures.ts | 4 +- src/room/creeps/creepAdditions.ts | 21 - src/room/creeps/creepProcs.ts | 446 +++++++- .../creeps/creepPrototypes/creepFunctions.ts | 975 +----------------- .../creepPrototypes/creepMoveFunctions.ts | 39 +- src/room/creeps/creepUtils.ts | 649 ++++++++++-- src/room/creeps/notMyCreepUtils.ts | 5 + .../creeps/roleManager.new/commune/hauler.ts | 5 +- .../creeps/roleManagers/commune/fastFiller.ts | 3 +- .../creeps/roleManagers/commune/hauler.ts | 157 ++- .../creeps/roleManagers/commune/hubHauler.ts | 284 ++--- .../roleManagers/commune/sourceHarvester.ts | 41 +- .../international/allyVanguard.ts | 9 +- .../remote/remoteSourceHarvester.ts | 3 +- src/settingsDefault.ts | 2 +- src/types.d.ts | 70 +- 22 files changed, 1473 insertions(+), 1541 deletions(-) create mode 100644 src/room/creeps/notMyCreepUtils.ts diff --git a/src/debug/debugUtils.ts b/src/debug/debugUtils.ts index 09091cc85..72940ea6d 100644 --- a/src/debug/debugUtils.ts +++ b/src/debug/debugUtils.ts @@ -1,123 +1,117 @@ +import { time } from "console" + class DebugUtils { - /** - * Deeply stringifies values with some added benefits - */ - stringify(v: any) { - let alreadyReferencedObjects: any[] = [] - const recStringify = (value: any, depth: number): string => { - switch (typeof value) { - case 'undefined': - return 'undefined' - case 'boolean': - case 'number': - return value.toString() - case 'string': - return '"' + value.toString() + '"' - case 'object': - if (value === null) return 'null' - else if (value instanceof RoomPosition) { - return `[${value.roomName} ${value.x},${value.y}]` - } else if (alreadyReferencedObjects.includes(value)) return '*' - else { - alreadyReferencedObjects.push(value) - if (value instanceof Array) { - if (value.length === 0) return '[]' - else { - let leftPad = new Array(depth).fill(' ').join('') - let itemLeftPad = new Array(depth + 1).fill(' ').join('') - return ( - '[
' + - value - .map(item => itemLeftPad + recStringify(item, depth + 1)) - .join(',
') + - '
' + - leftPad + - ']' - ) - } - } else { - let entries = Object.entries(value) - if (entries.length === 0) return '{}' - else { - let leftPad = new Array(depth).fill(' ').join('') - let itemLeftPad = new Array(depth + 1).fill(' ').join('') - return ( - '{
' + - entries - .map( - entry => - itemLeftPad + - entry[0] + - ': ' + - recStringify(entry[1], depth + 1), - ) - .join(',
') + - '
' + - leftPad + - '}' - ) - } - } - } - default: - return '' + /** + * Deeply stringifies values with some added benefits + */ + stringify(v: any) { + let alreadyReferencedObjects: any[] = [] + const recStringify = (value: any, depth: number): string => { + switch (typeof value) { + case 'undefined': + return 'undefined' + case 'boolean': + case 'number': + return value.toString() + case 'string': + return '"' + value.toString() + '"' + case 'object': + if (value === null) return 'null' + else if (value instanceof RoomPosition) { + return `[${value.roomName} ${value.x},${value.y}]` + } else if (alreadyReferencedObjects.includes(value)) return '*' + else { + alreadyReferencedObjects.push(value) + if (value instanceof Array) { + if (value.length === 0) return '[]' + else { + let leftPad = new Array(depth).fill(' ').join('') + let itemLeftPad = new Array(depth + 1).fill(' ').join('') + return ( + '[
' + + value.map(item => itemLeftPad + recStringify(item, depth + 1)).join(',
') + + '
' + + leftPad + + ']' + ) + } + } else { + let entries = Object.entries(value) + if (entries.length === 0) return '{}' + else { + let leftPad = new Array(depth).fill(' ').join('') + let itemLeftPad = new Array(depth + 1).fill(' ').join('') + return ( + '{
' + + entries + .map(entry => itemLeftPad + entry[0] + ': ' + recStringify(entry[1], depth + 1)) + .join(',
') + + '
' + + leftPad + + '}' + ) + } } - } + } + default: + return '' + } + } - return recStringify(v, 0) + return recStringify(v, 0) + } + /** + * I don't fully understand what this does or what it is meant to do + */ + findGlobalLength() { + const dict: { [key: number]: string } = { + 0: '', + 3: 'K', + 6: 'M', + 9: 'G', + 12: 'T', + 15: 'P', + 18: 'E', + 21: 'Z', + 24: 'Y', } - /** - * I don't fully understand what this does or what it is meant to do - */ - findGlobalLength() { - const dict: {[key: number]: string} = { - 0: '', - 3: 'K', - 6: 'M', - 9: 'G', - 12: 'T', - 15: 'P', - 18: 'E', - 21: 'Z', - 24: 'Y', - } - const numDict = function (number: number, precision: number) { - const num = '' + Math.floor(number), - l = num.length, - r = l % 3 || 3, - sc = l - r - let string = '' - for (const x of num) { - if (parseFloat(x) == r) { - if (precision) string += '.' - else break - } - if (parseFloat(x) < r + precision) string += num[parseFloat(x)] - } - return string + (dict[sc] || '') + const numDict = function (number: number, precision: number) { + const num = '' + Math.floor(number), + l = num.length, + r = l % 3 || 3, + sc = l - r + let string = '' + for (const x of num) { + if (parseFloat(x) == r) { + if (precision) string += '.' + else break } + if (parseFloat(x) < r + precision) string += num[parseFloat(x)] + } + return string + (dict[sc] || '') + } - return function (l = 50000, precision = 2) { - const obj = { max: 0, entries: [] as any } - for (const x in global) { - if (x == 'global' || x == 'Memory') continue - const string = JSON.stringify((global as any)[x]) - if (string && string.length > l) { - obj.max = Math.max(obj.max, x.length) - obj.entries.push({ name: x, length: string.length }) - } - } - let string = 'Global entries over ' + numDict(l, precision) + ':' - for (const x in obj.entries) { - string += '\n' + obj.entries[x].name + ':' - for (let y = -2; y < obj.max - obj.entries[x].name.length; y++) { - string += ' ' - } - string += numDict(obj.entries[x].length, precision) - } - return string + return function (l = 50000, precision = 2) { + const obj = { max: 0, entries: [] as any } + for (const x in global) { + if (x == 'global' || x == 'Memory') continue + const string = JSON.stringify((global as any)[x]) + if (string && string.length > l) { + obj.max = Math.max(obj.max, x.length) + obj.entries.push({ name: x, length: string.length }) } + } + let string = 'Global entries over ' + numDict(l, precision) + ':' + for (const x in obj.entries) { + string += '\n' + obj.entries[x].name + ':' + for (let y = -2; y < obj.max - obj.entries[x].name.length; y++) { + string += ' ' + } + string += numDict(obj.entries[x].length, precision) + } + return string } + } } global.debugUtils = new DebugUtils() diff --git a/src/international/constants.ts b/src/international/constants.ts index 945187529..806b52325 100644 --- a/src/international/constants.ts +++ b/src/international/constants.ts @@ -186,6 +186,8 @@ export enum CreepMemoryKeys { targetID, previousRelayer, stationary, + defaultParts, + cost, } export enum PowerCreepMemoryKeys { @@ -578,7 +580,8 @@ export enum TrafficPriorities { antifaRangedAttacker, } -export const version = `v2.${global.settings.breakingVersion}.0` +export const majorVersion = 2 +export const version = `v${majorVersion}.${global.settings.breakingVersion}` // Set of messages to randomly apply to commune rooms diff --git a/src/international/creepOrganizer.ts b/src/international/creepOrganizer.ts index 29a3c3784..9bbaf7aa8 100644 --- a/src/international/creepOrganizer.ts +++ b/src/international/creepOrganizer.ts @@ -55,7 +55,8 @@ export class CreepOrganizer { creep.room.myCreeps.push(creep) creep.room.myCreepsByRole[role].push(creepName) - collectiveManager.customCreepIDs[creep.customID] = true + const customID = creepUtils.customIDCreep(creep) + collectiveManager.customCreepIDs[customID] = true // Add the creep's name to the position in its room diff --git a/src/international/migration.ts b/src/international/migration.ts index b4dbd4374..0b7c6f97d 100644 --- a/src/international/migration.ts +++ b/src/international/migration.ts @@ -1,13 +1,33 @@ import { roomNameUtils } from 'room/roomNameUtils' -import { RoomMemoryKeys, RoomTypes, SegmentIDs } from './constants' +import { RoomMemoryKeys, RoomTypes, SegmentIDs, majorVersion } from './constants' /** * Migrate version by performing actions, if required */ export class MigrationManager { public run() { + // We are at the right version, no need to migrate if (Memory.breakingVersion === global.settings.breakingVersion) return + // Try to do a soft migration + this.trySoftMigrations() + + // If we have soft migrated to the latest version, we can stop + if (Memory.breakingVersion === global.settings.breakingVersion) { + return + } + // If the Memory's breaking version is more than the setting's, somebody messed up + if (Memory.breakingVersion > global.settings.breakingVersion) { + throw Error(`breakingVersion exceeds maximum published. Please downgrade to v${majorVersion}.${global.settings.breakingVersion}`) + } + + // Otherwise, we are still not at the desired version. Do a breaking migration + + this.hardMigration() + } + + private trySoftMigrations() { + if (Memory.breakingVersion === 89) { global.killCreeps() Memory.breakingVersion += 1 @@ -51,12 +71,19 @@ export class MigrationManager { } as IDsSegment) Memory.breakingVersion += 1 } + if (Memory.breakingVersion === 125) { + global.killCreeps() + Memory.breakingVersion += 1 + } + } + + private hardMigration() { + - if (Memory.breakingVersion < global.settings.breakingVersion) { global.killCreeps() global.clearMemory() global.removeCSites() - } + } } diff --git a/src/room/commune/spawning/spawnRequestConstructors.ts b/src/room/commune/spawning/spawnRequestConstructors.ts index b7dda20e6..fbd8f5c5b 100644 --- a/src/room/commune/spawning/spawnRequestConstructors.ts +++ b/src/room/commune/spawning/spawnRequestConstructors.ts @@ -1,7 +1,7 @@ import { SpawnRequest } from 'types/spawnRequest' import { LogTypes, customLog } from 'utils/logging' import { SpawnRequestArgs } from 'types/spawnRequest' -import { FlagNames } from 'international/constants' +import { CreepMemoryKeys, FlagNames } from 'international/constants' export type SpawnRequestConstructor = (room: Room, args: SpawnRequestArgs) => SpawnRequest[] @@ -182,14 +182,15 @@ export class SpawnRequestConstructors { const maxPartsPerCreep = Math.min(50 - args.defaultParts.length, totalExtraParts) - // Loop through creep names of the requested role + // Add up non-default parts from the spawnGroup for (const creepName of args.spawnGroup || room.creepsFromRoom[args.role]) { const creep = Game.creeps[creepName] // Take away the amount of parts the creep with the name has from totalExtraParts - totalExtraParts -= creep.body.length - creep.defaultParts + const defaultParts = Memory.creeps[creepName][CreepMemoryKeys.defaultParts] + totalExtraParts -= creep.body.length - defaultParts } // If there aren't enough requested parts to justify spawning a creep, stop diff --git a/src/room/commune/spawning/spawnUtils.ts b/src/room/commune/spawning/spawnUtils.ts index 5dcf3bef3..ce370ecdf 100644 --- a/src/room/commune/spawning/spawnUtils.ts +++ b/src/room/commune/spawning/spawnUtils.ts @@ -1,26 +1,27 @@ -import { creepRoles } from 'international/constants' +import { CreepMemoryKeys, creepRoles } from 'international/constants' import { SpawnRequest } from 'types/spawnRequest' export class SpawnUtils { - testSpawn(spawn: StructureSpawn, body: BodyPartConstant[], requestID: number) { - return spawn.spawnCreep(body, requestID.toString(), { dryRun: true }) - } + testSpawn(spawn: StructureSpawn, body: BodyPartConstant[], requestID: number) { + return spawn.spawnCreep(body, requestID.toString(), { dryRun: true }) + } - advancedSpawn(spawn: StructureSpawn, spawnRequest: SpawnRequest, body: BodyPartConstant[], requestID: number) { - spawnRequest.extraOpts.energyStructures = - spawn.room.communeManager.spawningStructuresByPriority + advancedSpawn( + spawn: StructureSpawn, + spawnRequest: SpawnRequest, + body: BodyPartConstant[], + requestID: number, + ) { + const creepName = `${creepRoles.indexOf(spawnRequest.role)}_${spawn.room.name}_${requestID}` - const creepName = [ - creepRoles.indexOf(spawnRequest.role), - spawnRequest.cost, - spawn.room.name, - spawnRequest.defaultParts, - requestID, - ].join('_') + spawnRequest.extraOpts.energyStructures = spawn.room.communeManager.spawningStructuresByPriority - const spawnResult = spawn.spawnCreep(body, creepName, spawnRequest.extraOpts) - return spawnResult - } + spawnRequest.extraOpts.memory[CreepMemoryKeys.defaultParts] = spawnRequest.defaultParts + spawnRequest.extraOpts.memory[CreepMemoryKeys.cost] = spawnRequest.cost + + const spawnResult = spawn.spawnCreep(body, creepName, spawnRequest.extraOpts) + return spawnResult + } } export const spawnUtils = new SpawnUtils() diff --git a/src/room/commune/spawning/spawningStructures.ts b/src/room/commune/spawning/spawningStructures.ts index 2ca121b90..740d2980a 100644 --- a/src/room/commune/spawning/spawningStructures.ts +++ b/src/room/commune/spawning/spawningStructures.ts @@ -21,6 +21,8 @@ import { Dashboard, Rectangle, Table } from 'screeps-viz' import { BodyPartCounts, SpawnRequest, SpawnRequestArgs, SpawnRequestTypes } from 'types/spawnRequest' import { SpawnRequestConstructor, spawnRequestConstructors } from './spawnRequestConstructors' import { structureUtils } from 'room/structureUtils' +import { creepUtils } from 'room/creeps/creepUtils' +import { creepProcs } from 'room/creeps/creepProcs' export const spawnRequestConstructorsByType: {[key in SpawnRequestTypes]: SpawnRequestConstructor } = { [SpawnRequestTypes.individualUniform]: spawnRequestConstructors.spawnRequestIndividualUniform, @@ -56,7 +58,7 @@ export class SpawningStructuresManager { if (spawn.spawning) { const creep = Game.creeps[spawn.spawning.name] - creep.manageSpawning(spawn) + creepProcs.registerSpawning(creep, spawn) creep.spawnID = spawn.id if ( diff --git a/src/room/creeps/creepAdditions.ts b/src/room/creeps/creepAdditions.ts index 4ed992256..096821f75 100644 --- a/src/room/creeps/creepAdditions.ts +++ b/src/room/creeps/creepAdditions.ts @@ -28,13 +28,6 @@ Object.defineProperties(Creep.prototype, { return (this._role = creepRoles[parseInt(this.nameData[0])]) }, }, - cost: { - get() { - if (this._cost) return this._cost - - return (this._cost = parseInt(this.nameData[1])) - }, - }, commune: { get() { if (this._commune) return this._commune @@ -42,20 +35,6 @@ Object.defineProperties(Creep.prototype, { return (this._commune = Game.rooms[this.nameData[2]]) }, }, - defaultParts: { - get() { - if (this._defaultParts) return this._defaultParts - - return (this._defaultParts = parseInt(this.nameData[3])) - }, - }, - customID: { - get() { - if (this._customID) return this._customID - - return (this._customID = parseInt(this.nameData[4])) - }, - }, strength: { get() { if (this._strength) return this._strength diff --git a/src/room/creeps/creepProcs.ts b/src/room/creeps/creepProcs.ts index f595572a3..0590de0f7 100644 --- a/src/room/creeps/creepProcs.ts +++ b/src/room/creeps/creepProcs.ts @@ -1,5 +1,5 @@ import { RoomManager } from 'room/room' -import { findObjectWithID, getRange } from 'utils/utils' +import { findClosestObject, findObjectWithID, forAdjacentCoords, getRange, getRangeXY } from 'utils/utils' import { myCreepUtils } from './myCreepUtils' import { statsManager } from 'international/statsManager' import { @@ -8,17 +8,20 @@ import { FlagNames, Result, RoomLogisticsRequestTypes, + offsetsByDirection, } from 'international/constants' import { creepUtils } from './creepUtils' import { communeUtils } from 'room/commune/communeUtils' import { CreepLogisticsRequest, + FindNewRoomLogisticsRequestArgs, RoomLogisticsRequest, RoomLogisticsTargets, } from 'types/roomRequests' -import { customLog } from 'utils/logging' +import { customLog, stringifyLog } from 'utils/logging' import { roomObjectUtils } from 'room/roomObjectUtils' import { structureUtils } from 'room/structureUtils' +import { packCoord } from 'other/codec' export class CreepProcs { advancedUpgradeController(creep: Creep) { @@ -134,7 +137,7 @@ export class CreepProcs { // If the creep needs resources if (creep.needsResources()) { - creep.runRoomLogisticsRequestsAdvanced({ + creepProcs.runRoomLogisticsRequestsAdvanced(creep, { types: new Set([ RoomLogisticsRequestTypes.withdraw, RoomLogisticsRequestTypes.pickup, @@ -254,7 +257,7 @@ export class CreepProcs { // Reset target so when we are full we search again delete Memory.creeps[creep.name][CreepMemoryKeys.structureTarget] - creep.runRoomLogisticsRequestsAdvanced({ + creepProcs.runRoomLogisticsRequestsAdvanced(creep, { types: new Set([ RoomLogisticsRequestTypes.withdraw, RoomLogisticsRequestTypes.offer, @@ -269,7 +272,7 @@ export class CreepProcs { // Otherwise if we don't need resources and can maintain const workPartCount = myCreepUtils.parts(creep).work - let repairTarget = creep.findRepairTarget() + let repairTarget = creepUtils.findRepairTarget(creep) if (!repairTarget) { creep.message = '❌🔧' @@ -305,8 +308,9 @@ export class CreepProcs { if (repairTarget.structureType === STRUCTURE_RAMPART) return true // Otherwise if it isn't a rampart and it will be viable to repair next tick - else if (repairTarget.hitsMax - repairTarget.nextHits >= workPartCount * REPAIR_POWER) + else if (repairTarget.hitsMax - repairTarget.nextHits >= workPartCount * REPAIR_POWER) { return true + } // Otherwise we need a new target delete Memory.creeps[creep.name][CreepMemoryKeys.structureTarget] @@ -317,7 +321,7 @@ export class CreepProcs { // Find repair targets that don't include the current target, informing true if none were found - repairTarget = creep.findNewRepairTarget() || creep.findNewRampartRepairTarget() + repairTarget = creepUtils.findNewRepairTarget(creep) || creepUtils.findNewRampartRepairTarget(creep) if (!repairTarget) return true creep.actionCoord = repairTarget.pos @@ -559,7 +563,10 @@ export class CreepProcs { return false } - const creepFreeNextStore = roomObjectUtils.freeNextStoreOf(creep, request[CreepLogisticsRequestKeys.resourceType]) + const creepFreeNextStore = roomObjectUtils.freeNextStoreOf( + creep, + request[CreepLogisticsRequestKeys.resourceType], + ) request[CreepLogisticsRequestKeys.amount] = Math.min( Math.min( creepFreeNextStore, @@ -608,7 +615,10 @@ export class CreepProcs { if (target instanceof Resource) { // Update in accordance to potential resource decay - const creepFreeNextStore = roomObjectUtils.freeNextStoreOf(creep, request[CreepLogisticsRequestKeys.resourceType]) + const creepFreeNextStore = roomObjectUtils.freeNextStoreOf( + creep, + request[CreepLogisticsRequestKeys.resourceType], + ) request[CreepLogisticsRequestKeys.amount] = Math.min( Math.min(creepFreeNextStore, target.nextAmount), request[CreepLogisticsRequestKeys.amount], @@ -647,7 +657,10 @@ export class CreepProcs { return false } - const creepFreeNextStore = roomObjectUtils.freeNextStoreOf(creep, request[CreepLogisticsRequestKeys.resourceType]) + const creepFreeNextStore = roomObjectUtils.freeNextStoreOf( + creep, + request[CreepLogisticsRequestKeys.resourceType], + ) request[CreepLogisticsRequestKeys.amount] = Math.min( Math.min( creepFreeNextStore, @@ -674,6 +687,419 @@ export class CreepProcs { return true } + + registerSpawning(creep: Creep, spawn: StructureSpawn) { + if (spawn.spawning.remainingTime > 1 || spawn.spawning.name.includes('shard')) return + + const offset = offsetsByDirection[spawn.spawning.directions[0]] + const coord = { + x: creep.pos.x + offset[0], + y: creep.pos.y + offset[1], + } + + creep.assignMoveRequest(coord) + } + + runRoomLogisticsRequestAdvanced(creep: Creep, args?: FindNewRoomLogisticsRequestArgs) { + const request = creepUtils.findRoomLogisticsRequest(creep, args) + if (!request) return Result.noAction + + /* log('REQUEST RESPONSE', request.T, { position: 1 }) */ + const target = findObjectWithID(request[CreepLogisticsRequestKeys.target]) + if (Game.flags[FlagNames.debugCreepLogistics]) + creep.room.targetVisual(creep.pos, target.pos, true) + if (getRange(target.pos, creep.pos) > 1) { + const result = creep.createMoveRequest({ + origin: creep.pos, + goals: [{ pos: target.pos, range: 1 }], + defaultCostMatrix(roomName) { + const roomManager = RoomManager.roomManagers[roomName] + if (!roomManager) return false + + return roomManager.defaultCostMatrix + }, + }) + // An enemy is probably blocking access to the logistics target + if (result === Result.fail) { + creep.room.roomManager.roomLogisticsBlacklistCoords.add(packCoord(target.pos)) + Result.fail + } + + return Result.action + } + + // If we already moved a resource creep tick, then wait (presumably) until the next one to take any resoure-moving action + if (creep.movedResource) { + if (Game.flags[FlagNames.debugCreepLogistics]) { + creep.room.visual.text('MR', creep.pos) + } + + return Result.noAction + } + + if (Game.flags[FlagNames.debugCreepLogistics]) { + creep.room.visual.text(request[CreepLogisticsRequestKeys.amount].toString(), creep.pos) + } + + /* log( + 'DOING REQUEST', + request.T + ', ' + request[CreepRoomLogisticsRequestKeys.amount] + ', ' + creep.store.getCapacity(request[CreepRoomLogisticsRequestKeys.resourceType]) + ', ' + creep.name, + { position: 1 }, + ) */ + // Pickup type + + if (target instanceof Resource) { + creep.pickup(target) + creep.movedResource = true + + creep.nextStore[request[CreepLogisticsRequestKeys.resourceType]] += + request[CreepLogisticsRequestKeys.amount] + target.nextAmount -= request[CreepLogisticsRequestKeys.amount] + + creep.memory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return Result.success + } + + if (request[CreepLogisticsRequestKeys.type] === RoomLogisticsRequestTypes.transfer) { + /* stringifyLog('tried to resolve request for ' + creep.name, request) */ + + const result = creep.transfer( + target as AnyStoreStructure | Creep, + request[CreepLogisticsRequestKeys.resourceType], + request[CreepLogisticsRequestKeys.amount], + ) + if (result !== OK) { + creep.room.visual.text(result.toString(), creep.pos) + return Result.fail + } + + creep.movedResource = true + + creep.nextStore[request[CreepLogisticsRequestKeys.resourceType]] -= + request[CreepLogisticsRequestKeys.amount] + target.nextStore[request[CreepLogisticsRequestKeys.resourceType]] += + request[CreepLogisticsRequestKeys.amount] + + creep.memory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return Result.success + } + + // Withdraw or offer type + + // Creeps need to transfer to each other + + if (target instanceof Creep) { + if ( + target.transfer( + creep, + request[CreepLogisticsRequestKeys.resourceType], + request[CreepLogisticsRequestKeys.amount], + ) !== OK + ) + return Result.fail + + target.movedResource = true + + creep.nextStore[request[CreepLogisticsRequestKeys.resourceType]] += + request[CreepLogisticsRequestKeys.amount] + target.nextStore[request[CreepLogisticsRequestKeys.resourceType]] -= + request[CreepLogisticsRequestKeys.amount] + + creep.memory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return Result.action + } + + if ( + creep.withdraw( + target, + request[CreepLogisticsRequestKeys.resourceType], + request[CreepLogisticsRequestKeys.amount], + ) !== OK + ) + return Result.fail + + creep.movedResource = true + + creep.nextStore[request[CreepLogisticsRequestKeys.resourceType]] += + request[CreepLogisticsRequestKeys.amount] + target.nextStore[request[CreepLogisticsRequestKeys.resourceType]] -= + request[CreepLogisticsRequestKeys.amount] + + creep.memory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return Result.success + } + + runRoomLogisticsRequestsAdvanced(creep: Creep, args?: FindNewRoomLogisticsRequestArgs) { + if (creep.spawning) return Result.noAction + + const result = creepProcs.runRoomLogisticsRequestAdvanced(creep, args) + if (result === Result.action) return result + + creepProcs.runRoomLogisticsRequestAdvanced(creep, args) + return Result.success + } + + runRoomLogisticsRequest(creep: Creep) { + const creepMemory = Memory.creeps[creep.name] + const request = creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] + if (!request) return Result.fail + + /* log('REQUEST RESPONSE', request.T, { position: 1 }) */ + const target = findObjectWithID(request[CreepLogisticsRequestKeys.target]) + + if (getRange(target.pos, creep.pos) > 1) { + creep.createMoveRequest({ + origin: creep.pos, + goals: [{ pos: target.pos, range: 1 }], + defaultCostMatrix(roomName) { + const roomManager = RoomManager.roomManagers[roomName] + if (!roomManager) return false + + return roomManager.defaultCostMatrix + }, + }) + + return Result.action + } + + // If we already moved a resource creep tick, then wait (presumably) until the next one to take any resoure-moving action + if (creep.movedResource) return Result.noAction + + /* log( + 'DOING REQUEST', + request.T + ', ' + request[CreepRoomLogisticsRequestKeys.amount] + ', ' + creep.store.getCapacity(request[CreepRoomLogisticsRequestKeys.resourceType]) + ', ' + creep.name, + { position: 1 }, + ) */ + // Pickup type + + if (target instanceof Resource) { + creep.pickup(target) + creep.movedResource = true + + creep.nextStore[request[CreepLogisticsRequestKeys.resourceType]] += + request[CreepLogisticsRequestKeys.amount] + target.nextAmount -= request[CreepLogisticsRequestKeys.amount] + + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return Result.success + } + + if (request[CreepLogisticsRequestKeys.type] === RoomLogisticsRequestTypes.transfer) { + if ( + creep.transfer( + target as AnyStoreStructure | Creep, + request[CreepLogisticsRequestKeys.resourceType], + request[CreepLogisticsRequestKeys.amount], + ) !== OK + ) + return Result.fail + + creep.movedResource = true + + creep.nextStore[request[CreepLogisticsRequestKeys.resourceType]] -= + request[CreepLogisticsRequestKeys.amount] + target.nextStore[request[CreepLogisticsRequestKeys.resourceType]] += + request[CreepLogisticsRequestKeys.amount] + + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return Result.success + } + + // Withdraw or offer type + + // Creeps need to transfer to each other + + if (target instanceof Creep) { + if ( + target.transfer( + creep, + request[CreepLogisticsRequestKeys.resourceType], + request[CreepLogisticsRequestKeys.amount], + ) !== OK + ) + return Result.fail + + creep.movedResource = true + + creep.nextStore[request[CreepLogisticsRequestKeys.resourceType]] += + request[CreepLogisticsRequestKeys.amount] + target.nextStore[request[CreepLogisticsRequestKeys.resourceType]] -= + request[CreepLogisticsRequestKeys.amount] + + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return Result.success + } + + if ( + creep.withdraw( + target, + request[CreepLogisticsRequestKeys.resourceType], + request[CreepLogisticsRequestKeys.amount], + ) !== OK + ) + return Result.fail + + creep.movedResource = true + + creep.nextStore[request[CreepLogisticsRequestKeys.resourceType]] += + request[CreepLogisticsRequestKeys.amount] + target.nextStore[request[CreepLogisticsRequestKeys.resourceType]] -= + request[CreepLogisticsRequestKeys.amount] + + creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) + return Result.success + } + + runRoomLogisticsRequests(creep: Creep) { + if (creep.spawning) return false + + if (this.runRoomLogisticsRequest(creep) !== Result.success) return false + + this.runRoomLogisticsRequest(creep) + return true + } + + findCreepRoomLogisticsRequestAmount( + creep: Creep, + type: RoomLogisticsRequestTypes, + targetID: Id, + amount: number, + resourceType: ResourceConstant, + ) { + const target = findObjectWithID(targetID) + + // Pickup type + + if (target instanceof Resource) { + // Update in accordance to potential resource decay + + amount = Math.min(target.nextAmount, amount) + if (amount <= 0) return amount + + target.reserveAmount -= amount + return amount + } + + if (type === RoomLogisticsRequestTypes.transfer) { + // Delete the request if the target is fulfilled + + const targetFreeReserveStore = roomObjectUtils.freeNextStoreOf(target, resourceType) + if (targetFreeReserveStore < amount) return 0 + + amount = Math.min(Math.min(creep.nextStore[resourceType], targetFreeReserveStore), amount) + if (amount <= 0) return amount + + target.reserveStore[resourceType] += amount + return amount + } + + // Withdraw or offer type + + // Delete the request if the target doesn't have what we need + + if (target.nextStore[resourceType] < amount) return amount + + amount = Math.min(target.nextStore[resourceType], amount) + if (amount <= 0) return amount + + target.reserveStore[resourceType] -= amount + return amount + } + + createCreepRoomLogisticsRequest( + creep: Creep, + type: RoomLogisticsRequestTypes, + targetID: Id, + amount: number, + resourceType: ResourceConstant = RESOURCE_ENERGY, + ) { + /* amount = */ this.findCreepRoomLogisticsRequestAmount(creep, type, targetID, amount, resourceType) + if (amount <= 0) return Result.fail + + creep.memory[CreepMemoryKeys.roomLogisticsRequests].push({ + [CreepLogisticsRequestKeys.type]: type, + [CreepLogisticsRequestKeys.target]: targetID, + [CreepLogisticsRequestKeys.resourceType]: resourceType, + [CreepLogisticsRequestKeys.amount]: amount, + }) + + return Result.success + } + + activeRenew(creep: Creep) { + const { room } = creep + + // If there is insufficient CPU to renew, inform false + + if (!room.myCreepsByRole.fastFiller.length) return + if (creep.isDying()) return + + // If the creep's age is less than the benefit from renewing, inform false + + const creepCost = Memory.creeps[creep.name][CreepMemoryKeys.cost] + const energyCost = Math.ceil(creepCost / 2.5 / creep.body.length) + if (CREEP_LIFE_TIME - creep.ticksToLive < Math.floor(600 / creep.body.length)) return + + const spawns = room.roomManager.structures.spawn.filter( + spawn => !spawn.renewed && !spawn.spawning, + ) + if (!spawns.length) return + + const spawn = findClosestObject(creep.pos, spawns) + + if (getRange(creep.pos, spawn.pos) > 1) { + creep.createMoveRequest({ + origin: creep.pos, + goals: [{ pos: spawn.pos, range: 1 }], + avoidEnemyRanges: true, + }) + return + } + + const result = spawn.renewCreep(creep) + if (result === OK) { + statsManager.updateStat(creep.room.name, 'eosp', energyCost) + spawn.renewed = true + } + } + + passiveRenew(creep: Creep) { + const { room } = creep + + // If there is insufficient CPU to renew, inform false + + if (creep.body.length > 10) return + if (!room.myCreepsByRole.fastFiller.length) return + if (creep.isDying()) return + + // If the creep's age is less than the benefit from renewing, inform false + + const creepCost = Memory.creeps[creep.name][CreepMemoryKeys.cost] + const energyCost = Math.ceil(creepCost / 2.5 / creep.body.length) + if (CREEP_LIFE_TIME - creep.ticksToLive < Math.floor(600 / creep.body.length)) return + + // Get the room's spawns, stopping if there are none + + const spawns = room.roomManager.structures.spawn + + // Get a spawn in range of 1, informing false if there are none + + const spawn = spawns.find( + spawn => + getRangeXY(creep.pos.x, spawn.pos.x, creep.pos.y, spawn.pos.y) === 1 && + !spawn.renewed && + !spawn.spawning && + structureUtils.isRCLActionable(spawn), + ) + if (!spawn) return + + const result = spawn.renewCreep(creep) + if (result === OK) { + statsManager.updateStat(creep.room.name, 'eosp', energyCost) + spawn.renewed = true + } + } + } export const creepProcs = new CreepProcs() diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index 55c13d8c5..fa32413c1 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -1,69 +1,26 @@ -import { spawn } from 'child_process' import { - cacheAmountModifier, - communeSign, - CPUBucketCapacity, - defaultCreepSwampCost, - defaultPlainCost, - impassibleStructureTypes, - customColors, - nonCommuneSigns, - quadAttackMemberOffsets, - roomDimensions, - TrafficPriorities, - offsetsByDirection, - Result, - storingStructureTypesSet, - CreepMemoryKeys, - CreepLogisticsRequestKeys, - RoomMemoryKeys, + impassibleStructureTypes, quadAttackMemberOffsets, + roomDimensions, Result, CreepMemoryKeys, RoomMemoryKeys, ReservedCoordTypes, WorkTypes, - RoomLogisticsRequestTypes, - FlagNames, + RoomLogisticsRequestTypes } from 'international/constants' import { - areCoordsEqual, - findClosestObject, - findClosestPos, - findCreepInQueueMatchingRequest, - findObjectWithID, - findCoordsInsideRect, - getRangeXY, - findClosestObjectInRange, - isXYExit, - packAsNum, - unpackNumAsPos, - packXYAsNum, - unpackNumAsCoord, - getRange, - randomTick, - arePositionsEqual, - findWithLowestScore, + findClosestObject, findObjectWithID, getRangeXY, + findClosestObjectInRange, getRange, findWithLowestScore } from 'utils/utils' -import { collectiveManager } from 'international/collective' -import { any, pick, random, repeat } from 'lodash' import { - packCoord, - packPos, - packPosList, - packXYAsCoord, - unpackCoord, - unpackCoordAsPos, - unpackPos, - unpackPosList, + packCoord, unpackCoordAsPos } from 'other/codec' -import { creepClasses } from '../creepClasses' import { statsManager } from 'international/statsManager' import { creepUtils } from '../creepUtils' import { RoomManager } from 'room/room' -import { CreepLogisticsRequest, RoomLogisticsRequest } from 'types/roomRequests' -import { customLog, stringifyLog } from 'utils/logging' +import { RoomLogisticsRequest } from 'types/roomRequests' import { customPathFinder } from 'international/customPathFinder' import { communeUtils } from 'room/commune/communeUtils' import { myCreepUtils } from '../myCreepUtils' -import { roomObjectUtils } from 'room/roomObjectUtils' import { structureUtils } from 'room/structureUtils' +import { creepProcs } from '../creepProcs' Creep.prototype.update = function () {} @@ -220,7 +177,7 @@ Creep.prototype.builderGetEnergy = function () { return Result.noAction } - this.runRoomLogisticsRequestsAdvanced({ + creepProcs.runRoomLogisticsRequestAdvanced(this, { types: new Set([ RoomLogisticsRequestTypes.withdraw, RoomLogisticsRequestTypes.pickup, @@ -237,7 +194,7 @@ Creep.prototype.builderGetEnergy = function () { // We don't have a storage or terminal, don't allow use of sourceContainers - this.runRoomLogisticsRequestsAdvanced({ + creepProcs.runRoomLogisticsRequestAdvanced(this, { types: new Set([ RoomLogisticsRequestTypes.withdraw, RoomLogisticsRequestTypes.pickup, @@ -399,59 +356,6 @@ Creep.prototype.advancedBuildAllyCSite = function () { return true } -Creep.prototype.findNewRampartRepairTarget = function () { - const ramparts = this.room.roomManager.enemyAttackers.length - ? this.room.communeManager.defensiveRamparts - : communeUtils.getRampartRepairTargets(this.room) - - const [score, bestTarget] = findWithLowestScore(ramparts, structure => { - if (structure.nextHits / structure.hitsMax > 0.9) return false - - // Score by range and hits - return getRange(this.pos, structure.pos) + structure.nextHits / 1000 - }) - - if (!bestTarget) return false - - Memory.creeps[this.name][CreepMemoryKeys.structureTarget] = bestTarget.id - return bestTarget -} - -Creep.prototype.findNewRepairTarget = function () { - const enemyAttackers = !!this.room.roomManager.enemyAttackers.length - let repairThreshold = enemyAttackers ? 0.1 : 0.3 - - let lowestScore = Infinity - let bestTarget - - const structures = communeUtils.getGeneralRepairStructures(this.room) - for (const structure of structures) { - // If above 30% of max hits - - if (structure.nextHits / structure.hitsMax > repairThreshold) continue - - const score = getRange(this.pos, structure.pos) + (structure.nextHits / structure.hitsMax) * 20 - if (score >= lowestScore) continue - - lowestScore = score - bestTarget = structure - } - - if (!bestTarget) return false - - this.memory[CreepMemoryKeys.structureTarget] = bestTarget.id - return bestTarget -} - -Creep.prototype.findRepairTarget = function () { - if (this.memory[CreepMemoryKeys.structureTarget]) { - const repairTarget = findObjectWithID(this.memory[CreepMemoryKeys.structureTarget]) - if (repairTarget) return repairTarget - } - - return this.findNewRepairTarget() || this.findNewRampartRepairTarget() -} - Creep.prototype.findSourceIndex = function () { const { room } = this @@ -815,78 +719,6 @@ Creep.prototype.advancedRecycle = function () { return true } -Creep.prototype.activeRenew = function () { - const { room } = this - - // If there is insufficient CPU to renew, inform false - - if (!room.myCreepsByRole.fastFiller.length) return - if (this.isDying()) return - - // If the creep's age is less than the benefit from renewing, inform false - - const energyCost = Math.ceil(this.findCost() / 2.5 / this.body.length) - if (CREEP_LIFE_TIME - this.ticksToLive < Math.floor(600 / this.body.length)) return - - const spawns = room.roomManager.structures.spawn.filter( - spawn => !spawn.renewed && !spawn.spawning, - ) - if (!spawns.length) return - - const spawn = findClosestObject(this.pos, spawns) - - if (getRange(this.pos, spawn.pos) > 1) { - this.createMoveRequest({ - origin: this.pos, - goals: [{ pos: spawn.pos, range: 1 }], - avoidEnemyRanges: true, - }) - return - } - - const result = spawn.renewCreep(this) - if (result === OK) { - statsManager.updateStat(this.room.name, 'eosp', energyCost) - spawn.renewed = true - } -} - -Creep.prototype.passiveRenew = function () { - const { room } = this - - // If there is insufficient CPU to renew, inform false - - if (this.body.length > 10) return - if (!room.myCreepsByRole.fastFiller.length) return - if (this.isDying()) return - - // If the creep's age is less than the benefit from renewing, inform false - - const energyCost = Math.ceil(this.findCost() / 2.5 / this.body.length) - if (CREEP_LIFE_TIME - this.ticksToLive < Math.floor(600 / this.body.length)) return - - // Get the room's spawns, stopping if there are none - - const spawns = room.roomManager.structures.spawn - - // Get a spawn in range of 1, informing false if there are none - - const spawn = spawns.find( - spawn => - getRangeXY(this.pos.x, spawn.pos.x, this.pos.y, spawn.pos.y) === 1 && - !spawn.renewed && - !spawn.spawning && - structureUtils.isRCLActionable(spawn), - ) - if (!spawn) return - - const result = spawn.renewCreep(this) - if (result === OK) { - statsManager.updateStat(this.room.name, 'eosp', energyCost) - spawn.renewed = true - } -} - Creep.prototype.advancedReserveController = function () { const { room } = this @@ -928,14 +760,6 @@ Creep.prototype.advancedReserveController = function () { return true } -Creep.prototype.findCost = function () { - let cost = 0 - - for (const part of this.body) cost += BODYPART_COST[part.type] - - return cost -} - Creep.prototype.passiveHeal = function () { const { room } = this @@ -1133,782 +957,3 @@ Creep.prototype.findQuadBulldozeTargets = function (goalPos) { return (this.memory[CreepMemoryKeys.quadBulldozeTargets] = Array.from(targetStructureIDs)) } - -Creep.prototype.manageSpawning = function (spawn: StructureSpawn) { - if (spawn.spawning.remainingTime > 1 || spawn.spawning.name.includes('shard')) return - - const offset = offsetsByDirection[spawn.spawning.directions[0]] - const coord = { - x: this.pos.x + offset[0], - y: this.pos.y + offset[1], - } - - this.assignMoveRequest(coord) -} - -Creep.prototype.findRoomLogisticsRequest = function (args) { - const creepMemory = Memory.creeps[this.name] - if (creepMemory[CreepMemoryKeys.roomLogisticsRequests][0]) { - return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] - } - - if (args) this.noDelivery = args.noDelivery - else this.noDelivery = undefined - - const types = this.findRoomLogisticsRequestTypes(args) - if (types === Result.fail) return Result.fail - - let lowestScore = Infinity - let bestRequest: RoomLogisticsRequest | 0 - - for (const type of types) { - for (const requestID in this.room.roomLogisticsRequests[type]) { - const request = this.room.roomLogisticsRequests[type][requestID] - - delete request.delivery - /* - // Make a personal amount based on existing amount plus estimated income for distance - - request.personalAmount = - request.amount + - (request.income ? getRange(findObjectWithID(request.targetID).pos, this.pos) * request.income : 0) - */ - - // Customizable conditions - - if (args) { - if (args.resourceTypes && !args.resourceTypes.has(request.resourceType)) continue - if (args.conditions && !args.conditions(request)) continue - } - - // Default conditions - - if (!this.canAcceptRoomLogisticsRequest(request.type, request.ID)) continue - - const targetPos = findObjectWithID(request.targetID).pos - const score = request.priority + getRange(targetPos, this.pos) - - if (score >= lowestScore) continue - - lowestScore = score - bestRequest = request - } - } - /* - log('FINDING REQ', bestRequest + ', ' + Array.from(types), { position: 1 }) - */ - let creepRequest: CreepLogisticsRequest | 0 - - if (!bestRequest) { - creepRequest = this.createBackupStoringStructuresRoomLogisticsRequest( - types, - args?.resourceTypes, - ) - - if (creepRequest === Result.fail) return Result.fail - } else { - creepRequest = { - [CreepLogisticsRequestKeys.type]: bestRequest.type, - [CreepLogisticsRequestKeys.target]: bestRequest.targetID, - [CreepLogisticsRequestKeys.resourceType]: bestRequest.resourceType, - [CreepLogisticsRequestKeys.amount]: this.findRoomLogisticRequestAmount(bestRequest), - [CreepLogisticsRequestKeys.noReserve]: bestRequest.noReserve, - } - - if (bestRequest.delivery) { - // This request will preceed the one we've accepted to provide for the delivery - let nextCreepRequest: CreepLogisticsRequest - const storingStructure = findObjectWithID(bestRequest.delivery as Id) - - if (storingStructure) { - nextCreepRequest = { - [CreepLogisticsRequestKeys.type]: RoomLogisticsRequestTypes.withdraw, - [CreepLogisticsRequestKeys.target]: storingStructure.id, - [CreepLogisticsRequestKeys.resourceType]: bestRequest.resourceType, - [CreepLogisticsRequestKeys.amount]: Math.min( - storingStructure.reserveStore[bestRequest.resourceType], - creepRequest[CreepLogisticsRequestKeys.amount], - ), - [CreepLogisticsRequestKeys.noReserve]: bestRequest.noReserve, - [CreepLogisticsRequestKeys.delivery]: true, - } - - storingStructure.reserveStore[nextCreepRequest[CreepLogisticsRequestKeys.resourceType]] -= - nextCreepRequest[CreepLogisticsRequestKeys.amount] - } else { - // The delivery provider is - - const nextRequest = - this.room.roomLogisticsRequests[RoomLogisticsRequestTypes.withdraw][ - bestRequest.delivery - ] || - this.room.roomLogisticsRequests[RoomLogisticsRequestTypes.offer][bestRequest.delivery] || - this.room.roomLogisticsRequests[RoomLogisticsRequestTypes.pickup][bestRequest.delivery] - - nextCreepRequest = { - [CreepLogisticsRequestKeys.type]: nextRequest.type, - [CreepLogisticsRequestKeys.target]: nextRequest.targetID, - [CreepLogisticsRequestKeys.resourceType]: nextRequest.resourceType, - [CreepLogisticsRequestKeys.amount]: Math.min( - this.nextStore[nextRequest.resourceType] + this.freeNextStore, - creepRequest[CreepLogisticsRequestKeys.amount], - ), - [CreepLogisticsRequestKeys.noReserve]: creepRequest[CreepLogisticsRequestKeys.noReserve], - [CreepLogisticsRequestKeys.delivery]: true, - } - - // Handle reservations for nextRequest - - if (!creepRequest[CreepLogisticsRequestKeys.noReserve]) { - // delete the parent request if it has no more utility, otherwise, reduce its amount - - if (nextRequest.amount === nextCreepRequest[CreepLogisticsRequestKeys.amount]) { - delete this.room.roomLogisticsRequests[nextRequest.type][nextRequest.ID] - } else { - nextRequest.amount -= nextCreepRequest[CreepLogisticsRequestKeys.amount] - } - - const target = findObjectWithID(nextRequest.targetID) - - // Pickup type - - if (target instanceof Resource) { - target.reserveAmount -= nextCreepRequest[CreepLogisticsRequestKeys.amount] - } else { - // Withdraw or offer type - - target.reserveStore[nextCreepRequest[CreepLogisticsRequestKeys.resourceType]] -= - nextCreepRequest[CreepLogisticsRequestKeys.amount] - } - } - } - - creepMemory[CreepMemoryKeys.roomLogisticsRequests].push(nextCreepRequest) - } - - // delete the parent request if it has no more utility, otherwise, reduce its amount - - if ( - !creepRequest[CreepLogisticsRequestKeys.noReserve] && - bestRequest.amount === creepRequest[CreepLogisticsRequestKeys.amount] - ) { - delete this.room.roomLogisticsRequests[bestRequest.type][bestRequest.ID] - } else { - bestRequest.amount -= creepRequest[CreepLogisticsRequestKeys.amount] - } - } - - creepMemory[CreepMemoryKeys.roomLogisticsRequests].push(creepRequest) - if (creepRequest[CreepLogisticsRequestKeys.noReserve]) { - return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] - } - - const target = findObjectWithID(creepRequest[CreepLogisticsRequestKeys.target]) - - // Pickup type - - if (target instanceof Resource) { - target.reserveAmount -= creepRequest[CreepLogisticsRequestKeys.amount] - - return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] - } - - if (creepRequest[CreepLogisticsRequestKeys.type] === RoomLogisticsRequestTypes.transfer) { - target.reserveStore[creepRequest[CreepLogisticsRequestKeys.resourceType]] += - creepRequest[CreepLogisticsRequestKeys.amount] - - return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] - } - - // Withdraw or offer type - - target.reserveStore[creepRequest[CreepLogisticsRequestKeys.resourceType]] -= - creepRequest[CreepLogisticsRequestKeys.amount] - - return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] -} - -Creep.prototype.findRoomLogisticsRequestTypes = function (args) { - if (args && args.types) { - if (args.types.has(RoomLogisticsRequestTypes.transfer) && this.hasNonEnergyResource()) { - /* if (args && args.noDelivery) return Result.fail */ - - this.noDelivery = true - return new Set([RoomLogisticsRequestTypes.transfer]) - } - - // Make sure we have the right store values for our types - - if (this.needsResources()) { - args.types.delete(RoomLogisticsRequestTypes.transfer) - return args.types - } - - args.types.delete(RoomLogisticsRequestTypes.pickup) - args.types.delete(RoomLogisticsRequestTypes.offer) - args.types.delete(RoomLogisticsRequestTypes.withdraw) - return args.types - } - - if (this.hasNonEnergyResource()) { - if (args && args.noDelivery) return Result.fail - - this.noDelivery = true - return new Set([RoomLogisticsRequestTypes.transfer]) - } - - if (!this.needsResources()) return new Set([RoomLogisticsRequestTypes.transfer]) - return new Set([ - RoomLogisticsRequestTypes.withdraw, - RoomLogisticsRequestTypes.pickup, - RoomLogisticsRequestTypes.transfer, - ]) -} - -Creep.prototype.canAcceptRoomLogisticsRequest = function (requestType, requestID) { - const request = this.room.roomLogisticsRequests[requestType][requestID] - const target = findObjectWithID(request.targetID) - - // Pickup type - - if (target instanceof Resource) { - if (request.onlyFull) { - // If the creep has enough space - - /* if (this.freeNextStore >= target.reserveAmount) return true */ - if (target.reserveAmount >= this.freeNextStore) return true - return false - } - - return true - } - - if (request.type === RoomLogisticsRequestTypes.transfer) { - // We don't have enough resource and we can deliver - - if (this.nextStore[request.resourceType] <= 0) { - if (this.noDelivery) return false - - // There are no practical storing structures to deliver from - if (this.room.name !== this.commune.name) return false - - // We don't have space to get any - if (this.freeNextStore <= 0) return false - /* - // Try to find a sufficient withdraw or offer task - - const types: RoomLogisticsRequestTypes[] = ['withdraw', 'pickup'] - - let lowestScore = Infinity - let bestRequest2 - - for (const type of types) { - for (const request2ID in this.room.roomLogisticsRequests[type]) { - const request2 = this.room.roomLogisticsRequests[type][request2ID] - - if (request2.resourceType !== request.resourceType) continue - - const target2Pos = findObjectWithID(request2.targetID).pos - const score = request2.priority + getRange(target2Pos, this.pos) / 100 - - if (score >= lowestScore) continue - - lowestScore = score - bestRequest2 = request2 - } - } - - if (bestRequest2) { - request.delivery = bestRequest2.ID as unknown as string - return true - } - */ - // We aren't gonna deliver to a storing structure - - if (target instanceof Structure && storingStructureTypesSet.has(target.structureType)) - return false - - let storingStructure - - // If energy, make sure there is enough to fill us to full - - if (request.resourceType === RESOURCE_ENERGY) { - const minAmount = this.freeNextStore - - storingStructure = this.commune.communeManager.storingStructures.find( - structure => structure.reserveStore[request.resourceType] >= minAmount, - ) - } else { - const minAmount = Math.min(this.freeNextStore, request.amount) - - storingStructure = this.commune.communeManager.storingStructures.find( - structure => structure.reserveStore[request.resourceType] >= minAmount, - ) - } - - if (!storingStructure) return false - - request.delivery = storingStructure.id - return true - } - - if (request.onlyFull) { - // If the creep has enough resource - /* this.room.visual.text(Math.min(amount, target.store.getCapacity(request.resourceType) / 2).toString(), this.pos) */ - - // - /* const creepEffectiveCapacity = this.freeNextStore */ - const creepEffectiveCapacity = - this.store.getCapacity() - - this.store.getUsedCapacity() + - this.nextStore[request.resourceType] - - if ( - this.nextStore[request.resourceType] >= - Math.min( - this.nextStore[request.resourceType], - request.amount, - target.store.getCapacity(request.resourceType), - creepEffectiveCapacity, - ) - ) - return true - return false - } - - return true - } - - // Withdraw or offer type - - if (request.onlyFull) { - // If the creep has enough space - - if (target.reserveStore[request.resourceType] >= this.freeNextStore) return true - return false - } - - return true -} - -Creep.prototype.createBackupStoringStructuresRoomLogisticsRequest = function ( - types, - resourceTypes, -) { - if (this.room.name !== this.commune.name) return Result.fail - - if (types.has(RoomLogisticsRequestTypes.transfer)) { - const result = this.createBackupStoringStructuresRoomLogisticsRequestTransfer() - if (result !== Result.fail) return result - } - - if (this.role === 'hauler') return Result.fail - return this.createBackupStoringStructuresRoomLogisticsRequestWithdraw(resourceTypes) -} - -Creep.prototype.createBackupStoringStructuresRoomLogisticsRequestTransfer = function () { - const storingStructures = this.commune.communeManager.storingStructures - if (!storingStructures.length) return Result.fail - - const nextStore = this.nextStore - let resourceType: ResourceConstant - - for (const key in nextStore) { - if (key === RESOURCE_ENERGY) continue - if (nextStore[key as ResourceConstant] <= 0) continue - - resourceType = key as ResourceConstant - break - } - - if (!resourceType) return Result.fail - - const storingStructure = storingStructures.find( - structure => structure.freeReserveStore >= nextStore[resourceType], - ) - if (!storingStructure) return Result.fail - /* this.room.visual.text((this.nextStore[resourceType]).toString(), this.pos.x, this.pos.y, { color: customColors.red }) */ - return { - [CreepLogisticsRequestKeys.type]: RoomLogisticsRequestTypes.transfer, - [CreepLogisticsRequestKeys.target]: storingStructure.id, - [CreepLogisticsRequestKeys.resourceType]: resourceType, - [CreepLogisticsRequestKeys.amount]: nextStore[resourceType], - } -} - -Creep.prototype.createBackupStoringStructuresRoomLogisticsRequestWithdraw = function ( - resourceTypes = new Set([RESOURCE_ENERGY]), -) { - const storingStructures = this.commune.communeManager.storingStructures - if (!storingStructures.length) return Result.fail - - let resourceType: ResourceConstant - let storingStructure: AnyStoreStructure - - for (resourceType of resourceTypes) { - storingStructure = storingStructures.find( - structure => structure.reserveStore[resourceType] >= this.freeNextStore, - ) - if (storingStructure) break - } - - if (!storingStructure) return Result.fail - - /* this.room.visual.text((this.nextStore[resourceType]).toString(), this.pos.x, this.pos.y, { color: customColors.red }) */ - return { - [CreepLogisticsRequestKeys.type]: RoomLogisticsRequestTypes.withdraw, - [CreepLogisticsRequestKeys.target]: storingStructure.id, - [CreepLogisticsRequestKeys.resourceType]: resourceType, - [CreepLogisticsRequestKeys.amount]: this.freeNextStore, - } -} - -Creep.prototype.findRoomLogisticRequestAmount = function (request) { - const target = findObjectWithID(request.targetID) - - // Pickup type - - if (target instanceof Resource) { - return Math.min(this.freeNextStore, request.amount) - } - - if (request.type === RoomLogisticsRequestTypes.transfer) { - if (request.delivery) { - // Take extra energy in case its needed - - /* if (request.resourceType === RESOURCE_ENERGY) { - return this.nextStore[request.resourceType] + this.freeNextStore - } */ - - return Math.min(request.amount, this.nextStore[request.resourceType] + this.freeNextStore) - } - return Math.min(this.nextStore[request.resourceType], request.amount) - } - - // Withdraw or offer type - - return Math.min(this.freeNextStore, request.amount) -} - -Creep.prototype.runRoomLogisticsRequestAdvanced = function (args) { - const request = this.findRoomLogisticsRequest(args) - if (!request) return Result.noAction - - /* log('REQUEST RESPONSE', request.T, { position: 1 }) */ - const target = findObjectWithID(request[CreepLogisticsRequestKeys.target]) - if (Game.flags[FlagNames.debugCreepLogistics]) this.room.targetVisual(this.pos, target.pos, true) - if (getRange(target.pos, this.pos) > 1) { - const result = this.createMoveRequest({ - origin: this.pos, - goals: [{ pos: target.pos, range: 1 }], - defaultCostMatrix(roomName) { - const roomManager = RoomManager.roomManagers[roomName] - if (!roomManager) return false - - return roomManager.defaultCostMatrix - }, - }) - // An enemy is probably blocking access to the logistics target - if (result === Result.fail) { - this.room.roomManager.roomLogisticsBlacklistCoords.add(packCoord(target.pos)) - Result.fail - } - - return Result.action - } - - // If we already moved a resource this tick, then wait (presumably) until the next one to take any resoure-moving action - if (this.movedResource) { - if (Game.flags[FlagNames.debugCreepLogistics]) { - this.room.visual.text('MR', this.pos) - } - - return Result.noAction - } - - if (Game.flags[FlagNames.debugCreepLogistics]) { - this.room.visual.text(request[CreepLogisticsRequestKeys.amount].toString(), this.pos) - } - - /* log( - 'DOING REQUEST', - request.T + ', ' + request[CreepRoomLogisticsRequestKeys.amount] + ', ' + this.store.getCapacity(request[CreepRoomLogisticsRequestKeys.resourceType]) + ', ' + this.name, - { position: 1 }, - ) */ - // Pickup type - - if (target instanceof Resource) { - this.pickup(target) - this.movedResource = true - - this.nextStore[request[CreepLogisticsRequestKeys.resourceType]] += - request[CreepLogisticsRequestKeys.amount] - target.nextAmount -= request[CreepLogisticsRequestKeys.amount] - - this.memory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return Result.success - } - - if (request[CreepLogisticsRequestKeys.type] === RoomLogisticsRequestTypes.transfer) { - stringifyLog('tried to resolve request for ' + this.name, request) - - const result = this.transfer( - target as AnyStoreStructure | Creep, - request[CreepLogisticsRequestKeys.resourceType], - request[CreepLogisticsRequestKeys.amount], - ) - if (result !== OK) { - this.room.visual.text(result.toString(), this.pos) - return Result.fail - } - - this.movedResource = true - - this.nextStore[request[CreepLogisticsRequestKeys.resourceType]] -= - request[CreepLogisticsRequestKeys.amount] - target.nextStore[request[CreepLogisticsRequestKeys.resourceType]] += - request[CreepLogisticsRequestKeys.amount] - - this.memory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return Result.success - } - - // Withdraw or offer type - - // Creeps need to transfer to each other - - if (target instanceof Creep) { - if ( - target.transfer( - this, - request[CreepLogisticsRequestKeys.resourceType], - request[CreepLogisticsRequestKeys.amount], - ) !== OK - ) - return Result.fail - - target.movedResource = true - - this.nextStore[request[CreepLogisticsRequestKeys.resourceType]] += - request[CreepLogisticsRequestKeys.amount] - target.nextStore[request[CreepLogisticsRequestKeys.resourceType]] -= - request[CreepLogisticsRequestKeys.amount] - - this.memory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return Result.action - } - - if ( - this.withdraw( - target, - request[CreepLogisticsRequestKeys.resourceType], - request[CreepLogisticsRequestKeys.amount], - ) !== OK - ) - return Result.fail - - this.movedResource = true - - this.nextStore[request[CreepLogisticsRequestKeys.resourceType]] += - request[CreepLogisticsRequestKeys.amount] - target.nextStore[request[CreepLogisticsRequestKeys.resourceType]] -= - request[CreepLogisticsRequestKeys.amount] - - this.memory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return Result.success -} - -Creep.prototype.runRoomLogisticsRequestsAdvanced = function (args) { - if (this.spawning) return Result.noAction - - const result = this.runRoomLogisticsRequestAdvanced(args) - if (result === Result.action) return result - - this.runRoomLogisticsRequestAdvanced(args) - return Result.success -} - -Creep.prototype.runRoomLogisticsRequest = function () { - const creepMemory = Memory.creeps[this.name] - const request = creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] - if (!request) return Result.fail - - /* log('REQUEST RESPONSE', request.T, { position: 1 }) */ - const target = findObjectWithID(request[CreepLogisticsRequestKeys.target]) - - if (getRange(target.pos, this.pos) > 1) { - this.createMoveRequest({ - origin: this.pos, - goals: [{ pos: target.pos, range: 1 }], - defaultCostMatrix(roomName) { - const roomManager = RoomManager.roomManagers[roomName] - if (!roomManager) return false - - return roomManager.defaultCostMatrix - }, - }) - - return Result.action - } - - // If we already moved a resource this tick, then wait (presumably) until the next one to take any resoure-moving action - if (this.movedResource) return Result.noAction - - /* log( - 'DOING REQUEST', - request.T + ', ' + request[CreepRoomLogisticsRequestKeys.amount] + ', ' + this.store.getCapacity(request[CreepRoomLogisticsRequestKeys.resourceType]) + ', ' + this.name, - { position: 1 }, - ) */ - // Pickup type - - if (target instanceof Resource) { - this.pickup(target) - this.movedResource = true - - this.nextStore[request[CreepLogisticsRequestKeys.resourceType]] += - request[CreepLogisticsRequestKeys.amount] - target.nextAmount -= request[CreepLogisticsRequestKeys.amount] - - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return Result.success - } - - if (request[CreepLogisticsRequestKeys.type] === RoomLogisticsRequestTypes.transfer) { - if ( - this.transfer( - target as AnyStoreStructure | Creep, - request[CreepLogisticsRequestKeys.resourceType], - request[CreepLogisticsRequestKeys.amount], - ) !== OK - ) - return Result.fail - - this.movedResource = true - - this.nextStore[request[CreepLogisticsRequestKeys.resourceType]] -= - request[CreepLogisticsRequestKeys.amount] - target.nextStore[request[CreepLogisticsRequestKeys.resourceType]] += - request[CreepLogisticsRequestKeys.amount] - - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return Result.success - } - - // Withdraw or offer type - - // Creeps need to transfer to each other - - if (target instanceof Creep) { - if ( - target.transfer( - this, - request[CreepLogisticsRequestKeys.resourceType], - request[CreepLogisticsRequestKeys.amount], - ) !== OK - ) - return Result.fail - - this.movedResource = true - - this.nextStore[request[CreepLogisticsRequestKeys.resourceType]] += - request[CreepLogisticsRequestKeys.amount] - target.nextStore[request[CreepLogisticsRequestKeys.resourceType]] -= - request[CreepLogisticsRequestKeys.amount] - - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return Result.success - } - - if ( - this.withdraw( - target, - request[CreepLogisticsRequestKeys.resourceType], - request[CreepLogisticsRequestKeys.amount], - ) !== OK - ) - return Result.fail - - this.movedResource = true - - this.nextStore[request[CreepLogisticsRequestKeys.resourceType]] += - request[CreepLogisticsRequestKeys.amount] - target.nextStore[request[CreepLogisticsRequestKeys.resourceType]] -= - request[CreepLogisticsRequestKeys.amount] - - creepMemory[CreepMemoryKeys.roomLogisticsRequests].splice(0, 1) - return Result.success -} - -Creep.prototype.runRoomLogisticsRequests = function () { - if (this.spawning) return false - - if (this.runRoomLogisticsRequest() !== Result.success) return false - - this.runRoomLogisticsRequest() - return true -} - -Creep.prototype.findCreepRoomLogisticsRequestAmount = function ( - type, - targetID, - amount, - resourceType, -) { - const target = findObjectWithID(targetID) - - // Pickup type - - if (target instanceof Resource) { - // Update in accordance to potential resource decay - - amount = Math.min(target.nextAmount, amount) - if (amount <= 0) return amount - - target.reserveAmount -= amount - return amount - } - - if (type === RoomLogisticsRequestTypes.transfer) { - // Delete the request if the target is fulfilled - - const targetFreeReserveStore = roomObjectUtils.freeNextStoreOf(target, resourceType) - if (targetFreeReserveStore < amount) return 0 - - amount = Math.min(Math.min(this.nextStore[resourceType], targetFreeReserveStore), amount) - if (amount <= 0) return amount - - target.reserveStore[resourceType] += amount - return amount - } - - // Withdraw or offer type - - // Delete the request if the target doesn't have what we need - - if (target.nextStore[resourceType] < amount) return amount - - amount = Math.min(target.nextStore[resourceType], amount) - if (amount <= 0) return amount - - target.reserveStore[resourceType] -= amount - return amount -} - -Creep.prototype.createCreepRoomLogisticsRequest = function ( - type, - targetID, - amount, - resourceType = RESOURCE_ENERGY, -) { - /* amount = */ this.findCreepRoomLogisticsRequestAmount(type, targetID, amount, resourceType) - if (amount <= 0) return Result.fail - - this.memory[CreepMemoryKeys.roomLogisticsRequests].push({ - [CreepLogisticsRequestKeys.type]: type, - [CreepLogisticsRequestKeys.target]: targetID, - [CreepLogisticsRequestKeys.resourceType]: resourceType, - [CreepLogisticsRequestKeys.amount]: amount, - }) - - return Result.success -} diff --git a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts index d53063eca..79e0381d5 100644 --- a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts @@ -1,50 +1,25 @@ import { - defaultCreepSwampCost, - defaultPlainCost, - impassibleStructureTypes, impassibleStructureTypesSet, - customColors, - offsetsByDirection, - roomDimensions, - TrafficPriorities, + customColors, TrafficPriorities, packedPosLength, - CreepMemoryKeys, - RoomMemoryKeys, - RoomTypes, - Result, + CreepMemoryKeys, Result, communeCreepRoles, ReservedCoordTypes, - MovedTypes, + MovedTypes } from 'international/constants' -import { customPathFinder } from 'international/customPathFinder' import { collectiveManager } from 'international/collective' import { areCoordsEqual, - arePositionsEqual, - findAdjacentCoordsToCoord, - findObjectWithID, - getRangeXY, - getRangeEuc, - getRangeEucXY, - getRange, - isExit, - forCoordsAroundRange, - forAdjacentCoords, - visualizePath, + arePositionsEqual, findObjectWithID, getRangeEuc, getRange, + isExit, forAdjacentCoords } from 'utils/utils' import { packCoord, - packPos, - packPosList, - packXYAsCoord, - unpackCoord, - unpackCoordAsPos, + packPos, unpackCoordAsPos, unpackPos, unpackPosAt, - unpackPosList, + unpackPosList } from 'other/codec' -import { customLog } from 'utils/logging' -import { creepUtils } from '../creepUtils' import { creepMoveProcs } from '../creepMoveProcs' PowerCreep.prototype.createMoveRequestByPath = Creep.prototype.createMoveRequestByPath = function ( diff --git a/src/room/creeps/creepUtils.ts b/src/room/creeps/creepUtils.ts index f163fc45d..a5d7ef7e1 100644 --- a/src/room/creeps/creepUtils.ts +++ b/src/room/creeps/creepUtils.ts @@ -1,18 +1,20 @@ import { - CreepMemoryKeys, - ReservedCoordTypes, - Result, - RoomLogisticsRequestTypes, - RoomMemoryKeys, - RoomStatsKeys, - WorkTypes, - creepRoles, - packedCoordLength, - packedPosLength, - roomLogisticsRoles, + CreepLogisticsRequestKeys, + CreepMemoryKeys, + ReservedCoordTypes, + Result, + RoomLogisticsRequestTypes, + RoomMemoryKeys, + RoomStatsKeys, + WorkTypes, + creepRoles, + packedCoordLength, + packedPosLength, + roomLogisticsRoles, + storingStructureTypesSet, } from 'international/constants' import { statsManager } from 'international/statsManager' -import { arePositionsEqual, getRange } from 'utils/utils' +import { arePositionsEqual, findObjectWithID, findWithLowestScore, getRange } from 'utils/utils' import { CreepRoleManager } from './creepRoleManager' import { packCoord, unpackCoordAsPos, unpackPosAt } from 'other/codec' import { RoomManager } from 'room/room' @@ -20,83 +22,602 @@ import { collectiveManager } from 'international/collective' import { creepClasses } from './creepClasses' import { communeUtils } from 'room/commune/communeUtils' import { myCreepUtils } from './myCreepUtils' +import { CreepLogisticsRequest, FindNewRoomLogisticsRequestArgs, RoomLogisticsRequest } from 'types/roomRequests' export class CreepUtils { - expandName(creepName: string) { - return creepName.split('_') - } - roleName(creepName: string) { - return creepRoles[parseInt(creepName[0])] - } - roleCreep(creep: Creep) { - if (creep._role) return creep._role + expandName(creepName: string) { + return creepName.split('_') + } + + roleName(creepName: string) { + const expandedName = this.expandName(creepName) + return creepRoles[parseInt(expandedName[0])] + } + + roleCreep(creep: Creep) { + if (creep._role !== undefined) return creep._role + + return (creep._role = this.roleName(creep.name)) + } + + communeCreep(creep: Creep) { + if (creep._commune !== undefined) return creep._commune + + const expandedName = this.expandName(creep.name) + return creep._commune = Game.rooms[expandedName[1]] + } + + customIDCreep(creep: Creep) { + if (creep._customID !== undefined) return creep._customID + + const expandedName = this.expandName(creep.name) + return creep._customID = parseInt(expandedName[2]) + } + + findEnergySpentOnConstruction( + creep: Creep, + cSite: ConstructionSite, + workParts: number = myCreepUtils.parts(creep).work, + ) { + const energySpent = Math.min( + workParts * BUILD_POWER, + // In private servers sometimes progress can be greater than progress total + Math.max((cSite.progressTotal - cSite.progress) * BUILD_POWER, 0), + creep.nextStore.energy, + ) - return (creep._role = this.roleName(creep.name)) + return energySpent + } + findUpgradePosWeak(creep: Creep): RoomPosition | undefined { + const upgradePos = creep.room.roomManager.upgradePositions.find( + pos => + arePositionsEqual(creep.pos, pos) && + !creep.room.roomManager.reservedCoords.has(packCoord(pos)), + ) + return upgradePos + } + findUpgradePosStrong(creep: Creep): RoomPosition | undefined { + const creepMemory = Memory.creeps[creep.name] + // use our packed coord if we have one + if (creepMemory[CreepMemoryKeys.packedCoord]) { + return unpackCoordAsPos(creepMemory[CreepMemoryKeys.packedCoord], creep.room.name) } - findEnergySpentOnConstruction(creep: Creep, cSite: ConstructionSite, workParts: number = myCreepUtils.parts(creep).work) { - const energySpent = Math.min( - workParts * BUILD_POWER, - // In private servers sometimes progress can be greater than progress total - Math.max((cSite.progressTotal - cSite.progress) * BUILD_POWER, 0), - creep.nextStore.energy, - ) - return energySpent + const upgradePos = creep.room.roomManager.upgradePositions.find(pos => { + const packedCoord = packCoord(pos) + + // Iterate if the pos is used + if (creep.room.roomManager.reservedCoords.get(packedCoord) > ReservedCoordTypes.dying) { + return false + } + + // Otherwise record packedPos in the creep's memory and in usedUpgradeCoords + + creepMemory[CreepMemoryKeys.packedCoord] = packedCoord + creep.room.roomManager.reservedCoords.set(packedCoord, ReservedCoordTypes.important) + + return pos + }) + + return upgradePos + } + harvestSource(creep: Creep, source: Source, workParts: number = myCreepUtils.parts(creep).work) { + if (creep.harvest(source) !== OK) { + return Result.fail } - findUpgradePosWeak(creep: Creep): RoomPosition | undefined { - const upgradePos = creep.room.roomManager.upgradePositions.find( - pos => - arePositionsEqual(creep.pos, pos) && - !creep.room.roomManager.reservedCoords.has(packCoord(pos)) - ) - return upgradePos + creep.worked = WorkTypes.harvest + + // Find the presumed energy harvested this tick + const energyHarvested = Math.min(workParts * HARVEST_POWER, source.energy) + creep.nextStore.energy += energyHarvested + // Record the harvest in stats + statsManager.updateStat(creep.room.name, RoomStatsKeys.EnergyInputHarvest, energyHarvested) + + return Result.success + } + + findRoomLogisticsRequest(creep: Creep, args?: FindNewRoomLogisticsRequestArgs) { + const creepMemory = Memory.creeps[creep.name] + if (creepMemory[CreepMemoryKeys.roomLogisticsRequests][0]) { + return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] } - findUpgradePosStrong(creep: Creep): RoomPosition | undefined { - const creepMemory = Memory.creeps[creep.name] - // use our packed coord if we have one - if (creepMemory[CreepMemoryKeys.packedCoord]) { - return unpackCoordAsPos(creepMemory[CreepMemoryKeys.packedCoord], creep.room.name) + if (args) creep.noDelivery = args.noDelivery + else creep.noDelivery = undefined + + const types = this.findRoomLogisticsRequestTypes(creep, args) + if (types === Result.fail) return Result.fail + + let lowestScore = Infinity + let bestRequest: RoomLogisticsRequest | 0 + + for (const type of types) { + for (const requestID in creep.room.roomLogisticsRequests[type]) { + const request = creep.room.roomLogisticsRequests[type][requestID] + + delete request.delivery + /* + // Make a personal amount based on existing amount plus estimated income for distance + + request.personalAmount = + request.amount + + (request.income ? getRange(findObjectWithID(request.targetID).pos, creep.pos) * request.income : 0) + */ + + // Customizable conditions + + if (args) { + if (args.resourceTypes && !args.resourceTypes.has(request.resourceType)) continue + if (args.conditions && !args.conditions(request)) continue } - const upgradePos = creep.room.roomManager.upgradePositions.find( - pos => { + // Default conditions - const packedCoord = packCoord(pos) + if (!this.canAcceptRoomLogisticsRequest(creep, request.type, request.ID)) continue - // Iterate if the pos is used - if (creep.room.roomManager.reservedCoords.get(packedCoord) > ReservedCoordTypes.dying) { + const targetPos = findObjectWithID(request.targetID).pos + const score = request.priority + getRange(targetPos, creep.pos) - return false - } + if (score >= lowestScore) continue + + lowestScore = score + bestRequest = request + } + } + /* + log('FINDING REQ', bestRequest + ', ' + Array.from(types), { position: 1 }) + */ + let creepRequest: CreepLogisticsRequest | 0 - // Otherwise record packedPos in the creep's memory and in usedUpgradeCoords + if (!bestRequest) { + creepRequest = this.createBackupStoringStructuresRoomLogisticsRequest( + creep, + types, + args?.resourceTypes, + ) - creepMemory[CreepMemoryKeys.packedCoord] = packedCoord - creep.room.roomManager.reservedCoords.set(packedCoord, ReservedCoordTypes.important) + if (creepRequest === Result.fail) return Result.fail + } else { + creepRequest = { + [CreepLogisticsRequestKeys.type]: bestRequest.type, + [CreepLogisticsRequestKeys.target]: bestRequest.targetID, + [CreepLogisticsRequestKeys.resourceType]: bestRequest.resourceType, + [CreepLogisticsRequestKeys.amount]: this.findRoomLogisticRequestAmount(creep, bestRequest), + [CreepLogisticsRequestKeys.noReserve]: bestRequest.noReserve, + } - return pos + if (bestRequest.delivery) { + // creep request will preceed the one we've accepted to provide for the delivery + let nextCreepRequest: CreepLogisticsRequest + const storingStructure = findObjectWithID(bestRequest.delivery as Id) + + if (storingStructure) { + nextCreepRequest = { + [CreepLogisticsRequestKeys.type]: RoomLogisticsRequestTypes.withdraw, + [CreepLogisticsRequestKeys.target]: storingStructure.id, + [CreepLogisticsRequestKeys.resourceType]: bestRequest.resourceType, + [CreepLogisticsRequestKeys.amount]: Math.min( + storingStructure.reserveStore[bestRequest.resourceType], + creepRequest[CreepLogisticsRequestKeys.amount], + ), + [CreepLogisticsRequestKeys.noReserve]: bestRequest.noReserve, + [CreepLogisticsRequestKeys.delivery]: true, + } + + storingStructure.reserveStore[nextCreepRequest[CreepLogisticsRequestKeys.resourceType]] -= + nextCreepRequest[CreepLogisticsRequestKeys.amount] + } else { + // The delivery provider is + + const nextRequest = + creep.room.roomLogisticsRequests[RoomLogisticsRequestTypes.withdraw][ + bestRequest.delivery + ] || + creep.room.roomLogisticsRequests[RoomLogisticsRequestTypes.offer][bestRequest.delivery] || + creep.room.roomLogisticsRequests[RoomLogisticsRequestTypes.pickup][bestRequest.delivery] + + nextCreepRequest = { + [CreepLogisticsRequestKeys.type]: nextRequest.type, + [CreepLogisticsRequestKeys.target]: nextRequest.targetID, + [CreepLogisticsRequestKeys.resourceType]: nextRequest.resourceType, + [CreepLogisticsRequestKeys.amount]: Math.min( + creep.nextStore[nextRequest.resourceType] + creep.freeNextStore, + creepRequest[CreepLogisticsRequestKeys.amount], + ), + [CreepLogisticsRequestKeys.noReserve]: creepRequest[CreepLogisticsRequestKeys.noReserve], + [CreepLogisticsRequestKeys.delivery]: true, + } + + // Handle reservations for nextRequest + + if (!creepRequest[CreepLogisticsRequestKeys.noReserve]) { + // delete the parent request if it has no more utility, otherwise, reduce its amount + + if (nextRequest.amount === nextCreepRequest[CreepLogisticsRequestKeys.amount]) { + delete creep.room.roomLogisticsRequests[nextRequest.type][nextRequest.ID] + } else { + nextRequest.amount -= nextCreepRequest[CreepLogisticsRequestKeys.amount] } - ) - return upgradePos + const target = findObjectWithID(nextRequest.targetID) + + // Pickup type + + if (target instanceof Resource) { + target.reserveAmount -= nextCreepRequest[CreepLogisticsRequestKeys.amount] + } else { + // Withdraw or offer type + + target.reserveStore[nextCreepRequest[CreepLogisticsRequestKeys.resourceType]] -= + nextCreepRequest[CreepLogisticsRequestKeys.amount] + } + } + } + + creepMemory[CreepMemoryKeys.roomLogisticsRequests].push(nextCreepRequest) + } + + // delete the parent request if it has no more utility, otherwise, reduce its amount + + if ( + !creepRequest[CreepLogisticsRequestKeys.noReserve] && + bestRequest.amount === creepRequest[CreepLogisticsRequestKeys.amount] + ) { + delete creep.room.roomLogisticsRequests[bestRequest.type][bestRequest.ID] + } else { + bestRequest.amount -= creepRequest[CreepLogisticsRequestKeys.amount] + } } - harvestSource(creep: Creep, source: Source, workParts: number = myCreepUtils.parts(creep).work) { - if (creep.harvest(source) !== OK) { - return Result.fail + + creepMemory[CreepMemoryKeys.roomLogisticsRequests].push(creepRequest) + if (creepRequest[CreepLogisticsRequestKeys.noReserve]) { + return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] + } + + const target = findObjectWithID(creepRequest[CreepLogisticsRequestKeys.target]) + + // Pickup type + + if (target instanceof Resource) { + target.reserveAmount -= creepRequest[CreepLogisticsRequestKeys.amount] + + return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] + } + + if (creepRequest[CreepLogisticsRequestKeys.type] === RoomLogisticsRequestTypes.transfer) { + target.reserveStore[creepRequest[CreepLogisticsRequestKeys.resourceType]] += + creepRequest[CreepLogisticsRequestKeys.amount] + + return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] + } + + // Withdraw or offer type + + target.reserveStore[creepRequest[CreepLogisticsRequestKeys.resourceType]] -= + creepRequest[CreepLogisticsRequestKeys.amount] + + return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] + } + + findRoomLogisticsRequestTypes(creep: Creep, args: FindNewRoomLogisticsRequestArgs) { + if (args && args.types) { + if (args.types.has(RoomLogisticsRequestTypes.transfer) && creep.hasNonEnergyResource()) { + /* if (args && args.noDelivery) return Result.fail */ + + creep.noDelivery = true + return new Set([RoomLogisticsRequestTypes.transfer]) + } + + // Make sure we have the right store values for our types + + if (creep.needsResources()) { + args.types.delete(RoomLogisticsRequestTypes.transfer) + return args.types + } + + args.types.delete(RoomLogisticsRequestTypes.pickup) + args.types.delete(RoomLogisticsRequestTypes.offer) + args.types.delete(RoomLogisticsRequestTypes.withdraw) + return args.types + } + + if (creep.hasNonEnergyResource()) { + if (args && args.noDelivery) return Result.fail + + creep.noDelivery = true + return new Set([RoomLogisticsRequestTypes.transfer]) + } + + if (!creep.needsResources()) return new Set([RoomLogisticsRequestTypes.transfer]) + return new Set([ + RoomLogisticsRequestTypes.withdraw, + RoomLogisticsRequestTypes.pickup, + RoomLogisticsRequestTypes.transfer, + ]) + } + + canAcceptRoomLogisticsRequest(creep: Creep, requestType: RoomLogisticsRequestTypes, requestID: string) { + const request = creep.room.roomLogisticsRequests[requestType][requestID] + const target = findObjectWithID(request.targetID) + + // Pickup type + + if (target instanceof Resource) { + if (request.onlyFull) { + // If the creep has enough space + + /* if (creep.freeNextStore >= target.reserveAmount) return true */ + if (target.reserveAmount >= creep.freeNextStore) return true + return false + } + + return true + } + + if (request.type === RoomLogisticsRequestTypes.transfer) { + // We don't have enough resource and we can deliver + + if (creep.nextStore[request.resourceType] <= 0) { + if (creep.noDelivery) return false + + // There are no practical storing structures to deliver from + if (creep.room.name !== creep.commune.name) return false + + // We don't have space to get any + if (creep.freeNextStore <= 0) return false + /* + // Try to find a sufficient withdraw or offer task + + const types: RoomLogisticsRequestTypes[] = ['withdraw', 'pickup'] + + let lowestScore = Infinity + let bestRequest2 + + for (const type of types) { + for (const request2ID in creep.room.roomLogisticsRequests[type]) { + const request2 = creep.room.roomLogisticsRequests[type][request2ID] + + if (request2.resourceType !== request.resourceType) continue + + const target2Pos = findObjectWithID(request2.targetID).pos + const score = request2.priority + getRange(target2Pos, creep.pos) / 100 + + if (score >= lowestScore) continue + + lowestScore = score + bestRequest2 = request2 + } + } + + if (bestRequest2) { + request.delivery = bestRequest2.ID as unknown as string + return true + } + */ + // We aren't gonna deliver to a storing structure + + if (target instanceof Structure && storingStructureTypesSet.has(target.structureType)) + return false + + let storingStructure + + // If energy, make sure there is enough to fill us to full + + if (request.resourceType === RESOURCE_ENERGY) { + const minAmount = creep.freeNextStore + + storingStructure = creep.commune.communeManager.storingStructures.find( + structure => structure.reserveStore[request.resourceType] >= minAmount, + ) + } else { + const minAmount = Math.min(creep.freeNextStore, request.amount) + + storingStructure = creep.commune.communeManager.storingStructures.find( + structure => structure.reserveStore[request.resourceType] >= minAmount, + ) } - creep.worked = WorkTypes.harvest + if (!storingStructure) return false + + request.delivery = storingStructure.id + return true + } + + if (request.onlyFull) { + // If the creep has enough resource + /* creep.room.visual.text(Math.min(amount, target.store.getCapacity(request.resourceType) / 2).toString(), creep.pos) */ + + // + /* const creepEffectiveCapacity = creep.freeNextStore */ + const creepEffectiveCapacity = + creep.store.getCapacity() - + creep.store.getUsedCapacity() + + creep.nextStore[request.resourceType] + + if ( + creep.nextStore[request.resourceType] >= + Math.min( + creep.nextStore[request.resourceType], + request.amount, + target.store.getCapacity(request.resourceType), + creepEffectiveCapacity, + ) + ) + return true + return false + } + + return true + } + + // Withdraw or offer type + + if (request.onlyFull) { + // If the creep has enough space + + if (target.reserveStore[request.resourceType] >= creep.freeNextStore) return true + return false + } + + return true + } + + +createBackupStoringStructuresRoomLogisticsRequest( + creep: Creep, + types: Set, + resourceTypes: Set, + ) { + if (creep.room.name !== creep.commune.name) return Result.fail + + if (types.has(RoomLogisticsRequestTypes.transfer)) { + const result = this.createBackupStoringStructuresRoomLogisticsRequestTransfer(creep) + if (result !== Result.fail) return result + } + + if (creep.role === 'hauler') return Result.fail + return this.createBackupStoringStructuresRoomLogisticsRequestWithdraw(creep, resourceTypes) + } + + createBackupStoringStructuresRoomLogisticsRequestTransfer(creep: Creep) { + const storingStructures = creep.commune.communeManager.storingStructures + if (!storingStructures.length) return Result.fail + + const nextStore = creep.nextStore + let resourceType: ResourceConstant + + for (const key in nextStore) { + if (key === RESOURCE_ENERGY) continue + if (nextStore[key as ResourceConstant] <= 0) continue - // Find the presumed energy harvested this tick - const energyHarvested = Math.min(workParts * HARVEST_POWER, source.energy) - creep.nextStore.energy += energyHarvested - // Record the harvest in stats - statsManager.updateStat(creep.room.name, RoomStatsKeys.EnergyInputHarvest, energyHarvested) + resourceType = key as ResourceConstant + break + } + + if (!resourceType) return Result.fail + + const storingStructure = storingStructures.find( + structure => structure.freeReserveStore >= nextStore[resourceType], + ) + if (!storingStructure) return Result.fail + /* creep.room.visual.text((creep.nextStore[resourceType]).toString(), creep.pos.x, creep.pos.y, { color: customColors.red }) */ + return { + [CreepLogisticsRequestKeys.type]: RoomLogisticsRequestTypes.transfer, + [CreepLogisticsRequestKeys.target]: storingStructure.id, + [CreepLogisticsRequestKeys.resourceType]: resourceType, + [CreepLogisticsRequestKeys.amount]: nextStore[resourceType], + } + } + + createBackupStoringStructuresRoomLogisticsRequestWithdraw( + creep: Creep, + resourceTypes: Set = new Set([RESOURCE_ENERGY]), + ) { + const storingStructures = creep.commune.communeManager.storingStructures + if (!storingStructures.length) return Result.fail - return Result.success + let resourceType: ResourceConstant + let storingStructure: AnyStoreStructure + + for (resourceType of resourceTypes) { + storingStructure = storingStructures.find( + structure => structure.reserveStore[resourceType] >= creep.freeNextStore, + ) + if (storingStructure) break } + + if (!storingStructure) return Result.fail + + /* creep.room.visual.text((creep.nextStore[resourceType]).toString(), creep.pos.x, creep.pos.y, { color: customColors.red }) */ + return { + [CreepLogisticsRequestKeys.type]: RoomLogisticsRequestTypes.withdraw, + [CreepLogisticsRequestKeys.target]: storingStructure.id, + [CreepLogisticsRequestKeys.resourceType]: resourceType, + [CreepLogisticsRequestKeys.amount]: creep.freeNextStore, + } + } + + findRoomLogisticRequestAmount(creep: Creep, request: RoomLogisticsRequest) { + const target = findObjectWithID(request.targetID) + + // Pickup type + + if (target instanceof Resource) { + return Math.min(creep.freeNextStore, request.amount) + } + + if (request.type === RoomLogisticsRequestTypes.transfer) { + if (request.delivery) { + // Take extra energy in case its needed + + /* if (request.resourceType === RESOURCE_ENERGY) { + return creep.nextStore[request.resourceType] + creep.freeNextStore + } */ + + return Math.min(request.amount, creep.nextStore[request.resourceType] + creep.freeNextStore) + } + return Math.min(creep.nextStore[request.resourceType], request.amount) + } + + // Withdraw or offer type + + return Math.min(creep.freeNextStore, request.amount) + } + + findNewRampartRepairTarget(creep: Creep) { + const ramparts = creep.room.roomManager.enemyAttackers.length + ? creep.room.communeManager.defensiveRamparts + : communeUtils.getRampartRepairTargets(creep.room) + + const [score, bestTarget] = findWithLowestScore(ramparts, structure => { + if (structure.nextHits / structure.hitsMax > 0.9) return false + + // Score by range and hits + return getRange(creep.pos, structure.pos) + structure.nextHits / 1000 + }) + + if (!bestTarget) return false + + Memory.creeps[creep.name][CreepMemoryKeys.structureTarget] = bestTarget.id + return bestTarget + } + + findNewRepairTarget(creep: Creep) { + const enemyAttackers = !!creep.room.roomManager.enemyAttackers.length + let repairThreshold = enemyAttackers ? 0.1 : 0.3 + + let lowestScore = Infinity + let bestTarget + + const structures = communeUtils.getGeneralRepairStructures(creep.room) + for (const structure of structures) { + // If above 30% of max hits + + if (structure.nextHits / structure.hitsMax > repairThreshold) continue + + const score = getRange(creep.pos, structure.pos) + (structure.nextHits / structure.hitsMax) * 20 + if (score >= lowestScore) continue + + lowestScore = score + bestTarget = structure + } + + if (!bestTarget) return false + + creep.memory[CreepMemoryKeys.structureTarget] = bestTarget.id + return bestTarget + } + + findRepairTarget(creep: Creep) { + if (creep.memory[CreepMemoryKeys.structureTarget]) { + const repairTarget = findObjectWithID(creep.memory[CreepMemoryKeys.structureTarget]) + if (repairTarget) return repairTarget + } + + return this.findNewRepairTarget(creep) || this.findNewRampartRepairTarget(creep) + } + } export const creepUtils = new CreepUtils() diff --git a/src/room/creeps/notMyCreepUtils.ts b/src/room/creeps/notMyCreepUtils.ts new file mode 100644 index 000000000..15fa818d9 --- /dev/null +++ b/src/room/creeps/notMyCreepUtils.ts @@ -0,0 +1,5 @@ +export class NotMyCreepUtils { + +} + +export const notMyCreepUtils = new NotMyCreepUtils() diff --git a/src/room/creeps/roleManager.new/commune/hauler.ts b/src/room/creeps/roleManager.new/commune/hauler.ts index 396960c1f..fc98d308a 100644 --- a/src/room/creeps/roleManager.new/commune/hauler.ts +++ b/src/room/creeps/roleManager.new/commune/hauler.ts @@ -1,3 +1,4 @@ +import { creepProcs } from "room/creeps/creepProcs" import { DefaultRoleManager } from "room/creeps/defaultRoleManager" class HaulerManager extends DefaultRoleManager { @@ -8,8 +9,8 @@ class HaulerManager extends DefaultRoleManager { run(creep: Creep) { - creep.passiveRenew() - creep.runRoomLogisticsRequestsAdvanced() + creepProcs.passiveRenew(creep) + creepProcs.runRoomLogisticsRequestsAdvanced(creep) } } diff --git a/src/room/creeps/roleManagers/commune/fastFiller.ts b/src/room/creeps/roleManagers/commune/fastFiller.ts index a9886235a..1e9d04687 100644 --- a/src/room/creeps/roleManagers/commune/fastFiller.ts +++ b/src/room/creeps/roleManagers/commune/fastFiller.ts @@ -2,6 +2,7 @@ import { CreepMemoryKeys, ReservedCoordTypes } from 'international/constants' import { findClosestPos, getRangeXY, getRange } from 'utils/utils' import { packCoord, packPos, unpackCoord, unpackCoordAsPos, unpackPos } from 'other/codec' import { structureUtils } from 'room/structureUtils' +import { creepProcs } from 'room/creeps/creepProcs' export class FastFiller extends Creep { update() { @@ -228,7 +229,7 @@ export class FastFiller extends Creep { if (creep.fillFastFiller()) continue - creep.passiveRenew() + creepProcs.passiveRenew(creep) /* creep.message = ('🚬') */ } diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index 015827045..f94c1dd34 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -14,6 +14,7 @@ import { } from 'international/constants' import { statsManager } from 'international/statsManager' import { packCoord, reversePosList, unpackCoord, unpackPosAt } from 'other/codec' +import { creepProcs } from 'room/creeps/creepProcs' import { myCreepUtils } from 'room/creeps/myCreepUtils' import { structureUtils } from 'room/structureUtils' import { @@ -59,7 +60,7 @@ export class Hauler extends Creep { return true } - passiveRenew() { + passiveRenew?() { const { room } = this @@ -68,11 +69,12 @@ export class Hauler extends Creep { if (this.body.length > 10) return if (!room.myCreepsByRole.fastFiller.length) return // only renew if we are the same as the desired hauler cost - if (this.cost !== Memory.rooms[room.name][RoomMemoryKeys.minHaulerCost]) return + const creepCost = Memory.creeps[this.name][CreepMemoryKeys.cost] + if (creepCost !== Memory.rooms[room.name][RoomMemoryKeys.minHaulerCost]) return // If the creep's age is less than the benefit from renewing, inform false - const energyCost = Math.ceil(this.findCost() / 2.5 / this.body.length) + const energyCost = Math.ceil(creepCost / 2.5 / this.body.length) if (CREEP_LIFE_TIME - this.ticksToLive < Math.floor(600 / this.body.length)) return // Get the room's spawns, stopping if there are none @@ -351,18 +353,18 @@ export class Hauler extends Creep { if (this.room.name !== this.commune.name) { // Fulfill requests near the hauler - this.runRoomLogisticsRequestsAdvanced({ - types: new Set([ - RoomLogisticsRequestTypes.pickup, - RoomLogisticsRequestTypes.withdraw, - ]), - resourceTypes: new Set([RESOURCE_ENERGY]), - conditions: request => { - // If the target is near the creep + creepProcs.runRoomLogisticsRequestAdvanced(this, { + types: new Set([ + RoomLogisticsRequestTypes.pickup, + RoomLogisticsRequestTypes.withdraw, + ]), + resourceTypes: new Set([RESOURCE_ENERGY]), + conditions: request => { + // If the target is near the creep - const targetPos = findObjectWithID(request.targetID).pos - return getRange(targetPos, this.pos) <= 0 - }, + const targetPos = findObjectWithID(request.targetID).pos + return getRange(targetPos, this.pos) <= 0 + }, }) if (!this.needsResources()) { @@ -464,60 +466,55 @@ export class Hauler extends Creep { const isBySourceHarvestPos = getRange(this.pos, sourceHarvestPos) <= 1 if (isBySourceHarvestPos || creepMemory[CreepMemoryKeys.roomLogisticsRequests].length > 0) { - const freeNextStoreInitial = this.freeNextStore - - this.runRoomLogisticsRequestsAdvanced({ - types: new Set([ - RoomLogisticsRequestTypes.pickup, - RoomLogisticsRequestTypes.withdraw, - ]), - resourceTypes: new Set([RESOURCE_ENERGY]), - conditions: request => { - // If the target is near the creep or source + const freeNextStoreInitial = this.freeNextStore - const targetPos = findObjectWithID(request.targetID).pos - return ( - getRange(targetPos, this.pos) <= 1 || - getRange( - targetPos, - this.room.roomManager.remoteSources[ - creepMemory[CreepMemoryKeys.sourceIndex] - ].pos, - ) <= 1 - ) - }, - }) - - // remove fulfilled reserved source credit from source credit - - // Should be a negative number, as we should have more used store than before - const freeNextStoreDifference = this.freeNextStore - freeNextStoreInitial - if (freeNextStoreDifference !== 0) { - Memory.rooms[this.room.name][RoomMemoryKeys.remoteSourceCredit][ - creepMemory[CreepMemoryKeys.sourceIndex] - ] += freeNextStoreDifference - Memory.rooms[this.room.name][RoomMemoryKeys.remoteSourceCreditReservation][ - creepMemory[CreepMemoryKeys.sourceIndex] - ] += freeNextStoreDifference - } + creepProcs.runRoomLogisticsRequestAdvanced(this, { + types: new Set([RoomLogisticsRequestTypes.pickup, RoomLogisticsRequestTypes.withdraw]), + resourceTypes: new Set([RESOURCE_ENERGY]), + conditions: request => { + // If the target is near the creep or source - return !this.needsResources() + const targetPos = findObjectWithID(request.targetID).pos + return ( + getRange(targetPos, this.pos) <= 1 || + getRange( + targetPos, + this.room.roomManager.remoteSources[creepMemory[CreepMemoryKeys.sourceIndex]].pos, + ) <= 1 + ) + }, + }) + + // remove fulfilled reserved source credit from source credit + + // Should be a negative number, as we should have more used store than before + const freeNextStoreDifference = this.freeNextStore - freeNextStoreInitial + if (freeNextStoreDifference !== 0) { + Memory.rooms[this.room.name][RoomMemoryKeys.remoteSourceCredit][ + creepMemory[CreepMemoryKeys.sourceIndex] + ] += freeNextStoreDifference + Memory.rooms[this.room.name][RoomMemoryKeys.remoteSourceCreditReservation][ + creepMemory[CreepMemoryKeys.sourceIndex] + ] += freeNextStoreDifference + } + + return !this.needsResources() } // Fulfill requests near the hauler - this.runRoomLogisticsRequestsAdvanced({ - types: new Set([ - RoomLogisticsRequestTypes.pickup, - RoomLogisticsRequestTypes.withdraw, - ]), - resourceTypes: new Set([RESOURCE_ENERGY]), - conditions: request => { - // If the target is near the creep - - const targetPos = findObjectWithID(request.targetID).pos - return getRange(targetPos, this.pos) <= 1 - }, + creepProcs.runRoomLogisticsRequestAdvanced(this, { + types: new Set([ + RoomLogisticsRequestTypes.pickup, + RoomLogisticsRequestTypes.withdraw, + ]), + resourceTypes: new Set([RESOURCE_ENERGY]), + conditions: request => { + // If the target is near the creep + + const targetPos = findObjectWithID(request.targetID).pos + return getRange(targetPos, this.pos) <= 1 + }, }) if (!this.needsResources()) return true @@ -561,18 +558,18 @@ export class Hauler extends Creep { if (commune.communeManager.remoteResourcePathType === RoomMemoryKeys.remoteSourceHubPaths) { if (this.room.name === commune.name) { - this.passiveRenew() + creepProcs.passiveRenew(this) - this.runRoomLogisticsRequestAdvanced({ - types: new Set([RoomLogisticsRequestTypes.transfer]), - resourceTypes: new Set([RESOURCE_ENERGY]), - noDelivery: true, - conditions: request => { - // If the target is near the creep + creepProcs.runRoomLogisticsRequestAdvanced(this, { + types: new Set([RoomLogisticsRequestTypes.transfer]), + resourceTypes: new Set([RESOURCE_ENERGY]), + noDelivery: true, + conditions: request => { + // If the target is near the creep - const targetPos = findObjectWithID(request.targetID).pos - return getRange(targetPos, this.pos) <= 1 - }, + const targetPos = findObjectWithID(request.targetID).pos + return getRange(targetPos, this.pos) <= 1 + }, }) // If we tried to respond but weren't able to do so in a single tick, then we should wait to try again next tick @@ -683,11 +680,11 @@ export class Hauler extends Creep { } if (this.room.name === commune.name) { - this.passiveRenew() + creepProcs.passiveRenew(this) - this.runRoomLogisticsRequestsAdvanced({ - types: new Set([RoomLogisticsRequestTypes.transfer]), - resourceTypes: new Set([RESOURCE_ENERGY]), + creepProcs.runRoomLogisticsRequestAdvanced(this, { + types: new Set([RoomLogisticsRequestTypes.transfer]), + resourceTypes: new Set([RESOURCE_ENERGY]), }) // We haven't emptied ourselves yet @@ -1041,11 +1038,11 @@ export class Hauler extends Creep { } runCommuneLogistics?() { - this.passiveRenew() + creepProcs.passiveRenew(this) - if (this.runRoomLogisticsRequestsAdvanced() === Result.action) { - this.relay() - return Result.action + if (creepProcs.runRoomLogisticsRequestAdvanced(this) === Result.action) { + this.relay() + return Result.action } return Result.success diff --git a/src/room/creeps/roleManagers/commune/hubHauler.ts b/src/room/creeps/roleManagers/commune/hubHauler.ts index 891ad74f6..7d5eab918 100644 --- a/src/room/creeps/roleManagers/commune/hubHauler.ts +++ b/src/room/creeps/roleManagers/commune/hubHauler.ts @@ -9,6 +9,7 @@ import { powerSpawnRefillThreshold, } from 'international/constants' import { packCoord, unpackCoord } from 'other/codec' +import { creepProcs } from 'room/creeps/creepProcs' import { findObjectWithID, getRange, unpackNumAsPos } from 'utils/utils' //import { HubHauler } from '../../creepClasses' @@ -64,40 +65,40 @@ export class HubHauler extends Creep { * @returns If a reservation was made or not */ createCreepRoomLogisticsRequests?(): void { - if (this.memory[CreepMemoryKeys.roomLogisticsRequests].length) return + if (this.memory[CreepMemoryKeys.roomLogisticsRequests].length) return - const { room } = this - const { storage } = room - const { terminal } = room + const { room } = this + const { storage } = room + const { terminal } = room - if (!storage && !terminal) return + if (!storage && !terminal) return - // Whenever we have a reservation, we should have a matching withdraw and transfer, so we should never - // get here with anything. If we do, it'll never be gotten rid of, so just transfer anything we have to the store - /* + // Whenever we have a reservation, we should have a matching withdraw and transfer, so we should never + // get here with anything. If we do, it'll never be gotten rid of, so just transfer anything we have to the store + /* if (this.store.getFreeCapacity() === 0) { const resource = Object.keys(this.store)[0] as ResourceConstant - this.createCreepRoomLogisticsRequest('transfer', (storage || terminal).id, this.store[resource], resource) + creepProcs.createCreepRoomLogisticsRequest(this, 'transfer', (storage || terminal).id, this.store[resource], resource) return } */ - //Factory-overfill is at the top of this list because it can be feeding energy to the rest of the base - // by breaking down batteries... this is the only case it should have more then 10k energy in the factory. - if (this.factoryEnergyOverfillTransfer()) return + //Factory-overfill is at the top of this list because it can be feeding energy to the rest of the base + // by breaking down batteries... this is the only case it should have more then 10k energy in the factory. + if (this.factoryEnergyOverfillTransfer()) return - //Fill the Link before the storage/terminal because the storage transfers can take a long time, - // the link transfers are just 2 or 4 ticks long. + //Fill the Link before the storage/terminal because the storage transfers can take a long time, + // the link transfers are just 2 or 4 ticks long. - if (this.reserveHubLinkTransfer()) return - if (this.reserveHubLinkWithdraw()) return + if (this.reserveHubLinkTransfer()) return + if (this.reserveHubLinkWithdraw()) return - if (this.reserveStorageTransfer()) return - if (this.reserveTerminalTransfer()) return + if (this.reserveStorageTransfer()) return + if (this.reserveTerminalTransfer()) return - if (this.reserveFactoryWithdraw()) return - if (this.reserveFactoryTransfer()) return + if (this.reserveFactoryWithdraw()) return + if (this.reserveFactoryTransfer()) return - /* if (this.reservePowerSpawnTransferPower()) return + /* if (this.reservePowerSpawnTransferPower()) return if (this.reservePowerSpawnTransferEnergy()) return */ } @@ -109,17 +110,19 @@ export class HubHauler extends Creep { if (!storage || !factory) return false if (factory.store.energy > 3000 && storage.store.getFreeCapacity() > 3000) { - this.createCreepRoomLogisticsRequest( - RoomLogisticsRequestTypes.withdraw, - factory.id, - 3000, - RESOURCE_ENERGY, + creepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.withdraw, + factory.id, + 3000, + RESOURCE_ENERGY, ) - this.createCreepRoomLogisticsRequest( - RoomLogisticsRequestTypes.transfer, - storage.id, - 3000, - RESOURCE_ENERGY, + creepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.transfer, + storage.id, + 3000, + RESOURCE_ENERGY, ) return true } @@ -161,17 +164,19 @@ export class HubHauler extends Creep { let amount = this.store.getFreeCapacity() - this.createCreepRoomLogisticsRequest( - RoomLogisticsRequestTypes.withdraw, - terminal.id, - amount, - resourceType, + creepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.withdraw, + terminal.id, + amount, + resourceType, ) - this.createCreepRoomLogisticsRequest( - RoomLogisticsRequestTypes.transfer, - storage.id, - amount + this.store[resourceType], - resourceType, + creepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.transfer, + storage.id, + amount + this.store[resourceType], + resourceType, ) return true } @@ -211,17 +216,19 @@ export class HubHauler extends Creep { let amount = this.store.getFreeCapacity() - this.createCreepRoomLogisticsRequest( - RoomLogisticsRequestTypes.withdraw, - storage.id, - amount, - resourceType, + creepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.withdraw, + storage.id, + amount, + resourceType, ) - this.createCreepRoomLogisticsRequest( - RoomLogisticsRequestTypes.transfer, - terminal.id, - amount + this.store[resourceType], - resourceType, + creepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.transfer, + terminal.id, + amount + this.store[resourceType], + resourceType, ) return true } @@ -278,11 +285,17 @@ export class HubHauler extends Creep { let amount = Math.min(this.freeNextStore, hubLink.store.getUsedCapacity(RESOURCE_ENERGY)) - this.createCreepRoomLogisticsRequest(RoomLogisticsRequestTypes.withdraw, hubLink.id, amount) - this.createCreepRoomLogisticsRequest( - RoomLogisticsRequestTypes.transfer, - target.id, - amount + this.store.energy, + creepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.withdraw, + hubLink.id, + amount, + ) + creepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.transfer, + target.id, + amount + this.store.energy, ) return true } @@ -329,18 +342,20 @@ export class HubHauler extends Creep { this.message += 'RHLT' - this.createCreepRoomLogisticsRequest( - RoomLogisticsRequestTypes.withdraw, - provider.id, - amount, + creepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.withdraw, + provider.id, + amount, ) - this.createCreepRoomLogisticsRequest( - RoomLogisticsRequestTypes.transfer, - hubLink.id, - Math.min( - this.freeNextStore + this.store.getUsedCapacity(RESOURCE_ENERGY), - hubLink.store.getFreeCapacity(RESOURCE_ENERGY), - ), + creepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.transfer, + hubLink.id, + Math.min( + this.freeNextStore + this.store.getUsedCapacity(RESOURCE_ENERGY), + hubLink.store.getFreeCapacity(RESOURCE_ENERGY), + ), ) return true } @@ -396,32 +411,26 @@ export class HubHauler extends Creep { ], ) - this.createCreepRoomLogisticsRequest( - RoomLogisticsRequestTypes.withdraw, - factory.id, - amount, - resource as - | CommodityConstant - | MineralConstant - | RESOURCE_GHODIUM - | RESOURCE_ENERGY, + creepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.withdraw, + factory.id, + amount, + resource as CommodityConstant | MineralConstant | RESOURCE_GHODIUM | RESOURCE_ENERGY, ) - this.createCreepRoomLogisticsRequest( - RoomLogisticsRequestTypes.transfer, - target.id, - amount + - this.store[ - resource as - | CommodityConstant - | MineralConstant - | RESOURCE_GHODIUM - | RESOURCE_ENERGY - ], - resource as + creepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.transfer, + target.id, + amount + + this.store[ + resource as | CommodityConstant | MineralConstant | RESOURCE_GHODIUM - | RESOURCE_ENERGY, + | RESOURCE_ENERGY + ], + resource as CommodityConstant | MineralConstant | RESOURCE_GHODIUM | RESOURCE_ENERGY, ) return true } @@ -441,17 +450,19 @@ export class HubHauler extends Creep { let amount = this.freeNextStore - this.createCreepRoomLogisticsRequest( - RoomLogisticsRequestTypes.withdraw, - factory.id, - amount, - RESOURCE_BATTERY, + creepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.withdraw, + factory.id, + amount, + RESOURCE_BATTERY, ) - this.createCreepRoomLogisticsRequest( - RoomLogisticsRequestTypes.transfer, - target.id, - amount + this.store.battery, - RESOURCE_BATTERY, + creepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.transfer, + target.id, + amount + this.store.battery, + RESOURCE_BATTERY, ) return true } @@ -503,17 +514,18 @@ export class HubHauler extends Creep { ) continue - this.createCreepRoomLogisticsRequest( + creepProcs.createCreepRoomLogisticsRequest(this, RoomLogisticsRequestTypes.withdraw, provider.id, amount, resource, ) - this.createCreepRoomLogisticsRequest( - RoomLogisticsRequestTypes.transfer, - factory.id, - amount + this.store[resource], - resource, + creepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.transfer, + factory.id, + amount + this.store[resource], + resource, ) return true } @@ -537,8 +549,8 @@ export class HubHauler extends Creep { let amount = this.freeNextStore - this.createCreepRoomLogisticsRequest('withdraw', provider.id, amount) - this.createCreepRoomLogisticsRequest('transfer', factory.id, amount + this.store.energy) + creepProcs.createCreepRoomLogisticsRequest(this, 'withdraw', provider.id, amount) + creepProcs.createCreepRoomLogisticsRequest(this, 'transfer', factory.id, amount + this.store.energy) return true */ } @@ -575,20 +587,22 @@ export class HubHauler extends Creep { this.message += 'RPSTP' - this.createCreepRoomLogisticsRequest( - RoomLogisticsRequestTypes.withdraw, - provider.id, - amount, - resource, + creepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.withdraw, + provider.id, + amount, + resource, ) - this.createCreepRoomLogisticsRequest( - RoomLogisticsRequestTypes.transfer, - powerSpawn.id, - Math.min( - this.freeNextStore + this.store[resource], - powerSpawn.freeSpecificStore(resource), - ), - resource, + creepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.transfer, + powerSpawn.id, + Math.min( + this.freeNextStore + this.store[resource], + powerSpawn.freeSpecificStore(resource), + ), + resource, ) return true } @@ -626,20 +640,22 @@ export class HubHauler extends Creep { this.message += 'RPSTE' - this.createCreepRoomLogisticsRequest( - RoomLogisticsRequestTypes.withdraw, - provider.id, - amount, - resource, + creepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.withdraw, + provider.id, + amount, + resource, ) - this.createCreepRoomLogisticsRequest( - RoomLogisticsRequestTypes.transfer, - powerSpawn.id, - Math.min( - this.freeNextStore + this.store[resource], - powerSpawn.freeSpecificStore(resource), - ), - resource, + creepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.transfer, + powerSpawn.id, + Math.min( + this.freeNextStore + this.store[resource], + powerSpawn.freeSpecificStore(resource), + ), + resource, ) return true } @@ -672,7 +688,7 @@ export class HubHauler extends Creep { continue } */ - if (!creep.runRoomLogisticsRequests()) continue + if (!creepProcs.runRoomLogisticsRequests(creep)) continue creep.message += '🚬' } diff --git a/src/room/creeps/roleManagers/commune/sourceHarvester.ts b/src/room/creeps/roleManagers/commune/sourceHarvester.ts index 6677ea451..ca79f206a 100644 --- a/src/room/creeps/roleManagers/commune/sourceHarvester.ts +++ b/src/room/creeps/roleManagers/commune/sourceHarvester.ts @@ -21,6 +21,7 @@ import { Hauler } from './hauler' import { creepUtils } from 'room/creeps/creepUtils' import { myCreepUtils } from 'room/creeps/myCreepUtils' import { structureUtils } from 'room/structureUtils' +import { creepProcs } from 'room/creeps/creepProcs' export class SourceHarvester extends Creep { constructor(creepID: Id) { @@ -191,16 +192,16 @@ export class SourceHarvester extends Creep { if (this.nextStore.energy < myCreepUtils.parts(this).work) { if (this.movedResource) return false - const result = this.runRoomLogisticsRequestAdvanced({ - resourceTypes: new Set([RESOURCE_ENERGY]), - types: new Set([ - RoomLogisticsRequestTypes.withdraw, - RoomLogisticsRequestTypes.pickup, - RoomLogisticsRequestTypes.offer, - ]), - conditions: request => { - getRange(findObjectWithID(request.targetID).pos, this.pos) <= 1 - }, + const result = creepProcs.runRoomLogisticsRequestAdvanced(this, { + resourceTypes: new Set([RESOURCE_ENERGY]), + types: new Set([ + RoomLogisticsRequestTypes.withdraw, + RoomLogisticsRequestTypes.pickup, + RoomLogisticsRequestTypes.offer, + ]), + conditions: request => { + getRange(findObjectWithID(request.targetID).pos, this.pos) <= 1 + }, }) if (result !== Result.success) return false } @@ -226,16 +227,16 @@ export class SourceHarvester extends Creep { if (this.nextStore.energy < workPartCount) { if (this.movedResource) return false - const result = this.runRoomLogisticsRequestAdvanced({ - resourceTypes: new Set([RESOURCE_ENERGY]), - types: new Set([ - RoomLogisticsRequestTypes.withdraw, - RoomLogisticsRequestTypes.pickup, - RoomLogisticsRequestTypes.offer, - ]), - conditions: request => { - getRange(findObjectWithID(request.targetID).pos, this.pos) <= 1 - }, + const result = creepProcs.runRoomLogisticsRequestAdvanced(this, { + resourceTypes: new Set([RESOURCE_ENERGY]), + types: new Set([ + RoomLogisticsRequestTypes.withdraw, + RoomLogisticsRequestTypes.pickup, + RoomLogisticsRequestTypes.offer, + ]), + conditions: request => { + getRange(findObjectWithID(request.targetID).pos, this.pos) <= 1 + }, }) if (result !== Result.success) return false } diff --git a/src/room/creeps/roleManagers/international/allyVanguard.ts b/src/room/creeps/roleManagers/international/allyVanguard.ts index 1486ab85b..d99030e32 100644 --- a/src/room/creeps/roleManagers/international/allyVanguard.ts +++ b/src/room/creeps/roleManagers/international/allyVanguard.ts @@ -10,6 +10,7 @@ import { findObjectWithID, getRangeXY, getRange } from 'utils/utils' import { unpackCoord } from 'other/codec' import { creepUtils } from 'room/creeps/creepUtils' import { myCreepUtils } from 'room/creeps/myCreepUtils' +import { creepProcs } from 'room/creeps/creepProcs' export class AllyVanguard extends Creep { update() { @@ -104,11 +105,11 @@ export class AllyVanguard extends Creep { if (this.room.controller.owner) return false if ( - this.runRoomLogisticsRequestsAdvanced({ - resourceTypes: new Set([RESOURCE_ENERGY]), - }) === Result.success + creepProcs.runRoomLogisticsRequestAdvanced(this, { + resourceTypes: new Set([RESOURCE_ENERGY]), + }) === Result.success ) - return true + return true if (!this.needsResources()) return true diff --git a/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts b/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts index e6650f9af..ab8ed4a8d 100644 --- a/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts +++ b/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts @@ -22,6 +22,7 @@ import { packCoord, reversePosList, unpackPosAt } from 'other/codec' import { indexOf } from 'lodash' import { creepUtils } from 'room/creeps/creepUtils' import { myCreepUtils } from 'room/creeps/myCreepUtils' +import { creepProcs } from 'room/creeps/creepProcs' export class RemoteHarvester extends Creep { constructor(creepID: Id) { @@ -329,7 +330,7 @@ export class RemoteHarvester extends Creep { if (this.nextStore.energy >= myCreepUtils.parts(this).work) return Result.success if (this.movedResource) return Result.fail - return this.runRoomLogisticsRequestAdvanced({ + return creepProcs.runRoomLogisticsRequestAdvanced(this, { resourceTypes: new Set([RESOURCE_ENERGY]), types: new Set([ RoomLogisticsRequestTypes.withdraw, diff --git a/src/settingsDefault.ts b/src/settingsDefault.ts index 7d61fd59e..bb5857a1b 100644 --- a/src/settingsDefault.ts +++ b/src/settingsDefault.ts @@ -4,7 +4,7 @@ import { Settings } from 'types/settings' * Default global.settings. DO NOT MODIFY for personal use; instead, include your preferences in global.settings.ts */ export const defaultSettings: Settings = { - breakingVersion: 125, + breakingVersion: 126, roomVisuals: false, mapVisuals: false, allies: ['MarvinTMB'], diff --git a/src/types.d.ts b/src/types.d.ts index 1900d54e7..0b29a1597 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -754,19 +754,6 @@ declare global { */ advancedBuildAllyCSite(): boolean - /** - * - */ - findNewRampartRepairTarget(): StructureRampart | false - /** - * - */ - findNewRepairTarget(): Structure | false - /** - * - */ - findRepairTarget(): Structure | false - /** * Find a source index when not necessarily in a commune or remote */ @@ -827,8 +814,6 @@ declare global { advancedReserveController(): boolean - findCost(): number - passiveHeal(): boolean /** @@ -963,53 +948,10 @@ declare global { // Creep Functions - activeRenew(): void - - passiveRenew(): void - findBulzodeTargets(goalCoord: RoomPosition): Id[] findQuadBulldozeTargets(goalCoord: RoomPosition): Id[] - manageSpawning(spawn: StructureSpawn): void - - findRoomLogisticsRequest(args?: FindNewRoomLogisticsRequestArgs): CreepLogisticsRequest | 0 - findRoomLogisticsRequestTypes( - args?: FindNewRoomLogisticsRequestArgs, - ): Set | Result.fail - canAcceptRoomLogisticsRequest( - requestType: RoomLogisticsRequestTypes, - requestID: string, - ): boolean - createBackupStoringStructuresRoomLogisticsRequest( - types?: Set, - resourceTypes?: Set, - ): CreepLogisticsRequest | 0 - createBackupStoringStructuresRoomLogisticsRequestTransfer(): CreepLogisticsRequest | 0 - createBackupStoringStructuresRoomLogisticsRequestWithdraw( - resourceTypes?: Set, - ): CreepLogisticsRequest | 0 - findRoomLogisticRequestAmount(request: RoomLogisticsRequest): number - - runRoomLogisticsRequestAdvanced(args?: FindNewRoomLogisticsRequestArgs): Result - runRoomLogisticsRequestsAdvanced(args?: FindNewRoomLogisticsRequestArgs): Result - - runRoomLogisticsRequest(): Result - runRoomLogisticsRequests(): boolean - - findCreepRoomLogisticsRequestAmount( - type: RoomLogisticsRequestTypes, - targetID: Id, - amount: number, - resourceType: ResourceConstant, - ): number - createCreepRoomLogisticsRequest( - type: RoomLogisticsRequestTypes, - targetID: Id, - amount: number, - resourceType?: ResourceConstant, - ): number - // Creep Getters _nameData: string[] @@ -1021,23 +963,13 @@ declare global { */ readonly role: CreepRoles - _cost: number - /** - * The amount of energy required to spawn the creep - */ - readonly cost: number - _commune: Room | undefined /** * The name of the room the creep is from */ readonly commune: Room | undefined - _defaultParts: number - readonly defaultParts: number - _customID: number - readonly customID: number _strength: number /** @@ -1379,6 +1311,8 @@ declare global { // The name of the trader and tick for the previos relay action [CreepMemoryKeys.previousRelayer]: [string, number] [CreepMemoryKeys.stationary]: boolean + [CreepMemoryKeys.defaultParts]: number + [CreepMemoryKeys.cost]: number } interface PowerCreepMemory extends CreepMemory { From 96c9bbda928130c46c6c63eaa594eaa262c84823 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sun, 14 Jan 2024 01:02:07 -0800 Subject: [PATCH 081/190] creep name fixes --- src/international/creepOrganizer.ts | 2 ++ src/main.ts | 2 +- src/room/creeps/creepAdditions.ts | 2 +- src/room/creeps/creepData.ts | 13 +++++++++---- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/international/creepOrganizer.ts b/src/international/creepOrganizer.ts index 9bbaf7aa8..bf6d0e3a2 100644 --- a/src/international/creepOrganizer.ts +++ b/src/international/creepOrganizer.ts @@ -38,6 +38,8 @@ export class CreepOrganizer { collectiveManager.creepCount += 1 + creepDataManager.initCreep(creepName) + // Get the creep's role const { role } = creep diff --git a/src/main.ts b/src/main.ts index 4cdce1c15..2de5a786c 100644 --- a/src/main.ts +++ b/src/main.ts @@ -71,8 +71,8 @@ export function originalLoop() { if (global.userScript) global.userScript.run() playerManager.run() roomsManager.initRun() - creepOrganizer.run() creepDataManager.updateCreeps() + creepOrganizer.run() powerCreepOrganizer.run() roomPruningManager.run() diff --git a/src/room/creeps/creepAdditions.ts b/src/room/creeps/creepAdditions.ts index 096821f75..5c2dbf6d4 100644 --- a/src/room/creeps/creepAdditions.ts +++ b/src/room/creeps/creepAdditions.ts @@ -32,7 +32,7 @@ Object.defineProperties(Creep.prototype, { get() { if (this._commune) return this._commune - return (this._commune = Game.rooms[this.nameData[2]]) + return (this._commune = Game.rooms[this.nameData[1]]) }, }, strength: { diff --git a/src/room/creeps/creepData.ts b/src/room/creeps/creepData.ts index 87609f600..469418eb1 100644 --- a/src/room/creeps/creepData.ts +++ b/src/room/creeps/creepData.ts @@ -24,17 +24,22 @@ export interface CreepData { export class CreepDataManager { data: { [creepName: string]: Partial } = {} + initCreep(creepName: string) { + this.data[creepName] ??= {} + } + updateCreeps() { - if (utils.isTickInterval(15)) { - for (const creepName in Game.creeps) { - this.updateCreep(creepName) - } + for (const creepName in this.data) { + this.updateCreep(creepName) } } private updateCreep(creepName: string) { const data = this.data[creepName] /* delete . */ + + if (utils.isTickInterval(15)) { + } } } From 024d6c61643806c656c78212ee4fef008f760300 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sun, 14 Jan 2024 13:48:55 -0800 Subject: [PATCH 082/190] power creep killing on hard migration --- src/international/commands.ts | 13 +++++++++++++ src/international/migration.ts | 2 +- src/room/commune/spawning/spawnRequests.ts | 5 +---- src/types.d.ts | 2 ++ 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/international/commands.ts b/src/international/commands.ts index 36b87edea..22ec80380 100644 --- a/src/international/commands.ts +++ b/src/international/commands.ts @@ -55,6 +55,19 @@ global.killCreeps = function (roles?) { return `Killed an total of ${killedCreepCount} creeps ${roles ? `with the roles ${roles}` : ''}` } +global.killPowerCreeps = function() { + let killedCreeps = 0 + + for (const creepName in Game.powerCreeps) { + const creep = Game.powerCreeps[creepName] + + creep.suicide() + killedCreeps += 1 + } + + return `Killed a total of ${killedCreeps} creeps` +} + global.removeCSites = function (removeInProgress, types?) { let removedCSCount = 0 diff --git a/src/international/migration.ts b/src/international/migration.ts index 0b7c6f97d..a243dd5bf 100644 --- a/src/international/migration.ts +++ b/src/international/migration.ts @@ -79,8 +79,8 @@ export class MigrationManager { private hardMigration() { - global.killCreeps() + global.killPowerCreeps() global.clearMemory() global.removeCSites() diff --git a/src/room/commune/spawning/spawnRequests.ts b/src/room/commune/spawning/spawnRequests.ts index 8510c7524..b9a00c17d 100644 --- a/src/room/commune/spawning/spawnRequests.ts +++ b/src/room/commune/spawning/spawnRequests.ts @@ -643,10 +643,7 @@ export class SpawnRequestsManager { /* customLog('e', partsMultiplier) */ const role = 'maintainer' - customLog( - 'maintainer', - partsMultiplier + ', ' + maxCreeps + ', ' + this.spawnEnergyCapacity, - ) + if (this.communeManager.hasSufficientRoads) { return { type: SpawnRequestTypes.groupDiverse, diff --git a/src/types.d.ts b/src/types.d.ts index 0b29a1597..0cb5ae3fc 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -1390,6 +1390,8 @@ declare global { */ killCreeps(roles?: CreepRoles[]): string + killPowerCreeps(): string + /** * Removes all specified construction sites owned by the bot */ From 437b9810ca80e5c5b05457a13d485b4dbeb4cd72 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sun, 14 Jan 2024 15:45:39 -0800 Subject: [PATCH 083/190] more manager -> proc refactoring observer, nuker, powerSpawn, terminal, haulerSize, spawningStructures --- src/other/profilerRegister.ts | 28 +- src/room/commune/commune.ts | 76 ++-- src/room/commune/communeProcs.ts | 23 +- src/room/commune/communeUtils.ts | 35 +- src/room/commune/haulerSize.ts | 35 -- src/room/commune/nuker.ts | 50 -- src/room/commune/nukerProcs.ts | 44 ++ src/room/commune/observer.ts | 67 --- src/room/commune/observerProcs.ts | 58 +++ src/room/commune/powerSpawn.ts | 99 ---- src/room/commune/powerSpawnProcs.ts | 93 ++++ src/room/commune/spawning/spawnRequests.ts | 1 - src/room/commune/spawning/spawnUtils.ts | 27 -- .../spawning/spawningStructureProcs.ts | 428 ++++++++++++++++++ .../spawning/spawningStructureUtils.ts | 10 + .../commune/spawning/spawningStructures.ts | 368 --------------- src/room/commune/storingStructures.ts | 48 -- .../{terminal.ts => terminalProcs.ts} | 87 ++-- src/room/creeps/endTickCreepManager.ts | 62 +-- src/room/logisticsProcs.ts | 31 ++ src/types.d.ts | 3 + 21 files changed, 804 insertions(+), 869 deletions(-) delete mode 100644 src/room/commune/haulerSize.ts delete mode 100644 src/room/commune/nuker.ts create mode 100644 src/room/commune/nukerProcs.ts delete mode 100644 src/room/commune/observer.ts create mode 100644 src/room/commune/observerProcs.ts delete mode 100644 src/room/commune/powerSpawn.ts create mode 100644 src/room/commune/powerSpawnProcs.ts delete mode 100644 src/room/commune/spawning/spawnUtils.ts create mode 100644 src/room/commune/spawning/spawningStructureProcs.ts create mode 100644 src/room/commune/spawning/spawningStructureUtils.ts delete mode 100644 src/room/commune/spawning/spawningStructures.ts delete mode 100644 src/room/commune/storingStructures.ts rename src/room/commune/terminal/{terminal.ts => terminalProcs.ts} (79%) diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index 1e824b5cf..7669a4d5f 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -1,14 +1,11 @@ import { CommuneManager } from 'room/commune/commune' import { profiler } from './profiler' import { RoomManager } from 'room/room' -import { SpawningStructuresManager } from 'room/commune/spawning/spawningStructures' import { SpawnRequestsManager } from 'room/commune/spawning/spawnRequests' -import { TerminalManager } from 'room/commune/terminal/terminal' import { LabManager } from 'room/commune/labs' import { FactoryManager } from 'room/commune/factory' import { StatsManager } from 'international/statsManager' import { ConstructionManager } from 'room/construction/construction' -import { ObserverManager } from 'room/commune/observer' import { RemotesManager } from 'room/commune/remotesManager' import { HaulRequestManager } from 'room/commune/haulRequestManager' import { WorkRequestManager } from 'room/commune/workRequest' @@ -25,7 +22,6 @@ import { PlayerManager } from 'international/players' import { FlagManager } from 'international/flags' import { RoomNameUtils } from 'room/roomNameUtils' import { CreepUtils } from 'room/creeps/creepUtils' -import { SpawnUtils } from 'room/commune/spawning/spawnUtils' import { TradingUtils } from 'room/commune/terminal/tradingUtils' import { CollectiveManager } from 'international/collective' import { MarketManager } from 'international/market/marketOrders' @@ -35,12 +31,8 @@ import { EndTickCreepManager } from 'room/creeps/endTickCreepManager' import { PowerCreepOrganizer } from 'international/powerCreepOrganizer' import { HaulerNeedManager } from 'room/commune/haulerNeed' import { LinkManager } from 'room/commune/links' -import { StoringStructuresManager } from 'room/commune/storingStructures' import { DefenceManager } from 'room/commune/defence' -import { PowerSpawnsManager } from 'room/commune/powerSpawn' -import { NukerManager } from 'room/commune/nuker' import { CombatRequestManager } from 'room/commune/combatRequest' -import { HaulerSizeManager } from 'room/commune/haulerSize' import { MapVisualsManager } from 'international/mapVisuals' import { MigrationManager } from 'international/migration' import { RoomPruningManager } from 'international/roomPruning' @@ -105,6 +97,12 @@ import { TowerProcs } from 'room/commune/towerProcs' import { TowerUtils } from 'room/commune/towerUtils' import { SourceProcs } from 'room/sourceProcs' import { SourceUtils } from 'room/sourceUtils' +import { TerminalProcs } from 'room/commune/terminal/terminalProcs' +import { SpawningStructureProcs } from 'room/commune/spawning/spawningStructureProcs' +import { SpawningStructureUtils } from 'room/commune/spawning/spawningStructureUtils' +import { NukerProcs } from 'room/commune/nukerProcs' +import { ObserverProcs } from 'room/commune/observerProcs' +import { PowerSpawnProcs } from 'room/commune/powerSpawnProcs' export function profilerRegister() { // Classes @@ -139,30 +137,22 @@ export function profilerRegister() { profiler.registerClass(CommuneManager, 'CommuneManager') profiler.registerClass(RoomManager, 'RoomManager') - profiler.registerClass(SpawningStructuresManager, 'SpawningStructuresManager') profiler.registerClass(SpawnRequestsManager, 'SpawnRequestsManager') - profiler.registerClass(TerminalManager, 'TerminalManager') profiler.registerClass(LabManager, 'LabManager') profiler.registerClass(FactoryManager, 'FactoryManager') profiler.registerClass(CommunePlanner, 'CommunePlanner') profiler.registerClass(ConstructionManager, 'ConstructionManager') - profiler.registerClass(ObserverManager, 'ObserverManager') profiler.registerClass(RemotesManager, 'RemotesManager') profiler.registerClass(HaulRequestManager, 'HaulRequestManager') profiler.registerClass(WorkRequestManager, 'WorkRequestManager') profiler.registerClass(EndTickCreepManager, 'EndTickCreepManager') profiler.registerClass(HaulerNeedManager, 'HaulerNeedManager') profiler.registerClass(LinkManager, 'LinkManager') - profiler.registerClass(StoringStructuresManager, 'StoringStructuresManager') profiler.registerClass(DefenceManager, 'DefenceManager') - profiler.registerClass(PowerSpawnsManager, 'PowerSpawnsManager') - profiler.registerClass(NukerManager, 'NukerManager') profiler.registerClass(CombatRequestManager, 'CombatRequestManager') - profiler.registerClass(HaulerSizeManager, 'HaulerSize') profiler.registerClass(RoomVisualsManager, 'RoomVisualsManager') profiler.registerClass(Operator, 'Operator') profiler.registerClass(RoomNameUtils, 'RoomNameUtils') - profiler.registerClass(SpawnUtils, 'SpawnUtils') profiler.registerClass(RoomUtils, 'RoomUtils') profiler.registerClass(CommuneUtils, 'CommuneUtils') profiler.registerClass(RoomDataManager, 'RoomDataManager') @@ -178,6 +168,12 @@ export function profilerRegister() { profiler.registerClass(TowerUtils, 'TowerUtils') profiler.registerClass(SourceProcs, 'SourceProcs') profiler.registerClass(SourceUtils, 'SourceUtils') + profiler.registerClass(TerminalProcs, 'TerminalProcs') + profiler.registerClass(SpawningStructureProcs, 'SpawningStructureProcs') + profiler.registerClass(SpawningStructureUtils, 'SpawningStructureUtils') + profiler.registerClass(NukerProcs, 'NukerProcs') + profiler.registerClass(ObserverProcs, 'ObserverProcs') + profiler.registerClass(PowerSpawnProcs, 'PowerSpawnProcs') // Creep classes diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index e2f639df4..7874e7d60 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -1,29 +1,28 @@ import { - findLinkThroughput, - findObjectWithID, - getRange, - packAsNum, - randomTick, - findLowestScore, - roundTo, - forCoordsAroundRange, - utils, + findLinkThroughput, + findObjectWithID, + getRange, + packAsNum, + randomTick, + findLowestScore, + roundTo, + forCoordsAroundRange, + utils, } from 'utils/utils' -import { TerminalManager } from './terminal/terminal' import './spawning/spawningStructures' import './defence' import './workRequest' import './combatRequest' import { - creepRoles, - packedPosLength, - RoomMemoryKeys, - RoomTypes, - rampartUpkeepCost, - RemoteResourcePathTypes, - ReservedCoordTypes, - RoomStatsKeys, + creepRoles, + packedPosLength, + RoomMemoryKeys, + RoomTypes, + rampartUpkeepCost, + RemoteResourcePathTypes, + ReservedCoordTypes, + RoomStatsKeys, } from 'international/constants' import './factory' import { LabManager } from './labs' @@ -31,19 +30,14 @@ import './links' import { RemotesManager } from './remotesManager' import { WorkRequestManager } from './workRequest' import { CombatRequestManager } from './combatRequest' -import { PowerSpawnsManager } from './powerSpawn' import './haulerSize' import { DefenceManager } from './defence' -import { SpawningStructuresManager } from './spawning/spawningStructures' import { HaulRequestManager } from './haulRequestManager' -import { HaulerSizeManager } from './haulerSize' import { HaulerNeedManager } from './haulerNeed' import { packCoord, unpackPosAt } from 'other/codec' -import { StoringStructuresManager } from './storingStructures' import { LinkManager } from './links' import { FactoryManager } from './factory' import { SpawnRequestsManager } from './spawning/spawnRequests' -import { ObserverManager } from './observer' import { collectiveManager } from 'international/collective' import { ConstructionManager } from 'room/construction/construction' import { roomNameUtils } from 'room/roomNameUtils' @@ -54,6 +48,10 @@ import { structureUtils } from 'room/structureUtils' import { logisticsProcs } from 'room/logisticsProcs' import { towerProcs } from './towerProcs' import { sourceProcs } from 'room/sourceProcs' +import { terminalProcs } from './terminal/terminalProcs' +import { spawningStructureProcs } from './spawning/spawningStructureProcs' +import { observerProcs } from './observerProcs' +import { powerSpawnProcs } from './powerSpawnProcs' export type ResourceTargets = { min: Partial<{ [key in ResourceConstant]: number }> @@ -68,17 +66,11 @@ export class CommuneManager { constructionManager: ConstructionManager defenceManager: DefenceManager - storingStructuresManager: StoringStructuresManager linkManager: LinkManager labManager: LabManager - powerSpawningStructuresManager: PowerSpawnsManager spawnRequestsManager: SpawnRequestsManager - spawningStructuresManager: SpawningStructuresManager - observerManager: ObserverManager - terminalManager: TerminalManager remotesManager: RemotesManager - haulerSizeManager: HaulerSizeManager workRequestManager: WorkRequestManager combatRequestManager: CombatRequestManager @@ -117,17 +109,11 @@ export class CommuneManager { this.constructionManager = new ConstructionManager(this) this.defenceManager = new DefenceManager(this) - this.storingStructuresManager = new StoringStructuresManager(this) this.linkManager = new LinkManager(this) this.labManager = new LabManager(this) - this.powerSpawningStructuresManager = new PowerSpawnsManager(this) this.spawnRequestsManager = new SpawnRequestsManager(this) - this.spawningStructuresManager = new SpawningStructuresManager(this) - this.observerManager = new ObserverManager(this) - this.terminalManager = new TerminalManager(this) this.remotesManager = new RemotesManager(this) - this.haulerSizeManager = new HaulerSizeManager(this) this.workRequestManager = new WorkRequestManager(this) this.combatRequestManager = new CombatRequestManager(this) @@ -255,8 +241,8 @@ export class CommuneManager { if (!roomMemory[RoomMemoryKeys.communePlanned]) return this.constructionManager.preTickRun() - this.observerManager.preTickRun() - this.terminalManager.preTickRun() + observerProcs.preTickRun(this.room) + terminalProcs.preTickRun(this.room) this.remotesManager.initRun() this.haulRequestManager.preTickRun() this.workRequestManager.preTickRun() @@ -270,7 +256,7 @@ export class CommuneManager { this.defenceManager.manageThreat() this.defenceManager.manageDefenceRequests() - this.terminalManager.run() + terminalProcs.run(this.room) this.workRequestManager.run() this.combatRequestManager.run() @@ -280,8 +266,8 @@ export class CommuneManager { this.remotesManager.run() this.haulerNeedManager.run() - this.spawningStructuresManager.createRoomLogisticsRequests() - this.storingStructuresManager.run() + spawningStructureProcs.createRoomLogisticsRequests(this.room) + logisticsProcs.createCommuneStoringStructureLogisticsRequests(this.room) this.factoryManager.run() logisticsProcs.createCommuneContainerLogisticsRequests(this.room) logisticsProcs.createCommuneDroppedResourceLogisticsRequests(this.room) @@ -289,16 +275,16 @@ export class CommuneManager { logisticsProcs.createCommuneRuinLogisticsRequests(this.room) this.linkManager.run() this.labManager.run() - this.powerSpawningStructuresManager.run() - this.spawningStructuresManager.organizeSpawns() - this.spawningStructuresManager.createPowerTasks() + powerSpawnProcs.run(this.room) + spawningStructureProcs.createPowerTasks(this.room) this.room.roomManager.creepRoleManager.run() this.room.roomManager.powerCreepRoleManager.run() - this.haulerSizeManager.run() - this.spawningStructuresManager.run() + communeProcs.tryUpdateMinHaulerCost(this.room) + spawningStructureProcs.tryRunSpawning(this.room) + spawningStructureProcs.tryRegisterSpawningMovement(this.room) this.room.roomManager.endTickCreepManager.run() this.room.roomManager.roomVisualsManager.run() diff --git a/src/room/commune/communeProcs.ts b/src/room/commune/communeProcs.ts index 335baad9f..25ea373fe 100644 --- a/src/room/commune/communeProcs.ts +++ b/src/room/commune/communeProcs.ts @@ -1,7 +1,8 @@ import { roomUtils } from 'room/roomUtils' import { communeDataManager } from './communeData' import { communeUtils } from './communeUtils' -import { RoomLogisticsRequestTypes } from 'international/constants' +import { RoomLogisticsRequestTypes, RoomMemoryKeys, haulerUpdateDefault } from 'international/constants' +import { randomIntRange } from 'utils/utils' /** * Minor processes for communes @@ -43,6 +44,26 @@ export class CommuneProcs { communeData.registeredRCL = room.controller.level } + + tryUpdateMinHaulerCost(room: Room) { + const roomMemory = Memory.rooms[room.name] + + // If there is no min hauler size + + if (roomMemory[RoomMemoryKeys.minHaulerCost] === undefined) { + + roomMemory[RoomMemoryKeys.minHaulerCost] = Math.max(Memory.minHaulerCost, 200 * room.roomManager.structures.spawn.length) + roomMemory[RoomMemoryKeys.minHaulerCostUpdate] = Game.time + randomIntRange(1500, 3000) + return + } + + if (Game.time - roomMemory[RoomMemoryKeys.minHaulerCostUpdate] < haulerUpdateDefault) return + + // update the min hauler cost + + roomMemory[RoomMemoryKeys.minHaulerCost] = Math.max(Memory.minHaulerCost, 100 * room.roomManager.structures.spawn.length) + roomMemory[RoomMemoryKeys.minHaulerCostUpdate] = Game.time + randomIntRange(0, 10) + } } export const communeProcs = new CommuneProcs() diff --git a/src/room/commune/communeUtils.ts b/src/room/commune/communeUtils.ts index 736854737..174f279b2 100644 --- a/src/room/commune/communeUtils.ts +++ b/src/room/commune/communeUtils.ts @@ -12,6 +12,7 @@ import { import { collectiveManager } from "international/collective" import { roomUtils } from "room/roomUtils" import { structureUtils } from "room/structureUtils" +import { OrganizedSpawns } from './spawning/spawningStructureProcs' export class CommuneUtils { getGeneralRepairStructures(room: Room) { @@ -215,7 +216,6 @@ export class CommuneUtils { } canTakeNewWorkRequest(roomName: string) { - if (Memory.rooms[roomName][RoomMemoryKeys.workRequest]) return false if (Game.rooms[roomName].energyCapacityAvailable < 650) return false @@ -224,6 +224,39 @@ export class CommuneUtils { return true } + + /** + * Find spawns that are inactive and active + * Assign spawnIDs to creeps + */ + public getOrganizedSpawns( + room: Room, + spawns: StructureSpawn[] = room.roomManager.structures.spawn, + ): false | OrganizedSpawns { + if (room.organizedSpawns !== undefined) return room.organizedSpawns + // Find spawns that are and aren't spawning + + const inactiveSpawns: StructureSpawn[] = [] + const activeSpawns: StructureSpawn[] = [] + + for (const spawn of spawns) { + if (spawn.renewed) continue + if (!structureUtils.isRCLActionable(spawn)) continue + + if (spawn.spawning) { + activeSpawns.push(spawn) + continue + } + + inactiveSpawns.push(spawn) + } + + room.organizedSpawns = { + activeSpawns, + inactiveSpawns, + } + return room.organizedSpawns + } } export const communeUtils = new CommuneUtils() diff --git a/src/room/commune/haulerSize.ts b/src/room/commune/haulerSize.ts deleted file mode 100644 index 28ea14420..000000000 --- a/src/room/commune/haulerSize.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { CPUBucketCapacity, RoomMemoryKeys, haulerUpdateDefault } from 'international/constants' -import { CommuneManager } from './commune' -import { randomIntRange } from 'utils/utils' - -export class HaulerSizeManager { - communeManager: CommuneManager - - constructor(communeManager: CommuneManager) { - this.communeManager = communeManager - } - - run() { - const roomMemory = Memory.rooms[this.communeManager.room.name] - - // If there is no Hauler Size - - if (roomMemory[RoomMemoryKeys.minHaulerCost] === undefined) { - - roomMemory[RoomMemoryKeys.minHaulerCost] = Math.max(Memory.minHaulerCost, 200 * this.communeManager.room.roomManager.structures.spawn.length) - roomMemory[RoomMemoryKeys.minHaulerCostUpdate] = Game.time + randomIntRange(1500, 3000) - return - } - - if (Game.time - roomMemory[RoomMemoryKeys.minHaulerCostUpdate] < haulerUpdateDefault) return - - this.updateMinHaulerCost() - } - - private updateMinHaulerCost() { - const roomMemory = Memory.rooms[this.communeManager.room.name] - - roomMemory[RoomMemoryKeys.minHaulerCost] = Math.max(Memory.minHaulerCost, 100 * this.communeManager.room.roomManager.structures.spawn.length) - roomMemory[RoomMemoryKeys.minHaulerCostUpdate] = Game.time + randomIntRange(0, 10) - } -} diff --git a/src/room/commune/nuker.ts b/src/room/commune/nuker.ts deleted file mode 100644 index 22b87a8fc..000000000 --- a/src/room/commune/nuker.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { NukeRequestKeys, Result, RoomLogisticsRequestTypes, RoomMemoryKeys } from 'international/constants' -import { scalePriority } from 'utils/utils' -import { CommuneManager } from './commune' -import { roomObjectUtils } from 'room/roomObjectUtils' - -const nukerResources = [RESOURCE_ENERGY, RESOURCE_GHODIUM] - -export class NukerManager { - communeManager: CommuneManager - - constructor(communeManager: CommuneManager) { - this.communeManager = communeManager - } - - run() { - const roomMemory = Memory.rooms[this.communeManager.room.name] - const requestName = roomMemory[RoomMemoryKeys.nukeRequest] - if (!requestName) return - - const nuker = this.communeManager.room.roomManager.nuker - if (!nuker) { - return - } - - if (this.createRoomLogisticsRequests(nuker) === Result.action) return - - const request = Memory.nukeRequests[requestName] - nuker.launchNuke( - new RoomPosition(request[NukeRequestKeys.x], request[NukeRequestKeys.y], requestName), - ) - } - - private createRoomLogisticsRequests(nuker: StructureNuker) { - let result = Result.noAction - - for (const resource of nukerResources) { - if (roomObjectUtils.freeReserveStoreOf(nuker, resource) <= 0) continue - - this.communeManager.room.createRoomLogisticsRequest({ - target: nuker, - type: RoomLogisticsRequestTypes.transfer, - priority: 100, - }) - - result = Result.action - } - - return result - } -} diff --git a/src/room/commune/nukerProcs.ts b/src/room/commune/nukerProcs.ts new file mode 100644 index 000000000..031fcd7a6 --- /dev/null +++ b/src/room/commune/nukerProcs.ts @@ -0,0 +1,44 @@ +import { RoomMemoryKeys, Result, NukeRequestKeys, RoomLogisticsRequestTypes } from "international/constants" +import { roomObjectUtils } from "room/roomObjectUtils" + +const nukerResources = [RESOURCE_ENERGY, RESOURCE_GHODIUM] + +export class NukerProcs { + run(room: Room) { + const roomMemory = Memory.rooms[room.name] + const requestName = roomMemory[RoomMemoryKeys.nukeRequest] + if (!requestName) return + + const nuker = room.roomManager.nuker + if (!nuker) { + return + } + + if (this.createRoomLogisticsRequests(room, nuker) === Result.action) return + + const request = Memory.nukeRequests[requestName] + nuker.launchNuke( + new RoomPosition(request[NukeRequestKeys.x], request[NukeRequestKeys.y], requestName), + ) +} + +private createRoomLogisticsRequests(room: Room, nuker: StructureNuker) { + let result = Result.noAction + + for (const resource of nukerResources) { + if (roomObjectUtils.freeReserveStoreOf(nuker, resource) <= 0) continue + + room.createRoomLogisticsRequest({ + target: nuker, + type: RoomLogisticsRequestTypes.transfer, + priority: 100, + }) + + result = Result.action + } + + return result +} +} + +export const nukerProcs = new NukerProcs() diff --git a/src/room/commune/observer.ts b/src/room/commune/observer.ts deleted file mode 100644 index 1c3733a8f..000000000 --- a/src/room/commune/observer.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { customLog } from 'utils/logging' -import { forRoomNamesAroundRangeXY, randomTick, utils } from 'utils/utils' -import { CommuneManager } from './commune' -import { RoomMemoryKeys } from 'international/constants' -import { roomNameUtils } from 'room/roomNameUtils' -import { roomUtils } from 'room/roomUtils' - -export class ObserverManager { - communeManager: CommuneManager - scoutTarget: string - observer: StructureObserver - - constructor(communeManager: CommuneManager) { - this.communeManager = communeManager - } - - preTickRun() { - // Run only every so often - if (!utils.isTickInterval(10)) return - - this.observer = this.communeManager.room.roomManager.structures.observer[0] - if (!this.observer) return - - const scoutTarget = this.findScoutTarget() - if (!scoutTarget) return - - this.observer.observeRoom(scoutTarget) - } - - findScoutTarget() { - const roomCoord = roomNameUtils.pack(this.communeManager.room.name) - - let scoutTarget: string | undefined - let highestScore = 0 - - forRoomNamesAroundRangeXY(roomCoord.x, roomCoord.y, OBSERVER_RANGE, (x, y) => { - const roomName = roomNameUtils.unpackXY(x, y) - - const score = this.findRoomNameScore(roomName) - if (score <= highestScore) return - - highestScore = score - scoutTarget = roomName - }) - - return scoutTarget - } - - private findRoomNameScore(roomName: string) { - const roomsDistance = - OBSERVER_RANGE - Game.map.getRoomLinearDistance(roomName, this.communeManager.room.name) - - const roomMemory = Memory.rooms[roomName] - if (!roomMemory) { - const score = roomsDistance * 1000 - return score - } - - // We have memory of the room. Consider when we last scouted into the score - - // The time that's surpassed since we last scouted the room - const scoutDifference = Game.time - (roomMemory[RoomMemoryKeys.lastScout] || 0) - - const score = scoutDifference + roomsDistance * 10 - return score - } -} diff --git a/src/room/commune/observerProcs.ts b/src/room/commune/observerProcs.ts new file mode 100644 index 000000000..54e6b668e --- /dev/null +++ b/src/room/commune/observerProcs.ts @@ -0,0 +1,58 @@ +import { RoomMemoryKeys } from "international/constants" +import { roomNameUtils } from "room/roomNameUtils" +import { forRoomNamesAroundRangeXY, utils } from "utils/utils" + +export class ObserverProcs { + preTickRun(room: Room) { + // Run only every so often + if (!utils.isTickInterval(10)) return + + const observer = room.roomManager.structures.observer[0] + if (!observer) return + + const scoutTarget = this.findScoutTarget(room) + if (!scoutTarget) return + + observer.observeRoom(scoutTarget) + } + + findScoutTarget(room: Room) { + const roomCoord = roomNameUtils.pack(room.name) + + let scoutTarget: string | undefined + let highestScore = 0 + + forRoomNamesAroundRangeXY(roomCoord.x, roomCoord.y, OBSERVER_RANGE, (x, y) => { + const scoutRoomName = roomNameUtils.unpackXY(x, y) + + const score = this.findRoomNameScore(room, scoutRoomName) + if (score <= highestScore) return + + highestScore = score + scoutTarget = scoutRoomName + }) + + return scoutTarget + } + + private findRoomNameScore(room: Room, scoutRoomName: string) { + const roomsDistance = + OBSERVER_RANGE - Game.map.getRoomLinearDistance(room.name, scoutRoomName) + + const scoutRoomMemory = Memory.rooms[scoutRoomName] + if (!scoutRoomMemory) { + const score = roomsDistance * 1000 + return score + } + + // We have memory of the room. Consider when we last scouted into the score + + // The time that's surpassed since we last scouted the room + const scoutDifference = Game.time - (scoutRoomMemory[RoomMemoryKeys.lastScout] || 0) + + const score = scoutDifference + roomsDistance * 10 + return score + } +} + +export const observerProcs = new ObserverProcs() diff --git a/src/room/commune/powerSpawn.ts b/src/room/commune/powerSpawn.ts deleted file mode 100644 index b2c55f758..000000000 --- a/src/room/commune/powerSpawn.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { statsManager } from 'international/statsManager' -import { CommuneManager } from './commune' -import { customLog } from 'utils/logging' -import { collectiveManager } from 'international/collective' -import { RoomLogisticsRequestTypes } from 'international/constants' -import { scalePriority } from 'utils/utils' - -export class PowerSpawnsManager { - communeManager: CommuneManager - powerSpawn: StructurePowerSpawn - - constructor(communeManager: CommuneManager) { - this.communeManager = communeManager - } - public run() { - this.powerSpawn = this.communeManager.room.roomManager.powerSpawn - if (!this.powerSpawn) return - - this.advancedProcessPower() - this.advancedSpawn() - } - - /** - * So long as there are sufficient resources, try to process power - */ - private advancedProcessPower() { - if (this.powerSpawn.store.getCapacity(RESOURCE_ENERGY) < POWER_SPAWN_ENERGY_RATIO) return - if (!this.powerSpawn.store.getCapacity(RESOURCE_POWER)) return - - const result = this.powerSpawn.processPower() - - if (result === OK) - statsManager.updateStat(this.powerSpawn.room.name, 'eop', POWER_SPAWN_ENERGY_RATIO) - } - - /** - * Find unspawned power creeps and spawn them - */ - private advancedSpawn() { - for (let i = collectiveManager.unspawnedPowerCreepNames.length - 1; i >= 0; i--) { - const creep = Game.powerCreeps[collectiveManager.unspawnedPowerCreepNames[i]] - - creep.spawn(this.powerSpawn) - collectiveManager.unspawnedPowerCreepNames.pop() - return - } - } - - private createRoomLogisticsRequests() { - - // Make sure we have a reasonable amount of energy and power - - const resourcesInStoringStructures = this.communeManager.room.roomManager.resourcesInStoringStructures - - // Make sure we have a reasonable amount of power to process - if ( - resourcesInStoringStructures.power < - this.powerSpawn.store.getCapacity(RESOURCE_POWER) - ) - return - // Make sure we have enough energy -- don't process power if our economy is struggling or reovering - if ( - resourcesInStoringStructures.energy < - this.communeManager.minStoredEnergy - ) - return - - // energy - - this.communeManager.room.createRoomLogisticsRequest({ - target: this.powerSpawn, - /* onlyFull: true, */ - type: RoomLogisticsRequestTypes.offer, - priority: scalePriority( - this.powerSpawn.store.getCapacity(RESOURCE_ENERGY), - this.powerSpawn.usedReserveStore, - 10, - true, - ), - }) - - // fulfill power if less than half - - if (this.powerSpawn.reserveStore[RESOURCE_POWER] < this.powerSpawn.store.getCapacity(RESOURCE_POWER) * 0.5) { - - this.communeManager.room.createRoomLogisticsRequest({ - target: this.powerSpawn, - /* onlyFull: true, */ - type: RoomLogisticsRequestTypes.offer, - priority: scalePriority( - this.powerSpawn.store.getCapacity(RESOURCE_ENERGY), - this.powerSpawn.usedReserveStore, - 10, - true, - ), - }) - } - } -} diff --git a/src/room/commune/powerSpawnProcs.ts b/src/room/commune/powerSpawnProcs.ts new file mode 100644 index 000000000..403a3af0d --- /dev/null +++ b/src/room/commune/powerSpawnProcs.ts @@ -0,0 +1,93 @@ +import { collectiveManager } from "international/collective" +import { RoomLogisticsRequestTypes } from "international/constants" +import { statsManager } from "international/statsManager" +import { scalePriority } from "utils/utils" + +export class PowerSpawnProcs { + public run(room: Room) { + const powerSpawn = room.roomManager.powerSpawn + if (!powerSpawn) return + + this.advancedProcessPower(powerSpawn) + this.advancedSpawn(powerSpawn) +} + +/** + * So long as there are sufficient resources, try to process power + */ +private advancedProcessPower(powerSpawn: StructurePowerSpawn) { + if (powerSpawn.store.getCapacity(RESOURCE_ENERGY) < POWER_SPAWN_ENERGY_RATIO) return + if (!powerSpawn.store.getCapacity(RESOURCE_POWER)) return + + const result = powerSpawn.processPower() + + if (result === OK) + statsManager.updateStat(powerSpawn.room.name, 'eop', POWER_SPAWN_ENERGY_RATIO) +} + +/** + * Find unspawned power creeps and spawn them + */ +private advancedSpawn(powerSpawn: StructurePowerSpawn) { + for (let i = collectiveManager.unspawnedPowerCreepNames.length - 1; i >= 0; i--) { + const creep = Game.powerCreeps[collectiveManager.unspawnedPowerCreepNames[i]] + + creep.spawn(powerSpawn) + collectiveManager.unspawnedPowerCreepNames.pop() + return + } +} + +private createRoomLogisticsRequests(room: Room, powerSpawn: StructurePowerSpawn) { + + // Make sure we have a reasonable amount of energy and power + + const resourcesInStoringStructures = room.roomManager.resourcesInStoringStructures + + // Make sure we have a reasonable amount of power to process + if ( + resourcesInStoringStructures.power < + powerSpawn.store.getCapacity(RESOURCE_POWER) + ) + return + // Make sure we have enough energy -- don't process power if our economy is struggling or reovering + if ( + resourcesInStoringStructures.energy < + room.communeManager.minStoredEnergy + ) + return + + // energy + + room.createRoomLogisticsRequest({ + target: powerSpawn, + /* onlyFull: true, */ + type: RoomLogisticsRequestTypes.offer, + priority: scalePriority( + powerSpawn.store.getCapacity(RESOURCE_ENERGY), + powerSpawn.usedReserveStore, + 10, + true, + ), + }) + + // fulfill power if less than half + + if (powerSpawn.reserveStore[RESOURCE_POWER] < powerSpawn.store.getCapacity(RESOURCE_POWER) * 0.5) { + + room.createRoomLogisticsRequest({ + target: powerSpawn, + /* onlyFull: true, */ + type: RoomLogisticsRequestTypes.offer, + priority: scalePriority( + powerSpawn.store.getCapacity(RESOURCE_ENERGY), + powerSpawn.usedReserveStore, + 10, + true, + ), + }) + } +} +} + +export const powerSpawnProcs = new PowerSpawnProcs() diff --git a/src/room/commune/spawning/spawnRequests.ts b/src/room/commune/spawning/spawnRequests.ts index b9a00c17d..85d7cab65 100644 --- a/src/room/commune/spawning/spawnRequests.ts +++ b/src/room/commune/spawning/spawnRequests.ts @@ -25,7 +25,6 @@ import { statsManager } from 'international/statsManager' import { CommuneManager } from '../commune' import { customLog } from 'utils/logging' import { SpawnRequest, SpawnRequestArgs, SpawnRequestTypes } from 'types/spawnRequest' -import { spawnUtils } from './spawnUtils' import { SpawnRequestConstructor, spawnRequestConstructors } from './spawnRequestConstructors' import { communeUtils } from '../communeUtils' import { structureUtils } from 'room/structureUtils' diff --git a/src/room/commune/spawning/spawnUtils.ts b/src/room/commune/spawning/spawnUtils.ts deleted file mode 100644 index ce370ecdf..000000000 --- a/src/room/commune/spawning/spawnUtils.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { CreepMemoryKeys, creepRoles } from 'international/constants' -import { SpawnRequest } from 'types/spawnRequest' - -export class SpawnUtils { - testSpawn(spawn: StructureSpawn, body: BodyPartConstant[], requestID: number) { - return spawn.spawnCreep(body, requestID.toString(), { dryRun: true }) - } - - advancedSpawn( - spawn: StructureSpawn, - spawnRequest: SpawnRequest, - body: BodyPartConstant[], - requestID: number, - ) { - const creepName = `${creepRoles.indexOf(spawnRequest.role)}_${spawn.room.name}_${requestID}` - - spawnRequest.extraOpts.energyStructures = spawn.room.communeManager.spawningStructuresByPriority - - spawnRequest.extraOpts.memory[CreepMemoryKeys.defaultParts] = spawnRequest.defaultParts - spawnRequest.extraOpts.memory[CreepMemoryKeys.cost] = spawnRequest.cost - - const spawnResult = spawn.spawnCreep(body, creepName, spawnRequest.extraOpts) - return spawnResult - } -} - -export const spawnUtils = new SpawnUtils() diff --git a/src/room/commune/spawning/spawningStructureProcs.ts b/src/room/commune/spawning/spawningStructureProcs.ts new file mode 100644 index 000000000..d74b6c079 --- /dev/null +++ b/src/room/commune/spawning/spawningStructureProcs.ts @@ -0,0 +1,428 @@ +import { collectiveManager } from 'international/collective' +import { + CreepMemoryKeys, + ReservedCoordTypes, + Result, + partsByPriority, + partsByPriorityPartType, + RoomLogisticsRequestTypes, + creepRoles, + customColors, + MovedTypes, +} from 'international/constants' +import { statsManager } from 'international/statsManager' +import { unpackPosAt, packCoord, unpackCoord } from 'other/codec' +import { creepProcs } from 'room/creeps/creepProcs' +import { structureUtils } from 'room/structureUtils' +import { SpawnRequest, BodyPartCounts, SpawnRequestTypes } from 'types/spawnRequest' +import { customLog, LogTypes } from 'utils/logging' +import { getRange, findAdjacentCoordsToCoord, utils } from 'utils/utils' +import { SpawnRequestConstructor, spawnRequestConstructors } from './spawnRequestConstructors' +import { spawningStructureUtils } from './spawningStructureUtils' +import { communeUtils } from '../communeUtils' + +export class SpawningStructureProcs { + public tryRunSpawning(room: Room) { + const spawns = room.roomManager.structures.spawn + if (!spawns.length) return + + this.test(room) + + // There are no spawns that we can spawn with (they are probably spawning something) + const organizedSpawns = communeUtils.getOrganizedSpawns(room, spawns) + if (!organizedSpawns) return + + this.registerSpawningCreeps(room, organizedSpawns.activeSpawns) + + // If all spawns are occupied, there is nothing for us to do + if (!organizedSpawns.inactiveSpawns.length) { + return + } + + this.runSpawning(room, organizedSpawns.inactiveSpawns) + } + + private runSpawning(room: Room, inactiveSpawns: StructureSpawn[]) { + const spawnRequestsArgs = room.communeManager.spawnRequestsManager.run() + + for (const requestArgs of spawnRequestsArgs) { + const spawnRequests = spawnRequestConstructorsByType[requestArgs.type](room, requestArgs) + + // Loop through priorities inside requestsByPriority + + for (const spawnRequest of spawnRequests) { + if (this.runSpawnRequest(room, inactiveSpawns, spawnRequest) !== Result.success) return + } + } + } + + private registerSpawningCreeps(room: Room, activeSpawns: StructureSpawn[]) { + for (const spawn of activeSpawns) { + const creep = Game.creeps[spawn.spawning.name] + creepProcs.registerSpawning(creep, spawn) + creep.spawnID = spawn.id + + if ( + spawn.spawning.remainingTime <= 2 && + creep.memory[CreepMemoryKeys.path] && + creep.memory[CreepMemoryKeys.path].length + ) { + const coord = unpackPosAt(creep.memory[CreepMemoryKeys.path]) + room.roomManager.reservedCoords.set(packCoord(coord), ReservedCoordTypes.spawning) + creep.assignMoveRequest(coord) + } + } + } + + private runSpawnRequest( + room: Room, + inactiveSpawns: StructureSpawn[], + request: SpawnRequest, + ): Result { + // We're trying to build a creep larger than this room can spawn + // If this is ran then there is a bug in spawnRequest creation + + if (request.cost > room.energyCapacityAvailable) { + customLog( + 'Failed to spawn: not enough energy', + `cost greater then energyCapacityAvailable, role: ${request.role}, cost: ${ + room.energyCapacityAvailable + } / ${request.cost}, body: ${JSON.stringify(request.bodyPartCounts)}`, + { + type: LogTypes.warning, + }, + ) + + return Result.fail + } + + if (request.cost > room.communeManager.nextSpawnEnergyAvailable) { + customLog( + 'Failed to spawn: not enough energy', + `cost greater then nextSpawnEnergyAvailable, role: ${request.role}, cost: ${ + request.cost + } / ${room.communeManager.nextSpawnEnergyAvailable}, body: ${JSON.stringify( + request.bodyPartCounts, + )}`, + { + type: LogTypes.warning, + }, + ) + return Result.fail + } + + const body = this.constructBodyFromSpawnRequest(request.role, request.bodyPartCounts) + + // Try to find inactive spawn, if can't, stop the loop + + const spawnIndex = this.findSpawnIndexForSpawnRequest(inactiveSpawns, request) + const spawn = inactiveSpawns[spawnIndex] + const ID = collectiveManager.newCustomCreepID() + + // See if creep can be spawned + + const testSpawnResult = this.testSpawn(spawn, body, ID) + + // If creep can't be spawned + + if (testSpawnResult !== OK) { + if (testSpawnResult === ERR_NOT_ENOUGH_ENERGY) { + customLog( + 'Failed to spawn: dryrun failed', + `request: ${testSpawnResult}, role: ${request.role}, cost: ${request.cost} / ${room.communeManager.nextSpawnEnergyAvailable}, body: (${body.length}) ${body}`, + { + type: LogTypes.error, + }, + ) + return Result.fail + } + + customLog( + 'Failed to spawn: dryrun failed', + `request: ${testSpawnResult}, role: ${request.role}, cost: ${request.cost} / ${room.communeManager.nextSpawnEnergyAvailable}, body: (${body.length}) ${body}`, + { + type: LogTypes.error, + }, + ) + + return Result.fail + } + + // Spawn the creep for real + + request.extraOpts.directions = this.findDirections(room, spawn.pos) + const result = this.advancedSpawn(spawn, request, body, ID) + if (result !== OK) { + customLog( + 'Failed to spawn: spawning failed', + `error: ${result}, request: ${global.debugUtils.stringify(request)}`, + { + type: LogTypes.error, + position: 3, + }, + ) + + return Result.fail + } + + // Otherwise we succeeded + // Record in stats the costs + + room.communeManager.nextSpawnEnergyAvailable -= request.cost + statsManager.updateStat(room.name, 'eosp', request.cost) + + // The spawn we intented to spawn should no longer be considered inactive + inactiveSpawns.splice(spawnIndex, 1) + + // We probably used up the last remaining inactive spawn, so don't try again this tick + if (!inactiveSpawns.length) return Result.stop + + return Result.success + } + + private findSpawnIndexForSpawnRequest(inactiveSpawns: StructureSpawn[], request: SpawnRequest) { + if (request.spawnTarget) { + const [score, index] = utils.findIndexWithLowestScore(inactiveSpawns, spawn => { + return getRange(spawn.pos, request.spawnTarget) + }) + + return index + } + + return 0 + } + + private constructBodyFromSpawnRequest(role: CreepRoles, bodyPartCounts: BodyPartCounts) { + let body: BodyPartConstant[] = [] + + if (role === 'hauler') { + const ratio = (bodyPartCounts[CARRY] + bodyPartCounts[WORK]) / bodyPartCounts[MOVE] + + for (let i = -1; i < bodyPartCounts[CARRY] - 1; i++) { + body.push(CARRY) + if (i % ratio === 0) body.push(MOVE) + } + + for (let i = -1; i < bodyPartCounts[WORK] - 1; i++) { + body.push(WORK) + if (i % ratio === 0) body.push(MOVE) + } + + return body + } + + const endParts: BodyPartConstant[] = [] + + for (const partIndex in partsByPriority) { + const partType = partsByPriority[partIndex] + const part = partsByPriorityPartType[partType] + + if (!bodyPartCounts[part]) continue + + let skipEndPart: boolean + + let priorityPartsCount: number + if (partType === RANGED_ATTACK) { + priorityPartsCount = bodyPartCounts[part] + skipEndPart = true + } else if (partType === ATTACK || partType === TOUGH) { + priorityPartsCount = Math.ceil(bodyPartCounts[part] / 2) + skipEndPart = true + } else if (partType === 'secondaryTough' || partType === 'secondaryAttack') { + priorityPartsCount = Math.floor(bodyPartCounts[part] / 2) + skipEndPart = true + } else priorityPartsCount = bodyPartCounts[part] - 1 + + for (let i = 0; i < priorityPartsCount; i++) { + body.push(part) + } + + if (skipEndPart) continue + + // Ensure each part besides tough has a place at the end to reduce CPU when creeps perform actions + endParts.push(part) + } + + body = body.concat(endParts) + return body + } + + private findDirections(room: Room, pos: RoomPosition) { + const anchor = room.roomManager.anchor + if (!anchor) throw Error('No anchor for spawning structures ' + room.name) + + const adjacentCoords = findAdjacentCoordsToCoord(pos) + + // Sort by distance from the first pos in the path + + adjacentCoords.sort((a, b) => { + return getRange(a, anchor) - getRange(b, anchor) + }) + adjacentCoords.reverse() + + const directions: DirectionConstant[] = [] + + for (const coord of adjacentCoords) { + directions.push(pos.getDirectionTo(coord.x, coord.y)) + } + + return directions + } + + private testSpawn(spawn: StructureSpawn, body: BodyPartConstant[], requestID: number) { + return spawn.spawnCreep(body, requestID.toString(), { dryRun: true }) + } + + private advancedSpawn( + spawn: StructureSpawn, + spawnRequest: SpawnRequest, + body: BodyPartConstant[], + requestID: number, + ) { + const creepName = `${creepRoles.indexOf(spawnRequest.role)}_${spawn.room.name}_${requestID}` + + spawnRequest.extraOpts.energyStructures = spawn.room.communeManager.spawningStructuresByPriority + + spawnRequest.extraOpts.memory[CreepMemoryKeys.defaultParts] = spawnRequest.defaultParts + spawnRequest.extraOpts.memory[CreepMemoryKeys.cost] = spawnRequest.cost + + const spawnResult = spawn.spawnCreep(body, creepName, spawnRequest.extraOpts) + return spawnResult + } + + createPowerTasks(room: Room) { + if (!room.myPowerCreeps.length) return + + // There is a vivid benefit to powering spawns + + const organizedSpawns = communeUtils.getOrganizedSpawns(room) + // We need spawns if we want to power them + if (!organizedSpawns) return + // Make sure there are no inactive spawns + if (organizedSpawns.inactiveSpawns.length) return + + for (const spawn of organizedSpawns.activeSpawns) { + room.createPowerTask(spawn, PWR_OPERATE_SPAWN, 2) + } + } + + createRoomLogisticsRequests(room: Room) { + // If all spawning structures are 100% filled, no need to go further + if (room.energyAvailable === room.energyCapacityAvailable) return + + for (const structure of room.communeManager.spawningStructuresByNeed) { + room.createRoomLogisticsRequest({ + target: structure, + type: RoomLogisticsRequestTypes.transfer, + priority: 3, + }) + } + } + + /** + * Spawn request debugging + */ + private test(room: Room) { + /* + const args = room.communeManager.spawnRequestsManager.run() + stringifyLog('spawn request args', args) + stringifyLog('request', spawnRequestConstructorsByType[requestArgs.type](room, args[0])) +*/ + return + + this.testArgs(room) + this.testRequests() + } + + private testArgs(room: Room) { + const spawnRequestsArgs = room.communeManager.spawnRequestsManager.run() + + for (const request of spawnRequestsArgs) { + if (request.role === 'remoteSourceHarvester') { + customLog( + 'SPAWN REQUEST ARGS', + request.role + request.memoryAdditions[CreepMemoryKeys.remote] + ', ' + request.priority, + ) + continue + } + customLog('SPAWN REQUEST ARGS', request.role + ', ' + request.priority) + } + } + + private testRequests() {} + + tryRegisterSpawningMovement(room: Room) { + const organizedSpawns = communeUtils.getOrganizedSpawns(room) + if (!organizedSpawns) return + + // For every spawn spawning a creep, register their movement intentions + + for (const spawn of organizedSpawns.activeSpawns) { + const creep = Game.creeps[spawn.spawning.name] + + if (!creep.moveRequest) continue + if (!room.moveRequests[creep.moveRequest]) { + creep.moved = MovedTypes.moved + continue + } + + room.roomManager.recurseMoveRequestOrder += 1 + + const creepNameAtPos = + room.creepPositions[creep.moveRequest] || room.powerCreepPositions[creep.moveRequest] + if (!creepNameAtPos) { + creep.moved = creep.moveRequest + delete room.moveRequests[creep.moveRequest] + + if (global.settings.roomVisuals) { + const moved = unpackCoord(creep.moved) + + room.visual.rect(moved.x - 0.5, moved.y - 0.5, 1, 1, { + fill: customColors.black, + opacity: 0.7, + }) + } + continue + } + + // There is a creep at the position + // just get us space to move into + + const creepAtPos = Game.creeps[creepNameAtPos] || Game.powerCreeps[creepNameAtPos] + const packedCoord = packCoord(creep.pos) + + if (global.settings.roomVisuals) { + const moved = unpackCoord(creep.moveRequest) + + room.visual.rect(moved.x - 0.5, moved.y - 0.5, 1, 1, { + fill: customColors.pink, + opacity: 0.7, + }) + } + + if (creepAtPos.shove(new Set([packedCoord]))) { + creep.room.errorVisual(unpackCoord(creep.moveRequest)) + + creep.moved = creep.moveRequest + delete room.moveRequests[creep.moved] + delete creep.moveRequest + } + + continue + } + } +} +export const spawningStructureProcs = new SpawningStructureProcs() + +export interface OrganizedSpawns { + activeSpawns: StructureSpawn[] + inactiveSpawns: StructureSpawn[] +} + +export const spawnRequestConstructorsByType: { + [key in SpawnRequestTypes]: SpawnRequestConstructor +} = { + [SpawnRequestTypes.individualUniform]: spawnRequestConstructors.spawnRequestIndividualUniform, + [SpawnRequestTypes.groupDiverse]: spawnRequestConstructors.spawnRequestGroupDiverse, + [SpawnRequestTypes.groupUniform]: spawnRequestConstructors.spawnRequestGroupUniform, +} diff --git a/src/room/commune/spawning/spawningStructureUtils.ts b/src/room/commune/spawning/spawningStructureUtils.ts new file mode 100644 index 000000000..ce8e54df5 --- /dev/null +++ b/src/room/commune/spawning/spawningStructureUtils.ts @@ -0,0 +1,10 @@ +import { structureUtils } from 'room/structureUtils' +import { OrganizedSpawns } from './spawningStructureProcs' +import { creepProcs } from 'room/creeps/creepProcs' +import { CreepMemoryKeys } from 'international/constants' + +export class SpawningStructureUtils { + +} + +export const spawningStructureUtils = new SpawningStructureUtils() diff --git a/src/room/commune/spawning/spawningStructures.ts b/src/room/commune/spawning/spawningStructures.ts deleted file mode 100644 index 740d2980a..000000000 --- a/src/room/commune/spawning/spawningStructures.ts +++ /dev/null @@ -1,368 +0,0 @@ -import { - CreepMemoryKeys, - ReservedCoordTypes, - Result, - RoomLogisticsRequestTypes, - customColors, - offsetsByDirection, - partsByPriority, - partsByPriorityPartType, -} from 'international/constants' -import { collectiveManager } from 'international/collective' -import { statsManager } from 'international/statsManager' -import { LogTypes, customLog, stringifyLog } from 'utils/logging' -import { findAdjacentCoordsToCoord, findLowestScore, findWithLowestScore, getRange, newID, utils } from 'utils/utils' -import { packCoord, unpackPosAt } from 'other/codec' -import { CommuneManager } from '../commune' -import './spawnUtils' -import './spawnRequests' -import { spawnUtils } from './spawnUtils' -import { Dashboard, Rectangle, Table } from 'screeps-viz' -import { BodyPartCounts, SpawnRequest, SpawnRequestArgs, SpawnRequestTypes } from 'types/spawnRequest' -import { SpawnRequestConstructor, spawnRequestConstructors } from './spawnRequestConstructors' -import { structureUtils } from 'room/structureUtils' -import { creepUtils } from 'room/creeps/creepUtils' -import { creepProcs } from 'room/creeps/creepProcs' - -export const spawnRequestConstructorsByType: {[key in SpawnRequestTypes]: SpawnRequestConstructor } = { - [SpawnRequestTypes.individualUniform]: spawnRequestConstructors.spawnRequestIndividualUniform, - [SpawnRequestTypes.groupDiverse]: spawnRequestConstructors.spawnRequestGroupDiverse, - [SpawnRequestTypes.groupUniform]: spawnRequestConstructors.spawnRequestGroupUniform, -} - -export class SpawningStructuresManager { - communeManager: CommuneManager - inactiveSpawns: StructureSpawn[] - activeSpawns: StructureSpawn[] - - constructor(communeManager: CommuneManager) { - this.communeManager = communeManager - } - - /** - * Find spawns that are inactive and active - * Assign spawnIDs to creeps - */ - public organizeSpawns() { - const spawns = this.communeManager.room.roomManager.structures.spawn - if (!spawns.length) return - - // Find spawns that are and aren't spawning - - this.inactiveSpawns = [] - this.activeSpawns = [] - - for (const spawn of spawns) { - if (spawn.renewed) continue - if (!structureUtils.isRCLActionable(spawn)) continue - - if (spawn.spawning) { - const creep = Game.creeps[spawn.spawning.name] - creepProcs.registerSpawning(creep, spawn) - creep.spawnID = spawn.id - - if ( - spawn.spawning.remainingTime <= 2 && - creep.memory[CreepMemoryKeys.path] && - creep.memory[CreepMemoryKeys.path].length - ) { - const coord = unpackPosAt(creep.memory[CreepMemoryKeys.path]) - this.communeManager.room.roomManager.reservedCoords.set( - packCoord(coord), - ReservedCoordTypes.spawning, - ) - creep.assignMoveRequest(coord) - } - - this.activeSpawns.push(spawn) - continue - } - - this.inactiveSpawns.push(spawn) - } - } - - public run() { - // There are no spawns - if (!this.communeManager.room.roomManager.structures.spawn.length) return - - this.test() - this.runSpawning() - } - - private runSpawning() { - // There are no spawns that we can spawn with (they are probably spawning something) - if (!this.inactiveSpawns.length) { - return - } - - const spawnRequestsArgs = this.communeManager.spawnRequestsManager.run() - - for (const requestArgs of spawnRequestsArgs) { - const spawnRequests = spawnRequestConstructorsByType[requestArgs.type](this.communeManager.room, requestArgs) - - // Loop through priorities inside requestsByPriority - - for (const spawnRequest of spawnRequests) { - if (this.runSpawnRequest(spawnRequest) !== Result.success) return - } - } - } - - private runSpawnRequest(request: SpawnRequest): Result { - - // We're trying to build a creep larger than this room can spawn - // If this is ran then there is a bug in spawnRequest creation - - if (request.cost > this.communeManager.room.energyCapacityAvailable) { - customLog( - 'Failed to spawn: not enough energy', - `cost greater then energyCapacityAvailable, role: ${request.role}, cost: ${ - this.communeManager.room.energyCapacityAvailable - } / ${request.cost}, body: ${JSON.stringify(request.bodyPartCounts)}`, - { - type: LogTypes.warning, - }, - ) - - return Result.fail - } - - if (request.cost > this.communeManager.nextSpawnEnergyAvailable) { - customLog( - 'Failed to spawn: not enough energy', - `cost greater then nextSpawnEnergyAvailable, role: ${request.role}, cost: ${ - request.cost - } / ${this.communeManager.nextSpawnEnergyAvailable}, body: ${JSON.stringify( - request.bodyPartCounts, - )}`, - { - type: LogTypes.warning, - }, - ) - return Result.fail - } - - const body = this.constructBodyFromSpawnRequest(request.role, request.bodyPartCounts) - - // Try to find inactive spawn, if can't, stop the loop - - const spawnIndex = this.findSpawnIndexForSpawnRequest(request) - const spawn = this.inactiveSpawns[spawnIndex] - const ID = collectiveManager.newCustomCreepID() - - // See if creep can be spawned - - const testSpawnResult = spawnUtils.testSpawn(spawn, body, ID) - - // If creep can't be spawned - - if (testSpawnResult !== OK) { - if (testSpawnResult === ERR_NOT_ENOUGH_ENERGY) { - customLog( - 'Failed to spawn: dryrun failed', - `request: ${testSpawnResult}, role: ${request.role}, cost: ${request.cost} / ${this.communeManager.nextSpawnEnergyAvailable}, body: (${body.length}) ${body}`, - { - type: LogTypes.error, - }, - ) - return Result.fail - } - - customLog( - 'Failed to spawn: dryrun failed', - `request: ${testSpawnResult}, role: ${request.role}, cost: ${request.cost} / ${this.communeManager.nextSpawnEnergyAvailable}, body: (${body.length}) ${body}`, - { - type: LogTypes.error, - }, - ) - - return Result.fail - } - - // Spawn the creep for real - - request.extraOpts.directions = this.findDirections(spawn.pos) - const result = spawnUtils.advancedSpawn(spawn, request, body, ID) - if (result !== OK) { - customLog( - 'Failed to spawn: spawning failed', - `error: ${result}, request: ${global.debugUtils.stringify(request)}`, - { - type: LogTypes.error, - position: 3, - }, - ) - - return Result.fail - } - - // Otherwise we succeeded - // Record in stats the costs - - this.communeManager.nextSpawnEnergyAvailable -= request.cost - statsManager.updateStat(this.communeManager.room.name, 'eosp', request.cost) - - // The spawn we intented to spawn should no longer be considered inactive - this.inactiveSpawns.splice(spawnIndex, 1) - - // We probably used up the last remaining inactive spawn, so don't try again this tick - if (!this.inactiveSpawns.length) return Result.stop - - return Result.success - } - - private findSpawnIndexForSpawnRequest(request: SpawnRequest) { - - if (request.spawnTarget) { - - const [score, index] = utils.findIndexWithLowestScore(this.inactiveSpawns, spawn => { - return getRange(spawn.pos, request.spawnTarget) - }) - - return index - } - - return 0 - } - - private constructBodyFromSpawnRequest(role: CreepRoles, bodyPartCounts: BodyPartCounts) { - let body: BodyPartConstant[] = [] - - if (role === 'hauler') { - const ratio = - (bodyPartCounts[CARRY] + bodyPartCounts[WORK]) / - bodyPartCounts[MOVE] - - for (let i = -1; i < bodyPartCounts[CARRY] - 1; i++) { - body.push(CARRY) - if (i % ratio === 0) body.push(MOVE) - } - - for (let i = -1; i < bodyPartCounts[WORK] - 1; i++) { - body.push(WORK) - if (i % ratio === 0) body.push(MOVE) - } - - return body - } - - const endParts: BodyPartConstant[] = [] - - for (const partIndex in partsByPriority) { - const partType = partsByPriority[partIndex] - const part = partsByPriorityPartType[partType] - - if (!bodyPartCounts[part]) continue - - let skipEndPart: boolean - - let priorityPartsCount: number - if (partType === RANGED_ATTACK) { - priorityPartsCount = bodyPartCounts[part] - skipEndPart = true - } else if (partType === ATTACK || partType === TOUGH) { - priorityPartsCount = Math.ceil(bodyPartCounts[part] / 2) - skipEndPart = true - } else if (partType === 'secondaryTough' || partType === 'secondaryAttack') { - priorityPartsCount = Math.floor(bodyPartCounts[part] / 2) - skipEndPart = true - } else priorityPartsCount = bodyPartCounts[part] - 1 - - for (let i = 0; i < priorityPartsCount; i++) { - body.push(part) - } - - if (skipEndPart) continue - - // Ensure each part besides tough has a place at the end to reduce CPU when creeps perform actions - endParts.push(part) - } - - body = body.concat(endParts) - return body - } - - private findDirections(pos: RoomPosition) { - const anchor = this.communeManager.room.roomManager.anchor - if (!anchor) - throw Error('No anchor for spawning structures ' + this.communeManager.room.name) - - const adjacentCoords = findAdjacentCoordsToCoord(pos) - - // Sort by distance from the first pos in the path - - adjacentCoords.sort((a, b) => { - return getRange(a, anchor) - getRange(b, anchor) - }) - adjacentCoords.reverse() - - const directions: DirectionConstant[] = [] - - for (const coord of adjacentCoords) { - directions.push(pos.getDirectionTo(coord.x, coord.y)) - } - - return directions - } - - createPowerTasks() { - if (!this.communeManager.room.myPowerCreeps.length) return - - // There is a vivid benefit to powering spawns - - if (this.inactiveSpawns.length) return - - for (const spawn of this.activeSpawns) { - this.communeManager.room.createPowerTask(spawn, PWR_OPERATE_SPAWN, 2) - } - } - - createRoomLogisticsRequests() { - // If all spawning structures are 100% filled, no need to go further - if (this.communeManager.room.energyAvailable === this.communeManager.room.energyCapacityAvailable) return - - for (const structure of this.communeManager.spawningStructuresByNeed) { - this.communeManager.room.createRoomLogisticsRequest({ - target: structure, - type: RoomLogisticsRequestTypes.transfer, - priority: 3, - }) - } - } - - /** - * Spawn request debugging - */ - private test() { - /* - const args = this.communeManager.spawnRequestsManager.run() - stringifyLog('spawn request args', args) - stringifyLog('request', spawnRequestConstructorsByType[requestArgs.type](this.communeManager.room, args[0])) - */ - return - - this.testArgs() - this.testRequests() - } - - private testArgs() { - const spawnRequestsArgs = this.communeManager.spawnRequestsManager.run() - - for (const request of spawnRequestsArgs) { - if (request.role === 'remoteSourceHarvester') { - customLog( - 'SPAWN REQUEST ARGS', - request.role + - request.memoryAdditions[CreepMemoryKeys.remote] + - ', ' + - request.priority, - ) - continue - } - customLog('SPAWN REQUEST ARGS', request.role + ', ' + request.priority) - } - } - - private testRequests() {} -} diff --git a/src/room/commune/storingStructures.ts b/src/room/commune/storingStructures.ts deleted file mode 100644 index 248ce414c..000000000 --- a/src/room/commune/storingStructures.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { RoomLogisticsRequestTypes, customColors } from 'international/constants' -import { statsManager } from 'international/statsManager' -import { customLog } from 'utils/logging' -import { findCPUOf, findObjectWithID, randomTick, scalePriority } from 'utils/utils' -import { packCoord } from 'other/codec' -import { CommuneManager } from './commune' - -export class StoringStructuresManager { - communeManager: CommuneManager - - public constructor(communeManager: CommuneManager) { - this.communeManager = communeManager - } - - run() { - this.createRoomLogisticsRequests() - } - - private createRoomLogisticsRequests() { - const storingStructures: AnyStoreStructure[] = [] - - const storage = this.communeManager.room.storage - if (storage) storingStructures.push(storage) - - const terminal = this.communeManager.room.terminal - if (terminal && !terminal.effectsData.get(PWR_DISRUPT_TERMINAL)) - storingStructures.push(terminal) - - for (const structure of storingStructures) { - this.communeManager.room.createRoomLogisticsRequest({ - target: structure, - onlyFull: true, - type: RoomLogisticsRequestTypes.offer, - priority: 0, - }) - - // We are close to full - - if (structure.usedReserveStore > structure.store.getCapacity() * 0.9) continue - - this.communeManager.room.createRoomLogisticsRequest({ - target: structure, - type: RoomLogisticsRequestTypes.transfer, - priority: 100, - }) - } - } -} diff --git a/src/room/commune/terminal/terminal.ts b/src/room/commune/terminal/terminalProcs.ts similarity index 79% rename from src/room/commune/terminal/terminal.ts rename to src/room/commune/terminal/terminalProcs.ts index ceb4722ea..9ca22a1d1 100644 --- a/src/room/commune/terminal/terminal.ts +++ b/src/room/commune/terminal/terminalProcs.ts @@ -1,46 +1,31 @@ -import { minerals, Result, RoomMemoryKeys, RoomStatsKeys } from 'international/constants' -import { customLog } from 'utils/logging' -import { newID, roundTo, utils } from 'utils/utils' -import './tradingUtils' -import { - simpleAllies, - AllyRequestTypes, - ResourceRequest, -} from 'international/simpleAllies/simpleAllies' -import { collectiveManager } from 'international/collective' -import { CommuneManager, ResourceTargets } from 'room/commune/commune' -import { tradingUtils } from './tradingUtils' -import { marketManager } from 'international/market/marketOrders' -import { structureUtils } from 'room/structureUtils' - -export class TerminalManager { - communeManager: CommuneManager - room: Room - terminal: StructureTerminal - - constructor(communeManager: CommuneManager) { - this.communeManager = communeManager - } - - preTickRun() { - const room = this.communeManager.room +import { collectiveManager } from "international/collective" +import { Result } from "international/constants" +import { marketManager } from "international/market/marketOrders" +import { ResourceRequest, simpleAllies } from "international/simpleAllies/simpleAllies" +import { structureUtils } from "room/structureUtils" +import { customLog } from "utils/logging" +import { newID, utils } from "utils/utils" +import { ResourceTargets } from "../commune" +import { tradingUtils } from "./tradingUtils" + +export class TerminalProcs { + preTickRun(room: Room) { if (!room.terminal) return if (!structureUtils.isRCLActionable(room.terminal)) return - const resourceTargets = this.communeManager.resourceTargets + const resourceTargets = room.communeManager.resourceTargets this.createTerminalRequests(room, resourceTargets) } - run() { - const { room } = this.communeManager + run(room: Room) { // Stop if there is no terminal if (!room.terminal) return if (!structureUtils.isRCLActionable(room.terminal)) return if (room.terminal.cooldown > 0) return - const resourceTargets = this.communeManager.resourceTargets + const resourceTargets = room.communeManager.resourceTargets if (this.respondToTerminalRequests(room, resourceTargets) === Result.action) return if (this.respondToAllyRequests(room, resourceTargets) === Result.action) return @@ -57,7 +42,7 @@ export class TerminalManager { private createTerminalRequests(room: Room, resourceTargets: ResourceTargets) { const resourcesInStoringStructures = - this.communeManager.room.roomManager.resourcesInStoringStructures + room.roomManager.resourcesInStoringStructures for (const key in resourceTargets.min) { const resourceType = key as ResourceConstant let targetAmount = resourceTargets.min[resourceType] @@ -91,11 +76,11 @@ export class TerminalManager { resourceTargets: ResourceTargets, ): [TerminalRequest, string, number] { const resourcesInStoringStructures = - this.communeManager.room.roomManager.resourcesInStoringStructures + room.roomManager.resourcesInStoringStructures const storedEnergy = resourcesInStoringStructures[RESOURCE_ENERGY] const budget = Math.min( - storedEnergy - this.communeManager.minStoredEnergy, - this.communeManager.room.terminal.store.getUsedCapacity(RESOURCE_ENERGY), + storedEnergy - room.communeManager.minStoredEnergy, + room.terminal.store.getUsedCapacity(RESOURCE_ENERGY), ) let lowestScore = Infinity @@ -107,7 +92,7 @@ export class TerminalManager { const request = collectiveManager.terminalRequests[ID] // Don't respond to requests for this room - if (request.roomName === this.communeManager.room.name) continue + if (request.roomName === room.name) continue if (resourceTargets.min[request.resource] === undefined) continue const storedResource = resourcesInStoringStructures[request.resource] || 0 @@ -157,7 +142,7 @@ export class TerminalManager { const sendAmount = tradingUtils.findLargestTransactionAmount( budget, maxSendAmount, - this.communeManager.room.name, + room.name, request.roomName, ) / 2 customLog( @@ -182,7 +167,7 @@ export class TerminalManager { if (request.amount * 0.1 > sendAmount) continue const score = - Game.map.getRoomLinearDistance(this.communeManager.room.name, request.roomName) + + Game.map.getRoomLinearDistance(room.name, request.roomName) + request.priority * 100 if (score >= lowestScore) continue @@ -198,15 +183,15 @@ export class TerminalManager { private respondToTerminalRequests(room: Room, resourceTargets: ResourceTargets) { // We don't have enough energy to help other rooms if ( - this.communeManager.room.roomManager.resourcesInStoringStructures.energy < - this.communeManager.minStoredEnergy + room.roomManager.resourcesInStoringStructures.energy < + room.communeManager.minStoredEnergy ) return Result.noAction const [request, ID, amount] = this.findBestTerminalRequest(room, resourceTargets) if (!request) return Result.noAction - this.communeManager.room.terminal.send( + room.terminal.send( request.resource, amount, request.roomName, @@ -216,7 +201,7 @@ export class TerminalManager { // Consequences delete collectiveManager.terminalRequests[ID] - this.communeManager.room.terminal.intended = true + room.terminal.intended = true return Result.action } @@ -225,12 +210,12 @@ export class TerminalManager { resourceTargets: ResourceTargets, ): [ResourceRequest, number] { const resourcesInStoringStructures = - this.communeManager.room.roomManager.resourcesInStoringStructures + room.roomManager.resourcesInStoringStructures const minStoredEnergy = resourceTargets.min[RESOURCE_ENERGY] * 1.1 const storedEnergy = resourcesInStoringStructures[RESOURCE_ENERGY] const budget = Math.min( storedEnergy - minStoredEnergy, - this.communeManager.room.terminal.store[RESOURCE_ENERGY], + room.terminal.store[RESOURCE_ENERGY], ) let lowestScore = Infinity @@ -241,7 +226,7 @@ export class TerminalManager { const allyResourceRequests = simpleAllies.allySegmentData.requests.resource for (const request of allyResourceRequests) { // Don't respond to requests for this room - if (request.roomName === this.communeManager.room.name) continue + if (request.roomName === room.name) continue if (resourceTargets.min[request.resourceType] === undefined) continue if (Math.floor(request.amount) <= 0) continue @@ -252,7 +237,7 @@ export class TerminalManager { const sendAmount = tradingUtils.findLargestTransactionAmount( budget, Math.min(request.amount, storedResource - minStoredResource), - this.communeManager.room.name, + room.name, request.roomName, ) @@ -260,7 +245,7 @@ export class TerminalManager { if (request.amount * 0.1 > sendAmount) continue const score = - Game.map.getRoomLinearDistance(this.communeManager.room.name, request.roomName) + + Game.map.getRoomLinearDistance(room.name, request.roomName) + request.priority * 100 if (score >= lowestScore) continue @@ -280,15 +265,15 @@ export class TerminalManager { // We don't have enough energy to help other rooms if ( - this.communeManager.room.roomManager.resourcesInStoringStructures.energy < - this.communeManager.minStoredEnergy + room.roomManager.resourcesInStoringStructures.energy < + room.communeManager.minStoredEnergy ) return false const [request, amount] = this.findBestAllyRequest(room, resourceTargets) if (!request) return Result.noAction - this.communeManager.room.terminal.send( + room.terminal.send( request.resourceType, amount, request.roomName, @@ -297,7 +282,7 @@ export class TerminalManager { // Consequences - this.communeManager.room.terminal.intended = true + room.terminal.intended = true request.amount -= amount return Result.action @@ -354,3 +339,5 @@ export class TerminalManager { return Result.noAction } } + +export const terminalProcs = new TerminalProcs() diff --git a/src/room/creeps/endTickCreepManager.ts b/src/room/creeps/endTickCreepManager.ts index 561bc3d33..7a0920704 100644 --- a/src/room/creeps/endTickCreepManager.ts +++ b/src/room/creeps/endTickCreepManager.ts @@ -12,6 +12,7 @@ import { customLog } from 'utils/logging' import { forCoordsInRange, randomOf, randomRange, randomTick } from 'utils/utils' import { RoomManager } from '../room' import { packCoord, unpackCoord } from 'other/codec' +import { communeUtils } from 'room/commune/communeUtils' export class EndTickCreepManager { roomManager: RoomManager @@ -21,69 +22,8 @@ export class EndTickCreepManager { } public run() { - const { room } = this.roomManager if (!this.roomManager.room.myCreeps.length) return - if ( - Memory.rooms[room.name][RoomMemoryKeys.type] === RoomTypes.commune && - room.communeManager.spawningStructuresManager.activeSpawns - ) { - for (const spawn of room.communeManager.spawningStructuresManager.activeSpawns) { - const creep = Game.creeps[spawn.spawning.name] - - if (!creep.moveRequest) continue - if (!room.moveRequests[creep.moveRequest]) { - creep.moved = MovedTypes.moved - continue - } - - room.roomManager.recurseMoveRequestOrder += 1 - - const creepNameAtPos = - room.creepPositions[creep.moveRequest] || - room.powerCreepPositions[creep.moveRequest] - if (!creepNameAtPos) { - creep.moved = creep.moveRequest - delete room.moveRequests[creep.moveRequest] - - if (global.settings.roomVisuals) { - const moved = unpackCoord(creep.moved) - - room.visual.rect(moved.x - 0.5, moved.y - 0.5, 1, 1, { - fill: customColors.black, - opacity: 0.7, - }) - } - continue - } - - // There is a creep at the position - // just get us space to move into - - const creepAtPos = Game.creeps[creepNameAtPos] || Game.powerCreeps[creepNameAtPos] - const packedCoord = packCoord(creep.pos) - - if (global.settings.roomVisuals) { - const moved = unpackCoord(creep.moveRequest) - - room.visual.rect(moved.x - 0.5, moved.y - 0.5, 1, 1, { - fill: customColors.pink, - opacity: 0.7, - }) - } - - if (creepAtPos.shove(new Set([packedCoord]))) { - creep.room.errorVisual(unpackCoord(creep.moveRequest)) - - creep.moved = creep.moveRequest - delete room.moveRequests[creep.moved] - delete creep.moveRequest - } - - continue - } - } - // Power creeps go first for (const className of powerCreepClassNames) { diff --git a/src/room/logisticsProcs.ts b/src/room/logisticsProcs.ts index 2e7bb07a1..e1b0df137 100644 --- a/src/room/logisticsProcs.ts +++ b/src/room/logisticsProcs.ts @@ -195,6 +195,37 @@ export class LogisticsProcs { }) } } + + createCommuneStoringStructureLogisticsRequests(room: Room) { + + const storingStructures: AnyStoreStructure[] = [] + + const storage = room.storage + if (storage) storingStructures.push(storage) + + const terminal = room.terminal + if (terminal && !terminal.effectsData.get(PWR_DISRUPT_TERMINAL)) + storingStructures.push(terminal) + + for (const structure of storingStructures) { + room.createRoomLogisticsRequest({ + target: structure, + onlyFull: true, + type: RoomLogisticsRequestTypes.offer, + priority: 0, + }) + + // We are close to full + + if (structure.usedReserveStore > structure.store.getCapacity() * 0.9) continue + + room.createRoomLogisticsRequest({ + target: structure, + type: RoomLogisticsRequestTypes.transfer, + priority: 100, + }) + } + } } export const logisticsProcs = new LogisticsProcs() diff --git a/src/types.d.ts b/src/types.d.ts index 0cb5ae3fc..8649673c4 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -45,6 +45,7 @@ import { import { UserScriptTemplate } from 'other/userScript/userScript.example' import { StatsMemory } from 'types/stats' import { WeightLayers, WeightsByID } from 'room/construction/neuralNetwork/network' +import { OrganizedSpawns } from 'room/commune/spawning/spawningStructureProcs' declare global { interface ProfilerData { @@ -518,6 +519,8 @@ declare global { considerFunneled: boolean + organizedSpawns: OrganizedSpawns | false + // Commune // Functions From 53065d2198e84762058c7a02b75af80737539c12 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sun, 14 Jan 2024 16:19:56 -0800 Subject: [PATCH 084/190] remove dead creep data --- src/international/flags.ts | 2 +- src/room/commune/commune.ts | 3 --- src/room/creeps/creepData.ts | 9 ++++++++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/international/flags.ts b/src/international/flags.ts index f52d7fc9c..4445a8950 100644 --- a/src/international/flags.ts +++ b/src/international/flags.ts @@ -17,8 +17,8 @@ import { roomNameUtils } from 'room/roomNameUtils' import { packCoord } from 'other/codec' import { findObjectWithID, isAlly } from 'utils/utils' import { customLog } from 'utils/logging' -import { spawnRequestConstructorsByType } from 'room/commune/spawning/spawningStructures' import { roomUtils } from 'room/roomUtils' +import { spawnRequestConstructorsByType } from 'room/commune/spawning/spawningStructureProcs' export class FlagManager { run() { diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index 7874e7d60..dcbe25170 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -1,5 +1,4 @@ import { - findLinkThroughput, findObjectWithID, getRange, packAsNum, @@ -16,7 +15,6 @@ import './workRequest' import './combatRequest' import { creepRoles, - packedPosLength, RoomMemoryKeys, RoomTypes, rampartUpkeepCost, @@ -42,7 +40,6 @@ import { collectiveManager } from 'international/collective' import { ConstructionManager } from 'room/construction/construction' import { roomNameUtils } from 'room/roomNameUtils' import { LogTypes, customLog } from 'utils/logging' -import { communeUtils } from './communeUtils' import { communeProcs } from './communeProcs' import { structureUtils } from 'room/structureUtils' import { logisticsProcs } from 'room/logisticsProcs' diff --git a/src/room/creeps/creepData.ts b/src/room/creeps/creepData.ts index 469418eb1..ce14ede53 100644 --- a/src/room/creeps/creepData.ts +++ b/src/room/creeps/creepData.ts @@ -35,8 +35,15 @@ export class CreepDataManager { } private updateCreep(creepName: string) { + + if (!Game.creeps[creepName]) { + delete this.data[creepName] + return + } + const data = this.data[creepName] - /* delete . */ + + /* .delete */ if (utils.isTickInterval(15)) { } From 5eeab97fcac60441c4a8a72c622641d5fd1c47f8 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sun, 14 Jan 2024 20:22:55 -0800 Subject: [PATCH 085/190] fix hauler energy delivery in small amounts --- src/room/commune/commune.ts | 3 --- src/room/creeps/creepUtils.ts | 36 ++++++++++++++++++++++------------- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index dcbe25170..957a28294 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -8,8 +8,6 @@ import { forCoordsAroundRange, utils, } from 'utils/utils' -import './spawning/spawningStructures' - import './defence' import './workRequest' import './combatRequest' @@ -28,7 +26,6 @@ import './links' import { RemotesManager } from './remotesManager' import { WorkRequestManager } from './workRequest' import { CombatRequestManager } from './combatRequest' -import './haulerSize' import { DefenceManager } from './defence' import { HaulRequestManager } from './haulRequestManager' import { HaulerNeedManager } from './haulerNeed' diff --git a/src/room/creeps/creepUtils.ts b/src/room/creeps/creepUtils.ts index a5d7ef7e1..b7b2557b5 100644 --- a/src/room/creeps/creepUtils.ts +++ b/src/room/creeps/creepUtils.ts @@ -1,5 +1,5 @@ import { - CreepLogisticsRequestKeys, + CreepLogisticsRequestKeys, CreepMemoryKeys, ReservedCoordTypes, Result, @@ -22,7 +22,11 @@ import { collectiveManager } from 'international/collective' import { creepClasses } from './creepClasses' import { communeUtils } from 'room/commune/communeUtils' import { myCreepUtils } from './myCreepUtils' -import { CreepLogisticsRequest, FindNewRoomLogisticsRequestArgs, RoomLogisticsRequest } from 'types/roomRequests' +import { + CreepLogisticsRequest, + FindNewRoomLogisticsRequestArgs, + RoomLogisticsRequest, +} from 'types/roomRequests' export class CreepUtils { expandName(creepName: string) { @@ -44,14 +48,14 @@ export class CreepUtils { if (creep._commune !== undefined) return creep._commune const expandedName = this.expandName(creep.name) - return creep._commune = Game.rooms[expandedName[1]] + return (creep._commune = Game.rooms[expandedName[1]]) } customIDCreep(creep: Creep) { if (creep._customID !== undefined) return creep._customID const expandedName = this.expandName(creep.name) - return creep._customID = parseInt(expandedName[2]) + return (creep._customID = parseInt(expandedName[2])) } findEnergySpentOnConstruction( @@ -214,7 +218,9 @@ export class CreepUtils { creep.room.roomLogisticsRequests[RoomLogisticsRequestTypes.withdraw][ bestRequest.delivery ] || - creep.room.roomLogisticsRequests[RoomLogisticsRequestTypes.offer][bestRequest.delivery] || + creep.room.roomLogisticsRequests[RoomLogisticsRequestTypes.offer][ + bestRequest.delivery + ] || creep.room.roomLogisticsRequests[RoomLogisticsRequestTypes.pickup][bestRequest.delivery] nextCreepRequest = { @@ -225,7 +231,8 @@ export class CreepUtils { creep.nextStore[nextRequest.resourceType] + creep.freeNextStore, creepRequest[CreepLogisticsRequestKeys.amount], ), - [CreepLogisticsRequestKeys.noReserve]: creepRequest[CreepLogisticsRequestKeys.noReserve], + [CreepLogisticsRequestKeys.noReserve]: + creepRequest[CreepLogisticsRequestKeys.noReserve], [CreepLogisticsRequestKeys.delivery]: true, } @@ -337,7 +344,11 @@ export class CreepUtils { ]) } - canAcceptRoomLogisticsRequest(creep: Creep, requestType: RoomLogisticsRequestTypes, requestID: string) { + canAcceptRoomLogisticsRequest( + creep: Creep, + requestType: RoomLogisticsRequestTypes, + requestID: string, + ) { const request = creep.room.roomLogisticsRequests[requestType][requestID] const target = findObjectWithID(request.targetID) @@ -463,8 +474,7 @@ export class CreepUtils { return true } - -createBackupStoringStructuresRoomLogisticsRequest( + createBackupStoringStructuresRoomLogisticsRequest( creep: Creep, types: Set, resourceTypes: Set, @@ -551,9 +561,9 @@ createBackupStoringStructuresRoomLogisticsRequest( if (request.delivery) { // Take extra energy in case its needed - /* if (request.resourceType === RESOURCE_ENERGY) { + if (request.resourceType === RESOURCE_ENERGY) { return creep.nextStore[request.resourceType] + creep.freeNextStore - } */ + } return Math.min(request.amount, creep.nextStore[request.resourceType] + creep.freeNextStore) } @@ -596,7 +606,8 @@ createBackupStoringStructuresRoomLogisticsRequest( if (structure.nextHits / structure.hitsMax > repairThreshold) continue - const score = getRange(creep.pos, structure.pos) + (structure.nextHits / structure.hitsMax) * 20 + const score = + getRange(creep.pos, structure.pos) + (structure.nextHits / structure.hitsMax) * 20 if (score >= lowestScore) continue lowestScore = score @@ -617,7 +628,6 @@ createBackupStoringStructuresRoomLogisticsRequest( return this.findNewRepairTarget(creep) || this.findNewRampartRepairTarget(creep) } - } export const creepUtils = new CreepUtils() From 77d54b5096ca486355dc595f96ab194f6226f9ae Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sun, 14 Jan 2024 20:32:18 -0800 Subject: [PATCH 086/190] fix hauler slow logistics response --- src/room/creeps/roleManagers/commune/hauler.ts | 10 +++++----- .../creeps/roleManagers/international/allyVanguard.ts | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index f94c1dd34..6bb31d3c4 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -353,7 +353,7 @@ export class Hauler extends Creep { if (this.room.name !== this.commune.name) { // Fulfill requests near the hauler - creepProcs.runRoomLogisticsRequestAdvanced(this, { + creepProcs.runRoomLogisticsRequestsAdvanced(this, { types: new Set([ RoomLogisticsRequestTypes.pickup, RoomLogisticsRequestTypes.withdraw, @@ -468,7 +468,7 @@ export class Hauler extends Creep { if (isBySourceHarvestPos || creepMemory[CreepMemoryKeys.roomLogisticsRequests].length > 0) { const freeNextStoreInitial = this.freeNextStore - creepProcs.runRoomLogisticsRequestAdvanced(this, { + creepProcs.runRoomLogisticsRequestsAdvanced(this, { types: new Set([RoomLogisticsRequestTypes.pickup, RoomLogisticsRequestTypes.withdraw]), resourceTypes: new Set([RESOURCE_ENERGY]), conditions: request => { @@ -503,7 +503,7 @@ export class Hauler extends Creep { // Fulfill requests near the hauler - creepProcs.runRoomLogisticsRequestAdvanced(this, { + creepProcs.runRoomLogisticsRequestsAdvanced(this, { types: new Set([ RoomLogisticsRequestTypes.pickup, RoomLogisticsRequestTypes.withdraw, @@ -560,7 +560,7 @@ export class Hauler extends Creep { if (this.room.name === commune.name) { creepProcs.passiveRenew(this) - creepProcs.runRoomLogisticsRequestAdvanced(this, { + creepProcs.runRoomLogisticsRequestsAdvanced(this, { types: new Set([RoomLogisticsRequestTypes.transfer]), resourceTypes: new Set([RESOURCE_ENERGY]), noDelivery: true, @@ -1040,7 +1040,7 @@ export class Hauler extends Creep { runCommuneLogistics?() { creepProcs.passiveRenew(this) - if (creepProcs.runRoomLogisticsRequestAdvanced(this) === Result.action) { + if (creepProcs.runRoomLogisticsRequestsAdvanced(this) === Result.action) { this.relay() return Result.action } diff --git a/src/room/creeps/roleManagers/international/allyVanguard.ts b/src/room/creeps/roleManagers/international/allyVanguard.ts index d99030e32..d8188095a 100644 --- a/src/room/creeps/roleManagers/international/allyVanguard.ts +++ b/src/room/creeps/roleManagers/international/allyVanguard.ts @@ -105,7 +105,7 @@ export class AllyVanguard extends Creep { if (this.room.controller.owner) return false if ( - creepProcs.runRoomLogisticsRequestAdvanced(this, { + creepProcs.runRoomLogisticsRequestsAdvanced(this, { resourceTypes: new Set([RESOURCE_ENERGY]), }) === Result.success ) From 4ecc2b2fdab04b17b50f76aed89afa17f059fe53 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 20 Jan 2024 21:34:53 -0800 Subject: [PATCH 087/190] optimize funneling, fastFillerCoords finding --- src/international/collective.ts | 62 +++++- src/international/constants.ts | 7 + src/international/creepOrganizer.ts | 24 +-- src/international/flags.ts | 58 ++++++ src/other/profilerRegister.ts | 2 + src/room/commune/commune.ts | 74 +------ src/room/commune/communeData.ts | 5 + src/room/commune/communeProcs.ts | 31 +-- src/room/commune/communeUtils.ts | 15 ++ src/room/commune/spawning/spawnRequests.ts | 19 +- src/room/creeps/creepProcs.ts | 36 +++- src/room/creeps/creepUtils.ts | 6 +- .../creeps/roleManager.new/commune/builder.ts | 2 - .../commune/controllerUpgrader.ts | 2 - .../creeps/roleManager.new/commune/hauler.ts | 2 - .../creeps/roleManagers/commune/fastFiller.ts | 17 +- src/room/room.ts | 9 +- src/room/roomData.ts | 3 + src/room/roomObjectAdditions.ts | 12 +- src/room/roomProcs.ts | 33 ++++ src/room/roomUtils.ts | 184 +++++++++++++++++- src/room/roomVisuals.ts | 4 +- src/types.d.ts | 8 +- src/utils/utils.ts | 1 + 24 files changed, 482 insertions(+), 134 deletions(-) create mode 100644 src/room/roomProcs.ts diff --git a/src/international/collective.ts b/src/international/collective.ts index 4b1710668..14fc55337 100644 --- a/src/international/collective.ts +++ b/src/international/collective.ts @@ -9,6 +9,7 @@ import { minerals, haulerUpdateDefault, } from './constants' +import { communeUtils } from 'room/commune/communeUtils' const periodicUpdateInterval = randomIntRange(100, 200) @@ -258,7 +259,7 @@ export class CollectiveManager extends Sleepable { /** * Commune names sorted by funnel priority */ - get funnelOrder() { + getFunnelOrder() { if (this._funnelOrder) return this._funnelOrder let funnelOrder: string[] = [] @@ -296,10 +297,15 @@ export class CollectiveManager extends Sleepable { _funnelingRoomNames: Set /** - * The names of rooms currently being funneled + * The unordered names of rooms currently being funneled. Does 2 passes. + * For a room to be in this list, it must be part of a censecutive line starting from index 0. + * Take an example where x means the room is not wanting to be funneled and y means they are: + * {y, y, y, x, y}. + * The last room wants to be funneled, however, only the first 3 rooms will be, excluding the last 2: {y, y, y, x, x}. */ - get funnelingRoomNames() { + getFunnelingRoomNames() { if (this._funnelingRoomNames) return this._funnelingRoomNames + /* if (this._funnelingRoomNames) return this._funnelingRoomNames const funnelingRoomNames = new Set() const funnelTargets = this.funnelOrder @@ -316,10 +322,59 @@ export class CollectiveManager extends Sleepable { funnelingRoomNames.add(roomName) } + this._funnelingRoomNames = funnelingRoomNames + return funnelingRoomNames */ + + const funnelOrder = this.getFunnelOrder() + // Rooms that want to get funneled might not get to be if they aren't in line for funneling + const funnelWanters = this.getFunnelWanters(funnelOrder) + + const funnelingRoomNames = new Set() + + for (const roomName of funnelOrder) { + if (!funnelWanters.has(roomName)) { + break + } + + // Consider it funneled + + funnelingRoomNames.add(roomName) + } + this._funnelingRoomNames = funnelingRoomNames return funnelingRoomNames } + /** + * Qualifying rooms either want to be funneled, or the room next in line to get funneled wants to be funneled. + * Take a line where x means the rooms don't independently want to be funneled, and y means they do {x, x, y, y, x}. + * This function will work from back to front so that if a previous room wants to be funneled, so will the proceeding one. + * In this example, the set should convert to {y, y, y, y, x} + */ + private getFunnelWanters(funnelOrder: string[]) { + const funnelWanters = new Set() + let previousWantsToBeIndependentlyFunneled: boolean + + // Find what rooms want to get funneled + + for (let i = funnelOrder.length - 1; i >= 0; i -= 1) { + const roomName = funnelOrder[i] + const room = Game.rooms[roomName] + + const wantsToBeFunneledIndependent = communeUtils.wantsToBeFunneledIndependent(room) + + if (!(previousWantsToBeIndependentlyFunneled && wantsToBeFunneledIndependent)) { + previousWantsToBeIndependentlyFunneled = false + } + + previousWantsToBeIndependentlyFunneled = wantsToBeFunneledIndependent + + funnelWanters.add(roomName) + } + + return funnelWanters + } + _resourcesInStoringStructures: Partial<{ [key in ResourceConstant]: number }> get resourcesInStoringStructures() { if (this._resourcesInStoringStructures) return this._resourcesInStoringStructures @@ -338,7 +393,6 @@ export class CollectiveManager extends Sleepable { continue } - this._resourcesInStoringStructures[resource] += resources[resource] } } diff --git a/src/international/constants.ts b/src/international/constants.ts index 806b52325..2af74ccdb 100644 --- a/src/international/constants.ts +++ b/src/international/constants.ts @@ -1473,3 +1473,10 @@ export enum FlagNames { } export const IDUpdateInterval = randomIntRange(50, 100) + +export const creepDamageEvents = new Set([ + EVENT_ATTACK_TYPE_MELEE, + EVENT_ATTACK_TYPE_DISMANTLE, + EVENT_ATTACK_TYPE_RANGED, + EVENT_ATTACK_TYPE_RANGED_MASS, +]) diff --git a/src/international/creepOrganizer.ts b/src/international/creepOrganizer.ts index bf6d0e3a2..b2ba52de3 100644 --- a/src/international/creepOrganizer.ts +++ b/src/international/creepOrganizer.ts @@ -1,5 +1,5 @@ import { creepClasses } from 'room/creeps/creepClasses' -import { customColors, remoteRoles, roomLogisticsRoles } from './constants' +import { CreepMemoryKeys, customColors, remoteRoles, roomLogisticsRoles } from './constants' import { customLog } from 'utils/logging' import { collectiveManager, CollectiveManager } from './collective' import { packCoord } from 'other/codec' @@ -23,6 +23,7 @@ export class CreepOrganizer { Game.creeps[creepName].initRun() } } + private organizeCreep(creepName: string) { let creep = Game.creeps[creepName] @@ -36,6 +37,16 @@ export class CreepOrganizer { return } + // Kill the creep if it has no valid commune (we don't know what to do with it) + + const commune = creep.commune + if (!commune || !commune.controller.my) { + creep.suicide() + return + } + + // + collectiveManager.creepCount += 1 creepDataManager.initCreep(creepName) @@ -67,16 +78,7 @@ export class CreepOrganizer { if (roomLogisticsRoles.has(role)) { creepProcs.updateLogisticsRequests(creep) } - - // Get the commune the creep is from - - const commune = creep.commune - if (!commune) return - - if (!commune.controller.my) { - creep.suicide() - return - } + creepProcs.registerInterTickRepairTarget(creep) // initialize inter-tick data for the creep if it isn't already creepDataManager.data[creep.name] ??= {} diff --git a/src/international/flags.ts b/src/international/flags.ts index 4445a8950..ae7fd5574 100644 --- a/src/international/flags.ts +++ b/src/international/flags.ts @@ -19,6 +19,7 @@ import { findObjectWithID, isAlly } from 'utils/utils' import { customLog } from 'utils/logging' import { roomUtils } from 'room/roomUtils' import { spawnRequestConstructorsByType } from 'room/commune/spawning/spawningStructureProcs' +import { roomProcs } from 'room/roomProcs' export class FlagManager { run() { @@ -990,6 +991,63 @@ export class FlagManager { ], }) } + + private fastFillerPositions(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const room = Game.rooms[roomName] + if (!room) { + flag.setColor(COLOR_RED) + return + } + + const fastFillerPositions = room.roomManager.fastFillerPositions + for (const pos of fastFillerPositions) { + room.coordVisual(pos.x, pos.y) + } + } + + private funneling(flagName: string, flagNameParts: string[]) { + const flag = Game.flags[flagName] + const roomName = flagNameParts[1] || flag.pos.roomName + const room = Game.rooms[roomName] + if (!room) { + flag.setColor(COLOR_RED) + return + } + + if (!room.communeManager) { + flag.setColor(COLOR_RED) + return + } + + const funnelOrder = collectiveManager.getFunnelOrder() + const funnelWanters = Array.from(collectiveManager.getFunnelingRoomNames()) + + const headers = ['funnel order', 'funnel wanted'] + const data: string[][] = [] + + const maxIterations = Math.min(funnelOrder.length, funnelWanters.length) + for (let i = 0; i < maxIterations; i++) { + const row: string[] = [] + + if (funnelOrder[i]) { + row.push(funnelOrder[i]) + } else { + row.push('x') + } + + if (funnelWanters[i]) { + row.push(funnelWanters[i]) + } else { + row.push('x') + } + + data.push(row) + } + + roomProcs.tableVisual(room, 'Funneling', headers, data) + } } export const flagManager = new FlagManager() diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index 7669a4d5f..207616e3d 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -103,6 +103,7 @@ import { SpawningStructureUtils } from 'room/commune/spawning/spawningStructureU import { NukerProcs } from 'room/commune/nukerProcs' import { ObserverProcs } from 'room/commune/observerProcs' import { PowerSpawnProcs } from 'room/commune/powerSpawnProcs' +import { RoomProcs } from 'room/roomProcs' export function profilerRegister() { // Classes @@ -154,6 +155,7 @@ export function profilerRegister() { profiler.registerClass(Operator, 'Operator') profiler.registerClass(RoomNameUtils, 'RoomNameUtils') profiler.registerClass(RoomUtils, 'RoomUtils') + profiler.registerClass(RoomProcs, 'RoomProcs') profiler.registerClass(CommuneUtils, 'CommuneUtils') profiler.registerClass(RoomDataManager, 'RoomDataManager') profiler.registerClass(CommuneDataManager, 'CommuneDataManager') diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index 957a28294..02bcfde50 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -180,7 +180,6 @@ export class CommuneManager { } this.room.roomManager.communePlanner.attemptPlan(this.room) - communeProcs.registerFunneling(room) communeProcs.getRCLUpdate(room) if (!roomMemory[RoomMemoryKeys.combatRequests]) roomMemory[RoomMemoryKeys.combatRequests] = [] @@ -649,6 +648,9 @@ export class CommuneManager { } private _defensiveRamparts: StructureRampart[] + /** + * This should be cached inter-tick as IDs + */ get defensiveRamparts() { if (this._defensiveRamparts) return this._defensiveRamparts @@ -891,73 +893,6 @@ export class CommuneManager { } return ignoreCoords - /* const fastFillerLink = this.room.roomManager.fastFillerLink - if ( - fastFillerLink && - fastFillerLink.RCLActionable && - this.room.roomManager.hubLink && - this.room.roomManager.hubLink.RCLActionable && - this.storingStructures.length && - this.room.myCreeps.hubHauler.length - ) { - const fastFillerPositions = this.room.roomManager.fastFillerPositions - for (const pos of fastFillerPositions) { - // Make sure the position is reserved (presumably by a fastFiller) - - const reserveType = this.room.roomManager.reservedCoords.get(packCoord(pos)) - if (!reserveType) continue - if (reserveType < ReservedCoordTypes.dying) continue - - forCoordsAroundRange(pos, 1, coord => { - ignoreCoords.add(packCoord(coord)) - }) - } - - return ignoreCoords - } - - if (this.room.roomManager.fastFillerContainers.length) { - const fastFillerPositions = this.room.roomManager.fastFillerPositions - for (const pos of fastFillerPositions) { - // Make sure the position is reserved (presumably by a fastFiller) - - const reserveType = this.room.roomManager.reservedCoords.get(packCoord(pos)) - if (!reserveType) continue - if (reserveType < ReservedCoordTypes.dying) continue - - // Only ignore coords if the fastFiller pos is in range of a container - - let hasContainer: boolean - const potentialIgnoreCoords = new Set() - - forCoordsAroundRange(pos, 1, coord => { - const structure = this.room.findStructureAtCoord(coord, structure => { - return structure.structureType === STRUCTURE_CONTAINER - }) - if (structure) { - hasContainer = true - return - } - - // There is potentially a spawning structure on this coord - - potentialIgnoreCoords.add(packCoord(coord)) - }) - - if (!hasContainer) continue - - for (const packedCoord of potentialIgnoreCoords) { - ignoreCoords.add(packedCoord) - } - } - - return ignoreCoords - } - - // There are no valid links or containers in the fastFiller - - return ignoreCoords - */ } /** @@ -1132,7 +1067,8 @@ export class CommuneManager { private energyMinResourceTarget(storingStructuresCapacity: number) { if (this.room.controller.level < 8) { - if (collectiveManager.funnelOrder[0] === this.room.name) { + const funnelOrder = collectiveManager.getFunnelOrder() + if (funnelOrder[0] === this.room.name) { return Math.min( this.storedEnergyUpgradeThreshold * 1.2 + this.upgradeTargetDistance(), storingStructuresCapacity / 2, diff --git a/src/room/commune/communeData.ts b/src/room/commune/communeData.ts index 727134025..9d87c7ca6 100644 --- a/src/room/commune/communeData.ts +++ b/src/room/commune/communeData.ts @@ -10,6 +10,11 @@ interface CommuneData { maxUpgradeStrength: number estimatedCommuneSourceIncome: number[] towerRampartRepairTreshold: number + rampartDamageCoords: number + /** + * The amount of hits for each rampart the previous tick, if exists + */ + previousRampartHits: number } /** diff --git a/src/room/commune/communeProcs.ts b/src/room/commune/communeProcs.ts index 25ea373fe..fe9434232 100644 --- a/src/room/commune/communeProcs.ts +++ b/src/room/commune/communeProcs.ts @@ -8,18 +8,6 @@ import { randomIntRange } from 'utils/utils' * Minor processes for communes */ export class CommuneProcs { - registerFunneling(room: Room) { - // We need a terminal and for it be to active - if (!room.terminal || room.controller.level < 6) return - - const desiredStrength = communeUtils.getDesiredUpgraderStrength(room) - const maxStrength = communeUtils.getMaxUpgradeStrength(room) - // We do not have enough desire - if (desiredStrength < maxStrength) return - - // We have enough desired strength to register our room as fully funneled - room.considerFunneled = true - } getRCLUpdate(room: Room) { const data = communeDataManager.data[room.name] @@ -64,6 +52,25 @@ export class CommuneProcs { roomMemory[RoomMemoryKeys.minHaulerCost] = Math.max(Memory.minHaulerCost, 100 * room.roomManager.structures.spawn.length) roomMemory[RoomMemoryKeys.minHaulerCostUpdate] = Game.time + randomIntRange(0, 10) } + + registerRampartDamage(room: Room) { + if (!room.roomManager.enemyAttackers.length) return + + const data = communeDataManager.data[room.name] + if (data.rampartDamageCoords === undefined || room.roomManager.structureUpdate) { + + this.initRampartDamageCoords(room) + } + } + + private initRampartDamageCoords(room: Room) { + + const ramparts = room.communeManager.defensiveRamparts + for (const rampart of ramparts) { + + + } + } } export const communeProcs = new CommuneProcs() diff --git a/src/room/commune/communeUtils.ts b/src/room/commune/communeUtils.ts index 174f279b2..7ca8c4caa 100644 --- a/src/room/commune/communeUtils.ts +++ b/src/room/commune/communeUtils.ts @@ -257,6 +257,21 @@ export class CommuneUtils { } return room.organizedSpawns } + + /** + * Wether the commune wants to be funneled for upgrading, independent of what other rooms want. + * Assumes the room already meats the requirements to be a funnel target + */ + wantsToBeFunneledIndependent(room: Room) { + + const desiredStrength = communeUtils.getDesiredUpgraderStrength(room) + const maxStrength = communeUtils.getMaxUpgradeStrength(room) + // We do not have enough desire + if (desiredStrength < maxStrength) return false + + // We have enough desired strength to register our room as fully funneled + return true + } } export const communeUtils = new CommuneUtils() diff --git a/src/room/commune/spawning/spawnRequests.ts b/src/room/commune/spawning/spawnRequests.ts index 85d7cab65..9f121fb14 100644 --- a/src/room/commune/spawning/spawnRequests.ts +++ b/src/room/commune/spawning/spawnRequests.ts @@ -846,7 +846,9 @@ export class SpawnRequestsManager { creepsQuota: 1, minCostPerCreep: 200, priority, - memoryAdditions: {}, + memoryAdditions: { + [CreepMemoryKeys.preferRoads]: true, + }, } } @@ -866,7 +868,7 @@ export class SpawnRequestsManager { // If there is a terminal and it is sufficient RCL, and there's a funnel target and we aren't it, then don't allow upgraders to spawn if (this.communeManager.room.terminal && this.communeManager.room.controller.level >= 6) { - const funnelingRoomNames = collectiveManager.funnelingRoomNames + const funnelingRoomNames = collectiveManager.getFunnelingRoomNames() if ( !funnelingRoomNames.has(this.communeManager.room.name) ) { @@ -970,11 +972,14 @@ export class SpawnRequestsManager { } } - const controllerLink = this.communeManager.controllerLink - const maxCreeps = - controllerLink && structureUtils.isRCLActionable(controllerLink) - ? this.communeManager.room.roomManager.upgradePositions.length - : this.communeManager.room.roomManager.upgradePositions.length - 1 + const upgradePositions = this.communeManager.room.roomManager.upgradePositions + let maxCreeps = upgradePositions.length + + // If the upgrade structure is a link, then it's the controllerLink + if (upgradeStructure instanceof StructureLink) { + // Reduce max upgrader count by 1 to account for the tile the link takes up + maxCreeps -= 1 + } if (this.spawnEnergyCapacity >= 1400) { partsMultiplier = Math.round(partsMultiplier / 12) diff --git a/src/room/creeps/creepProcs.ts b/src/room/creeps/creepProcs.ts index 0590de0f7..f8d392b82 100644 --- a/src/room/creeps/creepProcs.ts +++ b/src/room/creeps/creepProcs.ts @@ -212,6 +212,7 @@ export class CreepProcs { return false } + /** * Overhead logic ran for dead creeps */ @@ -219,6 +220,24 @@ export class CreepProcs { const creepMemory = Memory.creeps[creepName] const role = creepUtils.roleName(creepName) } + + registerInterTickRepairTarget(creep: Creep) { + const creepMemory = Memory.creeps[creep.name] + if (!creepMemory[CreepMemoryKeys.structureTarget]) return + + const target = findObjectWithID(creepMemory[CreepMemoryKeys.structureTarget]) + if (!target) { + delete creepMemory[CreepMemoryKeys.structureTarget] + return + } + + this.registerRepairReservation(creep, target) + } + + private registerRepairReservation(creep: Creep, target: Structure) { + target.reserveHits += creep.store.getUsedCapacity(RESOURCE_ENERGY) * REPAIR_POWER + } + runRepair(creep: Creep, target: Structure) { // If we've already schedhuled a work intent, don't try to do another if (creep.worked) return Result.noAction @@ -246,6 +265,7 @@ export class CreepProcs { target.nextHits = Math.min(target.nextHits + workParts * REPAIR_POWER, target.hitsMax) return Result.success } + repairCommune(creep: Creep) { if (creep.needsResources()) { if ( @@ -279,6 +299,8 @@ export class CreepProcs { return false } + this.registerRepairReservation(creep, repairTarget) + creep.message = '⏩🔧' creep.room.targetVisual(creep.pos, repairTarget.pos) @@ -321,9 +343,12 @@ export class CreepProcs { // Find repair targets that don't include the current target, informing true if none were found - repairTarget = creepUtils.findNewRepairTarget(creep) || creepUtils.findNewRampartRepairTarget(creep) + repairTarget = + creepUtils.findNewRepairTarget(creep) || creepUtils.findNewRampartRepairTarget(creep) if (!repairTarget) return true + this.registerRepairReservation(creep, repairTarget) + creep.actionCoord = repairTarget.pos // We are already in repair range, no need to move closer @@ -1013,7 +1038,13 @@ export class CreepProcs { amount: number, resourceType: ResourceConstant = RESOURCE_ENERGY, ) { - /* amount = */ this.findCreepRoomLogisticsRequestAmount(creep, type, targetID, amount, resourceType) + /* amount = */ this.findCreepRoomLogisticsRequestAmount( + creep, + type, + targetID, + amount, + resourceType, + ) if (amount <= 0) return Result.fail creep.memory[CreepMemoryKeys.roomLogisticsRequests].push({ @@ -1099,7 +1130,6 @@ export class CreepProcs { spawn.renewed = true } } - } export const creepProcs = new CreepProcs() diff --git a/src/room/creeps/creepUtils.ts b/src/room/creeps/creepUtils.ts index b7b2557b5..3524fc33d 100644 --- a/src/room/creeps/creepUtils.ts +++ b/src/room/creeps/creepUtils.ts @@ -616,12 +616,14 @@ export class CreepUtils { if (!bestTarget) return false - creep.memory[CreepMemoryKeys.structureTarget] = bestTarget.id + const creepMemory = Memory.creeps[creep.name] + creepMemory[CreepMemoryKeys.structureTarget] = bestTarget.id return bestTarget } findRepairTarget(creep: Creep) { - if (creep.memory[CreepMemoryKeys.structureTarget]) { + const creepMemory = Memory.creeps[creep.name] + if (creepMemory[CreepMemoryKeys.structureTarget]) { const repairTarget = findObjectWithID(creep.memory[CreepMemoryKeys.structureTarget]) if (repairTarget) return repairTarget } diff --git a/src/room/creeps/roleManager.new/commune/builder.ts b/src/room/creeps/roleManager.new/commune/builder.ts index 5c19f0e7b..74bcfdc3f 100644 --- a/src/room/creeps/roleManager.new/commune/builder.ts +++ b/src/room/creeps/roleManager.new/commune/builder.ts @@ -5,8 +5,6 @@ import { findObjectWithID, getRange } from 'utils/utils' class BuilderManager extends DefaultRoleManager { role: CreepRoles = 'hauler' - // Allows for the pattern: instance.manager.run(instance) - manager = this runInitial(creep: Creep) { if (!creep.room.roomManager.cSiteTarget) return diff --git a/src/room/creeps/roleManager.new/commune/controllerUpgrader.ts b/src/room/creeps/roleManager.new/commune/controllerUpgrader.ts index 7178a24c6..51085506c 100644 --- a/src/room/creeps/roleManager.new/commune/controllerUpgrader.ts +++ b/src/room/creeps/roleManager.new/commune/controllerUpgrader.ts @@ -5,8 +5,6 @@ import { DefaultRoleManager } from 'room/creeps/defaultRoleManager' class ControllerUpgraderManager extends DefaultRoleManager { role: CreepRoles = 'controllerUpgrader' - // Allows for the pattern: instance.manager.run(instance) - manager = this isDying(creep: Creep) { // Stop if creep is spawning diff --git a/src/room/creeps/roleManager.new/commune/hauler.ts b/src/room/creeps/roleManager.new/commune/hauler.ts index fc98d308a..8b7e830a8 100644 --- a/src/room/creeps/roleManager.new/commune/hauler.ts +++ b/src/room/creeps/roleManager.new/commune/hauler.ts @@ -4,8 +4,6 @@ import { DefaultRoleManager } from "room/creeps/defaultRoleManager" class HaulerManager extends DefaultRoleManager { role: CreepRoles = 'hauler' - // Allows for the pattern: instance.manager.run(instance) - manager = this run(creep: Creep) { diff --git a/src/room/creeps/roleManagers/commune/fastFiller.ts b/src/room/creeps/roleManagers/commune/fastFiller.ts index 1e9d04687..7d24bd39b 100644 --- a/src/room/creeps/roleManagers/commune/fastFiller.ts +++ b/src/room/creeps/roleManagers/commune/fastFiller.ts @@ -20,8 +20,7 @@ export class FastFiller extends Creep { const fastFillerPos = this.findFastFillerPos() if (!fastFillerPos) return true - // If the this is standing on the fastFillerPos, inform false - + // If the this is standing on the fastFillerPos, we didn't travel if (getRange(this.pos, fastFillerPos) === 0) return false // Otherwise, make a move request to it @@ -43,25 +42,27 @@ export class FastFiller extends Creep { this.message = 'FFP' - // Stop if the creep already has a packedFastFillerPos + const creepMemory = Memory.creeps[this.name] - if (this.memory[CreepMemoryKeys.packedCoord]) - return unpackCoordAsPos(this.memory[CreepMemoryKeys.packedCoord], room.name) + // Stop if the creep already has a packedFastFillerPos + if (creepMemory[CreepMemoryKeys.packedCoord]) { + return unpackCoordAsPos(creepMemory[CreepMemoryKeys.packedCoord], room.name) + } // Get usedFastFillerPositions const reservedCoords = room.roomManager.reservedCoords const openFastFillerPositions = room.roomManager.fastFillerPositions.filter(pos => { - return reservedCoords.get(packCoord(pos)) !== ReservedCoordTypes.important + return reservedCoords.get(packCoord(pos)) !== ReservedCoordTypes.important }) if (!openFastFillerPositions.length) return false const fastFillerPos = findClosestPos(this.pos, openFastFillerPositions) const packedCoord = packCoord(fastFillerPos) - this.memory[CreepMemoryKeys.packedCoord] = packedCoord - room.roomManager.reservedCoords.set(packedCoord, ReservedCoordTypes.important) + creepMemory[CreepMemoryKeys.packedCoord] = packedCoord + reservedCoords.set(packedCoord, ReservedCoordTypes.important) return fastFillerPos } diff --git a/src/room/room.ts b/src/room/room.ts index ad0fbaf84..9d24a1260 100644 --- a/src/room/room.ts +++ b/src/room/room.ts @@ -941,13 +941,13 @@ export class RoomManager { return (this._structureUpdate = true) } - _structureCoords: Map>[]> + _structureCoords: StructureCoords get structureCoords() { if (this._structureCoords && !this.structureUpdate) return this._structureCoords // Construct storage of structures based on structureType - const structureCoords: Map>[]> = new Map() + const structureCoords: StructureCoords = new Map() // Group structures by structureType @@ -1359,6 +1359,9 @@ export class RoomManager { } _fastFillerPositions: RoomPosition[] + /** + * To make this more efficient, reverse the way it is calculated. For each potential source, record potential fast filler positions that are adjacent. Then have each potential position search for adjacent spawning structures + */ get fastFillerPositions() { if (this._fastFillerPositions && !this.structureUpdate) return this._fastFillerPositions @@ -2417,3 +2420,5 @@ export class RoomManager { } } } + +export type StructureCoords = Map>[]> diff --git a/src/room/roomData.ts b/src/room/roomData.ts index 2a43c32c7..7189c3e1f 100644 --- a/src/room/roomData.ts +++ b/src/room/roomData.ts @@ -3,6 +3,9 @@ import { communeDataManager } from "./commune/communeData" interface RoomData { sourceIDs: Id[] + fastFillerContainerLeftId: Id | false + fastFillerContainerRightId: Id | false + fastFillerCoords: string[] } /** diff --git a/src/room/roomObjectAdditions.ts b/src/room/roomObjectAdditions.ts index 36ba5e969..d8982fdbb 100644 --- a/src/room/roomObjectAdditions.ts +++ b/src/room/roomObjectAdditions.ts @@ -18,7 +18,7 @@ Object.defineProperties(RoomObject.prototype, { }, }, nextHits: { - get(this: Structure) { + get(this: RoomObject & { hits: number }) { if (this._nextHits) return this._nextHits return (this._nextHits = this.hits) @@ -27,6 +27,16 @@ Object.defineProperties(RoomObject.prototype, { this._nextHits = newNextHits }, }, + reserveHits: { + get(this: RoomObject & { hits: number }) { + if (this._reserveHits) return this._reserveHits + + return (this._reserveHits = this.hits) + }, + set(newReserveHits: number) { + this._reserveHits = newReserveHits + }, + }, nextStore: { get(this: AnyStoreStructure) { if (this._nextStore) return this._nextStore diff --git a/src/room/roomProcs.ts b/src/room/roomProcs.ts new file mode 100644 index 000000000..50721babd --- /dev/null +++ b/src/room/roomProcs.ts @@ -0,0 +1,33 @@ +import { Dashboard, Rectangle, Table } from "screeps-viz" + +export class RoomProcs { + tableVisual(room: Room, title: string, headers: string[], data: string[][]) { + + Dashboard({ + config: { + room: room.name, + }, + widgets: [ + { + pos: { + x: 1, + y: 1, + }, + width: 47, + height: 3 + data.length, + widget: Rectangle({ + data: Table(() => ({ + data, + config: { + label: title, + headers, + }, + })), + }), + }, + ], + }) + } +} + +export const roomProcs = new RoomProcs() diff --git a/src/room/roomUtils.ts b/src/room/roomUtils.ts index b41e213e4..41bebdb0c 100644 --- a/src/room/roomUtils.ts +++ b/src/room/roomUtils.ts @@ -1,11 +1,13 @@ -import { RoomMemoryKeys, RoomTypes } from "international/constants" -import { packCoord } from "other/codec" -import { roomDataManager } from "./roomData" -import { findObjectWithID } from "utils/utils" +import { RoomMemoryKeys, RoomTypes, roomDimensions } from 'international/constants' +import { packCoord, packXYAsCoord, unpackCoord } from 'other/codec' +import { roomDataManager } from './roomData' +import { findObjectWithID, forAdjacentCoords, utils } from 'utils/utils' +import { structureUtils } from './structureUtils' +import { StructureCoords } from './room' +import { Dashboard, Rectangle, Table } from 'screeps-viz' export class RoomUtils { getRemoteRepairStructures(room: Room) { - const repairStructures: (StructureContainer | StructureRoad)[] = [] } @@ -21,6 +23,178 @@ export class RoomUtils { data.sourceIDs = sourceIDs return sources } + + /** + * returns a container if exists and is RCL actionable + */ + getFastFillerContainerLeft(room: Room) { + const data = roomDataManager.data[room.name] + if (data.fastFillerContainerLeftId !== undefined && !room.roomManager.structureUpdate) { + return data.fastFillerContainerLeftId + } + + const anchor = room.roomManager.anchor + if (!anchor) throw Error('no anchor') + + const container = room.findStructureAtXY( + anchor.x - 2, + anchor.y, + structure => structure.structureType === STRUCTURE_CONTAINER, + ) + if (!container || !structureUtils.isRCLActionable(container)) { + data.fastFillerContainerLeftId = false + return false + } + + data.fastFillerContainerLeftId = container.id + return container + } + + /** + * returns a container if exists and is RCL actionable + */ + getFastFillerContainerRight(room: Room) { + const data = roomDataManager.data[room.name] + if (data.fastFillerContainerRightId !== undefined && !room.roomManager.structureUpdate) { + return data.fastFillerContainerRightId + } + + const anchor = room.roomManager.anchor + if (!anchor) throw Error('no anchor') + + const container = room.findStructureAtXY( + anchor.x + 2, + anchor.y, + structure => structure.structureType === STRUCTURE_CONTAINER, + ) + if (!container || !structureUtils.isRCLActionable(container)) { + data.fastFillerContainerRightId = false + return false + } + + data.fastFillerContainerRightId = container.id + return container + } + + getFastFillerCoords(room: Room) { + const data = roomDataManager.data[room.name] + if (data.fastFillerCoords !== undefined && !room.roomManager.structureUpdate) { + const fastFillerCoords = data.fastFillerCoords.map(packedCoord => unpackCoord(packedCoord)) + return fastFillerCoords + } + + const sourcedFastFillerCoords = this.getSourcedFastFillerCoords(room) + if (!sourcedFastFillerCoords) { + data.fastFillerCoords = [] + room.fastFillerCoords = [] + } + const structureCoords = room.roomManager.structureCoords + const fastFillerCoords: Coord[] = [] + + for (const coord of sourcedFastFillerCoords) { + const spawningStructure = this.findStructureStructureAroundCoord( + room, + coord, + 1, + structure => { + switch (structure.structureType) { + case STRUCTURE_SPAWN: + return true + break + case STRUCTURE_EXTENSION: + return true + break + default: + return false + } + }, + structureCoords, + ) + if (!spawningStructure) continue + + // There is a valid spawning structure + + fastFillerCoords.push(coord) + } + + data.fastFillerCoords = fastFillerCoords.map(coord => packCoord(coord)) + return fastFillerCoords + } + + /** + * fastFiller coords that have a source, but not necessarily a sink + */ + private getSourcedFastFillerCoords(room: Room) { + const anchor = room.roomManager.anchor + if (!anchor) throw Error('no anchor') + + const fastFillerLink = room.roomManager.fastFillerLink + // If we have a valid link + if (fastFillerLink && structureUtils.isRCLActionable(fastFillerLink)) { + // then all fastFiller positions are valid + const sourcedFastFillerCoords = [ + // left + + { x: anchor.x - 1, y: anchor.y - 1 }, + { x: anchor.x - 1, y: anchor.y + 1 }, + + // right + + { x: anchor.x + 1, y: anchor.y - 1 }, + { x: anchor.x + 1, y: anchor.y + 1 }, + ] + return sourcedFastFillerCoords + } + + // Otherwise we can check each side for valid container sources + + let sourcedFastFillerCoords = [] + + if (this.getFastFillerContainerLeft(room)) { + sourcedFastFillerCoords.push({ x: anchor.x - 1, y: anchor.y - 1 }) + sourcedFastFillerCoords.push({ x: anchor.x - 1, y: anchor.y + 1 }) + } + + if (this.getFastFillerContainerRight(room)) { + sourcedFastFillerCoords.push({ x: anchor.x + 1, y: anchor.y - 1 }) + sourcedFastFillerCoords.push({ x: anchor.x + 1, y: anchor.y + 1 }) + } + + return sourcedFastFillerCoords + } + + findStructureStructureAroundCoord( + room: Room, + startCoord: Coord, + range: number, + condition: (structure: T) => boolean, + structureCoords = room.roomManager.structureCoords, + ): T | false { + let structureID: Id + + for (let x = startCoord.x - range; x <= startCoord.x + range; x += 1) { + for (let y = startCoord.y - range; y <= startCoord.y + range; y += 1) { + // skip the origin coord + if (startCoord.x === x && startCoord.y === y) continue + // Iterate if the pos doesn't map onto a room + if (x < 0 || x >= roomDimensions || y < 0 || y >= roomDimensions) continue + + const structureIDs = structureCoords.get(packXYAsCoord(x, y)) + if (!structureIDs) continue + + structureID = structureIDs.find(structureID => { + return condition(findObjectWithID(structureID) as T) + }) + if (!structureID) continue + + // We found the desired structure + + return findObjectWithID(structureID) as T + } + } + + return false + } } export const roomUtils = new RoomUtils() diff --git a/src/room/roomVisuals.ts b/src/room/roomVisuals.ts index f68209bc0..8db029ee7 100644 --- a/src/room/roomVisuals.ts +++ b/src/room/roomVisuals.ts @@ -216,8 +216,10 @@ export class RoomVisualsManager { const data: any[][] = [[]] + const funnelOrder = collectiveManager.getFunnelOrder() + data[0].push( - collectiveManager.funnelOrder.slice(0, 3), + funnelOrder.slice(0, 3), playerManager.highestThreat, collectiveManager.minCredits, Game.time - Memory.lastConfig, diff --git a/src/types.d.ts b/src/types.d.ts index 8649673c4..b0c2e17ac 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -517,10 +517,10 @@ declare global { generalRepairStructures: (StructureRoad | StructureContainer)[] rampartRepairStructures: StructureRampart[] - considerFunneled: boolean - organizedSpawns: OrganizedSpawns | false + fastFillerCoords: Coord[] + // Commune // Functions @@ -1078,12 +1078,14 @@ declare global { readonly effectsData: Map _nextHits: number - /** * The estimated hits amount next tick */ nextHits: number + _reserveHits: number + reserveHits: number + // _nextStore: Partial // /** diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 169359bbc..8128468a8 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -5,6 +5,7 @@ import { import { customLog } from './logging' import { PlayerRelationships } from 'international/constants' import { roomNameUtils } from 'room/roomNameUtils' +import { Dashboard, Rectangle, Table } from 'screeps-viz' /** * Uses a provided ID to find an object associated with it From f6589b55537a2d0584a7ffd0f8fac4d0ec235427 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sun, 21 Jan 2024 14:20:27 -0800 Subject: [PATCH 088/190] (migration) smarter room status access + recording --- src/international/migration.ts | 8 ++ src/international/requests.ts | 17 ++-- src/other/profilerRegister.ts | 2 + src/room/commune/combatRequest.ts | 2 +- src/room/commune/haulRequestManager.ts | 2 +- src/room/commune/remotesManager.ts | 2 +- src/room/commune/workRequest.ts | 2 +- .../roleManagers/international/scout.ts | 4 +- src/room/roomFunctions.ts | 92 +++++++++++-------- src/room/roomNameProcs.ts | 43 +++++++++ src/room/roomNameUtils.ts | 37 +++----- src/settingsDefault.ts | 2 +- 12 files changed, 134 insertions(+), 79 deletions(-) create mode 100644 src/room/roomNameProcs.ts diff --git a/src/international/migration.ts b/src/international/migration.ts index a243dd5bf..154615b18 100644 --- a/src/international/migration.ts +++ b/src/international/migration.ts @@ -1,5 +1,6 @@ import { roomNameUtils } from 'room/roomNameUtils' import { RoomMemoryKeys, RoomTypes, SegmentIDs, majorVersion } from './constants' +import { roomNameProcs } from 'room/roomNameProcs' /** * Migrate version by performing actions, if required @@ -75,6 +76,13 @@ export class MigrationManager { global.killCreeps() Memory.breakingVersion += 1 } + if (Memory.breakingVersion === 126) { + for (const roomName in Memory.rooms) { + + roomNameProcs.findAndRecordStatus(roomName) + } + Memory.breakingVersion += 1 + } } private hardMigration() { diff --git a/src/international/requests.ts b/src/international/requests.ts index 1b99622cf..4766ee101 100644 --- a/src/international/requests.ts +++ b/src/international/requests.ts @@ -5,6 +5,7 @@ import { CombatRequestKeys, HaulRequestKeys, RoomMemoryKeys, + RoomStatusKeys, RoomTypes, WorkRequestKeys, antifaRoles, @@ -146,13 +147,13 @@ export class RequestsManager extends Sleepable { // If there is not enough reserved GCL to make a new request /* if (reservedGCL <= 0) return */ - const type = Memory.rooms[roomName][RoomMemoryKeys.type] + const roomMemory = Memory.rooms[roomName] // if someone else has acquired the room if ( - type === RoomTypes.ally || - type === RoomTypes.enemy || - type === RoomTypes.allyRemote || - type === RoomTypes.enemyRemote + roomMemory[RoomMemoryKeys.type] === RoomTypes.ally || + roomMemory[RoomMemoryKeys.type] === RoomTypes.enemy || + roomMemory[RoomMemoryKeys.type] === RoomTypes.allyRemote || + roomMemory[RoomMemoryKeys.type] === RoomTypes.enemyRemote ) { // Wait on the request Memory.workRequests[roomName][WorkRequestKeys.abandon] = 20000 @@ -166,7 +167,7 @@ export class RequestsManager extends Sleepable { continue } - if (Game.map.getRoomStatus(roomName) !== Game.map.getRoomStatus(communeName)) { + if (Memory.rooms[communeName][RoomMemoryKeys.status] !== roomMemory[RoomMemoryKeys.status]) { // We probably can't reach as it will likely be a respawn, novice, or closed Memory.workRequests[roomName][WorkRequestKeys.abandon] = 20000 @@ -288,7 +289,7 @@ export class RequestsManager extends Sleepable { const communeName = roomNameUtils.findClosestRoomName(requestName, communes) if (!communeName) continue - if (Game.map.getRoomStatus(requestName) !== Game.map.getRoomStatus(communeName)) { + if (Memory.rooms[communeName][RoomMemoryKeys.status] !== Memory.rooms[requestName][RoomMemoryKeys.status]) { // We probably can't reach as it will likely be a respawn, novice, or closed request[CombatRequestKeys.abandon] = 20000 @@ -361,7 +362,7 @@ export class RequestsManager extends Sleepable { const communeName = roomNameUtils.findClosestRoomName(requestName, communes) if (!communeName) continue - if (Game.map.getRoomStatus(requestName) !== Game.map.getRoomStatus(communeName)) { + if (Memory.rooms[communeName][RoomMemoryKeys.status] !== Memory.rooms[requestName][RoomMemoryKeys.status]) { // We probably can't reach as it will likely be a respawn, novice, or closed request[HaulRequestKeys.abandon] = 20000 diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index 207616e3d..67287db95 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -104,6 +104,7 @@ import { NukerProcs } from 'room/commune/nukerProcs' import { ObserverProcs } from 'room/commune/observerProcs' import { PowerSpawnProcs } from 'room/commune/powerSpawnProcs' import { RoomProcs } from 'room/roomProcs' +import { RoomNameProcs } from 'room/roomNameProcs' export function profilerRegister() { // Classes @@ -154,6 +155,7 @@ export function profilerRegister() { profiler.registerClass(RoomVisualsManager, 'RoomVisualsManager') profiler.registerClass(Operator, 'Operator') profiler.registerClass(RoomNameUtils, 'RoomNameUtils') + profiler.registerClass(RoomNameProcs, 'RoomNameProcs') profiler.registerClass(RoomUtils, 'RoomUtils') profiler.registerClass(RoomProcs, 'RoomProcs') profiler.registerClass(CommuneUtils, 'CommuneUtils') diff --git a/src/room/commune/combatRequest.ts b/src/room/commune/combatRequest.ts index ab4d02fe5..a89f103ef 100644 --- a/src/room/commune/combatRequest.ts +++ b/src/room/commune/combatRequest.ts @@ -65,7 +65,7 @@ export class CombatRequestManager { // If the room is closed or is now a respawn or novice zone if ( utils.isTickInterval(checkRoomStatusInverval) && - Game.map.getRoomStatus(requestName).status !== Game.map.getRoomStatus(room.name).status + Memory.rooms[room.name][RoomMemoryKeys.status] !== Memory.rooms[requestName][RoomMemoryKeys.status] ) { return false } diff --git a/src/room/commune/haulRequestManager.ts b/src/room/commune/haulRequestManager.ts index 219eb9f9c..abd0d2bf0 100644 --- a/src/room/commune/haulRequestManager.ts +++ b/src/room/commune/haulRequestManager.ts @@ -36,7 +36,7 @@ export class HaulRequestManager { if ( utils.isTickInterval(checkRoomStatusInverval) && - Game.map.getRoomStatus(requestName).status !== Game.map.getRoomStatus(room.name).status + Memory.rooms[room.name][RoomMemoryKeys.status] !== Memory.rooms[requestName][RoomMemoryKeys.status] ) { delete Memory.haulRequests[requestName] room.memory[RoomMemoryKeys.haulRequests].splice(index, 1) diff --git a/src/room/commune/remotesManager.ts b/src/room/commune/remotesManager.ts index 71058f8f3..b10739654 100644 --- a/src/room/commune/remotesManager.ts +++ b/src/room/commune/remotesManager.ts @@ -103,7 +103,7 @@ export class RemotesManager { if ( utils.isTickInterval(checkRoomStatusInterval) && - Game.map.getRoomStatus(remoteName).status !== Game.map.getRoomStatus(room.name).status + Memory.rooms[room.name][RoomMemoryKeys.status] !== remoteMemory[RoomMemoryKeys.status] ) { this.communeManager.removeRemote(remoteName, index) continue diff --git a/src/room/commune/workRequest.ts b/src/room/commune/workRequest.ts index 7cf48cee9..9cc0584fb 100644 --- a/src/room/commune/workRequest.ts +++ b/src/room/commune/workRequest.ts @@ -74,7 +74,7 @@ export class WorkRequestManager { // If the room is closed or is now a respawn or novice zone if ( utils.isTickInterval(checkRoomStatusInverval) && - Game.map.getRoomStatus(requestName).status !== Game.map.getRoomStatus(room.name).status + Memory.rooms[room.name][RoomMemoryKeys.status] !== Memory.rooms[requestName][RoomMemoryKeys.status] ) { this.delete(requestName, request) return diff --git a/src/room/creeps/roleManagers/international/scout.ts b/src/room/creeps/roleManagers/international/scout.ts index 9ddacbc97..d31c31626 100644 --- a/src/room/creeps/roleManagers/international/scout.ts +++ b/src/room/creeps/roleManagers/international/scout.ts @@ -61,8 +61,8 @@ export class Scout extends Creep { // Iterate if the room statuses aren't the same if ( - Game.map.getRoomStatus(roomName).status !== - Game.map.getRoomStatus(this.room.name).status + Memory.rooms[this.room.name][RoomMemoryKeys.status] !== + roomNameUtils.getStatusForPotentialMemory(roomName) ) continue diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index c01594e5d..71bea602b 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -1,34 +1,41 @@ import { - CombatRequestKeys, maxRampartGroupSize, - maxRemoteRoomDistance, - customColors, - PlayerMemoryKeys, - roomDimensions, constantRoomTypes, defaultStructureTypesByBuildPriority, - Result, RoomMemoryKeys, - RoomTypes, - packedPosLength, - maxRemotePathDistance, - RoomLogisticsRequestTypes, RemoteResourcePathTypes, - FlagNames + CombatRequestKeys, + maxRampartGroupSize, + maxRemoteRoomDistance, + customColors, + PlayerMemoryKeys, + roomDimensions, + constantRoomTypes, + defaultStructureTypesByBuildPriority, + Result, + RoomMemoryKeys, + RoomTypes, + packedPosLength, + maxRemotePathDistance, + RoomLogisticsRequestTypes, + RemoteResourcePathTypes, + FlagNames, + RoomStatusKeys, } from 'international/constants' import { - findAdjacentCoordsToCoord, - findCoordsInsideRect, - findObjectWithID, packAsNum, - packXYAsNum, unpackNumAsCoord, doesCoordExist, findClosestObject, - randomIntRange, - roundTo + findAdjacentCoordsToCoord, + findCoordsInsideRect, + findObjectWithID, + packAsNum, + packXYAsNum, + unpackNumAsCoord, + doesCoordExist, + findClosestObject, + randomIntRange, + roundTo, } from 'utils/utils' import { collectiveManager } from 'international/collective' -import { - packCoord, - packCoordList, - packXYAsCoord, unpackPosList -} from 'other/codec' +import { packCoord, packCoordList, packXYAsCoord, unpackPosList } from 'other/codec' import { playerManager } from 'international/players' import { roomNameUtils } from './roomNameUtils' import { customLog } from 'utils/logging' import { roomObjectUtils } from './roomObjectUtils' +import { roomNameProcs } from './roomNameProcs' /** @param pos1 pos of the object performing the action @@ -613,43 +620,50 @@ Room.prototype.scoutEnemyRoom = function () { Room.prototype.basicScout = function () { const { controller } = this + const roomMemory = Memory.rooms[this.name] - // Record that the room was scouted this tick + if (roomMemory[RoomMemoryKeys.lastScout] === undefined) { + roomNameProcs.findAndRecordStatus(this.name, roomMemory) + } - this.memory[RoomMemoryKeys.lastScout] = Game.time + // Record that the room was scouted this tick + roomMemory[RoomMemoryKeys.lastScout] = Game.time - if (!controller) return this.memory[RoomMemoryKeys.type] + if (!controller) return roomMemory[RoomMemoryKeys.type] // If the contoller is owned - if (controller.owner) { // Stop if the controller is owned by me - if (controller.my) return this.memory[RoomMemoryKeys.type] + if (controller.my) return roomMemory[RoomMemoryKeys.type] const owner = controller.owner.username - this.memory[RoomMemoryKeys.owner] = owner + roomMemory[RoomMemoryKeys.owner] = owner // If the controller is owned by an ally if (global.settings.allies.includes(owner)) - return (this.memory[RoomMemoryKeys.type] = RoomTypes.ally) + return (roomMemory[RoomMemoryKeys.type] = RoomTypes.ally) return this.scoutEnemyRoom() } this.createWorkRequest() - // No controller owner + // There is no controller owner - if (this.scoutRemote()) return this.memory[RoomMemoryKeys.type] + if (this.scoutRemote()) return roomMemory[RoomMemoryKeys.type] - return (this.memory[RoomMemoryKeys.type] = RoomTypes.neutral) + return (roomMemory[RoomMemoryKeys.type] = RoomTypes.neutral) } Room.prototype.advancedScout = function (scoutingRoom: Room) { const roomMemory = Memory.rooms[this.name] + if (roomMemory[RoomMemoryKeys.lastScout] === undefined) { + roomNameProcs.findAndRecordStatus(this.name, roomMemory) + } + // Record that the room was scouted this tick roomMemory[RoomMemoryKeys.lastScout] = Game.time @@ -669,7 +683,7 @@ Room.prototype.advancedScout = function (scoutingRoom: Room) { roomMemory[RoomMemoryKeys.sourceCoords] = packedSourceCoords } - const roomNameScoutType = roomNameUtils.scoutByRoomName(this.name) + const roomNameScoutType = roomNameProcs.findAndRecordConstantType(this.name) if (roomNameScoutType) { if (roomNameScoutType === RoomTypes.sourceKeeper) { // Record the positions of keeper lairs @@ -688,16 +702,16 @@ Room.prototype.advancedScout = function (scoutingRoom: Room) { if (controller.owner) { // Stop if the controller is owned by me - if (controller.my) return this.memory[RoomMemoryKeys.type] + if (controller.my) return roomMemory[RoomMemoryKeys.type] const owner = controller.owner.username - this.memory[RoomMemoryKeys.owner] = owner + roomMemory[RoomMemoryKeys.owner] = owner // If the controller is owned by an ally if (global.settings.allies.includes(owner)) - return (this.memory[RoomMemoryKeys.type] = RoomTypes.ally) + return (roomMemory[RoomMemoryKeys.type] = RoomTypes.ally) return this.scoutEnemyRoom() } @@ -706,12 +720,12 @@ Room.prototype.advancedScout = function (scoutingRoom: Room) { // No controlller owner - if (this.scoutRemote(scoutingRoom)) return this.memory[RoomMemoryKeys.type] + if (this.scoutRemote(scoutingRoom)) return roomMemory[RoomMemoryKeys.type] - return (this.memory[RoomMemoryKeys.type] = RoomTypes.neutral) + return (roomMemory[RoomMemoryKeys.type] = RoomTypes.neutral) } - return this.memory[RoomMemoryKeys.type] + return roomMemory[RoomMemoryKeys.type] } Room.prototype.createAttackCombatRequest = function (opts) { diff --git a/src/room/roomNameProcs.ts b/src/room/roomNameProcs.ts new file mode 100644 index 000000000..8b4134d79 --- /dev/null +++ b/src/room/roomNameProcs.ts @@ -0,0 +1,43 @@ +import { RoomMemoryKeys, RoomStatusKeys, RoomTypes } from 'international/constants' + +export class RoomNameProcs { + findAndRecordStatus(roomName: string, roomMemory = Memory.rooms[roomName]) { + const status = Game.map.getRoomStatus(roomName).status + roomMemory[RoomMemoryKeys.status] = RoomStatusKeys[status] + + return status + } + + findAndRecordConstantType(roomName: string) { + + // Find the numbers in the room's name + const [EWstring, NSstring] = roomName.match(/\d+/g) + + // Convert he numbers from strings into actual numbers + + const EW = parseInt(EWstring) + const NS = parseInt(NSstring) + + const roomMemory = Memory.rooms[roomName] + + // Use the numbers to deduce some room types - cheaply! + + if (EW % 10 === 0 && NS % 10 === 0) { + return (roomMemory[RoomMemoryKeys.type] = RoomTypes.intersection) + } + + if (EW % 10 === 0 || NS % 10 === 0) { + return (roomMemory[RoomMemoryKeys.type] = RoomTypes.highway) + } + if (EW % 5 === 0 && NS % 5 === 0) { + return (roomMemory[RoomMemoryKeys.type] = RoomTypes.center) + } + if (Math.abs(5 - (EW % 10)) <= 1 && Math.abs(5 - (NS % 10)) <= 1) { + return (roomMemory[RoomMemoryKeys.type] = RoomTypes.sourceKeeper) + } + + return false + } +} + +export const roomNameProcs = new RoomNameProcs() diff --git a/src/room/roomNameUtils.ts b/src/room/roomNameUtils.ts index e1a84f165..3b5facf9d 100644 --- a/src/room/roomNameUtils.ts +++ b/src/room/roomNameUtils.ts @@ -1,6 +1,7 @@ import { Result, RoomMemoryKeys, + RoomStatusKeys, RoomTypes, defaultSwampCost, dynamicScoreRoomRange, @@ -24,6 +25,8 @@ import { import { unpackPosAt } from 'other/codec' import { CommuneManager } from './commune/commune' import { customLog } from 'utils/logging' +import { roomProcs } from './roomProcs' +import { roomNameProcs } from './roomNameProcs' /** * considers a position being flooded @@ -326,35 +329,19 @@ export class RoomNameUtils { return closest } - scoutByRoomName(roomName: string) { - // Find the numbers in the room's name - - const [EWstring, NSstring] = roomName.match(/\d+/g) - - // Convert he numbers from strings into actual numbers - - const EW = parseInt(EWstring) - const NS = parseInt(NSstring) - + /** + * get the room status for a room that potentially has no initialized memory + */ + getStatusForPotentialMemory(roomName: string) { const roomMemory = Memory.rooms[roomName] - - // Use the numbers to deduce some room types - cheaply! - - if (EW % 10 === 0 && NS % 10 === 0) { - return (roomMemory[RoomMemoryKeys.type] = RoomTypes.intersection) + if (!roomMemory) { + Memory.rooms[roomName] = {} as any + return RoomStatusKeys[roomNameProcs.findAndRecordStatus(roomName)] } - if (EW % 10 === 0 || NS % 10 === 0) { - return (roomMemory[RoomMemoryKeys.type] = RoomTypes.highway) - } - if (EW % 5 === 0 && NS % 5 === 0) { - return (roomMemory[RoomMemoryKeys.type] = RoomTypes.center) - } - if (Math.abs(5 - (EW % 10)) <= 1 && Math.abs(5 - (NS % 10)) <= 1) { - return (roomMemory[RoomMemoryKeys.type] = RoomTypes.sourceKeeper) - } + // Otherwise there is room memory - return false + return roomMemory[RoomMemoryKeys.status] } } diff --git a/src/settingsDefault.ts b/src/settingsDefault.ts index bb5857a1b..e9f0830b1 100644 --- a/src/settingsDefault.ts +++ b/src/settingsDefault.ts @@ -4,7 +4,7 @@ import { Settings } from 'types/settings' * Default global.settings. DO NOT MODIFY for personal use; instead, include your preferences in global.settings.ts */ export const defaultSettings: Settings = { - breakingVersion: 126, + breakingVersion: 127, roomVisuals: false, mapVisuals: false, allies: ['MarvinTMB'], From afb21f5dd0e556086aa02ad35646e0801eb4ab42 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Mon, 22 Jan 2024 20:09:18 -0800 Subject: [PATCH 089/190] update util and proc descriptions --- design.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/design.md b/design.md index 4f83e3b44..9e08ccac6 100644 --- a/design.md +++ b/design.md @@ -7,7 +7,7 @@ The bot intends to implement a primarily data-oriented style, with some aspects # Data/functional structures ## Utils -- does not contain its own data +- does not contain any state - contains functions/methods Utils stands for utilities. These are functions that will generally take inputs and provide information in return. @@ -17,7 +17,7 @@ Utils stands for utilities. These are functions that will generally take inputs CommuneUtils contains utility functions that provide often cached information on call that helps with processing ## Procs -- does not contain its own data +- does not contain any state - contains functions/methods Procs stands for processors. These are functions that will generally run logic for specified things. From eb2eb2cae5fedf038b3cf7283ed1c67ee8666450 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Mon, 22 Jan 2024 20:31:20 -0800 Subject: [PATCH 090/190] record main run commune cpu usage --- src/international/constants.ts | 1 + src/international/statsManager.ts | 159 +++++++++++++++--------------- src/room/rooms.ts | 47 +++++---- 3 files changed, 112 insertions(+), 95 deletions(-) diff --git a/src/international/constants.ts b/src/international/constants.ts index 2af74ccdb..189d3a89f 100644 --- a/src/international/constants.ts +++ b/src/international/constants.ts @@ -1322,6 +1322,7 @@ export enum RoomStatsKeys { EnergyOutputTransactionCosts = 'eotc', EnergyTerminalSentDomestic = 'etsd', EnergyTerminalSentOther = 'etso', + CpuUsed = 'cpu', GameTime = 'gt', RemoteCount = 'rc', diff --git a/src/international/statsManager.ts b/src/international/statsManager.ts index db4c6dc4b..591a412fc 100644 --- a/src/international/statsManager.ts +++ b/src/international/statsManager.ts @@ -31,84 +31,85 @@ export interface RoomStats { } export interface CommuneStats extends RoomStats { - /** - * Controller Level - */ - cl: number - /** - * Energy Input Harvest - */ - eih: number - /** - * Energy Input Bought - */ - eib?: number - /** - * Energy Output Upgrade - */ - eou: number - /** - * Energy Output Repair Other (non-barricade structures) - */ - eoro: number - /** - * Energy Output Repair Wall or Rampart - */ - eorwr: number - /** - * Energy Output Build - */ - eob: number - /** - * Energy Output Sold - */ - eos: number - /** - * Energy Output Spawn - */ - eosp: number - /** - * Energy Output Power - */ - eop: number - /** - * Minerals Harvested - */ - mh: number - /** - * Energy Stored - */ - es: number - /** - * Creep Count - */ - cc: number - /** - * Total Creep Count - */ - tcc: number - /** - * Power Creep Count - */ - pcc: number - /** - * Spawn Usage as a decimal - */ - su: number - /** - * hauler size - */ - mhc: number - /** - * energy out transactions costs - */ - eotc: number - - // Better way to define shortform types - - [RoomStatsKeys.EnergyTerminalSentDomestic]: number - [RoomStatsKeys.EnergyTerminalSentOther]: number - [RoomStatsKeys.BatteriesStoredTimes10]: number + /** + * Controller Level + */ + cl: number + /** + * Energy Input Harvest + */ + eih: number + /** + * Energy Input Bought + */ + eib?: number + /** + * Energy Output Upgrade + */ + eou: number + /** + * Energy Output Repair Other (non-barricade structures) + */ + eoro: number + /** + * Energy Output Repair Wall or Rampart + */ + eorwr: number + /** + * Energy Output Build + */ + eob: number + /** + * Energy Output Sold + */ + eos: number + /** + * Energy Output Spawn + */ + eosp: number + /** + * Energy Output Power + */ + eop: number + /** + * Minerals Harvested + */ + mh: number + /** + * Energy Stored + */ + es: number + /** + * Creep Count + */ + cc: number + /** + * Total Creep Count + */ + tcc: number + /** + * Power Creep Count + */ + pcc: number + /** + * Spawn Usage as a decimal + */ + su: number + /** + * hauler size + */ + mhc: number + /** + * energy out transactions costs + */ + eotc: number + + // Better way to define shortform types + + [RoomStatsKeys.EnergyTerminalSentDomestic]: number + [RoomStatsKeys.EnergyTerminalSentOther]: number + [RoomStatsKeys.BatteriesStoredTimes10]: number + [RoomStatsKeys.CpuUsed]: number } const remoteStatNames: Set> = new Set([ @@ -140,6 +141,7 @@ const averageStatNames: Set = new Set([ RoomStatsKeys.EnergyOutputTransactionCosts, RoomStatsKeys.EnergyTerminalSentDomestic, RoomStatsKeys.EnergyTerminalSentOther, + RoomStatsKeys.CpuUsed, ]) export class StatsManager { @@ -178,6 +180,7 @@ export class StatsManager { [RoomStatsKeys.EnergyOutputTransactionCosts]: 0, [RoomStatsKeys.EnergyTerminalSentDomestic]: 0, [RoomStatsKeys.EnergyTerminalSentOther]: 0, + [RoomStatsKeys.CpuUsed]: 0, }) if (Memory.stats.rooms[roomName]) return diff --git a/src/room/rooms.ts b/src/room/rooms.ts index 2c1035212..38373a142 100644 --- a/src/room/rooms.ts +++ b/src/room/rooms.ts @@ -1,5 +1,6 @@ import { RoomMemoryKeys, + RoomStatsKeys, RoomTypes, customColors, roomTypesUsedForStats, @@ -13,7 +14,7 @@ import { CreepRoleManager } from './creeps/creepRoleManager' import { PowerCreepRoleManager } from './creeps/powerCreepRoleManager' import './roomVisuals' -import { createPosMap } from 'utils/utils' +import { createPosMap, findCPUOf } from 'utils/utils' import { statsManager } from 'international/statsManager' import './creeps/endTickCreepManager' import { CommuneManager } from './commune/commune' @@ -21,7 +22,7 @@ import { RoomManager } from './room' import { LogTypes, customLog } from 'utils/logging' class RoomsManager { - constructor() {} + updateRun() { for (const roomName in Game.rooms) { const room = Game.rooms[roomName] @@ -36,33 +37,45 @@ class RoomsManager { room.roomManager.update(room) } } + initRun() { for (const roomName in Game.rooms) { const room = Game.rooms[roomName] room.roomManager.initRun() } } + run() { for (const roomName in Game.rooms) { - console.log(roomName) - const room = Game.rooms[roomName] - room.roomManager.run() - // Log room stats + this.runRoom(roomName) + } + } + + private runRoom(roomName: string) { - const roomMemory = Memory.rooms[room.name] - const roomType = roomMemory[RoomMemoryKeys.type] + const startCPU = Game.cpu.generatePixel() - customLog( - `${room.name}`, - `Type: ${RoomTypes[roomType]} Creeps: ${room.myCreeps.length}`, - { - type: LogTypes.info, - position: 2, - }, - ) - } + const room = Game.rooms[roomName] + room.roomManager.run() + + // Log room stats + + const roomMemory = Memory.rooms[room.name] + const roomType = roomMemory[RoomMemoryKeys.type] + + customLog( + `${room.name}`, + `Type: ${RoomTypes[roomType]} Creeps: ${room.myCreeps.length}`, + { + type: LogTypes.info, + position: 2, + }, + ) + + const usedCPU = Game.cpu.getUsed() - startCPU + statsManager.updateCommuneStat(roomName, RoomStatsKeys.CpuUsed, usedCPU) } } From 59b051d16282bcbb738c2d70c49d74235739cebd Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Mon, 22 Jan 2024 21:27:48 -0800 Subject: [PATCH 091/190] upgrade simpleAllies, static rework start --- src/international/collective.ts | 254 +- src/international/commands.ts | 363 +- src/international/constants.ts | 2 +- src/international/constructionSiteManager.ts | 12 +- src/international/creepOrganizer.ts | 107 +- src/international/endTick.ts | 48 +- src/international/flags.ts | 12 +- src/international/market/marketOrders.ts | 626 +- src/international/migration.ts | 8 +- src/international/powerCreepOrganizer.ts | 68 +- src/international/requests.ts | 70 +- src/international/respawn.ts | 56 +- src/international/roomPruning.ts | 20 +- src/international/segments.ts | 18 +- .../simpleAllies/simpleAllies.ts | 241 +- src/international/simpleAllies/types.ts | 238 + src/international/statsManager.ts | 662 ++- src/international/transactions.ts | 12 +- src/main.ts | 28 +- src/other/profilerRegister.ts | 8 + src/room/commune/commune.ts | 14 +- src/room/commune/communeData.ts | 5 +- src/room/commune/communeUtils.ts | 2 +- src/room/commune/defence.ts | 38 +- src/room/commune/powerSpawnProcs.ts | 107 +- src/room/commune/spawning/spawnRequests.ts | 23 +- .../spawning/spawningStructureProcs.ts | 4 +- src/room/commune/terminal/terminal.old.ts | 2 +- src/room/commune/terminal/terminalProcs.ts | 87 +- src/room/commune/terminal/tradingUtils.ts | 4 +- src/room/commune/workRequest.ts | 2 +- src/room/construction/communePlanner.ts | 6 +- src/room/construction/construction.ts | 546 +- src/room/construction/minCut.ts | 2 +- src/room/creeps/creepMoveProcs.ts | 4 +- .../creepPrototypes/creepMoveFunctions.ts | 25 +- src/room/creeps/creepUtils.ts | 2 +- src/room/creeps/roleManagers/antifa/antifa.ts | 10 +- .../international/requestHauler.ts | 4 +- .../roleManagers/international/scout.ts | 370 +- src/room/remotePlanner.ts | 5182 ++++++++--------- src/room/room.ts | 32 +- src/room/roomFunctions.ts | 14 +- src/room/roomNameUtils.ts | 30 +- src/room/roomVisuals.ts | 1295 ++-- src/room/rooms.ts | 12 +- src/utils/logging.ts | 126 +- src/utils/procs.ts | 6 +- 48 files changed, 5422 insertions(+), 5385 deletions(-) create mode 100644 src/international/simpleAllies/types.ts diff --git a/src/international/collective.ts b/src/international/collective.ts index 14fc55337..c67472e6b 100644 --- a/src/international/collective.ts +++ b/src/international/collective.ts @@ -20,127 +20,127 @@ export class CollectiveManager extends Sleepable { /** * Antifa creeps by combat request name, then by role with an array of creep names */ - creepsByCombatRequest: { [requestName: string]: Partial<{ [key in CreepRoles]: string[] }> } + static creepsByCombatRequest: { [requestName: string]: Partial<{ [key in CreepRoles]: string[] }> } - creepsByHaulRequest: { [requestName: string]: string[] } + static creepsByHaulRequest: { [requestName: string]: string[] } - unspawnedPowerCreepNames: string[] + static unspawnedPowerCreepNames: string[] - terminalRequests: { [ID: string]: TerminalRequest } + static terminalRequests: { [ID: string]: TerminalRequest } - tickID: number - customCreepIDs: true[] - customCreepIDIndex: number + static tickID: number + static customCreepIDs: true[] + static customCreepIDIndex: number - internationalDataVisuals: boolean + static internationalDataVisuals: boolean - terminalCommunes: string[] + static terminalCommunes: string[] /** * The aggregate number of each mineral nodes we have access to */ - mineralNodes: Partial<{ [key in MineralConstant]: number }> + static mineralNodes: Partial<{ [key in MineralConstant]: number }> /** * The name of the room that is safemoded, if there is one */ - safemodedCommuneName: string | undefined + static safemodedCommuneName: string | undefined /** * An intra-tick collection of commands we wish to issue */ - myCommands: any[] + static myCommands: any[] /** * Terrain binaries of wall or not wall for rooms */ - terrainBinaries: { [roomName: string]: Uint8Array } = {} - constructionSiteCount = 0 - creepCount: number - powerCreepCount: number + static terrainBinaries: { [roomName: string]: Uint8Array } = {} + static constructionSiteCount = 0 + static creepCount: number + static powerCreepCount: number /** * A string to console log as rich text */ - logs = '' + static logs = '' /** * Room names that have controllers we own */ - communes: Set - communesForWorkRequests: Set - communesForCombatRequests: Set - communesForHaulRequests: Set + static communes: Set + static communesForWorkRequests: Set + static communesForCombatRequests: Set + static communesForHaulRequests: Set /** - * Updates values to be present for this tick + * Updates values to be present for CollectiveManager tick */ - update() { + static update() { // initalize or re-initialize - this.creepsByCombatRequest = {} - this.creepsByHaulRequest = {} - this.unspawnedPowerCreepNames = [] - this.terminalRequests = {} - this.terminalCommunes = [] + CollectiveManager.creepsByCombatRequest = {} + CollectiveManager.creepsByHaulRequest = {} + CollectiveManager.unspawnedPowerCreepNames = [] + CollectiveManager.terminalRequests = {} + CollectiveManager.terminalCommunes = [] - this.tickID = 0 - this.customCreepIDs = [] - this.customCreepIDIndex = 0 - this.mineralNodes = {} + CollectiveManager.tickID = 0 + CollectiveManager.customCreepIDs = [] + CollectiveManager.customCreepIDIndex = 0 + CollectiveManager.mineralNodes = {} for (const mineralType of minerals) { - this.mineralNodes[mineralType] = 0 + CollectiveManager.mineralNodes[mineralType] = 0 } - this.myCommands = [] - this.logs = '' - this.creepCount = 0 - this.powerCreepCount = 0 - this.communes = new Set() - this.communesForWorkRequests = new Set() - this.communesForCombatRequests = new Set() - this.communesForHaulRequests = new Set() + CollectiveManager.myCommands = [] + CollectiveManager.logs = '' + CollectiveManager.creepCount = 0 + CollectiveManager.powerCreepCount = 0 + CollectiveManager.communes = new Set() + CollectiveManager.communesForWorkRequests = new Set() + CollectiveManager.communesForCombatRequests = new Set() + CollectiveManager.communesForHaulRequests = new Set() // delete - this.safemodedCommuneName = undefined - this._workRequestsByScore = undefined - this._defaultMinCacheAmount = undefined - this.internationalDataVisuals = undefined + CollectiveManager.safemodedCommuneName = undefined + CollectiveManager._workRequestsByScore = undefined + CollectiveManager._defaultMinCacheAmount = undefined + CollectiveManager.internationalDataVisuals = undefined // - this.updateMinHaulerCost() + CollectiveManager.updateMinHaulerCost() - // Run this stuff every so often + // Run CollectiveManager stuff every so often if (utils.isTickInterval(periodicUpdateInterval)) { // delete - this._funnelOrder = undefined - this._funnelingRoomNames = undefined - this._minCredits = undefined - this._resourcesInStoringStructures = undefined - this._maxCSitesPerRoom = undefined + CollectiveManager._funnelOrder = undefined + CollectiveManager._funnelingRoomNames = undefined + CollectiveManager._minCredits = undefined + CollectiveManager._resourcesInStoringStructures = undefined + CollectiveManager._maxCSitesPerRoom = undefined } // } - newCustomCreepID() { + static newCustomCreepID() { // Try to use an existing unused ID index - for (; this.customCreepIDIndex < this.customCreepIDs.length; this.customCreepIDIndex++) { - if (this.customCreepIDs[this.customCreepIDIndex]) continue + for (; CollectiveManager.customCreepIDIndex < CollectiveManager.customCreepIDs.length; CollectiveManager.customCreepIDIndex++) { + if (CollectiveManager.customCreepIDs[CollectiveManager.customCreepIDIndex]) continue - this.customCreepIDs[this.customCreepIDIndex] = true - this.customCreepIDIndex += 1 - return this.customCreepIDIndex - 1 + CollectiveManager.customCreepIDs[CollectiveManager.customCreepIDIndex] = true + CollectiveManager.customCreepIDIndex += 1 + return CollectiveManager.customCreepIDIndex - 1 } // All previous indexes are being used, add a new index - this.customCreepIDs.push(true) - this.customCreepIDIndex += 1 - return this.customCreepIDIndex - 1 + CollectiveManager.customCreepIDs.push(true) + CollectiveManager.customCreepIDIndex += 1 + return CollectiveManager.customCreepIDIndex - 1 } - advancedGeneratePixel() { + static advancedGeneratePixel() { if (!global.settings.pixelGeneration) return // Stop if the bot is not running on MMO @@ -152,7 +152,7 @@ export class CollectiveManager extends Sleepable { Game.cpu.generatePixel() } - updateMinHaulerCost() { + static updateMinHaulerCost() { if (Game.time - Memory.minHaulerCostUpdate < haulerUpdateDefault) return // cpu limit is potentially variable if GCL changes @@ -179,39 +179,39 @@ export class CollectiveManager extends Sleepable { /** * Provides a cached binary of wall or not wall terrain */ - getTerrainBinary(roomName: string) { - if (this.terrainBinaries[roomName]) return this.terrainBinaries[roomName] + static getTerrainBinary(roomName: string) { + if (CollectiveManager.terrainBinaries[roomName]) return CollectiveManager.terrainBinaries[roomName] - this.terrainBinaries[roomName] = new Uint8Array(2500) + CollectiveManager.terrainBinaries[roomName] = new Uint8Array(2500) const terrain = Game.map.getRoomTerrain(roomName) for (let x = 0; x < roomDimensions; x += 1) { for (let y = 0; y < roomDimensions; y += 1) { - this.terrainBinaries[roomName][packXYAsNum(x, y)] = + CollectiveManager.terrainBinaries[roomName][packXYAsNum(x, y)] = terrain.get(x, y) === TERRAIN_MASK_WALL ? 255 : 0 } } - return this.terrainBinaries[roomName] + return CollectiveManager.terrainBinaries[roomName] } - newTickID() { - return (this.tickID += 1).toString() + static newTickID() { + return (CollectiveManager.tickID += 1).toString() } - _minCredits: number - get minCredits() { - if (this._minCredits !== undefined) return this._minCredits + static _minCredits: number + static get minCredits() { + if (CollectiveManager._minCredits !== undefined) return CollectiveManager._minCredits - return (this._minCredits = collectiveManager.communes.size * 10000) + return (CollectiveManager._minCredits = CollectiveManager.communes.size * 10000) } - _workRequestsByScore: (string | undefined)[] - get workRequestsByScore(): (string | undefined)[] { - if (this._workRequestsByScore) return this._workRequestsByScore + static _workRequestsByScore: (string | undefined)[] + static get workRequestsByScore(): (string | undefined)[] { + if (CollectiveManager._workRequestsByScore) return CollectiveManager._workRequestsByScore - return (this._workRequestsByScore = Object.keys(Memory.workRequests).sort( + return (CollectiveManager._workRequestsByScore = Object.keys(Memory.workRequests).sort( (a, b) => (Memory.workRequests[a][WorkRequestKeys.priority] ?? Memory.rooms[a][RoomMemoryKeys.score] + Memory.rooms[a][RoomMemoryKeys.dynamicScore]) - @@ -220,47 +220,47 @@ export class CollectiveManager extends Sleepable { )) } - _defaultMinCacheAmount: number - get defaultMinPathCacheTime() { - if (this._defaultMinCacheAmount !== undefined) return this._defaultMinCacheAmount + static _defaultMinCacheAmount: number + static get defaultMinPathCacheTime() { + if (CollectiveManager._defaultMinCacheAmount !== undefined) return CollectiveManager._defaultMinCacheAmount const avgCPUUsagePercent = Memory.stats.cpu.usage / Game.cpu.limit - return (this._defaultMinCacheAmount = Math.floor(Math.pow(avgCPUUsagePercent * 10, 2.2)) + 1) + return (CollectiveManager._defaultMinCacheAmount = Math.floor(Math.pow(avgCPUUsagePercent * 10, 2.2)) + 1) } - _maxCommunes: number - get maxCommunes() { - return (this._maxCommunes = Math.round(Game.cpu.limit / 10)) + static _maxCommunes: number + static get maxCommunes() { + return (CollectiveManager._maxCommunes = Math.round(Game.cpu.limit / 10)) } - _avgCommunesPerMineral: number - get avgCommunesPerMineral() { + static _avgCommunesPerMineral: number + static get avgCommunesPerMineral() { let sum = 0 - for (const mineralType in this.mineralNodes) { - sum += this.mineralNodes[mineralType as MineralConstant] + for (const mineralType in CollectiveManager.mineralNodes) { + sum += CollectiveManager.mineralNodes[mineralType as MineralConstant] } const avg = roundTo(sum / minerals.length, 2) - return (this._avgCommunesPerMineral = avg) + return (CollectiveManager._avgCommunesPerMineral = avg) } - _compoundPriority: Partial<{ [key in MineralCompoundConstant]: number }> - get compoundPriority() { - if (this._compoundPriority) return this._compoundPriority + static _compoundPriority: Partial<{ [key in MineralCompoundConstant]: number }> + static get compoundPriority() { + if (CollectiveManager._compoundPriority) return CollectiveManager._compoundPriority - this._compoundPriority = {} + CollectiveManager._compoundPriority = {} - return this._compoundPriority + return CollectiveManager._compoundPriority } - _funnelOrder: string[] + static _funnelOrder: string[] /** * Commune names sorted by funnel priority */ - getFunnelOrder() { - if (this._funnelOrder) return this._funnelOrder + static getFunnelOrder() { + if (CollectiveManager._funnelOrder) return CollectiveManager._funnelOrder let funnelOrder: string[] = [] @@ -269,7 +269,7 @@ export class CollectiveManager extends Sleepable { const communesByLevel: { [level: string]: [string, number][] } = {} for (let i = 6; i < 8; i++) communesByLevel[i] = [] - for (const roomName of collectiveManager.communes) { + for (const roomName of CollectiveManager.communes) { const room = Game.rooms[roomName] if (!room.terminal) continue @@ -292,23 +292,23 @@ export class CollectiveManager extends Sleepable { funnelOrder = funnelOrder.concat(communesByLevel[level].map(tuple => tuple[0])) } - return (this._funnelOrder = funnelOrder) + return (CollectiveManager._funnelOrder = funnelOrder) } - _funnelingRoomNames: Set + static _funnelingRoomNames: Set /** * The unordered names of rooms currently being funneled. Does 2 passes. - * For a room to be in this list, it must be part of a censecutive line starting from index 0. + * For a room to be in CollectiveManager list, it must be part of a censecutive line starting from index 0. * Take an example where x means the room is not wanting to be funneled and y means they are: * {y, y, y, x, y}. * The last room wants to be funneled, however, only the first 3 rooms will be, excluding the last 2: {y, y, y, x, x}. */ - getFunnelingRoomNames() { - if (this._funnelingRoomNames) return this._funnelingRoomNames - /* if (this._funnelingRoomNames) return this._funnelingRoomNames + static getFunnelingRoomNames() { + if (CollectiveManager._funnelingRoomNames) return CollectiveManager._funnelingRoomNames + /* if (CollectiveManager._funnelingRoomNames) return CollectiveManager._funnelingRoomNames const funnelingRoomNames = new Set() - const funnelTargets = this.funnelOrder + const funnelTargets = CollectiveManager.funnelOrder for (const roomName of funnelTargets) { const room = Game.rooms[roomName] @@ -322,12 +322,12 @@ export class CollectiveManager extends Sleepable { funnelingRoomNames.add(roomName) } - this._funnelingRoomNames = funnelingRoomNames + CollectiveManager._funnelingRoomNames = funnelingRoomNames return funnelingRoomNames */ - const funnelOrder = this.getFunnelOrder() + const funnelOrder = CollectiveManager.getFunnelOrder() // Rooms that want to get funneled might not get to be if they aren't in line for funneling - const funnelWanters = this.getFunnelWanters(funnelOrder) + const funnelWanters = CollectiveManager.getFunnelWanters(funnelOrder) const funnelingRoomNames = new Set() @@ -341,17 +341,17 @@ export class CollectiveManager extends Sleepable { funnelingRoomNames.add(roomName) } - this._funnelingRoomNames = funnelingRoomNames + CollectiveManager._funnelingRoomNames = funnelingRoomNames return funnelingRoomNames } /** * Qualifying rooms either want to be funneled, or the room next in line to get funneled wants to be funneled. * Take a line where x means the rooms don't independently want to be funneled, and y means they do {x, x, y, y, x}. - * This function will work from back to front so that if a previous room wants to be funneled, so will the proceeding one. - * In this example, the set should convert to {y, y, y, y, x} + * CollectiveManager function will work from back to front so that if a previous room wants to be funneled, so will the proceeding one. + * In CollectiveManager example, the set should convert to {y, y, y, y, x} */ - private getFunnelWanters(funnelOrder: string[]) { + private static getFunnelWanters(funnelOrder: string[]) { const funnelWanters = new Set() let previousWantsToBeIndependentlyFunneled: boolean @@ -375,40 +375,38 @@ export class CollectiveManager extends Sleepable { return funnelWanters } - _resourcesInStoringStructures: Partial<{ [key in ResourceConstant]: number }> - get resourcesInStoringStructures() { - if (this._resourcesInStoringStructures) return this._resourcesInStoringStructures + static _resourcesInStoringStructures: Partial<{ [key in ResourceConstant]: number }> + static get resourcesInStoringStructures() { + if (CollectiveManager._resourcesInStoringStructures) return CollectiveManager._resourcesInStoringStructures - this._resourcesInStoringStructures = {} + CollectiveManager._resourcesInStoringStructures = {} - for (const roomName of collectiveManager.communes) { + for (const roomName of CollectiveManager.communes) { const room = Game.rooms[roomName] const resources = room.roomManager.resourcesInStoringStructures for (const key in resources) { const resource = key as unknown as ResourceConstant - if (!this._resourcesInStoringStructures[resource]) { - this._resourcesInStoringStructures[resource] = resources[resource] + if (!CollectiveManager._resourcesInStoringStructures[resource]) { + CollectiveManager._resourcesInStoringStructures[resource] = resources[resource] continue } - this._resourcesInStoringStructures[resource] += resources[resource] + CollectiveManager._resourcesInStoringStructures[resource] += resources[resource] } } - return this._resourcesInStoringStructures + return CollectiveManager._resourcesInStoringStructures } - _maxCSitesPerRoom: number + static _maxCSitesPerRoom: number /** * The largest amount of construction sites we can try to have in a room */ - get maxCSitesPerRoom() { - if (this._maxCSitesPerRoom) return this._maxCSitesPerRoom + static get maxCSitesPerRoom() { + if (CollectiveManager._maxCSitesPerRoom) return CollectiveManager._maxCSitesPerRoom - return Math.max(Math.min(MAX_CONSTRUCTION_SITES / collectiveManager.communes.size, 20), 3) + return Math.max(Math.min(MAX_CONSTRUCTION_SITES / CollectiveManager.communes.size, 20), 3) } } - -export const collectiveManager = new CollectiveManager() diff --git a/src/international/commands.ts b/src/international/commands.ts index 22ec80380..dc505a6b5 100644 --- a/src/international/commands.ts +++ b/src/international/commands.ts @@ -1,13 +1,19 @@ import { roomNameUtils } from 'room/roomNameUtils' -import { collectiveManager } from './collective' -import { allStructureTypes, WorkRequestKeys, CombatRequestKeys, RoomMemoryKeys, RoomTypes } from './constants' +import { CollectiveManager } from './collective' +import { + allStructureTypes, + WorkRequestKeys, + CombatRequestKeys, + RoomMemoryKeys, + RoomTypes, +} from './constants' const importantStructures: StructureConstant[] = [STRUCTURE_SPAWN] global.clearGlobal = function () { - // Clear global and stop CPU usage for a tick + // Clear global and stop CPU usage for a tick - Game.cpu?.halt() + Game.cpu?.halt() } /** @@ -15,291 +21,288 @@ global.clearGlobal = function () { * @param includeSettings Skip settings deletion unless specified */ global.clearMemory = function () { - // Clear all properties in memory + // Clear all properties in memory - for (const key in Memory) { - delete Memory[key as keyof typeof Memory] - } + for (const key in Memory) { + delete Memory[key as keyof typeof Memory] + } - return 'Cleared all of Memory' + return 'Cleared all of Memory' } global.killCreeps = function (roles?) { - // Cancel spawning in communes + // Cancel spawning in communes - for (const roomName in Game.rooms) { - const room = Game.rooms[roomName] + for (const roomName in Game.rooms) { + const room = Game.rooms[roomName] - if (!room.controller || !room.controller.my) continue + if (!room.controller || !room.controller.my) continue - for (const spawnName in Game.spawns) { - const spawn = Game.spawns[spawnName] - if (!spawn.spawning) continue + for (const spawnName in Game.spawns) { + const spawn = Game.spawns[spawnName] + if (!spawn.spawning) continue - // If there are specific role requirements and the creep doesn't meet them + // If there are specific role requirements and the creep doesn't meet them - if (roles && !roles.includes(Game.creeps[spawn.spawning.name].role)) continue + if (roles && !roles.includes(Game.creeps[spawn.spawning.name].role)) continue - spawn.spawning.cancel() - } + spawn.spawning.cancel() } + } - const filteredCreeps = Object.values(Game.creeps).filter(creep => { - return !roles || roles.includes(creep.role) - }) + const filteredCreeps = Object.values(Game.creeps).filter(creep => { + return !roles || roles.includes(creep.role) + }) - let killedCreepCount = 0 + let killedCreepCount = 0 - for (const creep of filteredCreeps) if (creep.suicide() === OK) killedCreepCount += 1 + for (const creep of filteredCreeps) if (creep.suicide() === OK) killedCreepCount += 1 - return `Killed an total of ${killedCreepCount} creeps ${roles ? `with the roles ${roles}` : ''}` + return `Killed an total of ${killedCreepCount} creeps ${roles ? `with the roles ${roles}` : ''}` } -global.killPowerCreeps = function() { - let killedCreeps = 0 +global.killPowerCreeps = function () { + let killedCreeps = 0 - for (const creepName in Game.powerCreeps) { - const creep = Game.powerCreeps[creepName] + for (const creepName in Game.powerCreeps) { + const creep = Game.powerCreeps[creepName] - creep.suicide() - killedCreeps += 1 - } + creep.suicide() + killedCreeps += 1 + } - return `Killed a total of ${killedCreeps} creeps` + return `Killed a total of ${killedCreeps} creeps` } global.removeCSites = function (removeInProgress, types?) { - let removedCSCount = 0 + let removedCSCount = 0 - for (const cSiteID in Game.constructionSites) { - const cSite = Game.constructionSites[cSiteID] + for (const cSiteID in Game.constructionSites) { + const cSite = Game.constructionSites[cSiteID] - if (cSite.progress && removeInProgress) continue + if (cSite.progress && removeInProgress) continue - if (types && !types.includes(cSite.structureType)) continue + if (types && !types.includes(cSite.structureType)) continue - if (cSite.remove() === OK) removedCSCount += 1 - } + if (cSite.remove() === OK) removedCSCount += 1 + } - return `Removed a total of ${removedCSCount} construction sites ${ - types ? `with the types ${types}` : '' - }` + return `Removed a total of ${removedCSCount} construction sites ${ + types ? `with the types ${types}` : '' + }` } global.destroyStructures = function (roomName, types?) { - if (!roomName) { - if (collectiveManager.communes.size > 1) return 'Provide a room name' + if (!roomName) { + if (CollectiveManager.communes.size > 1) return 'Provide a room name' - roomName = Array.from(collectiveManager.communes)[0] - } + roomName = Array.from(CollectiveManager.communes)[0] + } - // Get the room with the roomName + // Get the room with the roomName - const room = Game.rooms[roomName] - if (!room) return `You have no vision in ${roomName}` + const room = Game.rooms[roomName] + if (!room) return `You have no vision in ${roomName}` - // Count and destroy structures of types + // Count and destroy structures of types - let destroyedStructureCount = 0 - for (const structureType of allStructureTypes) { - // If types is constructed and the part isn't in types, iterate + let destroyedStructureCount = 0 + for (const structureType of allStructureTypes) { + // If types is constructed and the part isn't in types, iterate - if ( - (types && !types.includes(structureType)) || - (importantStructures.includes(structureType) && !types) - ) - continue + if ( + (types && !types.includes(structureType)) || + (importantStructures.includes(structureType) && !types) + ) + continue - // Get the structures of the type and destroy + // Get the structures of the type and destroy - const structures = room.roomManager.structures[structureType] - for (const structure of structures) { - if (structure.destroy() === OK) destroyedStructureCount += 1 - } + const structures = room.roomManager.structures[structureType] + for (const structure of structures) { + if (structure.destroy() === OK) destroyedStructureCount += 1 } + } - // Inform the result + // Inform the result - return `Destroyed a total of ${destroyedStructureCount} structures in ${roomName} ${ - types ? `with the types ${types}` : '' - }` + return `Destroyed a total of ${destroyedStructureCount} structures in ${roomName} ${ + types ? `with the types ${types}` : '' + }` } global.destroyCommuneStructures = function (types?) { - let log = `` - let destroyedStructureCount: number + let log = `` + let destroyedStructureCount: number - for (const roomName of collectiveManager.communes) { - // Get the room with the roomName + for (const roomName of CollectiveManager.communes) { + // Get the room with the roomName - const room = Game.rooms[roomName] + const room = Game.rooms[roomName] - // Otherwise loop through each structureType + // Otherwise loop through each structureType - destroyedStructureCount = 0 + destroyedStructureCount = 0 - for (const structureType of allStructureTypes) { - // If types is constructed and the part isn't in types, iterate + for (const structureType of allStructureTypes) { + // If types is constructed and the part isn't in types, iterate - if ( - (types && !types.includes(structureType)) || - (importantStructures.includes(structureType) && !types) - ) - continue + if ( + (types && !types.includes(structureType)) || + (importantStructures.includes(structureType) && !types) + ) + continue - // Get the structures of the type + // Get the structures of the type - const structures = room.roomManager.structures[structureType] + const structures = room.roomManager.structures[structureType] - // Loop through the structures + // Loop through the structures - for (const structure of structures) { - if (structure.destroy() === OK) destroyedStructureCount += 1 - } + for (const structure of structures) { + if (structure.destroy() === OK) destroyedStructureCount += 1 + } - log += `Destroyed a total of ${destroyedStructureCount} structures in ${roomName} + log += `Destroyed a total of ${destroyedStructureCount} structures in ${roomName} ` - } } + } - // Inform the result + // Inform the result - return log + ` ${types ? `with the types ${types}` : ''}` + return log + ` ${types ? `with the types ${types}` : ''}` } global.claim = function (requestName, communeName, priority = 0, override?: boolean) { - if (!Memory.rooms[requestName]) return 'No roomMemory for ' + requestName - if (Memory.rooms[requestName][RoomMemoryKeys.communePlanned] !== true) - return 'Planning not completed for ' + requestName - - if (!Memory.workRequests[requestName]) { - Memory.workRequests[requestName] = { - [WorkRequestKeys.responder]: communeName, - } - } + if (!Memory.rooms[requestName]) return 'No roomMemory for ' + requestName + if (Memory.rooms[requestName][RoomMemoryKeys.communePlanned] !== true) + return 'Planning not completed for ' + requestName - const request = Memory.workRequests[requestName] + if (!Memory.workRequests[requestName]) { + Memory.workRequests[requestName] = { + [WorkRequestKeys.responder]: communeName, + } + } - request[WorkRequestKeys.priority] = priority - request[WorkRequestKeys.abandon] = 0 + const request = Memory.workRequests[requestName] - if (communeName) { - const roomMemory = Memory.rooms[communeName] - if (!roomMemory) return `No memory for ${communeName}` + request[WorkRequestKeys.priority] = priority + request[WorkRequestKeys.abandon] = 0 - if (roomMemory[RoomMemoryKeys.workRequest]) - delete Memory.workRequests[roomMemory[RoomMemoryKeys.workRequest]][ - WorkRequestKeys.responder - ] + if (communeName) { + const roomMemory = Memory.rooms[communeName] + if (!roomMemory) return `No memory for ${communeName}` - roomMemory[RoomMemoryKeys.workRequest] = requestName - request[WorkRequestKeys.responder] = communeName - } + if (roomMemory[RoomMemoryKeys.workRequest]) + delete Memory.workRequests[roomMemory[RoomMemoryKeys.workRequest]][WorkRequestKeys.responder] - if (override) { + roomMemory[RoomMemoryKeys.workRequest] = requestName + request[WorkRequestKeys.responder] = communeName + } - Memory.rooms[requestName][RoomMemoryKeys.type] = RoomTypes.neutral - roomNameUtils.cleanMemory(requestName) - } + if (override) { + Memory.rooms[requestName][RoomMemoryKeys.type] = RoomTypes.neutral + roomNameUtils.cleanMemory(requestName) + } - return `${ - communeName ? `${communeName} is responding to the` : `created` - } workRequest for ${requestName}` + return `${ + communeName ? `${communeName} is responding to the` : `created` + } workRequest for ${requestName}` } global.deleteWorkRequest = function (roomName) { - const request = Memory.workRequests[roomName] - if (!request) return `There is so claim request for ${roomName}` + const request = Memory.workRequests[roomName] + if (!request) return `There is so claim request for ${roomName}` - if (request[WorkRequestKeys.responder]) { - delete Memory.rooms[request[WorkRequestKeys.responder]][RoomMemoryKeys.workRequest] - } + if (request[WorkRequestKeys.responder]) { + delete Memory.rooms[request[WorkRequestKeys.responder]][RoomMemoryKeys.workRequest] + } - delete Memory.workRequests[roomName] - return `Deleted claim request for ${roomName}` + delete Memory.workRequests[roomName] + return `Deleted claim request for ${roomName}` } global.deleteWorkRequests = function () { - let deleteCount = 0 + let deleteCount = 0 - for (const requestName in Memory.workRequests) { - const request = Memory.workRequests[requestName] + for (const requestName in Memory.workRequests) { + const request = Memory.workRequests[requestName] - deleteCount += 1 - if (request[WorkRequestKeys.responder]) - delete Memory.rooms[request[WorkRequestKeys.responder]][RoomMemoryKeys.workRequest] - delete Memory.workRequests[requestName] - } + deleteCount += 1 + if (request[WorkRequestKeys.responder]) + delete Memory.rooms[request[WorkRequestKeys.responder]][RoomMemoryKeys.workRequest] + delete Memory.workRequests[requestName] + } - return `Deleted ${deleteCount} claim requests` + return `Deleted ${deleteCount} claim requests` } global.combat = function (requestName, type, opts, communeName) { - if (!Memory.combatRequests[requestName]) { - const request = (Memory.combatRequests[requestName] = { - [CombatRequestKeys.type]: type || 'attack', - }) - } - - let request = Memory.combatRequests[requestName] + if (!Memory.combatRequests[requestName]) { + const request = (Memory.combatRequests[requestName] = { + [CombatRequestKeys.type]: type || 'attack', + }) + } - request[CombatRequestKeys.abandon] = 0 - request[CombatRequestKeys.inactionTimer] = 0 + let request = Memory.combatRequests[requestName] - Object.assign(request, opts) + request[CombatRequestKeys.abandon] = 0 + request[CombatRequestKeys.inactionTimer] = 0 - if (communeName) { - const roomMemory = Memory.rooms[communeName] - if (!roomMemory) return `No memory for ${communeName}` + Object.assign(request, opts) - if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.commune) return `${communeName} is not of room type commune` + if (communeName) { + const roomMemory = Memory.rooms[communeName] + if (!roomMemory) return `No memory for ${communeName}` - // Assign values + if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.commune) + return `${communeName} is not of room type commune` - request[CombatRequestKeys.responder] = communeName - if (!roomMemory[RoomMemoryKeys.combatRequests].includes(requestName)) { + // Assign values - roomMemory[RoomMemoryKeys.combatRequests].push(requestName) - } + request[CombatRequestKeys.responder] = communeName + if (!roomMemory[RoomMemoryKeys.combatRequests].includes(requestName)) { + roomMemory[RoomMemoryKeys.combatRequests].push(requestName) } + } - return `${ - communeName ? `${communeName} is responding to the` : `created` - } combatRequest for ${requestName}` + return `${ + communeName ? `${communeName} is responding to the` : `created` + } combatRequest for ${requestName}` } global.deleteCombatRequest = function (requestName) { - const request = Memory.combatRequests[requestName] - if (!request) return 'No combatRequest for that room' + const request = Memory.combatRequests[requestName] + if (!request) return 'No combatRequest for that room' - // If responder, remove from its memory + // If responder, remove from its memory - const responder = request[CombatRequestKeys.responder] - if (responder) - Memory.rooms[responder][RoomMemoryKeys.combatRequests].splice( - Memory.rooms[responder][RoomMemoryKeys.combatRequests].indexOf(requestName), - 1, - ) + const responder = request[CombatRequestKeys.responder] + if (responder) + Memory.rooms[responder][RoomMemoryKeys.combatRequests].splice( + Memory.rooms[responder][RoomMemoryKeys.combatRequests].indexOf(requestName), + 1, + ) - delete Memory.combatRequests[requestName] + delete Memory.combatRequests[requestName] - return `deleted combatRequest for ${requestName}` + return `deleted combatRequest for ${requestName}` } global.deleteBasePlans = function (roomName) { - if (!roomName) { - if (collectiveManager.communes.size > 1) return 'Provide a room name' + if (!roomName) { + if (CollectiveManager.communes.size > 1) return 'Provide a room name' - roomName = Array.from(collectiveManager.communes)[0] - } + roomName = Array.from(CollectiveManager.communes)[0] + } - const room = Game.rooms[roomName] - if (!room) return 'No vision in ' + roomName + const room = Game.rooms[roomName] + if (!room) return 'No vision in ' + roomName - delete room.memory[RoomMemoryKeys.communePlanned] - room.roomManager._basePlans = undefined + delete room.memory[RoomMemoryKeys.communePlanned] + room.roomManager._basePlans = undefined - return 'Deleted base plans for ' + roomName + return 'Deleted base plans for ' + roomName } global.usedHeap = function () { diff --git a/src/international/constants.ts b/src/international/constants.ts index 189d3a89f..9ade5bee9 100644 --- a/src/international/constants.ts +++ b/src/international/constants.ts @@ -1,5 +1,5 @@ import { packCoord } from 'other/codec' -import { collectiveManager } from './collective' +import { CollectiveManager } from './collective' import { CommuneManager } from 'room/commune/commune' import { randomIntRange } from 'utils/utils' diff --git a/src/international/constructionSiteManager.ts b/src/international/constructionSiteManager.ts index 88742ca1e..21123f4b6 100644 --- a/src/international/constructionSiteManager.ts +++ b/src/international/constructionSiteManager.ts @@ -1,8 +1,8 @@ import { Sleepable } from 'utils/sleepable' -import { CollectiveManager, collectiveManager } from './collective' +import { CollectiveManager } from './collective' import { utils } from 'utils/utils' import { IDUpdateInterval } from './constants' -import { segmentsManager } from './segments' +import { SegmentsManager } from './segments' /** * Tracks and records constructionSites and thier age, deleting old sites @@ -11,9 +11,9 @@ export class ConstructionSiteManager { run() { if (!utils.isTickInterval(IDUpdateInterval)) return - const recordedIDs = segmentsManager.IDs.constructionSites + const recordedIDs = SegmentsManager.IDs.constructionSites - collectiveManager.constructionSiteCount = 0 + CollectiveManager.constructionSiteCount = 0 // Initialize uninitialized construction sites @@ -51,12 +51,12 @@ export class ConstructionSiteManager { // Otherwise increase the constructionSite's age recordedIDs[cSiteID] += 1 * IDUpdateInterval - collectiveManager.constructionSiteCount += 1 + CollectiveManager.constructionSiteCount += 1 } } getMaxCSiteAge(cSite: ConstructionSite) { - return 20000 + (cSite.progress * 5) + return 20000 + cSite.progress * 5 } } diff --git a/src/international/creepOrganizer.ts b/src/international/creepOrganizer.ts index b2ba52de3..fea89646f 100644 --- a/src/international/creepOrganizer.ts +++ b/src/international/creepOrganizer.ts @@ -1,7 +1,7 @@ import { creepClasses } from 'room/creeps/creepClasses' import { CreepMemoryKeys, customColors, remoteRoles, roomLogisticsRoles } from './constants' import { customLog } from 'utils/logging' -import { collectiveManager, CollectiveManager } from './collective' +import { CollectiveManager } from './collective' import { packCoord } from 'other/codec' import { statsManager } from './statsManager' import { creepUtils } from 'room/creeps/creepUtils' @@ -9,87 +9,86 @@ import { creepDataManager } from 'room/creeps/creepData' import { creepProcs } from 'room/creeps/creepProcs' export class CreepOrganizer { - constructor() {} + constructor() {} - public run() { - // Loop through all of my creeps + public run() { + // Loop through all of my creeps - for (const creepName in Memory.creeps) { - this.organizeCreep(creepName) - } - - // Initial run after all creeps have been updated - for (const creepName in Game.creeps) { - Game.creeps[creepName].initRun() - } + for (const creepName in Memory.creeps) { + this.organizeCreep(creepName) } - private organizeCreep(creepName: string) { + // Initial run after all creeps have been updated + for (const creepName in Game.creeps) { + Game.creeps[creepName].initRun() + } + } - let creep = Game.creeps[creepName] + private organizeCreep(creepName: string) { + let creep = Game.creeps[creepName] - // If creep doesn't exist + // If creep doesn't exist - if (!creep) { - // Delete creep from memory and iterate + if (!creep) { + // Delete creep from memory and iterate - delete Memory.creeps[creepName] - return - } + delete Memory.creeps[creepName] + return + } - // Kill the creep if it has no valid commune (we don't know what to do with it) + // Kill the creep if it has no valid commune (we don't know what to do with it) - const commune = creep.commune - if (!commune || !commune.controller.my) { - creep.suicide() - return - } + const commune = creep.commune + if (!commune || !commune.controller.my) { + creep.suicide() + return + } - // + // - collectiveManager.creepCount += 1 + CollectiveManager.creepCount += 1 - creepDataManager.initCreep(creepName) + creepDataManager.initCreep(creepName) - // Get the creep's role + // Get the creep's role - const { role } = creep - if (!role || role.startsWith('shard')) return + const { role } = creep + if (!role || role.startsWith('shard')) return - // Assign creep a class based on role + // Assign creep a class based on role - const creepClass = creepClasses[role] - if (!creepClass) return + const creepClass = creepClasses[role] + if (!creepClass) return - creep = Game.creeps[creepName] = new creepClass(creep.id) + creep = Game.creeps[creepName] = new creepClass(creep.id) - // Organize creep in its room by its role + // Organize creep in its room by its role - creep.room.myCreeps.push(creep) - creep.room.myCreepsByRole[role].push(creepName) + creep.room.myCreeps.push(creep) + creep.room.myCreepsByRole[role].push(creepName) - const customID = creepUtils.customIDCreep(creep) - collectiveManager.customCreepIDs[customID] = true + const customID = creepUtils.customIDCreep(creep) + CollectiveManager.customCreepIDs[customID] = true - // Add the creep's name to the position in its room + // Add the creep's name to the position in its room - if (!creep.spawning) creep.room.creepPositions[packCoord(creep.pos)] = creep.name + if (!creep.spawning) creep.room.creepPositions[packCoord(creep.pos)] = creep.name - if (roomLogisticsRoles.has(role)) { - creepProcs.updateLogisticsRequests(creep) - } - creepProcs.registerInterTickRepairTarget(creep) + if (roomLogisticsRoles.has(role)) { + creepProcs.updateLogisticsRequests(creep) + } + creepProcs.registerInterTickRepairTarget(creep) - // initialize inter-tick data for the creep if it isn't already - creepDataManager.data[creep.name] ??= {} + // initialize inter-tick data for the creep if it isn't already + creepDataManager.data[creep.name] ??= {} - creep.update() + creep.update() - // If the creep isn't isDying, organize by its roomFrom and role + // If the creep isn't isDying, organize by its roomFrom and role - if (!creep.isDying()) commune.creepsFromRoom[role].push(creepName) - commune.creepsFromRoomAmount += 1 - } + if (!creep.isDying()) commune.creepsFromRoom[role].push(creepName) + commune.creepsFromRoomAmount += 1 + } } export const creepOrganizer = new CreepOrganizer() diff --git a/src/international/endTick.ts b/src/international/endTick.ts index 66f6e39cc..1d32e85f7 100644 --- a/src/international/endTick.ts +++ b/src/international/endTick.ts @@ -1,43 +1,43 @@ import { customColors } from 'international/constants' import { LogTypes, customLog } from 'utils/logging' import { findCPUColor, findCPUOf } from 'utils/utils' -import { collectiveManager } from './collective' +import { CollectiveManager } from './collective' /** * Handles logging, stat recording, and more at the end of the tick */ export class EndTickManager { - run() { - if (!global.settings.logging) return + run() { + if (!global.settings.logging) return - const interval = 100 / Math.floor(global.settings.logging) + const interval = 100 / Math.floor(global.settings.logging) - // Fill up the console with empty logs - for (let i = 0; i < interval; i += 1) console.log() + // Fill up the console with empty logs + for (let i = 0; i < interval; i += 1) console.log() - customLog('General data', '⬇️') - customLog('Creeps total', Memory.stats.creeps, { position: 1 }) - customLog('Heap used', global.usedHeap(), { position: 1 }) - customLog('Tick', Game.time, { position: 1 }) + customLog('General data', '⬇️') + customLog('Creeps total', Memory.stats.creeps, { position: 1 }) + customLog('Heap used', global.usedHeap(), { position: 1 }) + customLog('Tick', Game.time, { position: 1 }) - // Get the CPU color based on the amount of used CPU + // Get the CPU color based on the amount of used CPU - const CPUColor = findCPUColor() + const CPUColor = findCPUColor() - customLog( - 'CPU used total', - `${Game.cpu.getUsed().toFixed(2)} / ${Game.cpu.limit} CPU Bucket: ${Game.cpu.bucket}`, - { - type: LogTypes.info, - position: 1, - BGColor: CPUColor, - }, - ) + customLog( + 'CPU used total', + `${Game.cpu.getUsed().toFixed(2)} / ${Game.cpu.limit} CPU Bucket: ${Game.cpu.bucket}`, + { + type: LogTypes.info, + position: 1, + BGColor: CPUColor, + }, + ) - // Log the accumilated global logs + // Log the accumilated global logs - console.log(collectiveManager.logs) - } + console.log(CollectiveManager.logs) + } } export const endTickManager = new EndTickManager() diff --git a/src/international/flags.ts b/src/international/flags.ts index ae7fd5574..69a7fad33 100644 --- a/src/international/flags.ts +++ b/src/international/flags.ts @@ -11,7 +11,7 @@ import { ourImpassibleStructuresSet, packedPosLength, } from './constants' -import { collectiveManager } from './collective' +import { CollectiveManager } from './collective' import { CombatRequestTypes } from 'types/internationalRequests' import { roomNameUtils } from 'room/roomNameUtils' import { packCoord } from 'other/codec' @@ -909,8 +909,8 @@ export class FlagManager { const headers = ['roomName', 'resource', 'amount', 'priority'] const data: any[][] = [] - for (const ID in collectiveManager.terminalRequests) { - const request = collectiveManager.terminalRequests[ID] + for (const ID in CollectiveManager.terminalRequests) { + const request = CollectiveManager.terminalRequests[ID] const row: any[] = [request.roomName, request.resource, request.amount, request.priority] data.push(row) @@ -956,7 +956,7 @@ export class FlagManager { const headers = ['resource', 'amount'] const data: any[][] = [] - const resourcesInStoringStructures = collectiveManager.resourcesInStoringStructures + const resourcesInStoringStructures = CollectiveManager.resourcesInStoringStructures for (const key in resourcesInStoringStructures) { const resourceType = key as ResourceConstant @@ -1021,8 +1021,8 @@ export class FlagManager { return } - const funnelOrder = collectiveManager.getFunnelOrder() - const funnelWanters = Array.from(collectiveManager.getFunnelingRoomNames()) + const funnelOrder = CollectiveManager.getFunnelOrder() + const funnelWanters = Array.from(CollectiveManager.getFunnelingRoomNames()) const headers = ['funnel order', 'funnel wanted'] const data: string[][] = [] diff --git a/src/international/market/marketOrders.ts b/src/international/market/marketOrders.ts index 53f9a5ae3..dceb34acf 100644 --- a/src/international/market/marketOrders.ts +++ b/src/international/market/marketOrders.ts @@ -1,411 +1,407 @@ import { findHighestScore, randomIntRange, randomTick, utils } from 'utils/utils' import { PlayerMemoryKeys, Result, RoomMemoryKeys } from '../constants' -import { collectiveManager } from '../collective' +import { CollectiveManager } from '../collective' import { customLog } from 'utils/logging' const optimizeOrdersInterval = randomIntRange(900, 1000) export class MarketManager { - run() { - this._myOrders = undefined - this.cachedOrders = {} - this._myOrdersCount = undefined - this.resourceHistory ??= {} - - if (randomTick(100)) { - - this.resourceHistory = {} - } - if (utils.isTickInterval(optimizeOrdersInterval)) { - - this.optimizeMyOrders() - } - - this.pruneMyOrders() + run() { + this._myOrders = undefined + this.cachedOrders = {} + this._myOrdersCount = undefined + this.resourceHistory ??= {} + + if (randomTick(100)) { + this.resourceHistory = {} + } + if (utils.isTickInterval(optimizeOrdersInterval)) { + this.optimizeMyOrders() } - private pruneMyOrders() { + this.pruneMyOrders() + } - // If there is sufficiently few orders + private pruneMyOrders() { + // If there is sufficiently few orders - if (this.myOrdersCount < MARKET_MAX_ORDERS * 0.8) return + if (this.myOrdersCount < MARKET_MAX_ORDERS * 0.8) return - for (const ID in Game.market.orders) { - // If the order is inactive (it likely has no remaining resources), delete it + for (const ID in Game.market.orders) { + // If the order is inactive (it likely has no remaining resources), delete it - if (!Game.market.orders[ID].active) Game.market.cancelOrder(ID) - } + if (!Game.market.orders[ID].active) Game.market.cancelOrder(ID) } + } - private optimizeMyOrders(): void { + private optimizeMyOrders(): void { + const myOrders = Game.market.orders + for (const ID in myOrders) { + // If the order is inactive (it likely has no remaining resources), delete it - const myOrders = Game.market.orders - for (const ID in myOrders) { - // If the order is inactive (it likely has no remaining resources), delete it + const order = myOrders[ID] + if (!order.active) { + Game.market.cancelOrder(ID) + continue + } - const order = myOrders[ID] - if (!order.active) { + if (order.type === ORDER_BUY) { + const orders = this.getOrders(order.resourceType, ORDER_BUY) + if (!orders) continue - Game.market.cancelOrder(ID) - continue - } + const newPrice = Math.min(marketManager.getAvgPrice(order.resourceType) * 1.2) + if (order.price === newPrice) continue - if (order.type === ORDER_BUY) { + const absDiff = Math.abs(order.price - newPrice) + // Make sure the difference in price is substantial enough to justify a change + if (absDiff < order.price * 0.1) continue - const orders = this.getOrders(order.resourceType, ORDER_BUY) - if (!orders) continue + Game.market.changeOrderPrice(ID, newPrice) + continue + } - const newPrice = Math.min( - marketManager.getAvgPrice(order.resourceType) * 1.2, - ) - if (order.price === newPrice) continue + // The order type is sell - const absDiff = Math.abs(order.price - newPrice) - // Make sure the difference in price is substantial enough to justify a change - if (absDiff < order.price * 0.1) continue + const orders = this.getOrders(order.resourceType, ORDER_SELL) + if (!orders) continue - Game.market.changeOrderPrice(ID, newPrice) - continue - } + const newPrice = Math.min(marketManager.getAvgPrice(order.resourceType) * 0.8) + if (order.price === newPrice) continue - // The order type is sell + const absDiff = Math.abs(order.price - newPrice) + // Make sure the difference in price is substantial enough to justify a change + if (absDiff < order.price * 0.1) continue - const orders = this.getOrders(order.resourceType, ORDER_SELL) - if (!orders) continue - - const newPrice = Math.min( - marketManager.getAvgPrice(order.resourceType) * 0.8, - ) - if (order.price === newPrice) continue - - const absDiff = Math.abs(order.price - newPrice) - // Make sure the difference in price is substantial enough to justify a change - if (absDiff < order.price * 0.1) continue - - Game.market.changeOrderPrice(ID, newPrice) - } + Game.market.changeOrderPrice(ID, newPrice) + } + } + + /** + * Finds the cheapest sell order + */ + getShardSellOrder( + roomName: string, + resourceType: MarketResourceConstant, + amount: number, + maxPrice = this.getAvgPrice(resourceType) * 1.2, + ) { + const orders = this.getOrders(resourceType, ORDER_SELL) + if (!orders.length) return Result.fail + + let bestOrder: Order + let bestOrderCost = Infinity + + for (const order of orders) { + if (order.price > maxPrice) continue + if (order.price >= bestOrderCost) continue + + // we found a better order + + bestOrder = order + bestOrderCost = order.price } - /** - * Finds the cheapest sell order - */ - getShardSellOrder(roomName: string, resourceType: MarketResourceConstant, amount: number, maxPrice = this.getAvgPrice(resourceType) * 1.2) { - const orders = this.getOrders(resourceType, ORDER_SELL) - if (!orders.length) return Result.fail - - let bestOrder: Order - let bestOrderCost = Infinity - - for (const order of orders) { - if (order.price > maxPrice) continue - if (order.price >= bestOrderCost) continue - - // we found a better order - - bestOrder = order - bestOrderCost = order.price - } - - if (!bestOrder) return Result.fail - return bestOrder + if (!bestOrder) return Result.fail + return bestOrder + } + + /** + * Finds the most expensive buy order + */ + getShardBuyOrder( + roomName: string, + resourceType: MarketResourceConstant, + amount: number, + minPrice = this.getAvgPrice(resourceType) * 0.8, + ) { + const orders = this.getOrders(resourceType, ORDER_BUY) + if (!orders.length) return Result.fail + + let bestOrder: Order + let bestOrderCost = 0 + + for (const order of orders) { + if (order.price < minPrice) continue + if (order.price <= bestOrderCost) continue + + // we found a better order + + bestOrder = order + bestOrderCost = order.price } - /** - * Finds the most expensive buy order - */ - getShardBuyOrder(roomName: string, resourceType: MarketResourceConstant, amount: number, minPrice = this.getAvgPrice(resourceType) * 0.8) { - const orders = this.getOrders(resourceType, ORDER_BUY) - if (!orders.length) return Result.fail + if (!bestOrder) return Result.fail - let bestOrder: Order - let bestOrderCost = 0 + return bestOrder + } - for (const order of orders) { - if (order.price < minPrice) continue - if (order.price <= bestOrderCost) continue + /** + * Finds the cheapest sell order + */ + getGlobalSellOrder( + resourceType: MarketResourceConstant, + maxPrice = this.getAvgPrice(resourceType) * 1.2, + ) { + const orders = this.getOrders(resourceType, ORDER_SELL) + if (!orders.length) return Result.fail - // we found a better order + let bestOrder: Order + let bestOrderCost = Infinity - bestOrder = order - bestOrderCost = order.price - } + for (const order of orders) { + if (order.price > maxPrice) continue + if (order.price >= bestOrderCost) continue - if (!bestOrder) return Result.fail + // we found a better order - return bestOrder + bestOrder = order + bestOrderCost = order.price } - /** - * Finds the cheapest sell order - */ - getGlobalSellOrder(resourceType: MarketResourceConstant, maxPrice = this.getAvgPrice(resourceType) * 1.2) { - const orders = this.getOrders(resourceType, ORDER_SELL) - if (!orders.length) return Result.fail + if (!bestOrder) return Result.fail - let bestOrder: Order - let bestOrderCost = Infinity + return bestOrder + } - for (const order of orders) { - if (order.price > maxPrice) continue - if (order.price >= bestOrderCost) continue + /** + * Finds the most expensive buy order + */ + getGlobalBuyOrder( + resourceType: MarketResourceConstant, + minPrice = this.getAvgPrice(resourceType) * 0.8, + ) { + const orders = this.getOrders(resourceType, ORDER_BUY) + if (!orders.length) return Result.fail - // we found a better order + let bestOrder: Order + let bestOrderPrice = 0 - bestOrder = order - bestOrderCost = order.price - } + for (const order of orders) { + if (order.price < minPrice) continue + if (order.price <= bestOrderPrice) continue - if (!bestOrder) return Result.fail + // we found a better order - return bestOrder + bestOrder = order + bestOrderPrice = order.price } - /** - * Finds the most expensive buy order - */ - getGlobalBuyOrder(resourceType: MarketResourceConstant, minPrice = this.getAvgPrice(resourceType) * 0.8) { - const orders = this.getOrders(resourceType, ORDER_BUY) - if (!orders.length) return Result.fail + if (!bestOrder) return Result.fail - let bestOrder: Order - let bestOrderPrice = 0 + return bestOrder + } - for (const order of orders) { - if (order.price < minPrice) continue - if (order.price <= bestOrderPrice) continue + /** + * Find the highest order and sell pixels to it + */ + advancedSellPixels() { + if (!global.settings.pixelSelling) return - // we found a better order - - bestOrder = order - bestOrderPrice = order.price - } + if (Game.resources[PIXEL] === 0) return - if (!bestOrder) return Result.fail + const avgPrice = this.getAvgPrice(PIXEL, 7) - return bestOrder - } - - /** - * Find the highest order and sell pixels to it - */ - advancedSellPixels() { - if (!global.settings.pixelSelling) return - - if (Game.resources[PIXEL] === 0) return - - const avgPrice = this.getAvgPrice(PIXEL, 7) - - const minPrice = avgPrice * 0.8 - /* + const minPrice = avgPrice * 0.8 + /* log('minPixelPrice', minPrice) log('avgPixelPrice', avgPrice) */ - const buyOrder = this.getGlobalBuyOrder(PIXEL, minPrice) - - if (buyOrder) { - Game.market.deal(buyOrder.id, Math.min(buyOrder.amount, Game.resources[PIXEL])) - return - } + const buyOrder = this.getGlobalBuyOrder(PIXEL, minPrice) - const myPixelOrder = _.find( - Game.market.orders, - o => o.type == 'sell' && o.resourceType == PIXEL, - ) - - const sellOrder = this.getGlobalSellOrder(PIXEL, Infinity) - if (!sellOrder) return - let price: number - - if (sellOrder.price < avgPrice) { - price = avgPrice - } else { - price = sellOrder.price - } - - if (myPixelOrder) { - if (Game.time % 100 == 0) { - if (myPixelOrder.remainingAmount < Game.resources[PIXEL]) { - Game.market.extendOrder( - myPixelOrder.id, - Game.resources[PIXEL] - myPixelOrder.remainingAmount, - ) - return - } else { - if (myPixelOrder.price == price) return - Game.market.changeOrderPrice(myPixelOrder.id, price - 0.001) - return - } - } else { - return - } - } - - Game.market.createOrder({ - type: ORDER_SELL, - resourceType: PIXEL, - price: price - 0.001, - totalAmount: Game.resources[PIXEL], - }) + if (buyOrder) { + Game.market.deal(buyOrder.id, Math.min(buyOrder.amount, Game.resources[PIXEL])) + return } - /** - * intra-tick cached orders sorted by resourceType and trade type - */ - cachedOrders: CachedMarketOrders - - /** - * orders created by other players that we are on acceptable terms with, for a specified resource and trade type - * See engine: https://github.com/screeps/engine/blob/7ee5b8e24b16b6b31727a83db15f676f5061a114/src/game/market.js#L13 - * It seems that there is caching for each resource, but nothing else. So we will use that cache while also organizing by order type (BUY or SELL) - */ - getOrders(resourceType: MarketResourceConstant, orderType: MarketOrderTypes) { - - if (this.cachedOrders[resourceType]) { - - return this.cachedOrders[resourceType][orderType] - } - - const ordersByType: CachedMarketOrders[MarketResourceConstant] = { - [ORDER_BUY]: [], - [ORDER_SELL]: [], - } - - const orders = Game.market.getAllOrders({ resourceType }) - for (const order of orders) { - - // Make sure the order isn't coming from a room we own - if (collectiveManager.communes.has(order.roomName)) continue + const myPixelOrder = _.find( + Game.market.orders, + o => o.type == 'sell' && o.resourceType == PIXEL, + ) - const roomMemory = Memory.rooms[order.roomName] - // Filter out orders from players we hate - if ( - roomMemory && - Memory.players[roomMemory[RoomMemoryKeys.owner]] && - Memory.players[roomMemory[RoomMemoryKeys.owner]][PlayerMemoryKeys.hate] > 0 - ) { + const sellOrder = this.getGlobalSellOrder(PIXEL, Infinity) + if (!sellOrder) return + let price: number - continue - } + if (sellOrder.price < avgPrice) { + price = avgPrice + } else { + price = sellOrder.price + } - ordersByType[order.type as MarketOrderTypes].push(order) + if (myPixelOrder) { + if (Game.time % 100 == 0) { + if (myPixelOrder.remainingAmount < Game.resources[PIXEL]) { + Game.market.extendOrder( + myPixelOrder.id, + Game.resources[PIXEL] - myPixelOrder.remainingAmount, + ) + return + } else { + if (myPixelOrder.price == price) return + Game.market.changeOrderPrice(myPixelOrder.id, price - 0.001) + return } - - this.cachedOrders[resourceType] = ordersByType - return ordersByType[orderType] + } else { + return + } } - /** - * My outgoing orders organized by room, order type and resourceType - */ - _myOrders: { - [roomName: string]: Partial< - Record>> - > + Game.market.createOrder({ + type: ORDER_SELL, + resourceType: PIXEL, + price: price - 0.001, + totalAmount: Game.resources[PIXEL], + }) + } + + /** + * intra-tick cached orders sorted by resourceType and trade type + */ + cachedOrders: CachedMarketOrders + + /** + * orders created by other players that we are on acceptable terms with, for a specified resource and trade type + * See engine: https://github.com/screeps/engine/blob/7ee5b8e24b16b6b31727a83db15f676f5061a114/src/game/market.js#L13 + * It seems that there is caching for each resource, but nothing else. So we will use that cache while also organizing by order type (BUY or SELL) + */ + getOrders(resourceType: MarketResourceConstant, orderType: MarketOrderTypes) { + if (this.cachedOrders[resourceType]) { + return this.cachedOrders[resourceType][orderType] } - /** - * Gets my outgoing orders organized by room, order type and resourceType - */ - get myOrders() { - // If _myOrders are already defined, inform them + const ordersByType: CachedMarketOrders[MarketResourceConstant] = { + [ORDER_BUY]: [], + [ORDER_SELL]: [], + } - if (this._myOrders) return this._myOrders + const orders = Game.market.getAllOrders({ resourceType }) + for (const order of orders) { + // Make sure the order isn't coming from a room we own + if (CollectiveManager.communes.has(order.roomName)) continue + + const roomMemory = Memory.rooms[order.roomName] + // Filter out orders from players we hate + if ( + roomMemory && + Memory.players[roomMemory[RoomMemoryKeys.owner]] && + Memory.players[roomMemory[RoomMemoryKeys.owner]][PlayerMemoryKeys.hate] > 0 + ) { + continue + } + + ordersByType[order.type as MarketOrderTypes].push(order) + } - this._myOrders = {} + this.cachedOrders[resourceType] = ordersByType + return ordersByType[orderType] + } - // Loop through each orderID in the market's orders + /** + * My outgoing orders organized by room, order type and resourceType + */ + _myOrders: { + [roomName: string]: Partial>>> + } - for (const orderID in Game.market.orders) { - // Get the order using its ID + /** + * Gets my outgoing orders organized by room, order type and resourceType + */ + get myOrders() { + // If _myOrders are already defined, inform them - const order = Game.market.orders[orderID] + if (this._myOrders) return this._myOrders - // If the order is inactive (it likely has 0 remaining amount) + this._myOrders = {} - if (order.remainingAmount == 0) continue + // Loop through each orderID in the market's orders - // If there is foundation for this structure, create it + for (const orderID in Game.market.orders) { + // Get the order using its ID - if (!this._myOrders[order.roomName]) { - this._myOrders[order.roomName] = { - sell: {}, - buy: {}, - } - } + const order = Game.market.orders[orderID] - // If there is no array for this structure, create one + // If the order is inactive (it likely has 0 remaining amount) - if (!this._myOrders[order.roomName][order.type][order.resourceType]) - this._myOrders[order.roomName][order.type][order.resourceType] = [] + if (order.remainingAmount == 0) continue - // Add the order to the structure's array + // If there is foundation for this structure, create it - this._myOrders[order.roomName][order.type][order.resourceType].push(order) + if (!this._myOrders[order.roomName]) { + this._myOrders[order.roomName] = { + sell: {}, + buy: {}, } + } - return this._myOrders - } + // If there is no array for this structure, create one - /** - * The number of orders owned by me - */ - _myOrdersCount: number + if (!this._myOrders[order.roomName][order.type][order.resourceType]) + this._myOrders[order.roomName][order.type][order.resourceType] = [] - /** - * Gets the number of orders owned by me - */ - get myOrdersCount() { - if (this._myOrdersCount !== undefined) return this._myOrdersCount + // Add the order to the structure's array - return (this._myOrdersCount = Object.keys(Game.market.orders).length) + this._myOrders[order.roomName][order.type][order.resourceType].push(order) } - _isMarketFunctional: boolean - /** - * Determines if it is functional based on the existence of orders - */ - get isMarketFunctional() { - if (this._isMarketFunctional !== undefined) return this._isMarketFunctional - - return (this._isMarketFunctional = !!Game.market.getAllOrders().length) + return this._myOrders + } + + /** + * The number of orders owned by me + */ + _myOrdersCount: number + + /** + * Gets the number of orders owned by me + */ + get myOrdersCount() { + if (this._myOrdersCount !== undefined) return this._myOrdersCount + + return (this._myOrdersCount = Object.keys(Game.market.orders).length) + } + + _isMarketFunctional: boolean + /** + * Determines if it is functional based on the existence of orders + */ + get isMarketFunctional() { + if (this._isMarketFunctional !== undefined) return this._isMarketFunctional + + return (this._isMarketFunctional = !!Game.market.getAllOrders().length) + } + + private resourceHistory: Partial<{ [key in MarketResourceConstant]: { [days: string]: number } }> + /** + * Finds the average trading price of a resourceType over a set amount of days + */ + getAvgPrice(resourceType: MarketResourceConstant, days = 2) { + if (this.resourceHistory[resourceType] && this.resourceHistory[resourceType][days]) { + return this.resourceHistory[resourceType][days] } - private resourceHistory: Partial<{[key in MarketResourceConstant]: {[days: string]: number}}> - /** - * Finds the average trading price of a resourceType over a set amount of days - */ - getAvgPrice(resourceType: MarketResourceConstant, days = 2) { - if (this.resourceHistory[resourceType] && this.resourceHistory[resourceType][days]) { + // Get the market history for the specified resourceType - return this.resourceHistory[resourceType][days] - } - - // Get the market history for the specified resourceType + const history = Game.market.getHistory(resourceType) + if (!history.length) return 1 - const history = Game.market.getHistory(resourceType) - if (!history.length) return 1 + let totalPrice = 0 - let totalPrice = 0 + // For every day of history, add to the total price - // For every day of history, add to the total price - - for (let index = 0; index <= days; index += 1) { - if (!history[index]) continue - totalPrice += history[index].avgPrice - } - - // Inform the average price - const avgPrice = totalPrice / days - //cache the result - this.resourceHistory[resourceType] ??= {} - this.resourceHistory[resourceType][days] - return avgPrice + for (let index = 0; index <= days; index += 1) { + if (!history[index]) continue + totalPrice += history[index].avgPrice } - decidePrice(resourceType: ResourceConstant, priority: number, startTick: number = Game.time) { - + // Inform the average price + const avgPrice = totalPrice / days + //cache the result + this.resourceHistory[resourceType] ??= {} + this.resourceHistory[resourceType][days] + return avgPrice + } - } + decidePrice(resourceType: ResourceConstant, priority: number, startTick: number = Game.time) {} } export const marketManager = new MarketManager() diff --git a/src/international/migration.ts b/src/international/migration.ts index 154615b18..b2fe73677 100644 --- a/src/international/migration.ts +++ b/src/international/migration.ts @@ -6,7 +6,7 @@ import { roomNameProcs } from 'room/roomNameProcs' * Migrate version by performing actions, if required */ export class MigrationManager { - public run() { + public static run() { // We are at the right version, no need to migrate if (Memory.breakingVersion === global.settings.breakingVersion) return @@ -27,7 +27,7 @@ export class MigrationManager { this.hardMigration() } - private trySoftMigrations() { + private static trySoftMigrations() { if (Memory.breakingVersion === 89) { global.killCreeps() @@ -85,7 +85,7 @@ export class MigrationManager { } } - private hardMigration() { + private static hardMigration() { global.killCreeps() global.killPowerCreeps() @@ -94,5 +94,3 @@ export class MigrationManager { } } - -export const migrationManager = new MigrationManager() diff --git a/src/international/powerCreepOrganizer.ts b/src/international/powerCreepOrganizer.ts index 52090cfe8..4b9568f74 100644 --- a/src/international/powerCreepOrganizer.ts +++ b/src/international/powerCreepOrganizer.ts @@ -1,67 +1,67 @@ import { creepClasses } from 'room/creeps/creepClasses' import { customColors, remoteRoles } from './constants' import { customLog } from 'utils/logging' -import { collectiveManager, CollectiveManager } from './collective' +import { CollectiveManager } from './collective' import { packCoord } from 'other/codec' import { powerCreepClasses } from 'room/creeps/powerCreepClasses' import { statsManager } from './statsManager' export class PowerCreepOrganizer { - constructor() {} + constructor() {} - public run() { - // Clear non-existent creeps from memory + public run() { + // Clear non-existent creeps from memory - for (const creepName in Memory.powerCreeps) { - // The creep has been deleted, delete it from memory + for (const creepName in Memory.powerCreeps) { + // The creep has been deleted, delete it from memory - if (!Game.powerCreeps[creepName]) delete Memory.powerCreeps[creepName] - } + if (!Game.powerCreeps[creepName]) delete Memory.powerCreeps[creepName] + } - // Process and organize existing creeps + // Process and organize existing creeps - for (const creepName in Game.powerCreeps) { - this.processCreep(creepName) - } + for (const creepName in Game.powerCreeps) { + this.processCreep(creepName) } + } - private processCreep(creepName: string) { - let creep = Game.powerCreeps[creepName] + private processCreep(creepName: string) { + let creep = Game.powerCreeps[creepName] - // If the creep isn't spawned + // If the creep isn't spawned - if (!creep.ticksToLive) { - collectiveManager.unspawnedPowerCreepNames.push(creep.name) - return - } + if (!creep.ticksToLive) { + CollectiveManager.unspawnedPowerCreepNames.push(creep.name) + return + } - collectiveManager.powerCreepCount += 1 + CollectiveManager.powerCreepCount += 1 - // Get the creep's role + // Get the creep's role - const { className } = creep + const { className } = creep - // Assign creep a class based on role + // Assign creep a class based on role - const creepClass = powerCreepClasses[className] - creep = Game.powerCreeps[creepName] = new creepClass(creep.id) + const creepClass = powerCreepClasses[className] + creep = Game.powerCreeps[creepName] = new creepClass(creep.id) - // Get the creep's current room and the room it's from + // Get the creep's current room and the room it's from - const { room } = creep + const { room } = creep - room.powerCreepPositions[packCoord(creep.pos)] = creep.name + room.powerCreepPositions[packCoord(creep.pos)] = creep.name - // Organize creep in its room by its role + // Organize creep in its room by its role - room.myPowerCreepsByRole[className].push(creepName) + room.myPowerCreepsByRole[className].push(creepName) - // Record the creep's presence in the room + // Record the creep's presence in the room - room.myPowerCreeps.push(creep) + room.myPowerCreeps.push(creep) - creep.initRun() - } + creep.initRun() + } } export const powerCreepOrganizer = new PowerCreepOrganizer() diff --git a/src/international/requests.ts b/src/international/requests.ts index 4766ee101..04aeb3036 100644 --- a/src/international/requests.ts +++ b/src/international/requests.ts @@ -1,17 +1,17 @@ import { randomIntRange, randomRange, utils } from 'utils/utils' -import { collectiveManager } from './collective' +import { CollectiveManager } from './collective' import { roomNameUtils } from 'room/roomNameUtils' import { - CombatRequestKeys, - HaulRequestKeys, - RoomMemoryKeys, - RoomStatusKeys, - RoomTypes, - WorkRequestKeys, - antifaRoles, - maxCombatDistance, - maxHaulDistance, - maxWorkRequestDistance, + CombatRequestKeys, + HaulRequestKeys, + RoomMemoryKeys, + RoomStatusKeys, + RoomTypes, + WorkRequestKeys, + antifaRoles, + maxCombatDistance, + maxHaulDistance, + maxWorkRequestDistance, } from './constants' import { indexOf } from 'lodash' import { Sleepable } from 'utils/sleepable' @@ -72,9 +72,9 @@ export class RequestsManager extends Sleepable { const request = Memory.combatRequests[requestName] if (request[CombatRequestKeys.responder]) { - collectiveManager.creepsByCombatRequest[requestName] = {} + CollectiveManager.creepsByCombatRequest[requestName] = {} for (const role of antifaRoles) - collectiveManager.creepsByCombatRequest[requestName][role] = [] + CollectiveManager.creepsByCombatRequest[requestName][role] = [] request[CombatRequestKeys.quads] = 0 continue } @@ -93,7 +93,7 @@ export class RequestsManager extends Sleepable { const request = Memory.haulRequests[requestName] if (request[HaulRequestKeys.responder]) { - collectiveManager.creepsByHaulRequest[requestName] = [] + CollectiveManager.creepsByHaulRequest[requestName] = [] continue } @@ -110,9 +110,9 @@ export class RequestsManager extends Sleepable { private runWorkRequests() { if (!global.settings.autoClaim) return - /* if (collectiveManager.communes.size >= collectiveManager.maxCommunes) return */ + /* if (CollectiveManager.communes.size >= CollectiveManager.maxCommunes) return */ - let reservedGCL = Game.gcl.level - collectiveManager.communes.size + let reservedGCL = Game.gcl.level - CollectiveManager.communes.size // Subtract the number of workRequests with responders @@ -127,7 +127,7 @@ export class RequestsManager extends Sleepable { const communesForResponding = new Set() - for (const roomName of collectiveManager.communes) { + for (const roomName of CollectiveManager.communes) { if (!communeUtils.canTakeNewWorkRequest(roomName)) continue communesForResponding.add(roomName) @@ -135,7 +135,7 @@ export class RequestsManager extends Sleepable { // Assign and abandon workRequests, in order of score - const workRequests = collectiveManager.workRequestsByScore + const workRequests = CollectiveManager.workRequestsByScore for (const roomName of workRequests) { const request = Memory.workRequests[roomName] @@ -200,11 +200,13 @@ export class RequestsManager extends Sleepable { } } - private shouldWorkRequestGetResponse(request: WorkRequest, roomName: string, reservedGCL: number) { - + private shouldWorkRequestGetResponse( + request: WorkRequest, + roomName: string, + reservedGCL: number, + ) { // If there is no GCL left to claim with if (Game.gcl.level <= reservedGCL) { - const room = Game.rooms[roomName] // If we don't own the request room's contorller already, then we should stop if (room && !room.controller.my) { @@ -215,7 +217,7 @@ export class RequestsManager extends Sleepable { if (request[WorkRequestKeys.abandon]) return false if ( request[WorkRequestKeys.responder] && - collectiveManager.communes.has(request[WorkRequestKeys.responder]) + CollectiveManager.communes.has(request[WorkRequestKeys.responder]) ) { return false } @@ -229,7 +231,7 @@ export class RequestsManager extends Sleepable { if (request[CombatRequestKeys.abandon]) continue if ( request[CombatRequestKeys.responder] && - collectiveManager.communes.has(request[CombatRequestKeys.responder]) + CollectiveManager.communes.has(request[CombatRequestKeys.responder]) ) continue @@ -237,7 +239,7 @@ export class RequestsManager extends Sleepable { const communes = [] - for (const roomName of collectiveManager.communes) { + for (const roomName of CollectiveManager.communes) { /* if (Memory.rooms[roomName].combatRequests.includes(requestName)) continue */ // Ensure the combatRequest isn't responded to by the room the request is for @@ -289,7 +291,10 @@ export class RequestsManager extends Sleepable { const communeName = roomNameUtils.findClosestRoomName(requestName, communes) if (!communeName) continue - if (Memory.rooms[communeName][RoomMemoryKeys.status] !== Memory.rooms[requestName][RoomMemoryKeys.status]) { + if ( + Memory.rooms[communeName][RoomMemoryKeys.status] !== + Memory.rooms[requestName][RoomMemoryKeys.status] + ) { // We probably can't reach as it will likely be a respawn, novice, or closed request[CombatRequestKeys.abandon] = 20000 @@ -316,9 +321,9 @@ export class RequestsManager extends Sleepable { Memory.rooms[communeName][RoomMemoryKeys.combatRequests].push(requestName) request[CombatRequestKeys.responder] = communeName - collectiveManager.creepsByCombatRequest[requestName] = {} + CollectiveManager.creepsByCombatRequest[requestName] = {} for (const role of antifaRoles) { - collectiveManager.creepsByCombatRequest[requestName][role] = [] + CollectiveManager.creepsByCombatRequest[requestName][role] = [] } } } @@ -330,7 +335,7 @@ export class RequestsManager extends Sleepable { if (request[HaulRequestKeys.abandon]) continue if ( request[HaulRequestKeys.responder] && - collectiveManager.communes.has(request[HaulRequestKeys.responder]) + CollectiveManager.communes.has(request[HaulRequestKeys.responder]) ) continue @@ -338,7 +343,7 @@ export class RequestsManager extends Sleepable { const communes = [] - for (const roomName of collectiveManager.communes) { + for (const roomName of CollectiveManager.communes) { if (Memory.rooms[roomName][RoomMemoryKeys.haulRequests].includes(requestName)) { continue } @@ -362,7 +367,10 @@ export class RequestsManager extends Sleepable { const communeName = roomNameUtils.findClosestRoomName(requestName, communes) if (!communeName) continue - if (Memory.rooms[communeName][RoomMemoryKeys.status] !== Memory.rooms[requestName][RoomMemoryKeys.status]) { + if ( + Memory.rooms[communeName][RoomMemoryKeys.status] !== + Memory.rooms[requestName][RoomMemoryKeys.status] + ) { // We probably can't reach as it will likely be a respawn, novice, or closed request[HaulRequestKeys.abandon] = 20000 @@ -389,7 +397,7 @@ export class RequestsManager extends Sleepable { Memory.rooms[communeName][RoomMemoryKeys.haulRequests].push(requestName) request[HaulRequestKeys.responder] = communeName - collectiveManager.creepsByHaulRequest[requestName] = [] + CollectiveManager.creepsByHaulRequest[requestName] = [] } } } diff --git a/src/international/respawn.ts b/src/international/respawn.ts index 42ac772e0..7674359a3 100644 --- a/src/international/respawn.ts +++ b/src/international/respawn.ts @@ -4,40 +4,38 @@ import { customLog } from 'utils/logging' * Credit to SemperRabbit for this nice piece of code! */ export class RespawnManager { - run() { - if (!this.hasRespawned()) return + static run() { + if (!this.hasRespawned()) return - global.clearMemory() - } - - private hasRespawned(): boolean { - if (Game.time === 0) return true + global.clearMemory() + } - // Make sure there are no creeps + private static hasRespawned(): boolean { + if (Game.time === 0) return true - for (const key in Game.creeps) { - return false - } + // Make sure there are no creeps - const roomNames = Object.keys(Game.rooms) - if (roomNames.length > 1) return false + for (const key in Game.creeps) { + return false + } - const room = Game.rooms[roomNames[0]] - if ( - (!room && !room.controller) || - !room.controller.my || - room.controller.level !== 1 || - room.controller.progress || - !room.controller.safeMode || - room.controller.safeMode < SAFE_MODE_DURATION - 1 - ) { - return false - } + const roomNames = Object.keys(Game.rooms) + if (roomNames.length > 1) return false + + const room = Game.rooms[roomNames[0]] + if ( + (!room && !room.controller) || + !room.controller.my || + room.controller.level !== 1 || + room.controller.progress || + !room.controller.safeMode || + room.controller.safeMode < SAFE_MODE_DURATION - 1 + ) { + return false + } - if (Object.keys(Game.spawns).length > 1) return false + if (Object.keys(Game.spawns).length > 1) return false - return true - } + return true + } } - -export const respawnManager = new RespawnManager() diff --git a/src/international/roomPruning.ts b/src/international/roomPruning.ts index 390fa08cc..1baf9c884 100644 --- a/src/international/roomPruning.ts +++ b/src/international/roomPruning.ts @@ -1,7 +1,7 @@ import { RoomMemoryKeys, WorkRequestKeys, maxControllerLevel } from './constants' import { findLowestScore, randomIntRange } from '../utils/utils' import { Sleepable } from 'utils/sleepable' -import { collectiveManager } from './collective' +import { CollectiveManager } from './collective' export class RoomPruningManager extends Sleepable { sleepFor = randomIntRange(50000, 100000) @@ -15,19 +15,19 @@ export class RoomPruningManager extends Sleepable { let highestCommuneScore = 0 let highestCommuneScoreCommuneName: string - for (const roomName of collectiveManager.communes) { - const room = Game.rooms[roomName] - if (room.controller.level < maxControllerLevel) return + for (const roomName of CollectiveManager.communes) { + const room = Game.rooms[roomName] + if (room.controller.level < maxControllerLevel) return - rooms += 1 + rooms += 1 - const roomMemory = Memory.rooms[roomName] - const score = roomMemory[RoomMemoryKeys.score] + roomMemory[RoomMemoryKeys.dynamicScore] + const roomMemory = Memory.rooms[roomName] + const score = roomMemory[RoomMemoryKeys.score] + roomMemory[RoomMemoryKeys.dynamicScore] - if (score <= highestCommuneScore) continue + if (score <= highestCommuneScore) continue - highestCommuneScore = score - highestCommuneScoreCommuneName = roomName + highestCommuneScore = score + highestCommuneScoreCommuneName = roomName } // Have multiple rooms before we unclaim diff --git a/src/international/segments.ts b/src/international/segments.ts index 390e464c6..7baa7c1e4 100644 --- a/src/international/segments.ts +++ b/src/international/segments.ts @@ -1,7 +1,7 @@ import { Result, SegmentIDs } from './constants' -class SegmentsManager { - run() { +export class SegmentsManager { + static run() { // See if our dumby segment is alive const sampleSegment = RawMemory.segments[SegmentIDs.general] @@ -13,7 +13,7 @@ class SegmentsManager { return Result.success } - private setSegments() { + private static setSegments() { // We can assume that no segments are alive: set them alive and ask the bot to stop everything else for the current tick RawMemory.setActiveSegments([ @@ -26,7 +26,7 @@ class SegmentsManager { console.log('activating segments, should take one tick') } - endRun() { + static endRun() { if (this._basePlans) RawMemory.segments[SegmentIDs.basePlans] = JSON.stringify(this._basePlans) // reset intra-tick values this._basePlans = undefined @@ -35,19 +35,17 @@ class SegmentsManager { this._IDs = undefined } - private _basePlans: BasePlansSegment - get basePlans(): BasePlansSegment { + private static _basePlans: BasePlansSegment + static get basePlans(): BasePlansSegment { if (this._basePlans) return this._basePlans return (this._basePlans = JSON.parse(RawMemory.segments[SegmentIDs.basePlans])) } - private _IDs: IDsSegment - get IDs(): IDsSegment { + private static _IDs: IDsSegment + static get IDs(): IDsSegment { if (this._IDs) return this._IDs return (this._IDs = JSON.parse(RawMemory.segments[SegmentIDs.IDs])) } } - -export const segmentsManager = new SegmentsManager() diff --git a/src/international/simpleAllies/simpleAllies.ts b/src/international/simpleAllies/simpleAllies.ts index cccce0814..0386949b4 100644 --- a/src/international/simpleAllies/simpleAllies.ts +++ b/src/international/simpleAllies/simpleAllies.ts @@ -1,188 +1,57 @@ -import { collectiveManager } from '../collective' +import { CollectiveManager } from '../collective' import { maxSegmentsOpen } from '../constants' - -export type AllyRequestTypes = - | 'resource' - | 'defense' - | 'attack' - | 'player' - | 'work' - | 'econ' - | 'room' - -export interface ResourceRequest { - priority: number - roomName: string - resourceType: ResourceConstant - /** - * How much they want of the resource. If the responder sends only a portion of what you ask for, that's fine - */ - amount: number - /** - * If the bot has no terminal, allies should instead haul the resources to us - */ - terminal?: boolean -} - -export interface DefenseRequest { - roomName: string - priority: number -} - -export interface AttackRequest { - roomName: string - priority: number -} - -export interface PlayerRequest { - playerName: string - /** - * The amount you think your team should hate the player. Hate should probably affect combat aggression and targetting - */ - hate?: number - /** - * The last time this player has attacked you - */ - lastAttackedBy?: number -} - -export type WorkRequestType = 'build' | 'upgrade' | 'repair' - -export interface WorkRequest { - roomName: string - priority: number - workType: WorkRequestType -} - -export const enum FunnelGoal { - GCL = 0, - RCL7 = 1, - RCL8 = 2, -} - -export interface FunnelRequest { - /** - * Amount of energy needed. Should be equal to energy that needs to be put into controller for achieving goal. - */ - maxAmount: number - /** - * What energy will be spent on. Room receiving energy should focus solely on achieving the goal. - */ - goalType: FunnelGoal - /** - * Room to which energy should be sent. If undefined resources can be sent to any of requesting player's rooms. - */ - roomName?: string -} - -export interface EconRequest { - /** - * total credits the bot has. Should be 0 if there is no market on the server - */ - credits: number - /** - * the maximum amount of energy the bot is willing to share with allies. Should never be more than the amount of energy the bot has in storing structures - */ - sharableEnergy: number - /** - * The average energy income the bot has calculated over the last 100 ticks - * Optional, as some bots might not be able to calculate this easily. - */ - energyIncome?: number - /** - * The number of mineral nodes the bot has access to, probably used to inform expansion - */ - mineralNodes?: { [key in MineralConstant]: number } -} - -export interface RoomRequest { - roomName: string - /** - * The player who owns this room. If there is no owner, the room probably isn't worth making a request about - */ - playerName: string - /** - * The last tick your scouted this room to acquire the data you are now sharing - */ - lastScout: number - rcl: number - /** - * The amount of stored energy the room has. storage + terminal + factory should be sufficient - */ - energy: number - towers: number - avgRamprtHits: number - terminal: boolean -} - -export interface AllyRequests { - resource: ResourceRequest[] - defense: DefenseRequest[] - attack: AttackRequest[] - player: PlayerRequest[] - work: WorkRequest[] - funnel: FunnelRequest[] - econ?: EconRequest - room: RoomRequest[] -} - -export interface DefenseResponse { - roomName: string -} - -export interface AttackResponse { - roomName: string -} - -export interface WorkResponse { - roomName: string -} - -export interface AllyResponses { - // resource?: ResourceRequest[] - defense: DefenseResponse[] - attack: AttackResponse[] - work: WorkResponse[] -} +import { + AllyRequests, + AttackRequest, + DefenseRequest, + EconInfo, + FunnelRequest, + PlayerRequest, + ResourceRequest, + RoomRequest, + SimpleAlliesSegment, + WorkRequest, +} from './types' /** - * Having data we pass into the segment being an object allows us to send additional information outside of requests + * Represents the goal type enum for javascript */ -export interface SimpleAlliesSegment { - /** - * Requests of the new system - */ - requests: AllyRequests - commands: any[] +export const EFunnelGoal = { + GCL: 0, + RCL7: 1, + RCL8: 2, } -const requestsSekelton: AllyRequests = { - resource: [], - defense: [], - attack: [], - player: [], - work: [], - funnel: [], - room: [], -} - -const responsesSkeleton: AllyResponses = { - defense: [], - attack: [], - work: [], +/** + * Represents the goal type enum for javascript + */ +export const EWorkType = { + BUILD: 'build', + REPAIR: 'repair', } export class SimpleAllies { - myRequests: AllyRequests = { ...requestsSekelton } - myResponses: AllyResponses = { ...responsesSkeleton } - allySegmentData: Partial = {} - currentAlly?: string + /** + * State + */ + private myRequests: AllyRequests = { + resource: [], + defense: [], + attack: [], + player: [], + work: [], + funnel: [], + room: [], + } + private myEconInfo?: EconInfo + public allySegmentData?: SimpleAlliesSegment + public currentAlly?: string /** * To call before any requests are made or responded to. Configures some required values and gets ally requests */ initRun() { - // Reset the data of myRequests + // Reset requests this.myRequests = { resource: [], defense: [], @@ -192,13 +61,12 @@ export class SimpleAllies { funnel: [], room: [], } - this.myResponses = { - defense: [], - attack: [], - work: [], - } - this.readAllySegment() + // Reset econ info + this.myEconInfo = undefined + + // Read ally segment data + this.allySegmentData = this.readAllySegment() } /** @@ -221,12 +89,10 @@ export class SimpleAllies { // Protect from errors as we try to get ally segment data try { - this.allySegmentData = JSON.parse(RawMemory.foreignSegment.data) + return JSON.parse(RawMemory.foreignSegment.data) } catch (err) { - console.log('Error in getting requests for simpleAllies', this.currentAlly) + ;`[simpleAllies] Error reading ${this.currentAlly} segment ${global.settings.allySegmentID}` } - - console.log('data', this.allySegmentData) } /** @@ -235,14 +101,15 @@ export class SimpleAllies { endRun() { // Make sure we don't have too many segments open if (Object.keys(RawMemory.segments).length >= maxSegmentsOpen) { - throw Error('Too many segments open: simpleAllies') + throw Error('[simpleAllies] Too many segments open') } this.allyRequestsFromMyTerminalRequests() const newSegmentData: SimpleAlliesSegment = { requests: this.myRequests as AllyRequests, - commands: collectiveManager.myCommands, + commands: CollectiveManager.myCommands, + updated: Game.time, } RawMemory.segments[global.settings.allySegmentID] = JSON.stringify(newSegmentData) @@ -253,8 +120,8 @@ export class SimpleAllies { * Convert unfilfilled terminal requests to ally requests, so they can respond to them. The goal is to prioritize internal sending over ally sending */ private allyRequestsFromMyTerminalRequests() { - for (const ID in collectiveManager.terminalRequests) { - const request = collectiveManager.terminalRequests[ID] + for (const ID in CollectiveManager.terminalRequests) { + const request = CollectiveManager.terminalRequests[ID] this.myRequests.resource.push({ roomName: request.roomName, @@ -292,8 +159,8 @@ export class SimpleAllies { this.myRequests.funnel.push(args) } - requestEcon(args: EconRequest) { - this.myRequests.econ = args + requestEcon(args: EconInfo) { + this.myEconInfo = args } requestRoom(args: RoomRequest) { diff --git a/src/international/simpleAllies/types.ts b/src/international/simpleAllies/types.ts new file mode 100644 index 000000000..cb7f0087d --- /dev/null +++ b/src/international/simpleAllies/types.ts @@ -0,0 +1,238 @@ +import { Command } from '../collectivizer' + +/** + * Represents the segment data for simpleAllies. + */ +export interface SimpleAlliesSegment { + econ?: EconInfo + requests: AllyRequests + updated: number + commands: Command[] +} + +/** + * Represents the collection of ally requests. + */ +export interface AllyRequests { + resource: ResourceRequest[] + defense: DefenseRequest[] + attack: AttackRequest[] + player: PlayerRequest[] + work: WorkRequest[] + funnel: FunnelRequest[] + room: RoomRequest[] +} + +/** + * Represents the goal type for a funnel request. + */ +export const enum FunnelGoal { + GCL = 0, + RCL7 = 1, + RCL8 = 2, +} + +/** + * Represents the type of work needed in a work request. + */ +export const enum WorkType { + BUILD = 'build', + REPAIR = 'repair', +} + +/** + * Request resource + */ +export interface ResourceRequest { + /** + * The name of the room where the resource is needed. + */ + roomName: string + /** + * The type of resource needed. + */ + resourceType: ResourceConstant + /** + * The amount of the resource needed. + */ + amount: number + /** + * The priority of the resource request, ranging from 0 to 1 where 1 is the highest consideration. + */ + priority: number + /** + * If set to false, allies can haul resources to us. + */ + terminal?: boolean + /** + * Tick after which the request should be ignored. + */ + timeout?: number +} + +/** + * Request help in defending a room + */ +export interface DefenseRequest { + /** + * The name of the room where the defense is needed. + */ + roomName: string + /** + * The priority of the defense request, ranging from 0 to 1 where 1 is the highest consideration. + */ + priority: number + /** + * Tick after which the request should be ignored. + */ + timeout?: number +} + +/** + * Request an attack on a specific room + */ +export interface AttackRequest { + /** + * The name of the room where the attack is needed. + */ + roomName: string + /** + * The priority of the attack request, ranging from 0 to 1 where 1 is the highest consideration. + */ + priority: number + /** + * Tick after which the request should be ignored. + */ + timeout?: number +} + +/** + * Influence allies aggresion score towards a player + */ +export interface PlayerRequest { + /** + * The name of the player. + */ + playerName: string + /** + * The level of hatred towards the player, ranging from 0 to 1 where 1 is the highest consideration. + * This value affects combat aggression and targeting. + */ + hate?: number + /** + * The last time this player has attacked you. + */ + lastAttackedBy?: number + /** + * Tick after which the request should be ignored. + */ + timeout?: number +} + +/** + * Request help in building/fortifying a room + */ +export interface WorkRequest { + /** + * The name of the room where the work is needed. + */ + roomName: string + /** + * The priority of the work request, ranging from 0 to 1 where 1 is the highest consideration. + */ + priority: number + /** + * The type of work needed. + */ + workType: WorkType + /** + * Tick after which the request should be ignored. + */ + timeout?: number +} + +/** + * Request energy to a room for a purpose of making upgrading faster. + */ +export interface FunnelRequest { + /** + * The amount of energy needed. Should be equal to the energy that needs to be put into the controller for achieving the goal. + */ + maxAmount: number + /** + * The type of goal that the energy will be spent on. The room receiving energy should focus solely on achieving this goal. + */ + goalType: FunnelGoal + /** + * The name of the room to which the energy should be sent. If undefined, resources can be sent to any of the requesting player's rooms. + */ + roomName: string + /** + * Tick after which the request should be ignored. + */ + timeout?: number +} + +/** + * Share scouting data about hostile owned rooms + */ +export interface RoomRequest { + /** + * The name of the room. + */ + roomName: string + /** + * The player who owns this room. If there is no owner, the room probably isn't worth making a request about. + */ + playerName: string + /** + * The last tick when you scouted this room to acquire the data you are now sharing. + */ + lastScout: number + /** + * The level of the room's controller. + */ + rcl: number + /** + * The amount of stored energy the room has. The sum of storage, terminal, and factory should be sufficient. + */ + energy: number + /** + * The number of towers in the room. + */ + towers: number + /** + * Indicates whether the room has a terminal. + */ + terminal: boolean + /** + * The average rampart hits in the room. + */ + avgRamprtHits?: number + /** + * Tick after which the request should be ignored. + */ + timeout?: number +} + +/** + * Share how your bot is doing economically + */ +export interface EconInfo { + /** + * The total credits the bot has. Should be 0 if there is no market on the server. + */ + credits?: number + /** + * The amount of energy in storage that the bot is willing to share with allies. + */ + sharableEnergy?: number + /** + * The average energy income the bot has calculated over the last 100 ticks. + */ + energyIncome?: number + /** + * The number of mineral nodes the bot has access to, probably used to inform expansion. + */ + mineralNodes?: { [mineral in MineralConstant]?: number } +} diff --git a/src/international/statsManager.ts b/src/international/statsManager.ts index 591a412fc..87c212a91 100644 --- a/src/international/statsManager.ts +++ b/src/international/statsManager.ts @@ -1,33 +1,33 @@ import { roundTo } from 'utils/utils' import { CPUMaxPerTick, customColors, RoomMemoryKeys, RoomStatsKeys, RoomTypes } from './constants' import { customLog, LogTypes } from 'utils/logging' -import { collectiveManager } from './collective' +import { CollectiveManager } from './collective' export interface RoomStats { - /** - * Game Time - */ - gt: number - /** - * Remote Count - */ - rc: number - /** - * Remote Energy Stored - */ - res: number - /** - * Remote Energy Input Harvest - */ - reih: number - /** - * Remote Energy Output Repair Other (non-barricade structures) - */ - reoro: number - /** - * Remote Energy Output Build - */ - reob: number + /** + * Game Time + */ + gt: number + /** + * Remote Count + */ + rc: number + /** + * Remote Energy Stored + */ + res: number + /** + * Remote Energy Input Harvest + */ + reih: number + /** + * Remote Energy Output Repair Other (non-barricade structures) + */ + reoro: number + /** + * Remote Energy Output Build + */ + reob: number } export interface CommuneStats extends RoomStats { @@ -113,149 +113,147 @@ export interface CommuneStats extends RoomStats { } const remoteStatNames: Set> = new Set([ - RoomStatsKeys.EnergyStored, - RoomStatsKeys.EnergyInputHarvest, - RoomStatsKeys.EnergyOutputRepairOther, - RoomStatsKeys.EnergyOutputBuild, + RoomStatsKeys.EnergyStored, + RoomStatsKeys.EnergyInputHarvest, + RoomStatsKeys.EnergyOutputRepairOther, + RoomStatsKeys.EnergyOutputBuild, ]) /** * Names of stats to average for */ const averageStatNames: Set = new Set([ - RoomStatsKeys.SpawnUsagePercentage, - RoomStatsKeys.EnergyInputHarvest, - RoomStatsKeys.MineralsHarvested, - RoomStatsKeys.EnergyInputBought, - RoomStatsKeys.EnergyOutputSold, - RoomStatsKeys.EnergyOutputUpgrade, - RoomStatsKeys.EnergyOutputBuild, - RoomStatsKeys.EnergyOutputRepairOther, - RoomStatsKeys.EnergyOutputRepairWallOrRampart, - RoomStatsKeys.EnergyOutputSpawn, - RoomStatsKeys.EnergyOutputPower, - RoomStatsKeys.RemoteEnergyStored, - RoomStatsKeys.RemoteEnergyInputHarvest, - RoomStatsKeys.RemoteEnergyOutputRepairOther, - RoomStatsKeys.RemoteEnergyOutputBuild, - RoomStatsKeys.EnergyOutputTransactionCosts, - RoomStatsKeys.EnergyTerminalSentDomestic, - RoomStatsKeys.EnergyTerminalSentOther, - RoomStatsKeys.CpuUsed, + RoomStatsKeys.SpawnUsagePercentage, + RoomStatsKeys.EnergyInputHarvest, + RoomStatsKeys.MineralsHarvested, + RoomStatsKeys.EnergyInputBought, + RoomStatsKeys.EnergyOutputSold, + RoomStatsKeys.EnergyOutputUpgrade, + RoomStatsKeys.EnergyOutputBuild, + RoomStatsKeys.EnergyOutputRepairOther, + RoomStatsKeys.EnergyOutputRepairWallOrRampart, + RoomStatsKeys.EnergyOutputSpawn, + RoomStatsKeys.EnergyOutputPower, + RoomStatsKeys.RemoteEnergyStored, + RoomStatsKeys.RemoteEnergyInputHarvest, + RoomStatsKeys.RemoteEnergyOutputRepairOther, + RoomStatsKeys.RemoteEnergyOutputBuild, + RoomStatsKeys.EnergyOutputTransactionCosts, + RoomStatsKeys.EnergyTerminalSentDomestic, + RoomStatsKeys.EnergyTerminalSentOther, + RoomStatsKeys.CpuUsed, ]) export class StatsManager { - stats: { - [roomType in RoomTypes.commune | RoomTypes.remote]: { - [roomName: string]: Partial - } + stats: { + [roomType in RoomTypes.commune | RoomTypes.remote]: { + [roomName: string]: Partial + } + } + + private roomConfig(roomName: string, roomType: number) { + if (roomType === RoomTypes.commune) { + const roomStats = (this.stats[RoomTypes.commune][roomName] = { + [RoomStatsKeys.SpawnUsagePercentage]: 0, + [RoomStatsKeys.EnergyInputHarvest]: 0, + [RoomStatsKeys.CreepCount]: 0, + [RoomStatsKeys.TotalCreepCount]: 0, + [RoomStatsKeys.PowerCreepCount]: 0, + [RoomStatsKeys.ControllerLevel]: 0, + [RoomStatsKeys.EnergyStored]: 0, + [RoomStatsKeys.BatteriesStoredTimes10]: 0, + [RoomStatsKeys.MineralsHarvested]: 0, + [RoomStatsKeys.EnergyInputBought]: 0, + [RoomStatsKeys.EnergyOutputSold]: 0, + [RoomStatsKeys.EnergyOutputUpgrade]: 0, + [RoomStatsKeys.EnergyOutputBuild]: 0, + [RoomStatsKeys.EnergyOutputRepairOther]: 0, + [RoomStatsKeys.EnergyOutputRepairWallOrRampart]: 0, + [RoomStatsKeys.EnergyOutputSpawn]: 0, + [RoomStatsKeys.EnergyOutputPower]: 0, + [RoomStatsKeys.RemoteCount]: 0, + [RoomStatsKeys.RemoteEnergyStored]: 0, + [RoomStatsKeys.RemoteEnergyInputHarvest]: 0, + [RoomStatsKeys.RemoteEnergyOutputRepairOther]: 0, + [RoomStatsKeys.RemoteEnergyOutputBuild]: 0, + [RoomStatsKeys.MinHaulerCost]: 0, + [RoomStatsKeys.EnergyOutputTransactionCosts]: 0, + [RoomStatsKeys.EnergyTerminalSentDomestic]: 0, + [RoomStatsKeys.EnergyTerminalSentOther]: 0, + [RoomStatsKeys.CpuUsed]: 0, + }) + + if (Memory.stats.rooms[roomName]) return + + Memory.stats.rooms[roomName] = roomStats + return } - private roomConfig(roomName: string, roomType: number) { - if (roomType === RoomTypes.commune) { - const roomStats = (this.stats[RoomTypes.commune][roomName] = { - [RoomStatsKeys.SpawnUsagePercentage]: 0, - [RoomStatsKeys.EnergyInputHarvest]: 0, - [RoomStatsKeys.CreepCount]: 0, - [RoomStatsKeys.TotalCreepCount]: 0, - [RoomStatsKeys.PowerCreepCount]: 0, - [RoomStatsKeys.ControllerLevel]: 0, - [RoomStatsKeys.EnergyStored]: 0, - [RoomStatsKeys.BatteriesStoredTimes10]: 0, - [RoomStatsKeys.MineralsHarvested]: 0, - [RoomStatsKeys.EnergyInputBought]: 0, - [RoomStatsKeys.EnergyOutputSold]: 0, - [RoomStatsKeys.EnergyOutputUpgrade]: 0, - [RoomStatsKeys.EnergyOutputBuild]: 0, - [RoomStatsKeys.EnergyOutputRepairOther]: 0, - [RoomStatsKeys.EnergyOutputRepairWallOrRampart]: 0, - [RoomStatsKeys.EnergyOutputSpawn]: 0, - [RoomStatsKeys.EnergyOutputPower]: 0, - [RoomStatsKeys.RemoteCount]: 0, - [RoomStatsKeys.RemoteEnergyStored]: 0, - [RoomStatsKeys.RemoteEnergyInputHarvest]: 0, - [RoomStatsKeys.RemoteEnergyOutputRepairOther]: 0, - [RoomStatsKeys.RemoteEnergyOutputBuild]: 0, - [RoomStatsKeys.MinHaulerCost]: 0, - [RoomStatsKeys.EnergyOutputTransactionCosts]: 0, - [RoomStatsKeys.EnergyTerminalSentDomestic]: 0, - [RoomStatsKeys.EnergyTerminalSentOther]: 0, - [RoomStatsKeys.CpuUsed]: 0, - }) - - if (Memory.stats.rooms[roomName]) return - - Memory.stats.rooms[roomName] = roomStats - return - } - - // Otherwise configure the remote - - this.stats[RoomTypes.remote][roomName] = { - [RoomStatsKeys.RemoteEnergyStored]: 0, - [RoomStatsKeys.RemoteEnergyInputHarvest]: 0, - [RoomStatsKeys.RemoteEnergyOutputRepairOther]: 0, - [RoomStatsKeys.RemoteEnergyOutputBuild]: 0, - } + // Otherwise configure the remote + + this.stats[RoomTypes.remote][roomName] = { + [RoomStatsKeys.RemoteEnergyStored]: 0, + [RoomStatsKeys.RemoteEnergyInputHarvest]: 0, + [RoomStatsKeys.RemoteEnergyOutputRepairOther]: 0, + [RoomStatsKeys.RemoteEnergyOutputBuild]: 0, + } + } + + roomInitialRun(roomName: string, roomType: number) { + this.roomConfig(roomName, roomType) + } + + private roomCommuneEndRun(roomName: string, forceUpdate: boolean = false) { + const room = Game.rooms[roomName] + const roomMemory = Memory.rooms[roomName] + const interTickRoomStats = Memory.stats.rooms[roomName] + const roomStats = this.stats[RoomTypes.commune][roomName] as CommuneStats + + const each250Ticks = Game.time % 250 === 0 + + const remotes = roomMemory[RoomMemoryKeys.remotes] + for (const remoteRoomName of remotes) { + const remoteRoomStats = this.stats[RoomTypes.remote][remoteRoomName] + if (!remoteRoomStats) continue + + roomStats[RoomStatsKeys.RemoteCount] += 1 + roomStats[RoomStatsKeys.RemoteEnergyInputHarvest] += + remoteRoomStats[RoomStatsKeys.RemoteEnergyInputHarvest] + roomStats[RoomStatsKeys.RemoteEnergyOutputRepairOther] += + remoteRoomStats[RoomStatsKeys.RemoteEnergyOutputRepairOther] + roomStats[RoomStatsKeys.RemoteEnergyOutputBuild] += + remoteRoomStats[RoomStatsKeys.RemoteEnergyOutputBuild] + + if (each250Ticks) { + roomStats[RoomStatsKeys.RemoteEnergyStored] += 0 + } } - roomInitialRun(roomName: string, roomType: number) { - this.roomConfig(roomName, roomType) + roomStats[RoomStatsKeys.CreepCount] = room.myCreeps.length + roomStats[RoomStatsKeys.TotalCreepCount] = room.creepsFromRoomAmount + roomStats[RoomStatsKeys.PowerCreepCount] = room.myPowerCreeps.length + roomStats[RoomStatsKeys.MinHaulerCost] = roomMemory[RoomMemoryKeys.minHaulerCost] + + const spawns = room.roomManager.structures.spawn + if (spawns.length > 0) { + let spawningSpawnsCount = 0 + + for (const spawn of spawns) { + if (!spawn.spawning && !spawn.renewed) continue + + spawningSpawnsCount += 1 + } + + roomStats[RoomStatsKeys.SpawnUsagePercentage] = spawningSpawnsCount / spawns.length + } + + if (room.controller && room.controller.my) { + const progressPercentage = room.controller.progress / room.controller.progressTotal + roomStats.cl = + progressPercentage < 1 ? room.controller.level + progressPercentage : room.controller.level } - private roomCommuneEndRun(roomName: string, forceUpdate: boolean = false) { - const room = Game.rooms[roomName] - const roomMemory = Memory.rooms[roomName] - const interTickRoomStats = Memory.stats.rooms[roomName] - const roomStats = this.stats[RoomTypes.commune][roomName] as CommuneStats - - const each250Ticks = Game.time % 250 === 0 - - const remotes = roomMemory[RoomMemoryKeys.remotes] - for (const remoteRoomName of remotes) { - const remoteRoomStats = this.stats[RoomTypes.remote][remoteRoomName] - if (!remoteRoomStats) continue - - roomStats[RoomStatsKeys.RemoteCount] += 1 - roomStats[RoomStatsKeys.RemoteEnergyInputHarvest] += - remoteRoomStats[RoomStatsKeys.RemoteEnergyInputHarvest] - roomStats[RoomStatsKeys.RemoteEnergyOutputRepairOther] += - remoteRoomStats[RoomStatsKeys.RemoteEnergyOutputRepairOther] - roomStats[RoomStatsKeys.RemoteEnergyOutputBuild] += - remoteRoomStats[RoomStatsKeys.RemoteEnergyOutputBuild] - - if (each250Ticks) { - roomStats[RoomStatsKeys.RemoteEnergyStored] += 0 - } - } - - roomStats[RoomStatsKeys.CreepCount] = room.myCreeps.length - roomStats[RoomStatsKeys.TotalCreepCount] = room.creepsFromRoomAmount - roomStats[RoomStatsKeys.PowerCreepCount] = room.myPowerCreeps.length - roomStats[RoomStatsKeys.MinHaulerCost] = roomMemory[RoomMemoryKeys.minHaulerCost] - - const spawns = room.roomManager.structures.spawn - if (spawns.length > 0) { - let spawningSpawnsCount = 0 - - for (const spawn of spawns) { - if (!spawn.spawning && !spawn.renewed) continue - - spawningSpawnsCount += 1 - } - - roomStats[RoomStatsKeys.SpawnUsagePercentage] = spawningSpawnsCount / spawns.length - } - - if (room.controller && room.controller.my) { - const progressPercentage = room.controller.progress / room.controller.progressTotal - roomStats.cl = - progressPercentage < 1 - ? room.controller.level + progressPercentage - : room.controller.level - } - - /* if (each250Ticks || forceUpdate) { + /* if (each250Ticks || forceUpdate) { const resourcesInStoringStructures = room.roomManager.resourcesInStoringStructures roomStats[RoomStatNamesEnum.EnergyStored] = (resourcesInStoringStructures.energy || 0) + @@ -264,214 +262,214 @@ export class StatsManager { roomStats[RoomStatNamesEnum.EnergyStored] = interTickRoomStats[RoomStatNamesEnum.EnergyStored] } */ - const resourcesInStoringStructures = room.roomManager.resourcesInStoringStructures - roomStats[RoomStatsKeys.EnergyStored] = - (resourcesInStoringStructures.energy || 0) - roomStats[RoomStatsKeys.BatteriesStoredTimes10] = - (resourcesInStoringStructures.battery * 10 || 0) + const resourcesInStoringStructures = room.roomManager.resourcesInStoringStructures + roomStats[RoomStatsKeys.EnergyStored] = resourcesInStoringStructures.energy || 0 + roomStats[RoomStatsKeys.BatteriesStoredTimes10] = resourcesInStoringStructures.battery * 10 || 0 - // delete legacy stat key value pairs + // delete legacy stat key value pairs - for (const key in interTickRoomStats) { - const statName = key as keyof CommuneStats - if (roomStats[statName]) continue + for (const key in interTickRoomStats) { + const statName = key as keyof CommuneStats + if (roomStats[statName]) continue - roomStats[statName] = undefined - } + roomStats[statName] = undefined + } - // implement average tick stats into inter tick stats + // implement average tick stats into inter tick stats - for (const key in roomStats) { - const statName = key as keyof CommuneStats + for (const key in roomStats) { + const statName = key as keyof CommuneStats - if (averageStatNames.has(statName)) { - let globalValue = roomStats[statName] || 0 - let value = interTickRoomStats[statName] || 0 + if (averageStatNames.has(statName)) { + let globalValue = roomStats[statName] || 0 + let value = interTickRoomStats[statName] || 0 - interTickRoomStats[statName] = this.average(value, globalValue) - continue - } + interTickRoomStats[statName] = this.average(value, globalValue) + continue + } - interTickRoomStats[statName] = roomStats[statName] - } + interTickRoomStats[statName] = roomStats[statName] } - internationalConfig() { - Memory.stats = { - lastReset: global.lastReset, - tickLength: 0, - lastTick: Game.time, - lastTickTimestamp: 0, - resources: { - pixels: 0, - cpuUnlocks: 0, - accessKeys: 0, - credits: 0, - }, - cpu: { - bucket: 0, - usage: Game.cpu.limit, - limit: 0, - }, - memory: { - usage: 0, - limit: 2097, - }, - heapUsage: 0, - gcl: { - level: 0, - progress: 0, - progressTotal: 0, - }, - gpl: { - level: 0, - progress: 0, - progressTotal: 0, - }, - rooms: {}, - constructionSites: 0, - creeps: 0, - powerCreeps: 0, - } - - this.stats = { [RoomTypes.commune]: {}, [RoomTypes.remote]: {} } - this.internationalEndRun() + } + internationalConfig() { + Memory.stats = { + lastReset: global.lastReset, + tickLength: 0, + lastTick: Game.time, + lastTickTimestamp: 0, + resources: { + pixels: 0, + cpuUnlocks: 0, + accessKeys: 0, + credits: 0, + }, + cpu: { + bucket: 0, + usage: Game.cpu.limit, + limit: 0, + }, + memory: { + usage: 0, + limit: 2097, + }, + heapUsage: 0, + gcl: { + level: 0, + progress: 0, + progressTotal: 0, + }, + gpl: { + level: 0, + progress: 0, + progressTotal: 0, + }, + rooms: {}, + constructionSites: 0, + creeps: 0, + powerCreeps: 0, } - tickInit() { - this.stats = { [RoomTypes.commune]: {}, [RoomTypes.remote]: {} } - } + this.stats = { [RoomTypes.commune]: {}, [RoomTypes.remote]: {} } + this.internationalEndRun() + } - internationalEndRun() { - // Run communes one last time to update stats - - for (const roomName in Memory.stats.rooms) { - if (!this.stats[RoomTypes.commune][roomName]) { - Memory.stats.rooms[roomName] = undefined - continue - } - - this.roomCommuneEndRun(roomName) - } - - const timestamp = Date.now() - - global.lastReset = (global.lastReset || 0) + 1 - Memory.stats.lastReset = global.lastReset - Memory.stats.tickLength = timestamp - Memory.stats.lastTickTimestamp - Memory.stats.lastTickTimestamp = timestamp - Memory.stats.constructionSites = collectiveManager.constructionSiteCount || 0 - - Memory.stats.resources = { - pixels: Game.resources[PIXEL], - cpuUnlocks: Game.resources[CPU_UNLOCK], - accessKeys: Game.resources[ACCESS_KEY], - credits: Game.market.credits, - } - - Memory.stats.memory.usage = roundTo( - Math.floor(RawMemory.get().length / 1000) / Memory.stats.memory.limit, - 8, - ) - - const heapStatistics = Game.cpu.getHeapStatistics() - Memory.stats.heapUsage = roundTo( - (heapStatistics.total_heap_size + heapStatistics.externally_allocated_size) / heapStatistics.heap_size_limit, - 2, - ) - Memory.stats.gcl = { - progress: Game.gcl.progress, - progressTotal: Game.gcl.progressTotal, - level: Game.gcl.level, - } - Memory.stats.gpl = { - progress: Game.gpl.progress, - progressTotal: Game.gpl.progressTotal, - level: Game.gpl.level, - } - Memory.stats.creeps = collectiveManager.creepCount - Memory.stats.powerCreeps = collectiveManager.powerCreepCount - Memory.stats.defaultMinPathCacheTime = collectiveManager.defaultMinPathCacheTime - - // If the code wasn't ran or was properly ran last tick, assign cpu as normal. Otherwise assume we ran out of cpu - let usedCPU = - Memory.stats.lastTick + 1 >= Game.time - ? Game.cpu.getUsed() - : // limit * time step from last stats recording - Game.cpu.limit * (Game.time - Memory.stats.lastTick) - /* customLog('STATS' + (Game.time - Memory.stats.lastTick), usedCPU) */ - Memory.stats.cpu = { - bucket: Game.cpu.bucket, - limit: Game.cpu.limit, - usage: this.averageMarginalTimeStep(Memory.stats.cpu.usage, usedCPU), - } - - // Make sure this runs last - Memory.stats.lastTick = Game.time - - this.stats = undefined - } + tickInit() { + this.stats = { [RoomTypes.commune]: {}, [RoomTypes.remote]: {} } + } + + internationalEndRun() { + // Run communes one last time to update stats - private average( - avg: number, - dataPoint: number, - averagedOverTickCount: number = 1000, - precision: number = 8, - ) { - if (!avg) avg = 0 - if (!dataPoint) dataPoint = 0 + for (const roomName in Memory.stats.rooms) { + if (!this.stats[RoomTypes.commune][roomName]) { + Memory.stats.rooms[roomName] = undefined + continue + } - // time step from last stats recording - const timeStep = Game.time - Memory.stats.lastTick + this.roomCommuneEndRun(roomName) + } + + const timestamp = Date.now() - avg -= (avg / averagedOverTickCount) * timeStep - avg += dataPoint / timeStep / averagedOverTickCount + global.lastReset = (global.lastReset || 0) + 1 + Memory.stats.lastReset = global.lastReset + Memory.stats.tickLength = timestamp - Memory.stats.lastTickTimestamp + Memory.stats.lastTickTimestamp = timestamp + Memory.stats.constructionSites = CollectiveManager.constructionSiteCount || 0 - return roundTo(avg, precision) + Memory.stats.resources = { + pixels: Game.resources[PIXEL], + cpuUnlocks: Game.resources[CPU_UNLOCK], + accessKeys: Game.resources[ACCESS_KEY], + credits: Game.market.credits, } - /** - * average but don't account for time skips - */ - private averageMarginalTimeStep( - avg: number, - dataPoint: number, - averagedOverTickCount: number = 1000, - precision: number = 8, - ) { - if (!avg) avg = 0 - if (!dataPoint) dataPoint = 0 - - avg -= avg / averagedOverTickCount - avg += dataPoint / averagedOverTickCount - - return roundTo(avg, precision) + Memory.stats.memory.usage = roundTo( + Math.floor(RawMemory.get().length / 1000) / Memory.stats.memory.limit, + 8, + ) + + const heapStatistics = Game.cpu.getHeapStatistics() + Memory.stats.heapUsage = roundTo( + (heapStatistics.total_heap_size + heapStatistics.externally_allocated_size) / + heapStatistics.heap_size_limit, + 2, + ) + Memory.stats.gcl = { + progress: Game.gcl.progress, + progressTotal: Game.gcl.progressTotal, + level: Game.gcl.level, + } + Memory.stats.gpl = { + progress: Game.gpl.progress, + progressTotal: Game.gpl.progressTotal, + level: Game.gpl.level, + } + Memory.stats.creeps = CollectiveManager.creepCount + Memory.stats.powerCreeps = CollectiveManager.powerCreepCount + Memory.stats.defaultMinPathCacheTime = CollectiveManager.defaultMinPathCacheTime + + // If the code wasn't ran or was properly ran last tick, assign cpu as normal. Otherwise assume we ran out of cpu + let usedCPU = + Memory.stats.lastTick + 1 >= Game.time + ? Game.cpu.getUsed() + : // limit * time step from last stats recording + Game.cpu.limit * (Game.time - Memory.stats.lastTick) + /* customLog('STATS' + (Game.time - Memory.stats.lastTick), usedCPU) */ + Memory.stats.cpu = { + bucket: Game.cpu.bucket, + limit: Game.cpu.limit, + usage: this.averageMarginalTimeStep(Memory.stats.cpu.usage, usedCPU), } - updateStat(roomName: string, statName: (keyof RoomStats | keyof CommuneStats), value: number) { + // Make sure this runs last + Memory.stats.lastTick = Game.time - if (this.stats[RoomTypes.commune][roomName]) { - this.updateCommuneStat(roomName, statName as keyof CommuneStats, value) - return - } + this.stats = undefined + } - if (this.stats[RoomTypes.remote][roomName]) { - if (remoteStatNames.has(statName)) { - statName = ('r' + statName) as keyof RoomStats - } + private average( + avg: number, + dataPoint: number, + averagedOverTickCount: number = 1000, + precision: number = 8, + ) { + if (!avg) avg = 0 + if (!dataPoint) dataPoint = 0 - this.updateRemoteStat(roomName, statName, value) - } - } + // time step from last stats recording + const timeStep = Game.time - Memory.stats.lastTick + + avg -= (avg / averagedOverTickCount) * timeStep + avg += dataPoint / timeStep / averagedOverTickCount - updateCommuneStat(roomName: string, statName: keyof CommuneStats, value: number) { + return roundTo(avg, precision) + } - this.stats[RoomTypes.commune][roomName][statName] += value + /** + * average but don't account for time skips + */ + private averageMarginalTimeStep( + avg: number, + dataPoint: number, + averagedOverTickCount: number = 1000, + precision: number = 8, + ) { + if (!avg) avg = 0 + if (!dataPoint) dataPoint = 0 + + avg -= avg / averagedOverTickCount + avg += dataPoint / averagedOverTickCount + + return roundTo(avg, precision) + } + + updateStat(roomName: string, statName: keyof RoomStats | keyof CommuneStats, value: number) { + if (this.stats[RoomTypes.commune][roomName]) { + this.updateCommuneStat(roomName, statName as keyof CommuneStats, value) + return } - updateRemoteStat(roomName: string, statName: (keyof RoomStats | keyof CommuneStats), value: number) { + if (this.stats[RoomTypes.remote][roomName]) { + if (remoteStatNames.has(statName)) { + statName = ('r' + statName) as keyof RoomStats + } - this.stats[RoomTypes.remote][roomName][statName] += value + this.updateRemoteStat(roomName, statName, value) } + } + + updateCommuneStat(roomName: string, statName: keyof CommuneStats, value: number) { + this.stats[RoomTypes.commune][roomName][statName] += value + } + + updateRemoteStat( + roomName: string, + statName: keyof RoomStats | keyof CommuneStats, + value: number, + ) { + this.stats[RoomTypes.remote][roomName][statName] += value + } } export const statsManager = new StatsManager() diff --git a/src/international/transactions.ts b/src/international/transactions.ts index 7fe475891..9a7e2facb 100644 --- a/src/international/transactions.ts +++ b/src/international/transactions.ts @@ -1,8 +1,8 @@ import { Sleepable } from "utils/sleepable" import { IDUpdateInterval, RoomStatsKeys } from "./constants" import { randomIntRange, utils } from "utils/utils" -import { collectiveManager } from "./collective" -import { segmentsManager } from "./segments" +import { CollectiveManager } from './collective' +import { SegmentsManager } from './segments' import { statsManager } from "./statsManager" export class TransactionsManager { @@ -10,7 +10,7 @@ export class TransactionsManager { run() { if (!utils.isTickInterval(IDUpdateInterval)) return - const recordedTransactionIDs = segmentsManager.IDs.recordedTransactionIDs + const recordedTransactionIDs = SegmentsManager.IDs.recordedTransactionIDs const currentTransactionIDs = this.registerCurrentTransactions(recordedTransactionIDs) this.pruneRecordedTransactions(recordedTransactionIDs, currentTransactionIDs) @@ -73,7 +73,7 @@ export class TransactionsManager { } private processTransactionMySend(transaction: Transaction) { - if (!collectiveManager.communes.has(transaction.from)) return + if (!CollectiveManager.communes.has(transaction.from)) return if (transaction.order) { @@ -93,7 +93,7 @@ export class TransactionsManager { } private processTransactionMyReceive(transaction: Transaction) { - if (!collectiveManager.communes.has(transaction.to)) return + if (!CollectiveManager.communes.has(transaction.to)) return if (transaction.order) { @@ -107,7 +107,7 @@ export class TransactionsManager { */ private isDomestic(from: string, to: string) { - return (collectiveManager.communes.has(from) && collectiveManager.communes.has(to)) + return CollectiveManager.communes.has(from) && CollectiveManager.communes.has(to) } } diff --git a/src/main.ts b/src/main.ts index 2de5a786c..31b97877f 100644 --- a/src/main.ts +++ b/src/main.ts @@ -2,8 +2,8 @@ import './settings' import './other/userScript/userScript' import './international/commands' import './debug/debugUtils' -import { collectiveManager } from './international/collective' -import { roomsManager } from 'room/rooms' +import { CollectiveManager } from './international/collective' +import { RoomsManager } from 'room/rooms' import './room/resourceAdditions' import './room/roomObjectFunctions' import './room/roomObjectAdditions' @@ -12,8 +12,8 @@ import './other/profilerRegister' import { memHack } from 'other/memHack' import { CPUMaxPerTick, Result } from 'international/constants' import { initManager } from './international/init' -import { migrationManager } from 'international/migration' -import { respawnManager } from './international/respawn' +import { MigrationManager } from 'international/migration' +import { RespawnManager } from './international/respawn' import { tickInit } from './international/tickInit' import { simpleAllies } from 'international/simpleAllies/simpleAllies' import { creepOrganizer } from './international/creepOrganizer' @@ -32,7 +32,7 @@ import { wasm } from 'other/wasmInit' import { requestsManager } from 'international/requests' import { marketManager } from 'international/market/marketOrders' import { transactionsManager } from 'international/transactions' -import { segmentsManager } from 'international/segments' +import { SegmentsManager } from 'international/segments' import { creepDataManager } from 'room/creeps/creepData' import { roomDataManager } from 'room/roomData' import { utils } from 'utils/utils' @@ -41,7 +41,7 @@ import { communeDataManager } from 'room/commune/communeData' export function originalLoop() { memHack.run() - if (segmentsManager.run() === Result.stop) return + if (SegmentsManager.run() === Result.stop) return if (Game.flags.deactivate) return if (Game.cpu.bucket < CPUMaxPerTick) { @@ -51,26 +51,26 @@ export function originalLoop() { if (global.userScript) global.userScript.initialRun() profiler.wrap((): void => { - migrationManager.run() - respawnManager.run() + MigrationManager.run() + RespawnManager.run() initManager.run() tickInit.configGeneral() statsManager.tickInit() - collectiveManager.update() + CollectiveManager.update() simpleAllies.initRun() wasm.collaborator() roomDataManager.initRooms() roomDataManager.updateRooms() - roomsManager.updateRun() + RoomsManager.updateRun() transactionsManager.run() requestsManager.run() if (global.collectivizer) global.collectivizer.run() if (global.userScript) global.userScript.run() playerManager.run() - roomsManager.initRun() + RoomsManager.initRun() creepDataManager.updateCreeps() creepOrganizer.run() powerCreepOrganizer.run() @@ -80,7 +80,7 @@ export function originalLoop() { constructionSiteManager.run() marketManager.run() - roomsManager.run() + RoomsManager.run() mapVisualsManager.run() simpleAllies.endRun() @@ -88,9 +88,9 @@ export function originalLoop() { if (global.userScript) global.userScript.endRun() statsManager.internationalEndRun() - collectiveManager.advancedGeneratePixel() + CollectiveManager.advancedGeneratePixel() - segmentsManager.endRun() + SegmentsManager.endRun() endTickManager.run() }) } diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index 67287db95..f48d7a3f0 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -105,6 +105,10 @@ import { ObserverProcs } from 'room/commune/observerProcs' import { PowerSpawnProcs } from 'room/commune/powerSpawnProcs' import { RoomProcs } from 'room/roomProcs' import { RoomNameProcs } from 'room/roomNameProcs' +import { RoomsManager } from 'room/rooms' +import { SegmentsManager } from 'international/segments' +import { wasm } from './wasmInit' +import { initSync } from '../wasm/pkg/commiebot_wasm.js' export function profilerRegister() { // Classes @@ -134,9 +138,11 @@ export function profilerRegister() { profiler.registerClass(TradingUtils, 'MarketUtils') profiler.registerClass(Utils, 'Utils') profiler.registerClass(Procs, 'Procs') + profiler.registerClass(SegmentsManager, 'SegmentsManager') // Room classes + profiler.registerClass(RoomsManager, 'RoomsManager') profiler.registerClass(CommuneManager, 'CommuneManager') profiler.registerClass(RoomManager, 'RoomManager') profiler.registerClass(SpawnRequestsManager, 'SpawnRequestsManager') @@ -202,6 +208,8 @@ export function profilerRegister() { // Functions profiler.registerFN(originalLoop, 'loop') + profiler.registerFN(wasm.collaborator, 'wasm.collaborator') + profiler.registerFN(initSync, 'wasm.initSync') // codec functions diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index 02bcfde50..33561dc9b 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -33,7 +33,7 @@ import { packCoord, unpackPosAt } from 'other/codec' import { LinkManager } from './links' import { FactoryManager } from './factory' import { SpawnRequestsManager } from './spawning/spawnRequests' -import { collectiveManager } from 'international/collective' +import { CollectiveManager } from 'international/collective' import { ConstructionManager } from 'room/construction/construction' import { roomNameUtils } from 'room/roomNameUtils' import { LogTypes, customLog } from 'utils/logging' @@ -160,12 +160,12 @@ export class CommuneManager { return } - collectiveManager.communes.add(room.name) + CollectiveManager.communes.add(room.name) - if (this.room.controller.safeMode) collectiveManager.safemodedCommuneName = this.room.name + if (this.room.controller.safeMode) CollectiveManager.safemodedCommuneName = this.room.name if (!roomMemory[RoomMemoryKeys.greatestRCL]) { - if (collectiveManager.communes.size <= 1) + if (CollectiveManager.communes.size <= 1) roomMemory[RoomMemoryKeys.greatestRCL] = room.controller.level else if ( room.controller.progress > room.controller.progressTotal || @@ -221,10 +221,10 @@ export class CommuneManager { room.defenderEnemyTargetsWithDefender = new Map() if (room.terminal && room.controller.level >= 6) { - collectiveManager.terminalCommunes.push(room.name) + CollectiveManager.terminalCommunes.push(room.name) } - collectiveManager.mineralNodes[this.room.roomManager.mineral.mineralType] += 1 + CollectiveManager.mineralNodes[this.room.roomManager.mineral.mineralType] += 1 } initRun() { @@ -1067,7 +1067,7 @@ export class CommuneManager { private energyMinResourceTarget(storingStructuresCapacity: number) { if (this.room.controller.level < 8) { - const funnelOrder = collectiveManager.getFunnelOrder() + const funnelOrder = CollectiveManager.getFunnelOrder() if (funnelOrder[0] === this.room.name) { return Math.min( this.storedEnergyUpgradeThreshold * 1.2 + this.upgradeTargetDistance(), diff --git a/src/room/commune/communeData.ts b/src/room/commune/communeData.ts index 9d87c7ca6..c380498a4 100644 --- a/src/room/commune/communeData.ts +++ b/src/room/commune/communeData.ts @@ -1,5 +1,5 @@ -import { collectiveManager } from "international/collective"; -import { utils } from "utils/utils"; +import { CollectiveManager } from 'international/collective' +import { utils } from 'utils/utils' interface CommuneData { /** @@ -40,7 +40,6 @@ export class CommuneDataManager { const data = this.data[roomName] if (utils.isTickInterval(10)) { - delete data.estimatedCommuneSourceIncome delete data.towerRampartRepairTreshold } diff --git a/src/room/commune/communeUtils.ts b/src/room/commune/communeUtils.ts index 7ca8c4caa..1204e267c 100644 --- a/src/room/commune/communeUtils.ts +++ b/src/room/commune/communeUtils.ts @@ -9,7 +9,7 @@ import { packedPosLength, structureTypesToProtectSet, } from 'international/constants' -import { collectiveManager } from "international/collective" +import { CollectiveManager } from 'international/collective' import { roomUtils } from "room/roomUtils" import { structureUtils } from "room/structureUtils" import { OrganizedSpawns } from './spawning/spawningStructureProcs' diff --git a/src/room/commune/defence.ts b/src/room/commune/defence.ts index 69c942423..7f843331e 100644 --- a/src/room/commune/defence.ts +++ b/src/room/commune/defence.ts @@ -15,18 +15,18 @@ import { playerManager } from 'international/players' import { simpleAllies } from 'international/simpleAllies/simpleAllies' import { statsManager } from 'international/statsManager' import { - findObjectWithID, - findWeightedRangeFromExit, - getRange, - isAlly, - isXYInBorder, - randomIntRange, - randomRange, - randomTick, + findObjectWithID, + findWeightedRangeFromExit, + getRange, + isAlly, + isXYInBorder, + randomIntRange, + randomRange, + randomTick, } from 'utils/utils' import { packCoord } from 'other/codec' import { CommuneManager } from './commune' -import { collectiveManager } from 'international/collective' +import { CollectiveManager } from 'international/collective' import { roomNameUtils } from 'room/roomNameUtils' import { RampartPlans } from 'room/construction/rampartPlans' import { customLog, LogTypes } from 'utils/logging' @@ -69,11 +69,11 @@ export class DefenceManager { if (controller.ticksToDowngrade <= CONTROLLER_DOWNGRADE_SAFEMODE_THRESHOLD) return false // If another room is safemoded, make sure that we are a higher level if ( - collectiveManager.safemodedCommuneName && - Game.rooms[collectiveManager.safemodedCommuneName].controller.level >= - this.communeManager.room.controller.level + CollectiveManager.safemodedCommuneName && + Game.rooms[CollectiveManager.safemodedCommuneName].controller.level >= + this.communeManager.room.controller.level ) - return false + return false // Filter attackers that are not invaders. If there are none, stop @@ -178,10 +178,10 @@ export class DefenceManager { if (!this.shouldSafeMode()) return // If another room is safemoded and we determined it to be okay: unclaim it so we can safemode - if (collectiveManager.safemodedCommuneName) { - const safemodedRoom = Game.rooms[collectiveManager.safemodedCommuneName] - safemodedRoom.controller.unclaim() - // Add a return if we can't unclaim and safemode on the same tick + if (CollectiveManager.safemodedCommuneName) { + const safemodedRoom = Game.rooms[CollectiveManager.safemodedCommuneName] + safemodedRoom.controller.unclaim() + // Add a return if we can't unclaim and safemode on the same tick } if (this.communeManager.room.controller.activateSafeMode() !== OK) return @@ -189,7 +189,7 @@ export class DefenceManager { // Safemode was probably activated // Record that we safemoded so other communes know - collectiveManager.safemodedCommuneName = this.communeManager.room.name + CollectiveManager.safemodedCommuneName = this.communeManager.room.name } private considerRampartsPublic() { @@ -328,7 +328,7 @@ export class DefenceManager { if (!global.settings.allyCommunication) return - simpleAllies.myRequests.defense.push({ + simpleAllies.requestDefense({ roomName: room.name, priority: 1, }) diff --git a/src/room/commune/powerSpawnProcs.ts b/src/room/commune/powerSpawnProcs.ts index 403a3af0d..963ea7312 100644 --- a/src/room/commune/powerSpawnProcs.ts +++ b/src/room/commune/powerSpawnProcs.ts @@ -1,7 +1,7 @@ -import { collectiveManager } from "international/collective" -import { RoomLogisticsRequestTypes } from "international/constants" -import { statsManager } from "international/statsManager" -import { scalePriority } from "utils/utils" +import { CollectiveManager } from 'international/collective' +import { RoomLogisticsRequestTypes } from 'international/constants' +import { statsManager } from 'international/statsManager' +import { scalePriority } from 'utils/utils' export class PowerSpawnProcs { public run(room: Room) { @@ -10,84 +10,77 @@ export class PowerSpawnProcs { this.advancedProcessPower(powerSpawn) this.advancedSpawn(powerSpawn) -} + } -/** - * So long as there are sufficient resources, try to process power - */ -private advancedProcessPower(powerSpawn: StructurePowerSpawn) { + /** + * So long as there are sufficient resources, try to process power + */ + private advancedProcessPower(powerSpawn: StructurePowerSpawn) { if (powerSpawn.store.getCapacity(RESOURCE_ENERGY) < POWER_SPAWN_ENERGY_RATIO) return if (!powerSpawn.store.getCapacity(RESOURCE_POWER)) return const result = powerSpawn.processPower() if (result === OK) - statsManager.updateStat(powerSpawn.room.name, 'eop', POWER_SPAWN_ENERGY_RATIO) -} - -/** - * Find unspawned power creeps and spawn them - */ -private advancedSpawn(powerSpawn: StructurePowerSpawn) { - for (let i = collectiveManager.unspawnedPowerCreepNames.length - 1; i >= 0; i--) { - const creep = Game.powerCreeps[collectiveManager.unspawnedPowerCreepNames[i]] - - creep.spawn(powerSpawn) - collectiveManager.unspawnedPowerCreepNames.pop() - return + statsManager.updateStat(powerSpawn.room.name, 'eop', POWER_SPAWN_ENERGY_RATIO) + } + + /** + * Find unspawned power creeps and spawn them + */ + private advancedSpawn(powerSpawn: StructurePowerSpawn) { + for (let i = CollectiveManager.unspawnedPowerCreepNames.length - 1; i >= 0; i--) { + const creep = Game.powerCreeps[CollectiveManager.unspawnedPowerCreepNames[i]] + + creep.spawn(powerSpawn) + CollectiveManager.unspawnedPowerCreepNames.pop() + return } -} - -private createRoomLogisticsRequests(room: Room, powerSpawn: StructurePowerSpawn) { + } + private createRoomLogisticsRequests(room: Room, powerSpawn: StructurePowerSpawn) { // Make sure we have a reasonable amount of energy and power const resourcesInStoringStructures = room.roomManager.resourcesInStoringStructures // Make sure we have a reasonable amount of power to process - if ( - resourcesInStoringStructures.power < - powerSpawn.store.getCapacity(RESOURCE_POWER) - ) - return + if (resourcesInStoringStructures.power < powerSpawn.store.getCapacity(RESOURCE_POWER)) return // Make sure we have enough energy -- don't process power if our economy is struggling or reovering - if ( - resourcesInStoringStructures.energy < - room.communeManager.minStoredEnergy - ) - return + if (resourcesInStoringStructures.energy < room.communeManager.minStoredEnergy) return // energy room.createRoomLogisticsRequest({ + target: powerSpawn, + /* onlyFull: true, */ + type: RoomLogisticsRequestTypes.offer, + priority: scalePriority( + powerSpawn.store.getCapacity(RESOURCE_ENERGY), + powerSpawn.usedReserveStore, + 10, + true, + ), + }) + + // fulfill power if less than half + + if ( + powerSpawn.reserveStore[RESOURCE_POWER] < + powerSpawn.store.getCapacity(RESOURCE_POWER) * 0.5 + ) { + room.createRoomLogisticsRequest({ target: powerSpawn, /* onlyFull: true, */ type: RoomLogisticsRequestTypes.offer, priority: scalePriority( - powerSpawn.store.getCapacity(RESOURCE_ENERGY), - powerSpawn.usedReserveStore, - 10, - true, + powerSpawn.store.getCapacity(RESOURCE_ENERGY), + powerSpawn.usedReserveStore, + 10, + true, ), - }) - - // fulfill power if less than half - - if (powerSpawn.reserveStore[RESOURCE_POWER] < powerSpawn.store.getCapacity(RESOURCE_POWER) * 0.5) { - - room.createRoomLogisticsRequest({ - target: powerSpawn, - /* onlyFull: true, */ - type: RoomLogisticsRequestTypes.offer, - priority: scalePriority( - powerSpawn.store.getCapacity(RESOURCE_ENERGY), - powerSpawn.usedReserveStore, - 10, - true, - ), - }) + }) } -} + } } export const powerSpawnProcs = new PowerSpawnProcs() diff --git a/src/room/commune/spawning/spawnRequests.ts b/src/room/commune/spawning/spawnRequests.ts index 9f121fb14..00eb293de 100644 --- a/src/room/commune/spawning/spawnRequests.ts +++ b/src/room/commune/spawning/spawnRequests.ts @@ -19,7 +19,7 @@ import { randomRange, roundTo, } from 'utils/utils' -import { collectiveManager } from 'international/collective' +import { CollectiveManager } from 'international/collective' import { packPos, unpackPosList } from 'other/codec' import { statsManager } from 'international/statsManager' import { CommuneManager } from '../commune' @@ -362,7 +362,8 @@ export class SpawnRequestsManager { if ( (!this.communeManager.room.roomManager.hubLink || this.communeManager.room.roomManager.structures.link.length < 2) && - (!this.communeManager.room.terminal || !structureUtils.isRCLActionable(this.communeManager.room.terminal)) + (!this.communeManager.room.terminal || + !structureUtils.isRCLActionable(this.communeManager.room.terminal)) ) return false @@ -868,10 +869,8 @@ export class SpawnRequestsManager { // If there is a terminal and it is sufficient RCL, and there's a funnel target and we aren't it, then don't allow upgraders to spawn if (this.communeManager.room.terminal && this.communeManager.room.controller.level >= 6) { - const funnelingRoomNames = collectiveManager.getFunnelingRoomNames() - if ( - !funnelingRoomNames.has(this.communeManager.room.name) - ) { + const funnelingRoomNames = CollectiveManager.getFunnelingRoomNames() + if (!funnelingRoomNames.has(this.communeManager.room.name)) { return false } } @@ -1752,8 +1751,8 @@ export class SpawnRequestsManager { let spawnGroup: string[] - if (collectiveManager.creepsByCombatRequest[requestName]) { - spawnGroup = collectiveManager.creepsByCombatRequest[requestName][role] + if (CollectiveManager.creepsByCombatRequest[requestName]) { + spawnGroup = CollectiveManager.creepsByCombatRequest[requestName][role] } spawnGroup = [] @@ -1872,7 +1871,7 @@ export class SpawnRequestsManager { this.rawSpawnRequestsArgs.push( ((): SpawnRequestArgs | false => { role = 'antifaRangedAttacker' - spawnGroup = collectiveManager.creepsByCombatRequest[requestName][role] + spawnGroup = CollectiveManager.creepsByCombatRequest[requestName][role] const minCost = minRangedAttackCost + minRangedHealCost const extraParts: BodyPartConstant[] = [] @@ -1907,7 +1906,7 @@ export class SpawnRequestsManager { this.rawSpawnRequestsArgs.push( ((): SpawnRequestArgs | false => { role = 'antifaDismantler' - spawnGroup = collectiveManager.creepsByCombatRequest[requestName][role] + spawnGroup = CollectiveManager.creepsByCombatRequest[requestName][role] const minCost = minDismantleCost let extraParts: BodyPartConstant[] = [] @@ -1940,7 +1939,7 @@ export class SpawnRequestsManager { this.rawSpawnRequestsArgs.push( ((): SpawnRequestArgs | false => { role = 'antifaAttacker' - spawnGroup = collectiveManager.creepsByCombatRequest[requestName][role] + spawnGroup = CollectiveManager.creepsByCombatRequest[requestName][role] const minCost = minAttackCost let extraParts: BodyPartConstant[] = [] @@ -1970,7 +1969,7 @@ export class SpawnRequestsManager { this.rawSpawnRequestsArgs.push( ((): SpawnRequestArgs | false => { role = 'antifaHealer' - spawnGroup = collectiveManager.creepsByCombatRequest[requestName][role] + spawnGroup = CollectiveManager.creepsByCombatRequest[requestName][role] const minCost = minMeleeHealCost let extraParts: BodyPartConstant[] = [] diff --git a/src/room/commune/spawning/spawningStructureProcs.ts b/src/room/commune/spawning/spawningStructureProcs.ts index d74b6c079..688dbf26a 100644 --- a/src/room/commune/spawning/spawningStructureProcs.ts +++ b/src/room/commune/spawning/spawningStructureProcs.ts @@ -1,4 +1,4 @@ -import { collectiveManager } from 'international/collective' +import { CollectiveManager } from 'international/collective' import { CreepMemoryKeys, ReservedCoordTypes, @@ -117,7 +117,7 @@ export class SpawningStructureProcs { const spawnIndex = this.findSpawnIndexForSpawnRequest(inactiveSpawns, request) const spawn = inactiveSpawns[spawnIndex] - const ID = collectiveManager.newCustomCreepID() + const ID = CollectiveManager.newCustomCreepID() // See if creep can be spawned diff --git a/src/room/commune/terminal/terminal.old.ts b/src/room/commune/terminal/terminal.old.ts index c997e9a87..09aebe9c0 100644 --- a/src/room/commune/terminal/terminal.old.ts +++ b/src/room/commune/terminal/terminal.old.ts @@ -2,7 +2,7 @@ import { minerals, Result, RoomMemoryKeys } from 'international/constants' import { customLog } from 'utils/logging' import { newID, roundTo } from 'utils/utils' import './tradingUtils' -import { collectiveManager } from 'international/collective' +import { CollectiveManager } from 'international/collective' import { CommuneManager } from 'room/commune/commune' const MAX_TRANSFER = 20000 diff --git a/src/room/commune/terminal/terminalProcs.ts b/src/room/commune/terminal/terminalProcs.ts index 9ca22a1d1..7caeb9adf 100644 --- a/src/room/commune/terminal/terminalProcs.ts +++ b/src/room/commune/terminal/terminalProcs.ts @@ -1,12 +1,13 @@ -import { collectiveManager } from "international/collective" -import { Result } from "international/constants" -import { marketManager } from "international/market/marketOrders" -import { ResourceRequest, simpleAllies } from "international/simpleAllies/simpleAllies" -import { structureUtils } from "room/structureUtils" -import { customLog } from "utils/logging" -import { newID, utils } from "utils/utils" -import { ResourceTargets } from "../commune" -import { tradingUtils } from "./tradingUtils" +import { CollectiveManager } from 'international/collective' +import { Result } from 'international/constants' +import { marketManager } from 'international/market/marketOrders' +import { simpleAllies } from 'international/simpleAllies/simpleAllies' +import { structureUtils } from 'room/structureUtils' +import { customLog } from 'utils/logging' +import { newID, utils } from 'utils/utils' +import { ResourceTargets } from '../commune' +import { tradingUtils } from './tradingUtils' +import { ResourceRequest } from 'international/simpleAllies/types' export class TerminalProcs { preTickRun(room: Room) { @@ -19,7 +20,6 @@ export class TerminalProcs { } run(room: Room) { - // Stop if there is no terminal if (!room.terminal) return if (!structureUtils.isRCLActionable(room.terminal)) return @@ -41,8 +41,7 @@ export class TerminalProcs { } private createTerminalRequests(room: Room, resourceTargets: ResourceTargets) { - const resourcesInStoringStructures = - room.roomManager.resourcesInStoringStructures + const resourcesInStoringStructures = room.roomManager.resourcesInStoringStructures for (const key in resourceTargets.min) { const resourceType = key as ResourceConstant let targetAmount = resourceTargets.min[resourceType] @@ -62,7 +61,7 @@ export class TerminalProcs { const ID = newID() - collectiveManager.terminalRequests[ID] = { + CollectiveManager.terminalRequests[ID] = { priority, resource: resourceType, amount, @@ -75,8 +74,7 @@ export class TerminalProcs { room: Room, resourceTargets: ResourceTargets, ): [TerminalRequest, string, number] { - const resourcesInStoringStructures = - room.roomManager.resourcesInStoringStructures + const resourcesInStoringStructures = room.roomManager.resourcesInStoringStructures const storedEnergy = resourcesInStoringStructures[RESOURCE_ENERGY] const budget = Math.min( storedEnergy - room.communeManager.minStoredEnergy, @@ -88,8 +86,8 @@ export class TerminalProcs { let bestRequest: TerminalRequest let amount: number - for (const ID in collectiveManager.terminalRequests) { - const request = collectiveManager.terminalRequests[ID] + for (const ID in CollectiveManager.terminalRequests) { + const request = CollectiveManager.terminalRequests[ID] // Don't respond to requests for this room if (request.roomName === room.name) continue @@ -139,12 +137,13 @@ export class TerminalProcs { ), ) - const sendAmount = tradingUtils.findLargestTransactionAmount( - budget, - maxSendAmount, - room.name, - request.roomName, - ) / 2 + const sendAmount = + tradingUtils.findLargestTransactionAmount( + budget, + maxSendAmount, + room.name, + request.roomName, + ) / 2 customLog( 'TERMINAL REQUEST ' + request.resource, maxSendAmount + @@ -167,8 +166,7 @@ export class TerminalProcs { if (request.amount * 0.1 > sendAmount) continue const score = - Game.map.getRoomLinearDistance(room.name, request.roomName) + - request.priority * 100 + Game.map.getRoomLinearDistance(room.name, request.roomName) + request.priority * 100 if (score >= lowestScore) continue amount = sendAmount @@ -182,25 +180,17 @@ export class TerminalProcs { private respondToTerminalRequests(room: Room, resourceTargets: ResourceTargets) { // We don't have enough energy to help other rooms - if ( - room.roomManager.resourcesInStoringStructures.energy < - room.communeManager.minStoredEnergy - ) + if (room.roomManager.resourcesInStoringStructures.energy < room.communeManager.minStoredEnergy) return Result.noAction const [request, ID, amount] = this.findBestTerminalRequest(room, resourceTargets) if (!request) return Result.noAction - room.terminal.send( - request.resource, - amount, - request.roomName, - 'Terminal request', - ) + room.terminal.send(request.resource, amount, request.roomName, 'Terminal request') // Consequences - delete collectiveManager.terminalRequests[ID] + delete CollectiveManager.terminalRequests[ID] room.terminal.intended = true return Result.action } @@ -209,14 +199,10 @@ export class TerminalProcs { room: Room, resourceTargets: ResourceTargets, ): [ResourceRequest, number] { - const resourcesInStoringStructures = - room.roomManager.resourcesInStoringStructures + const resourcesInStoringStructures = room.roomManager.resourcesInStoringStructures const minStoredEnergy = resourceTargets.min[RESOURCE_ENERGY] * 1.1 const storedEnergy = resourcesInStoringStructures[RESOURCE_ENERGY] - const budget = Math.min( - storedEnergy - minStoredEnergy, - room.terminal.store[RESOURCE_ENERGY], - ) + const budget = Math.min(storedEnergy - minStoredEnergy, room.terminal.store[RESOURCE_ENERGY]) let lowestScore = Infinity let bestRequestID: string @@ -245,8 +231,7 @@ export class TerminalProcs { if (request.amount * 0.1 > sendAmount) continue const score = - Game.map.getRoomLinearDistance(room.name, request.roomName) + - request.priority * 100 + Game.map.getRoomLinearDistance(room.name, request.roomName) + request.priority * 100 if (score >= lowestScore) continue amount = sendAmount @@ -264,21 +249,13 @@ export class TerminalProcs { // We don't have enough energy to help other rooms - if ( - room.roomManager.resourcesInStoringStructures.energy < - room.communeManager.minStoredEnergy - ) + if (room.roomManager.resourcesInStoringStructures.energy < room.communeManager.minStoredEnergy) return false const [request, amount] = this.findBestAllyRequest(room, resourceTargets) if (!request) return Result.noAction - room.terminal.send( - request.resourceType, - amount, - request.roomName, - 'Ally request', - ) + room.terminal.send(request.resourceType, amount, request.roomName, 'Ally request') // Consequences @@ -310,7 +287,7 @@ export class TerminalProcs { // We don't have enough if (room.terminal.store[resourceType] < min * 1.1) { - if (Game.market.credits < collectiveManager.minCredits) return Result.noAction + if (Game.market.credits < CollectiveManager.minCredits) return Result.noAction if ( tradingUtils.advancedBuy(room, resourceType, min - room.terminal.store[resourceType]) === diff --git a/src/room/commune/terminal/tradingUtils.ts b/src/room/commune/terminal/tradingUtils.ts index 5e2ecd428..c075e2cc2 100644 --- a/src/room/commune/terminal/tradingUtils.ts +++ b/src/room/commune/terminal/tradingUtils.ts @@ -1,6 +1,6 @@ import { customLog } from 'utils/logging' import { findLowestScore, roundTo } from 'utils/utils' -import { collectiveManager } from 'international/collective' +import { CollectiveManager } from 'international/collective' import { statsManager } from 'international/statsManager' import { marketManager } from 'international/market/marketOrders' import { Result, RoomStatsKeys } from 'international/constants' @@ -43,7 +43,7 @@ export class TradingUtils { } if (mySpecificOrders.length) return false - if (Game.market.credits < collectiveManager.minCredits) return false + if (Game.market.credits < CollectiveManager.minCredits) return false if (marketManager.myOrdersCount === MARKET_MAX_ORDERS) return false const orders = marketManager.getOrders(resourceType, ORDER_SELL) diff --git a/src/room/commune/workRequest.ts b/src/room/commune/workRequest.ts index 9cc0584fb..d175874e0 100644 --- a/src/room/commune/workRequest.ts +++ b/src/room/commune/workRequest.ts @@ -6,7 +6,7 @@ import { customColors, } from 'international/constants' import { randomIntRange, randomTick, utils } from 'utils/utils' -import { collectiveManager } from 'international/collective' +import { CollectiveManager } from 'international/collective' import { CommuneManager } from './commune' import { statsManager } from 'international/statsManager' import { WorkRequest } from 'types/internationalRequests' diff --git a/src/room/construction/communePlanner.ts b/src/room/construction/communePlanner.ts index 1ee449b79..690b8f9fe 100644 --- a/src/room/construction/communePlanner.ts +++ b/src/room/construction/communePlanner.ts @@ -43,7 +43,7 @@ import { randomIntRange, sortBy, } from 'utils/utils' -import { collectiveManager } from 'international/collective' +import { CollectiveManager } from 'international/collective' import { packCoord, packPos, @@ -225,7 +225,7 @@ export class CommunePlanner { // Stop if there isn't sufficient CPU if (Game.cpu.bucket < CPUMaxPerTick) return Result.noAction - if (collectiveManager.communes.size <= 1 && Game.cpu.bucket < basePlanCPUBucketThreshold) { + if (CollectiveManager.communes.size <= 1 && Game.cpu.bucket < basePlanCPUBucketThreshold) { return Result.noAction } @@ -252,7 +252,7 @@ export class CommunePlanner { if (!this.terrainCoords) { this.planAttempts = [] - this.terrainCoords = collectiveManager.getTerrainBinary(this.room.name) + this.terrainCoords = CollectiveManager.getTerrainBinary(this.room.name) } // Plan attempt / configuration diff --git a/src/room/construction/construction.ts b/src/room/construction/construction.ts index 1a5c95a54..4767c92aa 100644 --- a/src/room/construction/construction.ts +++ b/src/room/construction/construction.ts @@ -13,313 +13,311 @@ import { packCoord, unpackCoord } from 'other/codec' import { CommuneManager } from 'room/commune/commune' import { BasePlans } from './basePlans' import { RampartPlans } from './rampartPlans' -import { collectiveManager } from 'international/collective' +import { CollectiveManager } from 'international/collective' import { Sleepable } from 'utils/sleepable' const generalMigrationStructures: BuildableStructureConstant[] = [ - STRUCTURE_EXTENSION, - STRUCTURE_LINK, - STRUCTURE_STORAGE, - STRUCTURE_TOWER, - STRUCTURE_OBSERVER, - STRUCTURE_POWER_SPAWN, - STRUCTURE_EXTRACTOR, - STRUCTURE_LAB, - STRUCTURE_TERMINAL, - STRUCTURE_CONTAINER, - STRUCTURE_NUKER, - STRUCTURE_FACTORY, - STRUCTURE_WALL, + STRUCTURE_EXTENSION, + STRUCTURE_LINK, + STRUCTURE_STORAGE, + STRUCTURE_TOWER, + STRUCTURE_OBSERVER, + STRUCTURE_POWER_SPAWN, + STRUCTURE_EXTRACTOR, + STRUCTURE_LAB, + STRUCTURE_TERMINAL, + STRUCTURE_CONTAINER, + STRUCTURE_NUKER, + STRUCTURE_FACTORY, + STRUCTURE_WALL, ] const noOverlapDestroyStructures: Set = new Set([ - STRUCTURE_SPAWN, - STRUCTURE_RAMPART, + STRUCTURE_SPAWN, + STRUCTURE_RAMPART, ]) const constructionInterval = randomIntRange(70, 90) export class ConstructionManager { - communeManager: CommuneManager - room: Room - placedSites: number + communeManager: CommuneManager + room: Room + placedSites: number - constructor(communeManager: CommuneManager) { + constructor(communeManager: CommuneManager) { + this.communeManager = communeManager + } - this.communeManager = communeManager - } - - preTickRun() { - this.room = this.communeManager.room - - this.manageConstructionSites() - - if (!this.room.memory[RoomMemoryKeys.communePlanned]) return - // If it's not our first room, wait until RCL 2 before begining construction efforts - if (!this.room.roomManager.isStartRoom() && this.room.controller.level < 2) return + preTickRun() { + this.room = this.communeManager.room - if (this.clearEnemyStructures() === Result.action) return + this.manageConstructionSites() - this.place() - this.migrate() - } - /** - * Try to shove creeps off of impassible construction sites so they can be built on - */ - private manageConstructionSites() { + if (!this.room.memory[RoomMemoryKeys.communePlanned]) return + // If it's not our first room, wait until RCL 2 before begining construction efforts + if (!this.room.roomManager.isStartRoom() && this.room.controller.level < 2) return - const constructionSites = this.room.find(FIND_MY_CONSTRUCTION_SITES) - for (const cSite of constructionSites) { + if (this.clearEnemyStructures() === Result.action) return - if (!impassibleStructureTypesSet.has(cSite.structureType)) continue + this.place() + this.migrate() + } + /** + * Try to shove creeps off of impassible construction sites so they can be built on + */ + private manageConstructionSites() { + const constructionSites = this.room.find(FIND_MY_CONSTRUCTION_SITES) + for (const cSite of constructionSites) { + if (!impassibleStructureTypesSet.has(cSite.structureType)) continue - const creepName = this.room.creepPositions[packCoord(cSite.pos)] - if (!creepName) continue + const creepName = this.room.creepPositions[packCoord(cSite.pos)] + if (!creepName) continue - const creep = Game.creeps[creepName] - creep.shove() - } + const creep = Game.creeps[creepName] + creep.shove() } - private shouldPlace() { - // If the construction site count is at its limit, stop - if (collectiveManager.constructionSiteCount >= MAX_CONSTRUCTION_SITES) return false + } + private shouldPlace() { + // If the construction site count is at its limit, stop + if (CollectiveManager.constructionSiteCount >= MAX_CONSTRUCTION_SITES) return false - // If there are builders and enough cSites, stop - if (this.room.myCreepsByRole.builder.length) { - if (this.room.find(FIND_MY_CONSTRUCTION_SITES).length > 2) return false - - return true - } + // If there are builders and enough cSites, stop + if (this.room.myCreepsByRole.builder.length) { + if (this.room.find(FIND_MY_CONSTRUCTION_SITES).length > 2) return false - // If there are no builders - - // Only run every so often - else if (this.room.controller.level !== 1 && !utils.isTickInterval(constructionInterval)) return false - - // If there are too many construction sites - if (this.room.find(FIND_MY_CONSTRUCTION_SITES).length >= collectiveManager.maxCSitesPerRoom) - return false - - return true + return true } - private place() { - if (!this.shouldPlace()) return - - this.placedSites = 0 - const RCL = this.room.controller.level - const maxCSites = Math.min( - collectiveManager.maxCSitesPerRoom, - MAX_CONSTRUCTION_SITES - collectiveManager.constructionSiteCount, + // If there are no builders + + // Only run every so often + else if (this.room.controller.level !== 1 && !utils.isTickInterval(constructionInterval)) + return false + + // If there are too many construction sites + if (this.room.find(FIND_MY_CONSTRUCTION_SITES).length >= CollectiveManager.maxCSitesPerRoom) + return false + + return true + } + private place() { + if (!this.shouldPlace()) return + + this.placedSites = 0 + + const RCL = this.room.controller.level + const maxCSites = Math.min( + CollectiveManager.maxCSitesPerRoom, + MAX_CONSTRUCTION_SITES - CollectiveManager.constructionSiteCount, + ) + + this.placeRamparts(RCL, maxCSites) + this.placeBase(RCL, maxCSites) + } + private placeRamparts(RCL: number, maxCSites: number) { + const rampartPlans = this.communeManager.room.roomManager.rampartPlans + const hasStoringStructure = !!this.room.communeManager.storingStructures.length + + for (const packedCoord in rampartPlans.map) { + const coord = unpackCoord(packedCoord) + const data = rampartPlans.map[packedCoord] + if (data.minRCL > RCL) continue + // Ensure we have a storing structure if it is a requirement + if (data.needsStoringStructure && !hasStoringStructure) continue + + if ( + this.room.findStructureAtCoord( + coord, + structure => structure.structureType === STRUCTURE_RAMPART, ) - - this.placeRamparts(RCL, maxCSites) - this.placeBase(RCL, maxCSites) + ) { + continue + } + + if ( + data.coversStructure && + !this.room.coordHasStructureTypes(coord, structureTypesToProtectSet) + ) { + continue + } + + if (data.buildForNuke) { + if (this.room.roomManager.nukeTargetCoords[packAsNum(coord)] === 0) continue + + this.room.createConstructionSite(coord.x, coord.y, STRUCTURE_RAMPART) + this.placedSites += 1 + continue + } + + if (data.buildForThreat) { + if (!this.communeManager.buildSecondMincutLayer) continue + + this.room.createConstructionSite(coord.x, coord.y, STRUCTURE_RAMPART) + this.placedSites += 1 + continue + } + + this.room.createConstructionSite(coord.x, coord.y, STRUCTURE_RAMPART) + this.placedSites += 1 + if (this.placedSites >= maxCSites) return } - private placeRamparts(RCL: number, maxCSites: number) { - const rampartPlans = this.communeManager.room.roomManager.rampartPlans - const hasStoringStructure = !!this.room.communeManager.storingStructures.length - for (const packedCoord in rampartPlans.map) { - const coord = unpackCoord(packedCoord) - const data = rampartPlans.map[packedCoord] - if (data.minRCL > RCL) continue - // Ensure we have a storing structure if it is a requirement - if (data.needsStoringStructure && !hasStoringStructure) continue - - if ( - this.room.findStructureAtCoord( - coord, - structure => structure.structureType === STRUCTURE_RAMPART, - ) - ) { - continue - } + if (this.placedSites >= maxCSites) return + } + private placeBase(RCL: number, maxCSites: number) { + if (this.placedSites >= maxCSites) return - if ( - data.coversStructure && - !this.room.coordHasStructureTypes(coord, structureTypesToProtectSet) - ) { - continue - } - - if (data.buildForNuke) { - if (this.room.roomManager.nukeTargetCoords[packAsNum(coord)] === 0) continue - - this.room.createConstructionSite(coord.x, coord.y, STRUCTURE_RAMPART) - this.placedSites += 1 - continue - } - - if (data.buildForThreat) { - if (!this.communeManager.buildSecondMincutLayer) continue - - this.room.createConstructionSite(coord.x, coord.y, STRUCTURE_RAMPART) - this.placedSites += 1 - continue - } + const basePlans = this.communeManager.room.roomManager.basePlans - this.room.createConstructionSite(coord.x, coord.y, STRUCTURE_RAMPART) - this.placedSites += 1 - if (this.placedSites >= maxCSites) return - } - - if (this.placedSites >= maxCSites) return - } - private placeBase(RCL: number, maxCSites: number) { - if (this.placedSites >= maxCSites) return - - const basePlans = this.communeManager.room.roomManager.basePlans + for (let placeRCL = 1; placeRCL <= RCL; placeRCL++) { + for (const packedCoord in basePlans.map) { + const coord = unpackCoord(packedCoord) + const coordData = basePlans.map[packedCoord] - for (let placeRCL = 1; placeRCL <= RCL; placeRCL++) { - for (const packedCoord in basePlans.map) { - const coord = unpackCoord(packedCoord) - const coordData = basePlans.map[packedCoord] + for (let i = 0; i < coordData.length; i++) { + const data = coordData[i] + if (data.minRCL > RCL) continue + if (data.minRCL > placeRCL) break - for (let i = 0; i < coordData.length; i++) { - const data = coordData[i] - if (data.minRCL > RCL) continue - if (data.minRCL > placeRCL) break + const structureIDs = this.room.roomManager.structureCoords.get(packCoord(coord)) + if (structureIDs) { + let skip = false - const structureIDs = this.room.roomManager.structureCoords.get(packCoord(coord)) - if (structureIDs) { - let skip = false + for (const ID of structureIDs) { + const structure = findObjectWithID(ID) - for (const ID of structureIDs) { - const structure = findObjectWithID(ID) + if (structure.structureType === data.structureType) { + skip = true + break + } + if (noOverlapDestroyStructures.has(structure.structureType)) continue - if (structure.structureType === data.structureType) { - skip = true - break - } - if (noOverlapDestroyStructures.has(structure.structureType)) continue + structure.destroy() - structure.destroy() - - skip = true - break - } + skip = true + break + } - if (skip) break - } + if (skip) break + } - this.room.createConstructionSite(coord.x, coord.y, data.structureType) - this.placedSites += 1 - if (this.placedSites >= maxCSites) return - break - } - } + this.room.createConstructionSite(coord.x, coord.y, data.structureType) + this.placedSites += 1 + if (this.placedSites >= maxCSites) return + break } + } } - public visualize() { - const RCL = /* this.room.controller.level */ /* Game.time % 8 */ 8 - const basePlans = this.room.roomManager.basePlans - - for (let placeRCL = 1; placeRCL <= RCL; placeRCL++) { - for (const packedCoord in basePlans.map) { - const coord = unpackCoord(packedCoord) - const coordData = basePlans.map[packedCoord] - - for (let i = 0; i < coordData.length; i++) { - const data = coordData[i] - if (data.minRCL > RCL) continue - if (data.minRCL > placeRCL) break - - this.room.visual.structure(coord.x, coord.y, data.structureType) - this.room.visual.text(data.minRCL.toString(), coord.x, coord.y - 0.25, { - font: 0.4, - }) - break - } - } + } + public visualize() { + const RCL = /* this.room.controller.level */ /* Game.time % 8 */ 8 + const basePlans = this.room.roomManager.basePlans + + for (let placeRCL = 1; placeRCL <= RCL; placeRCL++) { + for (const packedCoord in basePlans.map) { + const coord = unpackCoord(packedCoord) + const coordData = basePlans.map[packedCoord] + + for (let i = 0; i < coordData.length; i++) { + const data = coordData[i] + if (data.minRCL > RCL) continue + if (data.minRCL > placeRCL) break + + this.room.visual.structure(coord.x, coord.y, data.structureType) + this.room.visual.text(data.minRCL.toString(), coord.x, coord.y - 0.25, { + font: 0.4, + }) + break } + } + } - const rampartPlans = this.communeManager.room.roomManager.rampartPlans - - for (const packedCoord in rampartPlans.map) { - const coord = unpackCoord(packedCoord) - const data = rampartPlans.map[packedCoord] - if (data.minRCL > RCL) continue + const rampartPlans = this.communeManager.room.roomManager.rampartPlans + + for (const packedCoord in rampartPlans.map) { + const coord = unpackCoord(packedCoord) + const data = rampartPlans.map[packedCoord] + if (data.minRCL > RCL) continue + + this.room.visual.text(data.minRCL.toString(), coord.x, coord.y + 0.25, { font: 0.4 }) + + if (data.buildForNuke) { + this.room.visual.structure(coord.x, coord.y, STRUCTURE_RAMPART, { + opacity: 0.2, + fill: 'yellow', + }) + continue + } + + if (data.buildForThreat) { + this.room.visual.structure(coord.x, coord.y, STRUCTURE_RAMPART, { opacity: 0.2 }) + continue + } + + if (data.coversStructure) { + this.room.visual.structure(coord.x, coord.y, STRUCTURE_RAMPART, { + opacity: 0.2, + fill: customColors.lightBlue, + }) + continue + } + + this.room.visual.structure(coord.x, coord.y, STRUCTURE_RAMPART, { opacity: 0.5 }) + } - this.room.visual.text(data.minRCL.toString(), coord.x, coord.y + 0.25, { font: 0.4 }) + this.room.visual.connectRoads() + this.room.visual.text(RCL.toString(), this.room.controller.pos) + } + private migrate() { + if (!global.settings.structureMigration) return + if (!randomTick(100)) return - if (data.buildForNuke) { - this.room.visual.structure(coord.x, coord.y, STRUCTURE_RAMPART, { - opacity: 0.2, - fill: 'yellow', - }) - continue - } + const structures = this.room.roomManager.structures + const basePlans = this.room.roomManager.basePlans - if (data.buildForThreat) { - this.room.visual.structure(coord.x, coord.y, STRUCTURE_RAMPART, { opacity: 0.2 }) - continue - } + for (const structureType of generalMigrationStructures) { + for (const structure of structures[structureType]) { + const packedCoord = packCoord(structure.pos) - if (data.coversStructure) { - this.room.visual.structure(coord.x, coord.y, STRUCTURE_RAMPART, { - opacity: 0.2, - fill: customColors.lightBlue, - }) - continue - } - - this.room.visual.structure(coord.x, coord.y, STRUCTURE_RAMPART, { opacity: 0.5 }) + const coordData = basePlans.map[packedCoord] + if (!coordData) { + structure.destroy() + continue } - this.room.visual.connectRoads() - this.room.visual.text(RCL.toString(), this.room.controller.pos) - } - private migrate() { - if (!global.settings.structureMigration) return - if (!randomTick(100)) return - - const structures = this.room.roomManager.structures - const basePlans = this.room.roomManager.basePlans - - for (const structureType of generalMigrationStructures) { - for (const structure of structures[structureType]) { - const packedCoord = packCoord(structure.pos) + const match = coordData.find(data => { + return data.structureType === structure.structureType + }) + if (match) continue - const coordData = basePlans.map[packedCoord] - if (!coordData) { - structure.destroy() - continue - } - - const match = coordData.find(data => { - return data.structureType === structure.structureType - }) - if (match) continue - - structure.destroy() - } - } + structure.destroy() + } + } - // Keep one spawn even if all are misplaced + // Keep one spawn even if all are misplaced - const misplacedSpawns: StructureSpawn[] = [] + const misplacedSpawns: StructureSpawn[] = [] - for (const structure of structures.spawn) { - const packedCoord = packCoord(structure.pos) + for (const structure of structures.spawn) { + const packedCoord = packCoord(structure.pos) - const coordData = basePlans.map[packedCoord] - if (!coordData) { - misplacedSpawns.push(structure) - continue - } + const coordData = basePlans.map[packedCoord] + if (!coordData) { + misplacedSpawns.push(structure) + continue + } - const match = coordData.find(data => { - return data.structureType === structure.structureType - }) - if (match) continue + const match = coordData.find(data => { + return data.structureType === structure.structureType + }) + if (match) continue - misplacedSpawns.push(structure) - } + misplacedSpawns.push(structure) + } - let i = misplacedSpawns.length === structures.spawn.length ? 1 : 0 - for (; i < misplacedSpawns.length; i++) { - misplacedSpawns[i].destroy() - } - /* + let i = misplacedSpawns.length === structures.spawn.length ? 1 : 0 + for (; i < misplacedSpawns.length; i++) { + misplacedSpawns[i].destroy() + } + /* const rampartPlans = this.room.roomManager.rampartPlans for (const structure of structures.rampart) { @@ -330,26 +328,26 @@ export class ConstructionManager { structure.destroy() } */ + } + + /** + * If it hasn't yet been done for this room, check for and destroy any structures owned by another player + */ + private clearEnemyStructures() { + const roomMemory = Memory.rooms[this.room.name] + if (roomMemory[RoomMemoryKeys.clearedEnemyStructures]) return Result.noAction + + const structures = this.room.roomManager.structures + for (const structureType in structures) { + for (const structure of structures[structureType as StructureConstant]) { + if (!(structure as OwnedStructure).owner) continue + if ((structure as OwnedStructure).owner.username === Memory.me) continue + + structure.destroy() + } } - /** - * If it hasn't yet been done for this room, check for and destroy any structures owned by another player - */ - private clearEnemyStructures() { - const roomMemory = Memory.rooms[this.room.name] - if (roomMemory[RoomMemoryKeys.clearedEnemyStructures]) return Result.noAction - - const structures = this.room.roomManager.structures - for (const structureType in structures) { - for (const structure of structures[structureType as StructureConstant]) { - if (!(structure as OwnedStructure).owner) continue - if ((structure as OwnedStructure).owner.username === Memory.me) continue - - structure.destroy() - } - } - - roomMemory[RoomMemoryKeys.clearedEnemyStructures] = true - return Result.action - } + roomMemory[RoomMemoryKeys.clearedEnemyStructures] = true + return Result.action + } } diff --git a/src/room/construction/minCut.ts b/src/room/construction/minCut.ts index f9652ff9c..4472e40e3 100644 --- a/src/room/construction/minCut.ts +++ b/src/room/construction/minCut.ts @@ -65,7 +65,7 @@ */ import { customColors, roomDimensions } from 'international/constants' -import { collectiveManager } from 'international/collective' +import { CollectiveManager } from 'international/collective' import { findCoordsInRangeXY, isXYInBorder, packXYAsNum, unpackNumAsCoord } from 'utils/utils' // the eight surrounding points of a tile diff --git a/src/room/creeps/creepMoveProcs.ts b/src/room/creeps/creepMoveProcs.ts index ada0b4e1e..40ec7480d 100644 --- a/src/room/creeps/creepMoveProcs.ts +++ b/src/room/creeps/creepMoveProcs.ts @@ -1,4 +1,4 @@ -import { collectiveManager } from 'international/collective' +import { CollectiveManager } from 'international/collective' import { CreepMemoryKeys, FlagNames, @@ -41,7 +41,7 @@ export class CreepMoveProcs { // Assign default args - opts.cacheAmount ??= collectiveManager.defaultMinPathCacheTime + opts.cacheAmount ??= CollectiveManager.defaultMinPathCacheTime if (creepMoveProcs.useExistingPath(creep, args, opts) === Result.success) { return Result.success diff --git a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts index 79e0381d5..7776fdd69 100644 --- a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts @@ -7,18 +7,23 @@ import { ReservedCoordTypes, MovedTypes } from 'international/constants' -import { collectiveManager } from 'international/collective' +import { CollectiveManager } from 'international/collective' import { - areCoordsEqual, - arePositionsEqual, findObjectWithID, getRangeEuc, getRange, - isExit, forAdjacentCoords + areCoordsEqual, + arePositionsEqual, + findObjectWithID, + getRangeEuc, + getRange, + isExit, + forAdjacentCoords, } from 'utils/utils' import { - packCoord, - packPos, unpackCoordAsPos, - unpackPos, - unpackPosAt, - unpackPosList + packCoord, + packPos, + unpackCoordAsPos, + unpackPos, + unpackPosAt, + unpackPosList, } from 'other/codec' import { creepMoveProcs } from '../creepMoveProcs' @@ -139,7 +144,7 @@ PowerCreep.prototype.createMoveRequest = Creep.prototype.createMoveRequest = fun // Assign default args args.origin ??= this.pos - opts.cacheAmount ??= collectiveManager.defaultMinPathCacheTime + opts.cacheAmount ??= CollectiveManager.defaultMinPathCacheTime if (creepMoveProcs.useExistingPath(this, args, opts) === Result.success) { return Result.success diff --git a/src/room/creeps/creepUtils.ts b/src/room/creeps/creepUtils.ts index 3524fc33d..a6cbf6b45 100644 --- a/src/room/creeps/creepUtils.ts +++ b/src/room/creeps/creepUtils.ts @@ -18,7 +18,7 @@ import { arePositionsEqual, findObjectWithID, findWithLowestScore, getRange } fr import { CreepRoleManager } from './creepRoleManager' import { packCoord, unpackCoordAsPos, unpackPosAt } from 'other/codec' import { RoomManager } from 'room/room' -import { collectiveManager } from 'international/collective' +import { CollectiveManager } from 'international/collective' import { creepClasses } from './creepClasses' import { communeUtils } from 'room/commune/communeUtils' import { myCreepUtils } from './myCreepUtils' diff --git a/src/room/creeps/roleManagers/antifa/antifa.ts b/src/room/creeps/roleManagers/antifa/antifa.ts index 5ac3f3427..20691f277 100644 --- a/src/room/creeps/roleManagers/antifa/antifa.ts +++ b/src/room/creeps/roleManagers/antifa/antifa.ts @@ -8,7 +8,7 @@ import { } from 'international/constants' import { customLog } from 'utils/logging' import { findClosestObject, getRangeXY, isExit, isXYExit } from 'utils/utils' -import { collectiveManager } from 'international/collective' +import { CollectiveManager } from 'international/collective' import { Duo } from './duo' import { Quad } from './quad' @@ -18,10 +18,10 @@ export class Antifa extends Creep { } initRun() { - if (collectiveManager.creepsByCombatRequest[this.memory[CreepMemoryKeys.combatRequest]]) - collectiveManager.creepsByCombatRequest[this.memory[CreepMemoryKeys.combatRequest]][ - this.role - ].push(this.name) + if (CollectiveManager.creepsByCombatRequest[this.memory[CreepMemoryKeys.combatRequest]]) + CollectiveManager.creepsByCombatRequest[this.memory[CreepMemoryKeys.combatRequest]][ + this.role + ].push(this.name) // We don't want a squad or we already have done diff --git a/src/room/creeps/roleManagers/international/requestHauler.ts b/src/room/creeps/roleManagers/international/requestHauler.ts index dcaf1d162..359d3471a 100644 --- a/src/room/creeps/roleManagers/international/requestHauler.ts +++ b/src/room/creeps/roleManagers/international/requestHauler.ts @@ -1,5 +1,5 @@ import { CreepMemoryKeys } from 'international/constants' -import { collectiveManager } from 'international/collective' +import { CollectiveManager } from 'international/collective' export class RequestHauler extends Creep { constructor(creepID: Id) { @@ -8,7 +8,7 @@ export class RequestHauler extends Creep { initRun() { if (Memory.haulRequests[this.memory[CreepMemoryKeys.haulRequest]]) { - collectiveManager.creepsByHaulRequest[this.memory[CreepMemoryKeys.haulRequest]].push( + CollectiveManager.creepsByHaulRequest[this.memory[CreepMemoryKeys.haulRequest]].push( this.name, ) } diff --git a/src/room/creeps/roleManagers/international/scout.ts b/src/room/creeps/roleManagers/international/scout.ts index d31c31626..1e62d8594 100644 --- a/src/room/creeps/roleManagers/international/scout.ts +++ b/src/room/creeps/roleManagers/international/scout.ts @@ -11,110 +11,110 @@ import { partial } from 'lodash' import { roomNameUtils } from 'room/roomNameUtils' export class Scout extends Creep { - scoutedRooms?: string[] - unscoutedRooms?: string[] + scoutedRooms?: string[] + unscoutedRooms?: string[] - constructor(creepID: Id) { - super(creepID) - } + constructor(creepID: Id) { + super(creepID) + } - initRun() { - if (!Memory.creeps[this.name][CreepMemoryKeys.scoutTarget]) return + initRun() { + if (!Memory.creeps[this.name][CreepMemoryKeys.scoutTarget]) return - this.commune.scoutTargets.add(Memory.creeps[this.name][CreepMemoryKeys.scoutTarget]) - } + this.commune.scoutTargets.add(Memory.creeps[this.name][CreepMemoryKeys.scoutTarget]) + } - /** - * Finds a room name for the scout to target - */ - findScoutTarget?(): boolean { - const creepMemory = Memory.creeps[this.name] - if (creepMemory[CreepMemoryKeys.scoutTarget]) return true + /** + * Finds a room name for the scout to target + */ + findScoutTarget?(): boolean { + const creepMemory = Memory.creeps[this.name] + if (creepMemory[CreepMemoryKeys.scoutTarget]) return true - const scoutTarget = this.findBestScoutTarget() - if (!scoutTarget) return false + const scoutTarget = this.findBestScoutTarget() + if (!scoutTarget) return false - this.commune.scoutTargets.add(scoutTarget) - return true - } + this.commune.scoutTargets.add(scoutTarget) + return true + } - findScoutTargets?() { - // Construct storage of exit information + findScoutTargets?() { + // Construct storage of exit information - this.scoutedRooms = [] - this.unscoutedRooms = [] + this.scoutedRooms = [] + this.unscoutedRooms = [] - // Get information about the room's exits - const exits = Game.map.describeExits(this.room.name) + // Get information about the room's exits + const exits = Game.map.describeExits(this.room.name) - // Loop through each adjacent room recording scouted and unscouted rooms + // Loop through each adjacent room recording scouted and unscouted rooms - for (const exitType in exits) { - // Get the roomName using the exitType + for (const exitType in exits) { + // Get the roomName using the exitType - const roomName = exits[exitType as ExitKey] + const roomName = exits[exitType as ExitKey] - // If a scout already has this room as a target + // If a scout already has this room as a target - if (this.commune.scoutTargets.has(roomName)) continue + if (this.commune.scoutTargets.has(roomName)) continue - // Iterate if the room statuses aren't the same + // Iterate if the room statuses aren't the same - if ( - Memory.rooms[this.room.name][RoomMemoryKeys.status] !== - roomNameUtils.getStatusForPotentialMemory(roomName) - ) - continue + if ( + Memory.rooms[this.room.name][RoomMemoryKeys.status] !== + roomNameUtils.getStatusForPotentialMemory(roomName) + ) + continue - // If the room has memory and a LST + // If the room has memory and a LST - if (Memory.rooms[roomName] && Memory.rooms[roomName][RoomMemoryKeys.lastScout]) { - // Add it to scoutedRooms and iterate + if (Memory.rooms[roomName] && Memory.rooms[roomName][RoomMemoryKeys.lastScout]) { + // Add it to scoutedRooms and iterate - this.scoutedRooms.push(roomName) - continue - } + this.scoutedRooms.push(roomName) + continue + } - this.unscoutedRooms.push(roomName) - } + this.unscoutedRooms.push(roomName) } + } - findBestScoutTarget?() { - this.findScoutTargets() + findBestScoutTarget?() { + this.findScoutTargets() - // Find the closest room to the creep's commune + // Find the closest room to the creep's commune - if (this.unscoutedRooms.length) { - let lowestRange = Infinity + if (this.unscoutedRooms.length) { + let lowestRange = Infinity - for (const roomName of this.unscoutedRooms) { - const range = Game.map.getRoomLinearDistance(this.commune.name, roomName) - if (range > lowestRange) continue - - lowestRange = range - this.memory[CreepMemoryKeys.scoutTarget] = roomName - } + for (const roomName of this.unscoutedRooms) { + const range = Game.map.getRoomLinearDistance(this.commune.name, roomName) + if (range > lowestRange) continue - return this.memory[CreepMemoryKeys.scoutTarget] - } + lowestRange = range + this.memory[CreepMemoryKeys.scoutTarget] = roomName + } - // Find the room scouted longest ago + return this.memory[CreepMemoryKeys.scoutTarget] + } - let lowestLastScoutTick = Infinity + // Find the room scouted longest ago - for (const roomName of this.scoutedRooms) { - const lastScoutTick = Memory.rooms[roomName][RoomMemoryKeys.lastScout] - if (lastScoutTick > lowestLastScoutTick) continue + let lowestLastScoutTick = Infinity - lowestLastScoutTick = lastScoutTick - this.memory[CreepMemoryKeys.scoutTarget] = roomName - } + for (const roomName of this.scoutedRooms) { + const lastScoutTick = Memory.rooms[roomName][RoomMemoryKeys.lastScout] + if (lastScoutTick > lowestLastScoutTick) continue - return this.memory[CreepMemoryKeys.scoutTarget] + lowestLastScoutTick = lastScoutTick + this.memory[CreepMemoryKeys.scoutTarget] = roomName } - // THIS SHOULD BE A ROOM FUNCTION BASED OFF Room.advancedScout - /* + return this.memory[CreepMemoryKeys.scoutTarget] + } + + // THIS SHOULD BE A ROOM FUNCTION BASED OFF Room.advancedScout + /* recordDeposits?(): void { const { room } = this @@ -123,7 +123,7 @@ export class Scout extends Creep { // Make sure the room has a commune if (room.memory[RoomMemoryKeys.commune]) { - if (!collectiveManager.communes.has(room.memory[RoomMemoryKeys.commune])) { + if (!CollectiveManager.communes.has(room.memory[RoomMemoryKeys.commune])) { room.memory[RoomMemoryKeys.commune] = findClosestCommuneName(room.name) } } else { @@ -147,151 +147,145 @@ export class Scout extends Creep { } } */ - /** - * Tries to sign a room's controller depending on the situation - */ - advancedSignController?(): boolean { - const controller = this.room.controller - if (!controller) return true - - const roomMemory = Memory.rooms[this.room.name] - - // If the room isn't a commune or our sign target, don't try to sign it - if (Memory.creeps[this.name][CreepMemoryKeys.signTarget] !== this.room.name) { - return true - } + /** + * Tries to sign a room's controller depending on the situation + */ + advancedSignController?(): boolean { + const controller = this.room.controller + if (!controller) return true + + const roomMemory = Memory.rooms[this.room.name] + + // If the room isn't a commune or our sign target, don't try to sign it + if (Memory.creeps[this.name][CreepMemoryKeys.signTarget] !== this.room.name) { + return true + } - this.message = '🔤' + this.message = '🔤' - // Construct the signMessage + // Construct the signMessage - let signMessage: string + let signMessage: string - // If the room is reserved or owned by an enemy or an ally + // If the room is reserved or owned by an enemy or an ally - if (controller.owner && controller.owner.username !== Memory.me) return true - if (controller.reservation && controller.reservation.username !== Memory.me) return true + if (controller.owner && controller.owner.username !== Memory.me) return true + if (controller.reservation && controller.reservation.username !== Memory.me) return true - // If the room is a commune + // If the room is a commune - if (roomMemory[RoomMemoryKeys.type] === RoomTypes.commune) { - // If the room already has a correct sign - if (controller.sign && controller.sign.text === communeSign) return true + if (roomMemory[RoomMemoryKeys.type] === RoomTypes.commune) { + // If the room already has a correct sign + if (controller.sign && controller.sign.text === communeSign) return true - // Otherwise assign the signMessage the commune sign - signMessage = communeSign - } - // Otherwise if the room is not a commune - else { - // If the room already has a correct sign - if (controller.sign && nonCommuneSigns.includes(controller.sign.text)) return true + // Otherwise assign the signMessage the commune sign + signMessage = communeSign + } + // Otherwise if the room is not a commune + else { + // If the room already has a correct sign + if (controller.sign && nonCommuneSigns.includes(controller.sign.text)) return true - // And assign the message according to the index of randomSign - signMessage = randomOf(nonCommuneSigns) - } + // And assign the message according to the index of randomSign + signMessage = randomOf(nonCommuneSigns) + } - // If the controller is not in range + // If the controller is not in range + + if (getRange(this.pos, controller.pos) > 1) { + // Request to move to the controller and inform false + + if ( + this.createMoveRequest({ + origin: this.pos, + goals: [{ pos: this.room.controller.pos, range: 1 }], + avoidEnemyRanges: true, + plainCost: 1, + swampCost: 1, + }) === Result.fail + ) { + // The controller is ineccessible, drop the target + delete Memory.creeps[this.name][CreepMemoryKeys.signTarget] + return true + } - if (getRange(this.pos, controller.pos) > 1) { - // Request to move to the controller and inform false + this.message = this.moveRequest - if ( - this.createMoveRequest({ - origin: this.pos, - goals: [{ pos: this.room.controller.pos, range: 1 }], - avoidEnemyRanges: true, - plainCost: 1, - swampCost: 1, - }) === Result.fail - ) { + return false + } - // The controller is ineccessible, drop the target - delete Memory.creeps[this.name][CreepMemoryKeys.signTarget] - return true - } + // Otherwise Try to sign the controller, informing the result - this.message = this.moveRequest + return this.signController(this.room.controller, signMessage) === OK + } - return false - } + static roleManager(room: Room, creepsOfRole: string[]) { + // Loop through the names of the creeps of the role - // Otherwise Try to sign the controller, informing the result + for (const creepName of creepsOfRole) { + // Get the creep using its name - return this.signController(this.room.controller, signMessage) === OK - } + const creep: Scout = Game.creeps[creepName] - static roleManager(room: Room, creepsOfRole: string[]) { - // Loop through the names of the creeps of the role + // Don't provide notifications for attacked scouts - for (const creepName of creepsOfRole) { - // Get the creep using its name + if (creep.ticksToLive === CREEP_LIFE_TIME - 1) creep.notifyWhenAttacked(false) - const creep: Scout = Game.creeps[creepName] + const creepMemory = Memory.creeps[creepName] + if (creepMemory[CreepMemoryKeys.scoutTarget] === room.name) { + creep.message = '👁️' - // Don't provide notifications for attacked scouts + // Get information about the room - if (creep.ticksToLive === CREEP_LIFE_TIME - 1) creep.notifyWhenAttacked(false) + room.advancedScout(creep.commune) - const creepMemory = Memory.creeps[creepName] - if (creepMemory[CreepMemoryKeys.scoutTarget] === room.name) { - creep.message = '👁️' + // Clean the room's memory - // Get information about the room + roomNameUtils.cleanMemory(room.name) - room.advancedScout(creep.commune) + // And delete the creep's scoutTarget - // Clean the room's memory + delete creepMemory[CreepMemoryKeys.scoutTarget] + } - roomNameUtils.cleanMemory(room.name) + // If there is no scoutTarget, find one - // And delete the creep's scoutTarget + if (!creep.findScoutTarget()) return - delete creepMemory[CreepMemoryKeys.scoutTarget] - } + // Say the scoutTarget - // If there is no scoutTarget, find one - - if (!creep.findScoutTarget()) return - - // Say the scoutTarget - - creep.message = `🔭${creepMemory[CreepMemoryKeys.scoutTarget].toString()}` - - if (!creep.advancedSignController()) continue - delete creepMemory[CreepMemoryKeys.signTarget] - - // Try to go to the scoutTarget - - if ( - creep.createMoveRequest({ - origin: creep.pos, - goals: [ - { - pos: new RoomPosition( - 25, - 25, - creepMemory[CreepMemoryKeys.scoutTarget], - ), - range: 25, - }, - ], - avoidEnemyRanges: true, - plainCost: 1, - swampCost: 1, - }) === Result.fail - ) { - let roomMemory: Partial = - Memory.rooms[creepMemory[CreepMemoryKeys.scoutTarget]] - if (!roomMemory) - roomMemory = (Memory.rooms[ - creepMemory[CreepMemoryKeys.scoutTarget] - ] as Partial) = {} - - roomMemory[RoomMemoryKeys.type] = RoomTypes.neutral - roomMemory[RoomMemoryKeys.lastScout] = Game.time - - delete creepMemory[CreepMemoryKeys.scoutTarget] - } - } + creep.message = `🔭${creepMemory[CreepMemoryKeys.scoutTarget].toString()}` + + if (!creep.advancedSignController()) continue + delete creepMemory[CreepMemoryKeys.signTarget] + + // Try to go to the scoutTarget + + if ( + creep.createMoveRequest({ + origin: creep.pos, + goals: [ + { + pos: new RoomPosition(25, 25, creepMemory[CreepMemoryKeys.scoutTarget]), + range: 25, + }, + ], + avoidEnemyRanges: true, + plainCost: 1, + swampCost: 1, + }) === Result.fail + ) { + let roomMemory: Partial = Memory.rooms[creepMemory[CreepMemoryKeys.scoutTarget]] + if (!roomMemory) + roomMemory = (Memory.rooms[ + creepMemory[CreepMemoryKeys.scoutTarget] + ] as Partial) = {} + + roomMemory[RoomMemoryKeys.type] = RoomTypes.neutral + roomMemory[RoomMemoryKeys.lastScout] = Game.time + + delete creepMemory[CreepMemoryKeys.scoutTarget] + } } + } } diff --git a/src/room/remotePlanner.ts b/src/room/remotePlanner.ts index 58cfcab1f..7372bb550 100644 --- a/src/room/remotePlanner.ts +++ b/src/room/remotePlanner.ts @@ -42,17 +42,17 @@ import { randomIntRange, sortBy, } from 'utils/utils' -import { collectiveManager } from 'international/collective' +import { CollectiveManager } from 'international/collective' import { - packCoord, - packPos, - packPosList, - packStampAnchors, - packXYAsCoord, - reversePosList, - unpackCoord, - unpackPosList, - unpackStampAnchors, + packCoord, + packPos, + packPosList, + packStampAnchors, + packXYAsCoord, + reversePosList, + unpackCoord, + unpackPosList, + unpackStampAnchors, } from 'other/codec' import 'other/RoomVisual' import { CommuneManager } from 'room/commune/commune' @@ -67,263 +67,263 @@ const unprotectedCoordWeight = defaultRoadPlanningPlainCost * 16 const dynamicDistanceWeight = 8 interface PlanStampsArgs { - stampType: StampTypes - count: number - startCoords: Coord[] - dynamic?: boolean - weighted?: boolean - diagonalDT?: boolean - coordMap?: CoordMap - dynamicWeight?: Uint32Array - minAvoid?: number - cardinalFlood?: boolean - /** - * How to consider potential stampAnchors - */ - conditions?(coord: Coord): boolean - /** - * What to do with the stampAnchor resulting from a successful individual plan - * @param coord the stampAnchor - */ - consequence(coord: Coord): void + stampType: StampTypes + count: number + startCoords: Coord[] + dynamic?: boolean + weighted?: boolean + diagonalDT?: boolean + coordMap?: CoordMap + dynamicWeight?: Uint32Array + minAvoid?: number + cardinalFlood?: boolean + /** + * How to consider potential stampAnchors + */ + conditions?(coord: Coord): boolean + /** + * What to do with the stampAnchor resulting from a successful individual plan + * @param coord the stampAnchor + */ + consequence(coord: Coord): void } interface FindDynamicStampAnchorArgs { - stamp: Stamp - startCoords: Coord[] - minAvoid?: number - conditions?(coord: Coord): boolean + stamp: Stamp + startCoords: Coord[] + minAvoid?: number + conditions?(coord: Coord): boolean } interface FindDynamicStampAnchorWeightedArgs extends FindDynamicStampAnchorArgs { - dynamicWeight?: Uint32Array + dynamicWeight?: Uint32Array } interface FindStampAnchorArgs { - stamp: Stamp - startCoords: Coord[] - coordMap: CoordMap - minAvoid?: number - cardinalFlood?: boolean - conditions?(coord: Coord): boolean + stamp: Stamp + startCoords: Coord[] + coordMap: CoordMap + minAvoid?: number + cardinalFlood?: boolean + conditions?(coord: Coord): boolean } interface TowerDamageCoord extends Coord { - minDamage: number + minDamage: number } /** * */ export class RemotePlanner { - roomManager: RoomManager - room: Room + roomManager: RoomManager + room: Room + + // Holistic + + planAttempts: BasePlanAttempt[] + planVisualizeIndex: number + terrainCoords: CoordMap + + // + + centerUpgradePos: RoomPosition + upgradePath: RoomPosition[] + + inputLab2Coord: Coord + outputLabCoords: Coord[] + + sourceHarvestPositions: RoomPosition[][] + sourcePaths: RoomPosition[][] + sourceStructureCoords: Coord[][] + communeSources: Source[] + + mineralPath: RoomPosition[] + mineralHarvestPositions: RoomPosition[] + + unprotectedSources: number + isControllerProtected: boolean + + // Action checks + + plannedGridCoords: boolean + finishedGrid: boolean + generalShielded: boolean + finishedFastFillerRoadPrune: boolean + /** + * If the planner is in the process of recording a plan attempt + */ + recording: boolean + markSourcesAvoid: boolean + finishedTowerPaths: boolean + + // + + basePlans: BasePlans + rampartPlans: RampartPlans + baseCoords: Uint8Array + roadCoords: Uint8Array + rampartCoords: Uint8Array + weightedDiagonalCoords: Uint8Array + diagonalCoords: Uint8Array + gridCoords: Uint8Array + exitCoords: Coord[] + /** + * Coords adjacent to exits, including exit coords + */ + byExitCoords: Uint8Array + /** + * Coords adjacent to planned roads + */ + byPlannedRoad: Uint8Array + + /** + * Coords we should be protecting using ramparts + */ + protectCoords: Set + /** + * Coords protected by ramparts + */ + protectedCoords: Uint8Array + /** + * Coords outside of rampart protection or in range of defensive combat areas + */ + unprotectedCoords: Uint8Array + insideMinCut: Set + outsideMinCut: Set + bestTowerScore: number + bestTowerCoords: TowerDamageCoord[] + towerAttemptIndex: number + stampAnchors: Partial<{ [key in StampTypes]: Coord[] }> + fastFillerStartCoords: Coord[] + minCutCoords: Set + groupedMinCutCoords: Coord[][] + RCLPlannedStructureTypes: Partial<{ + [key in BuildableStructureConstant]: RCLPlannedStructureType + }> + /** + * The preference towards a plan attempt. Lower score is better + */ + score: number + + constructor(roomManager: RoomManager) { + this.roomManager = roomManager + } + + _reverseExitFlood: Uint32Array + get reverseExitFlood() { + if (this._reverseExitFlood) return this._reverseExitFlood + + this._reverseExitFlood = new Uint32Array(2500) + + let visitedCoords = new Uint8Array(2500) + for (const coord of this.exitCoords) visitedCoords[packAsNum(coord)] = 1 + + let depth = -1 + let thisGeneration = this.exitCoords + let nextGeneration: Coord[] + + while (thisGeneration.length) { + nextGeneration = [] + + // Iterate through positions of this gen + + for (const coord1 of thisGeneration) { + this._reverseExitFlood[packAsNum(coord1)] = depth + + // Add viable adjacent coords to the next generation - // Holistic - - planAttempts: BasePlanAttempt[] - planVisualizeIndex: number - terrainCoords: CoordMap - - // - - centerUpgradePos: RoomPosition - upgradePath: RoomPosition[] - - inputLab2Coord: Coord - outputLabCoords: Coord[] - - sourceHarvestPositions: RoomPosition[][] - sourcePaths: RoomPosition[][] - sourceStructureCoords: Coord[][] - communeSources: Source[] - - mineralPath: RoomPosition[] - mineralHarvestPositions: RoomPosition[] - - unprotectedSources: number - isControllerProtected: boolean - - // Action checks - - plannedGridCoords: boolean - finishedGrid: boolean - generalShielded: boolean - finishedFastFillerRoadPrune: boolean - /** - * If the planner is in the process of recording a plan attempt - */ - recording: boolean - markSourcesAvoid: boolean - finishedTowerPaths: boolean + for (const offset of adjacentOffsets) { + const coord2 = { + x: coord1.x + offset.x, + y: coord1.y + offset.y, + } - // + if (!isXYInRoom(coord2.x, coord2.y)) continue - basePlans: BasePlans - rampartPlans: RampartPlans - baseCoords: Uint8Array - roadCoords: Uint8Array - rampartCoords: Uint8Array - weightedDiagonalCoords: Uint8Array - diagonalCoords: Uint8Array - gridCoords: Uint8Array - exitCoords: Coord[] - /** - * Coords adjacent to exits, including exit coords - */ - byExitCoords: Uint8Array - /** - * Coords adjacent to planned roads - */ - byPlannedRoad: Uint8Array - - /** - * Coords we should be protecting using ramparts - */ - protectCoords: Set - /** - * Coords protected by ramparts - */ - protectedCoords: Uint8Array - /** - * Coords outside of rampart protection or in range of defensive combat areas - */ - unprotectedCoords: Uint8Array - insideMinCut: Set - outsideMinCut: Set - bestTowerScore: number - bestTowerCoords: TowerDamageCoord[] - towerAttemptIndex: number - stampAnchors: Partial<{ [key in StampTypes]: Coord[] }> - fastFillerStartCoords: Coord[] - minCutCoords: Set - groupedMinCutCoords: Coord[][] - RCLPlannedStructureTypes: Partial<{ - [key in BuildableStructureConstant]: RCLPlannedStructureType - }> - /** - * The preference towards a plan attempt. Lower score is better - */ - score: number - - constructor(roomManager: RoomManager) { - this.roomManager = roomManager - } - - _reverseExitFlood: Uint32Array - get reverseExitFlood() { - if (this._reverseExitFlood) return this._reverseExitFlood - - this._reverseExitFlood = new Uint32Array(2500) - - let visitedCoords = new Uint8Array(2500) - for (const coord of this.exitCoords) visitedCoords[packAsNum(coord)] = 1 - - let depth = -1 - let thisGeneration = this.exitCoords - let nextGeneration: Coord[] - - while (thisGeneration.length) { - nextGeneration = [] - - // Iterate through positions of this gen - - for (const coord1 of thisGeneration) { - this._reverseExitFlood[packAsNum(coord1)] = depth - - // Add viable adjacent coords to the next generation - - for (const offset of adjacentOffsets) { - const coord2 = { - x: coord1.x + offset.x, - y: coord1.y + offset.y, - } - - if (!isXYInRoom(coord2.x, coord2.y)) continue - - if (visitedCoords[packAsNum(coord2)] === 1) continue - visitedCoords[packAsNum(coord2)] = 1 - - if (this.terrainCoords[packAsNum(coord2)] === 255) continue - - nextGeneration.push(coord2) - } - } + if (visitedCoords[packAsNum(coord2)] === 1) continue + visitedCoords[packAsNum(coord2)] = 1 - // Set up for next generation + if (this.terrainCoords[packAsNum(coord2)] === 255) continue - depth -= 1 - thisGeneration = nextGeneration + nextGeneration.push(coord2) } + } - return this._reverseExitFlood - } + // Set up for next generation - get isStartRoom() { - return ( - this.room.controller.my && - this.room.controller.safeMode && - collectiveManager.communes.size <= 1 - ) + depth -= 1 + thisGeneration = nextGeneration } - preTickRun() { - this.room = this.roomManager.room - - if (this.room.memory[RoomMemoryKeys.communePlanned] !== undefined) return Result.noAction + return this._reverseExitFlood + } - // Stop if there isn't sufficient CPU + get isStartRoom() { + return ( + this.room.controller.my && + this.room.controller.safeMode && + CollectiveManager.communes.size <= 1 + ) + } - if (Game.cpu.bucket < CPUMaxPerTick) return Result.noAction + preTickRun() { + this.room = this.roomManager.room - if (this.recording) this.record() + if (this.room.memory[RoomMemoryKeys.communePlanned] !== undefined) return Result.noAction - // Planning is complete, choose the best one + // Stop if there isn't sufficient CPU - if ( - this.fastFillerStartCoords && - this.planAttempts.length === this.fastFillerStartCoords.length - ) { - /* this.visualizeBestPlan() */ - this.choosePlan() - return Result.success - } + if (Game.cpu.bucket < CPUMaxPerTick) return Result.noAction - // Initial configuration + if (this.recording) this.record() - if (!this.terrainCoords) { - this.terrainCoords = collectiveManager.getTerrainBinary(this.room.name) - this.planAttempts = [] - } + // Planning is complete, choose the best one - // Plan attempt / configuration + if ( + this.fastFillerStartCoords && + this.planAttempts.length === this.fastFillerStartCoords.length + ) { + /* this.visualizeBestPlan() */ + this.choosePlan() + return Result.success + } - if (!this.baseCoords) { - this.baseCoords = new Uint8Array(this.terrainCoords) - this.roadCoords = new Uint8Array(this.terrainCoords) - this.rampartCoords = new Uint8Array(2500) - this.byPlannedRoad = new Uint8Array(2500) + // Initial configuration - this.byExitCoords = new Uint8Array(2500) - this.exitCoords = [] - this.recordExits() + if (!this.terrainCoords) { + this.terrainCoords = CollectiveManager.getTerrainBinary(this.room.name) + this.planAttempts = [] + } - this.basePlans = new BasePlans() - this.rampartPlans = new RampartPlans() - this.stampAnchors = {} - this.RCLPlannedStructureTypes = {} - for (const stampType in stamps) { - this.stampAnchors[stampType as StampTypes] = [] - } - for (const structureType of buildableStructureTypes) { - this.RCLPlannedStructureTypes[structureType] = { - structures: 0, - minRCL: 1, - } - } - this.score = 0 - } - /* + // Plan attempt / configuration + + if (!this.baseCoords) { + this.baseCoords = new Uint8Array(this.terrainCoords) + this.roadCoords = new Uint8Array(this.terrainCoords) + this.rampartCoords = new Uint8Array(2500) + this.byPlannedRoad = new Uint8Array(2500) + + this.byExitCoords = new Uint8Array(2500) + this.exitCoords = [] + this.recordExits() + + this.basePlans = new BasePlans() + this.rampartPlans = new RampartPlans() + this.stampAnchors = {} + this.RCLPlannedStructureTypes = {} + for (const stampType in stamps) { + this.stampAnchors[stampType as StampTypes] = [] + } + for (const structureType of buildableStructureTypes) { + this.RCLPlannedStructureTypes[structureType] = { + structures: 0, + minRCL: 1, + } + } + this.score = 0 + } + /* this.setBasePlansXY(24, 24, STRUCTURE_CONTAINER, 2) this.setBasePlansXY(25, 25, STRUCTURE_CONTAINER, 2) this.setBasePlansXY(25, 25, STRUCTURE_LINK, 5) @@ -337,103 +337,101 @@ export class RemotePlanner { delete this.baseCoords return Result.noAction */ - this.avoidSources() - this.avoidMineral() - if (this.fastFiller() === Result.fail) return Result.fail - this.postFastFillerConfig() - this.generateGrid() - /* this.pruneFastFillerRoads() */ - if (this.findCenterUpgradePos() === Result.fail) return Result.fail - this.findSourceHarvestPositions() - this.hub() - this.labs() - this.sourceStructures() - this.gridExtensions() - this.gridExtensionSourcePaths() - this.nuker() - this.powerSpawn() - this.observer() - this.planGridCoords() - this.runMinCut() - this.groupMinCutCoords() - this.findUnprotectedCoords() - this.planSourceStructures() - // Run for a second time to account for any failed source structures - this.planGridCoords() - this.onboardingRamparts() - this.findOutsideMinCut() - this.findInsideMinCut() - this.towers() - this.towerPaths() - this.mineral() - this.generalShield() - this.visualizeCurrentPlan() - /* this.visualizeCurrentPlan() + this.avoidSources() + this.avoidMineral() + if (this.fastFiller() === Result.fail) return Result.fail + this.postFastFillerConfig() + this.generateGrid() + /* this.pruneFastFillerRoads() */ + if (this.findCenterUpgradePos() === Result.fail) return Result.fail + this.findSourceHarvestPositions() + this.hub() + this.labs() + this.sourceStructures() + this.gridExtensions() + this.gridExtensionSourcePaths() + this.nuker() + this.powerSpawn() + this.observer() + this.planGridCoords() + this.runMinCut() + this.groupMinCutCoords() + this.findUnprotectedCoords() + this.planSourceStructures() + // Run for a second time to account for any failed source structures + this.planGridCoords() + this.onboardingRamparts() + this.findOutsideMinCut() + this.findInsideMinCut() + this.towers() + this.towerPaths() + this.mineral() + this.generalShield() + this.visualizeCurrentPlan() + /* this.visualizeCurrentPlan() return Result.success */ - this.findScore() - this.record() - - return Result.action - } - /** - * - * @returns the minRCL - */ - private setBasePlansXY( - x: number, - y: number, - structureType: BuildableStructureConstant, - minRCL?: number, - ) { - this.RCLPlannedStructureTypes[structureType].structures += 1 - - if (minRCL === undefined) { - while ( - this.RCLPlannedStructureTypes[structureType].structures > - CONTROLLER_STRUCTURES[structureType][ - this.RCLPlannedStructureTypes[structureType].minRCL - ] - ) { - this.RCLPlannedStructureTypes[structureType].minRCL += 1 - } - - minRCL = this.RCLPlannedStructureTypes[structureType].minRCL - } - - const packedCoord = packXYAsCoord(x, y) - const coordData = this.basePlans.map[packedCoord] - if (!coordData) { - this.basePlans.map[packedCoord] = [ - { - structureType, - minRCL, - }, - ] + this.findScore() + this.record() + + return Result.action + } + /** + * + * @returns the minRCL + */ + private setBasePlansXY( + x: number, + y: number, + structureType: BuildableStructureConstant, + minRCL?: number, + ) { + this.RCLPlannedStructureTypes[structureType].structures += 1 + + if (minRCL === undefined) { + while ( + this.RCLPlannedStructureTypes[structureType].structures > + CONTROLLER_STRUCTURES[structureType][this.RCLPlannedStructureTypes[structureType].minRCL] + ) { + this.RCLPlannedStructureTypes[structureType].minRCL += 1 + } + + minRCL = this.RCLPlannedStructureTypes[structureType].minRCL + } - return minRCL - } + const packedCoord = packXYAsCoord(x, y) + const coordData = this.basePlans.map[packedCoord] + if (!coordData) { + this.basePlans.map[packedCoord] = [ + { + structureType, + minRCL, + }, + ] + + return minRCL + } - if (structureType === STRUCTURE_ROAD) { - coordData[0].minRCL = Math.min(coordData[0].minRCL, minRCL) - return minRCL - } + if (structureType === STRUCTURE_ROAD) { + coordData[0].minRCL = Math.min(coordData[0].minRCL, minRCL) + return minRCL + } - // Place in order of minRCL, ascending + // Place in order of minRCL, ascending - let i = 0 - for (; i < coordData.length; i++) { - const data = coordData[i] - if (minRCL > data.minRCL) break - } + let i = 0 + for (; i < coordData.length; i++) { + const data = coordData[i] + if (minRCL > data.minRCL) break + } - coordData.splice(i, 0, { - structureType, - minRCL, - }) + coordData.splice(i, 0, { + structureType, + minRCL, + }) - return minRCL + return minRCL - /* + /* const planCoord = this.basePlans.map[packedCoord] if (!planCoord) { this.basePlans.map[packedCoord] = [{ @@ -454,519 +452,517 @@ export class RemotePlanner { planCoord.minRCL = Math.min(planCoord.minRCL, minRCL) */ + } + private recordExits() { + for (const packedCoord of this.room.roomManager.exitCoords) { + const coord = unpackCoord(packedCoord) + this.exitCoords.push(coord) + forAdjacentCoords(coord, adjCoord => { + const packedAdjCoord = packAsNum(adjCoord) + if (this.terrainCoords[packedAdjCoord] === 255) return + + this.byExitCoords[packedAdjCoord] = 255 + this.baseCoords[packedAdjCoord] = 255 + }) } - private recordExits() { - for (const packedCoord of this.room.roomManager.exitCoords) { - const coord = unpackCoord(packedCoord) - this.exitCoords.push(coord) - forAdjacentCoords(coord, adjCoord => { - const packedAdjCoord = packAsNum(adjCoord) - if (this.terrainCoords[packedAdjCoord] === 255) return - - this.byExitCoords[packedAdjCoord] = 255 - this.baseCoords[packedAdjCoord] = 255 - }) - } - } - private generateGrid() { - if (this.finishedGrid) return + } + private generateGrid() { + if (this.finishedGrid) return - delete this.gridCoords - delete this.diagonalCoords - delete this.weightedDiagonalCoords + delete this.gridCoords + delete this.diagonalCoords + delete this.weightedDiagonalCoords - const terrain = this.room.getTerrain() - const gridSize = 4 - const anchor = new RoomPosition( - this.stampAnchors.fastFiller[0].x, - this.stampAnchors.fastFiller[0].y - 1, - this.room.name, - ) + const terrain = this.room.getTerrain() + const gridSize = 4 + const anchor = new RoomPosition( + this.stampAnchors.fastFiller[0].x, + this.stampAnchors.fastFiller[0].y - 1, + this.room.name, + ) - const inset = 1 + const inset = 1 - this.diagonalCoords = new Uint8Array(2500) - this.weightedDiagonalCoords = new Uint8Array(2500) + this.diagonalCoords = new Uint8Array(2500) + this.weightedDiagonalCoords = new Uint8Array(2500) - // Checkerboard + // Checkerboard - for (let x = 0; x < roomDimensions; x++) { - for (let y = 0; y < roomDimensions; y++) { - if (terrain.get(x, y) === TERRAIN_MASK_WALL) continue + for (let x = 0; x < roomDimensions; x++) { + for (let y = 0; y < roomDimensions; y++) { + if (terrain.get(x, y) === TERRAIN_MASK_WALL) continue - // Calculate the position of the cell relative to the anchor + // Calculate the position of the cell relative to the anchor - const relX = x - anchor.x - const relY = y - anchor.y + const relX = x - anchor.x + const relY = y - anchor.y - // Check if the cell is part of a diagonal line - if (Math.abs(relX - 3 * relY) % 2 !== 0 && Math.abs(relX + 3 * relY) % 2 !== 0) - continue + // Check if the cell is part of a diagonal line + if (Math.abs(relX - 3 * relY) % 2 !== 0 && Math.abs(relX + 3 * relY) % 2 !== 0) continue - const packedCoord = packXYAsNum(x, y) + const packedCoord = packXYAsNum(x, y) - if (terrain.get(x, y) === TERRAIN_MASK_SWAMP) { - this.diagonalCoords[packedCoord] = 3 * defaultSwampCost - this.weightedDiagonalCoords[packedCoord] = 8 * defaultSwampCost - continue - } - this.diagonalCoords[packedCoord] = 4 - this.weightedDiagonalCoords[packedCoord] = 8 - } + if (terrain.get(x, y) === TERRAIN_MASK_SWAMP) { + this.diagonalCoords[packedCoord] = 3 * defaultSwampCost + this.weightedDiagonalCoords[packedCoord] = 8 * defaultSwampCost + continue } + this.diagonalCoords[packedCoord] = 4 + this.weightedDiagonalCoords[packedCoord] = 8 + } + } - this.gridCoords = new Uint8Array(2500) - const gridCoordsArray: Coord[] = [] + this.gridCoords = new Uint8Array(2500) + const gridCoordsArray: Coord[] = [] - // Grid + // Grid - for (let x = inset; x < roomDimensions - inset; x++) { - for (let y = inset; y < roomDimensions - inset; y++) { - const packedCoord = packXYAsNum(x, y) - if (this.baseCoords[packedCoord] === 255) continue - if (this.byExitCoords[packedCoord] > 0) continue + for (let x = inset; x < roomDimensions - inset; x++) { + for (let y = inset; y < roomDimensions - inset; y++) { + const packedCoord = packXYAsNum(x, y) + if (this.baseCoords[packedCoord] === 255) continue + if (this.byExitCoords[packedCoord] > 0) continue - // Calculate the position of the cell relative to the anchor + // Calculate the position of the cell relative to the anchor - const relX = x - anchor.x - const relY = y - anchor.y + const relX = x - anchor.x + const relY = y - anchor.y - // Check if the cell is part of a diagonal line - if ( - Math.abs(relX - 3 * relY) % gridSize !== 0 && - Math.abs(relX + 3 * relY) % gridSize !== 0 - ) - continue + // Check if the cell is part of a diagonal line + if ( + Math.abs(relX - 3 * relY) % gridSize !== 0 && + Math.abs(relX + 3 * relY) % gridSize !== 0 + ) + continue - gridCoordsArray.push({ x, y }) + gridCoordsArray.push({ x, y }) - if (terrain.get(x, y) === TERRAIN_MASK_SWAMP) { - this.gridCoords[packedCoord] = 2 * defaultSwampCost - continue - } - this.gridCoords[packedCoord] = 2 - } + if (terrain.get(x, y) === TERRAIN_MASK_SWAMP) { + this.gridCoords[packedCoord] = 2 * defaultSwampCost + continue } + this.gridCoords[packedCoord] = 2 + } + } - // Group grid coords - - const gridGroups: Coord[][] = [] - let visitedCoords: Set = new Set() - let groupIndex = 0 - - for (const gridCoord of gridCoordsArray) { - const packedCoord = packCoord(gridCoord) - if (visitedCoords.has(packedCoord)) continue + // Group grid coords - visitedCoords.add(packedCoord) + const gridGroups: Coord[][] = [] + let visitedCoords: Set = new Set() + let groupIndex = 0 - gridGroups[groupIndex] = [gridCoord] + for (const gridCoord of gridCoordsArray) { + const packedCoord = packCoord(gridCoord) + if (visitedCoords.has(packedCoord)) continue - let thisGeneration = [gridCoord] - let nextGeneration: Coord[] - let groupSize = 0 + visitedCoords.add(packedCoord) - while (thisGeneration.length) { - nextGeneration = [] + gridGroups[groupIndex] = [gridCoord] - for (const coord of thisGeneration) { - for (const adjCoord of findAdjacentCoordsToCoord(coord)) { - const packedAdjCoord = packCoord(adjCoord) - if (visitedCoords.has(packedAdjCoord)) continue + let thisGeneration = [gridCoord] + let nextGeneration: Coord[] + let groupSize = 0 - visitedCoords.add(packedAdjCoord) + while (thisGeneration.length) { + nextGeneration = [] - if (this.gridCoords[packAsNum(adjCoord)] === 0) continue + for (const coord of thisGeneration) { + for (const adjCoord of findAdjacentCoordsToCoord(coord)) { + const packedAdjCoord = packCoord(adjCoord) + if (visitedCoords.has(packedAdjCoord)) continue - // Calculate the position of the cell relative to the anchor + visitedCoords.add(packedAdjCoord) - const relX = adjCoord.x - anchor.x - const relY = adjCoord.y - anchor.y + if (this.gridCoords[packAsNum(adjCoord)] === 0) continue - // Check if the cell is part of a diagonal line - if ( - Math.abs(relX - 3 * relY) % gridSize !== 0 && - Math.abs(relX + 3 * relY) % gridSize !== 0 - ) - continue + // Calculate the position of the cell relative to the anchor - groupSize += 1 - gridGroups[groupIndex].push(adjCoord) - nextGeneration.push(adjCoord) - } - } + const relX = adjCoord.x - anchor.x + const relY = adjCoord.y - anchor.y - if (groupSize > 20) break - thisGeneration = nextGeneration - } + // Check if the cell is part of a diagonal line + if ( + Math.abs(relX - 3 * relY) % gridSize !== 0 && + Math.abs(relX + 3 * relY) % gridSize !== 0 + ) + continue - groupIndex += 1 + groupSize += 1 + gridGroups[groupIndex].push(adjCoord) + nextGeneration.push(adjCoord) + } } - // Get group leaders + if (groupSize > 20) break + thisGeneration = nextGeneration + } - interface SpecialCoord extends Coord { - index: number - } - - const groupLeaders: SpecialCoord[] = [] + groupIndex += 1 + } - for (let i = 0; i < gridGroups.length; i++) { - const coord = gridGroups[i][0] as SpecialCoord + // Get group leaders - coord.index = i - groupLeaders.push(coord) - } + interface SpecialCoord extends Coord { + index: number + } - // Sort by closer to anchor + const groupLeaders: SpecialCoord[] = [] - groupLeaders.sort((a, b) => { - return getRange(a, anchor) - getRange(b, anchor) - }) + for (let i = 0; i < gridGroups.length; i++) { + const coord = gridGroups[i][0] as SpecialCoord - // Paths for grid groups + coord.index = i + groupLeaders.push(coord) + } - for (const leaderCoord of groupLeaders) { - const path = customPathFinder.findPath({ - origin: new RoomPosition(leaderCoord.x, leaderCoord.y, this.room.name), - goals: [{ pos: anchor, range: 3 }], - weightCoordMaps: [this.weightedDiagonalCoords, this.gridCoords, this.baseCoords], - plainCost: defaultRoadPlanningPlainCost * 6, - swampCost: defaultSwampCost * 6, - }) + // Sort by closer to anchor - // If the path failed, delete all members of the group + groupLeaders.sort((a, b) => { + return getRange(a, anchor) - getRange(b, anchor) + }) - if ( - !path.length && - !gridGroups[leaderCoord.index].find(coord => getRange(coord, anchor) <= 3) - ) { - for (const coord of gridGroups[leaderCoord.index]) { - this.gridCoords[packAsNum(coord)] = 0 - } - continue - } + // Paths for grid groups - for (const coord of path) { - if (terrain.get(coord.x, coord.y) === TERRAIN_MASK_SWAMP) { - this.gridCoords[packAsNum(coord)] = 2 * defaultSwampCost - continue - } - this.gridCoords[packAsNum(coord)] = 2 - } - } + for (const leaderCoord of groupLeaders) { + const path = customPathFinder.findPath({ + origin: new RoomPosition(leaderCoord.x, leaderCoord.y, this.room.name), + goals: [{ pos: anchor, range: 3 }], + weightCoordMaps: [this.weightedDiagonalCoords, this.gridCoords, this.baseCoords], + plainCost: defaultRoadPlanningPlainCost * 6, + swampCost: defaultSwampCost * 6, + }) - // Group exits + // If the path failed, delete all members of the group - const exitGroups: Coord[][] = [] - visitedCoords = new Set() - groupIndex = 0 + if ( + !path.length && + !gridGroups[leaderCoord.index].find(coord => getRange(coord, anchor) <= 3) + ) { + for (const coord of gridGroups[leaderCoord.index]) { + this.gridCoords[packAsNum(coord)] = 0 + } + continue + } - for (const packedCoord of this.room.roomManager.exitCoords) { - const exitCoord = unpackCoord(packedCoord) - if (visitedCoords.has(packedCoord)) continue + for (const coord of path) { + if (terrain.get(coord.x, coord.y) === TERRAIN_MASK_SWAMP) { + this.gridCoords[packAsNum(coord)] = 2 * defaultSwampCost + continue + } + this.gridCoords[packAsNum(coord)] = 2 + } + } - visitedCoords.add(packedCoord) + // Group exits - exitGroups[groupIndex] = [exitCoord] + const exitGroups: Coord[][] = [] + visitedCoords = new Set() + groupIndex = 0 - let thisGeneration = [exitCoord] - let nextGeneration: Coord[] - let groupSize = 0 + for (const packedCoord of this.room.roomManager.exitCoords) { + const exitCoord = unpackCoord(packedCoord) + if (visitedCoords.has(packedCoord)) continue - while (thisGeneration.length) { - nextGeneration = [] + visitedCoords.add(packedCoord) - for (const coord of thisGeneration) { - for (const adjCoord of findAdjacentCoordsToCoord(coord)) { - if (!isXYExit(adjCoord.x, adjCoord.y)) continue - if (this.terrainCoords[packAsNum(adjCoord)] === 255) continue + exitGroups[groupIndex] = [exitCoord] - const packedAdjCoord = packCoord(adjCoord) - if (visitedCoords.has(packedAdjCoord)) continue + let thisGeneration = [exitCoord] + let nextGeneration: Coord[] + let groupSize = 0 - visitedCoords.add(packedAdjCoord) + while (thisGeneration.length) { + nextGeneration = [] - groupSize += 1 - exitGroups[groupIndex].push(adjCoord) - nextGeneration.push(adjCoord) - } - } + for (const coord of thisGeneration) { + for (const adjCoord of findAdjacentCoordsToCoord(coord)) { + if (!isXYExit(adjCoord.x, adjCoord.y)) continue + if (this.terrainCoords[packAsNum(adjCoord)] === 255) continue - if (groupSize > 10) break - thisGeneration = nextGeneration - } + const packedAdjCoord = packCoord(adjCoord) + if (visitedCoords.has(packedAdjCoord)) continue - groupIndex += 1 - } + visitedCoords.add(packedAdjCoord) - // Paths for exit groups - - for (const group of exitGroups) { - const path = customPathFinder.findPath({ - origin: new RoomPosition(group[0].x, group[0].y, this.room.name), - goals: [{ pos: anchor, range: 3 }], - weightCoordMaps: [this.weightedDiagonalCoords, this.gridCoords], - plainCost: defaultRoadPlanningPlainCost * 6, - swampCost: defaultSwampCost * 6, - }) - - for (const coord of path) { - const packedCoord = packAsNum(coord) - if (this.baseCoords[packedCoord] === 255) continue - - if (terrain.get(coord.x, coord.y) === TERRAIN_MASK_SWAMP) { - this.gridCoords[packAsNum(coord)] = 2 * defaultSwampCost - continue - } - this.gridCoords[packAsNum(coord)] = 2 - } + groupSize += 1 + exitGroups[groupIndex].push(adjCoord) + nextGeneration.push(adjCoord) + } } - this.pruneGridCoords() + if (groupSize > 10) break + thisGeneration = nextGeneration + } - for (let x = 0; x < roomDimensions; x++) { - for (let y = 0; y < roomDimensions; y++) { - const packedCoord = packXYAsNum(x, y) - if (this.gridCoords[packedCoord] === 0) continue + groupIndex += 1 + } - for (const adjCoord of findAdjacentCoordsToXY(x, y)) { - const packedAdjCoord = packAsNum(adjCoord) + // Paths for exit groups - if (this.gridCoords[packedAdjCoord] > 0) continue - if (this.terrainCoords[packedAdjCoord] === 255) continue + for (const group of exitGroups) { + const path = customPathFinder.findPath({ + origin: new RoomPosition(group[0].x, group[0].y, this.room.name), + goals: [{ pos: anchor, range: 3 }], + weightCoordMaps: [this.weightedDiagonalCoords, this.gridCoords], + plainCost: defaultRoadPlanningPlainCost * 6, + swampCost: defaultSwampCost * 6, + }) - this.byPlannedRoad[packedAdjCoord] = 1 - } - } - } + for (const coord of path) { + const packedCoord = packAsNum(coord) + if (this.baseCoords[packedCoord] === 255) continue - this.finishedGrid = true - } - private pruneGridCoords() { - for (let x = 0; x < roomDimensions; x++) { - for (let y = 0; y < roomDimensions; y++) { - this.pruneGridXY(x, y) - } + if (terrain.get(coord.x, coord.y) === TERRAIN_MASK_SWAMP) { + this.gridCoords[packAsNum(coord)] = 2 * defaultSwampCost + continue } + this.gridCoords[packAsNum(coord)] = 2 + } } - private pruneGridXY(x: number, y: number) { - const packedCoord = packXYAsNum(x, y) - if (this.gridCoords[packedCoord] === 0) return - let adjNonGridCoords: Coord[] = [] - let adjGridCoords = 0 + this.pruneGridCoords() - for (const adjCoord of findAdjacentCoordsToXY(x, y)) { - const packedAdjCoord = packAsNum(adjCoord) + for (let x = 0; x < roomDimensions; x++) { + for (let y = 0; y < roomDimensions; y++) { + const packedCoord = packXYAsNum(x, y) + if (this.gridCoords[packedCoord] === 0) continue - if (this.gridCoords[packedAdjCoord] > 0) { - adjGridCoords += 1 - continue - } + for (const adjCoord of findAdjacentCoordsToXY(x, y)) { + const packedAdjCoord = packAsNum(adjCoord) - if (this.terrainCoords[packedAdjCoord] === 255) continue + if (this.gridCoords[packedAdjCoord] > 0) continue + if (this.terrainCoords[packedAdjCoord] === 255) continue - adjNonGridCoords.push(adjCoord) + this.byPlannedRoad[packedAdjCoord] = 1 } + } + } - if (adjGridCoords > 1) return - - // No reason to keep a coord that does nothing + this.finishedGrid = true + } + private pruneGridCoords() { + for (let x = 0; x < roomDimensions; x++) { + for (let y = 0; y < roomDimensions; y++) { + this.pruneGridXY(x, y) + } + } + } + private pruneGridXY(x: number, y: number) { + const packedCoord = packXYAsNum(x, y) + if (this.gridCoords[packedCoord] === 0) return - if (adjNonGridCoords.length <= 1) { - this.gridCoords[packedCoord] = 0 - return - } + let adjNonGridCoords: Coord[] = [] + let adjGridCoords = 0 - let noAltNonGridCoord: boolean + for (const adjCoord of findAdjacentCoordsToXY(x, y)) { + const packedAdjCoord = packAsNum(adjCoord) - for (const adjNonGridCoord of adjNonGridCoords) { - adjGridCoords = 0 + if (this.gridCoords[packedAdjCoord] > 0) { + adjGridCoords += 1 + continue + } - for (const adjCoord of findAdjacentCoordsToCoord(adjNonGridCoord)) { - if (this.gridCoords[packAsNum(adjCoord)] === 0) continue + if (this.terrainCoords[packedAdjCoord] === 255) continue - adjGridCoords += 1 - } + adjNonGridCoords.push(adjCoord) + } - if (adjGridCoords > 1) continue - if (noAltNonGridCoord) return + if (adjGridCoords > 1) return - noAltNonGridCoord = true - } + // No reason to keep a coord that does nothing - this.gridCoords[packedCoord] = 0 + if (adjNonGridCoords.length <= 1) { + this.gridCoords[packedCoord] = 0 + return } - /** - * - * @param coord - * @returns Result.action if the road should be removed - */ - private fastFillerPruneRoadCoord(coord: Coord) { - let adjSpawn: boolean - forAdjacentCoords(coord, adjCoord => { - const packedAdjCoord = packAsNum(adjCoord) - if (this.terrainCoords[packedAdjCoord] === 255) return - if (this.roadCoords[packedAdjCoord] !== 1 && this.gridCoords[packedAdjCoord] === 0) - this.byPlannedRoad[packedAdjCoord] = 1 + let noAltNonGridCoord: boolean - const coordData = this.basePlans.get(packCoord(adjCoord)) - if (!coordData) return + for (const adjNonGridCoord of adjNonGridCoords) { + adjGridCoords = 0 - if (coordData[0].structureType === STRUCTURE_SPAWN) adjSpawn = true - }) + for (const adjCoord of findAdjacentCoordsToCoord(adjNonGridCoord)) { + if (this.gridCoords[packAsNum(adjCoord)] === 0) continue - if (adjSpawn) return Result.noAction + adjGridCoords += 1 + } - let cardinalRoads = 0 + if (adjGridCoords > 1) continue + if (noAltNonGridCoord) return - for (const offset of cardinalOffsets) { - const adjCoord = { - x: offset.x + coord.x, - y: offset.y + coord.y, - } + noAltNonGridCoord = true + } - const packedAdjCoord = packAsNum(adjCoord) - if (this.roadCoords[packedAdjCoord] !== 1 && this.gridCoords[packedAdjCoord] === 0) - continue + this.gridCoords[packedCoord] = 0 + } + /** + * + * @param coord + * @returns Result.action if the road should be removed + */ + private fastFillerPruneRoadCoord(coord: Coord) { + let adjSpawn: boolean - cardinalRoads += 1 - } + forAdjacentCoords(coord, adjCoord => { + const packedAdjCoord = packAsNum(adjCoord) + if (this.terrainCoords[packedAdjCoord] === 255) return + if (this.roadCoords[packedAdjCoord] !== 1 && this.gridCoords[packedAdjCoord] === 0) + this.byPlannedRoad[packedAdjCoord] = 1 - if (cardinalRoads >= 3) return Result.action - return Result.noAction - } - /** - * Has some issues, is disabled - */ - private pruneFastFillerRoads() { - if (this.finishedFastFillerRoadPrune) return + const coordData = this.basePlans.get(packCoord(adjCoord)) + if (!coordData) return - const anchor = this.stampAnchors.fastFiller[0] + if (coordData[0].structureType === STRUCTURE_SPAWN) adjSpawn = true + }) - const rectCoords = findCoordsInsideRect( - anchor.x - stamps.fastFiller.offset, - anchor.y - stamps.fastFiller.offset, - anchor.x + stamps.fastFiller.offset, - anchor.y + stamps.fastFiller.offset, - ) + if (adjSpawn) return Result.noAction - for (const coord of rectCoords) { - const packedCoord = packAsNum(coord) - if (this.roadCoords[packedCoord] !== 1) continue + let cardinalRoads = 0 - if (this.fastFillerPruneRoadCoord(coord) === Result.action) { - this.roadCoords[packedCoord] = 0 - continue - } + for (const offset of cardinalOffsets) { + const adjCoord = { + x: offset.x + coord.x, + y: offset.y + coord.y, + } - this.setBasePlansXY(coord.x, coord.y, STRUCTURE_ROAD, 3) - this.roadCoords[packedCoord] = 1 - this.byPlannedRoad[packedCoord] = 0 - } + const packedAdjCoord = packAsNum(adjCoord) + if (this.roadCoords[packedAdjCoord] !== 1 && this.gridCoords[packedAdjCoord] === 0) continue - this.finishedFastFillerRoadPrune = true + cardinalRoads += 1 } - private avoidSources() { - if (this.markSourcesAvoid) return - for (const source of this.room.find(FIND_SOURCES)) { - forAdjacentCoords(source.pos, adjCoord => { - const packedCoord = packAsNum(adjCoord) - if (this.terrainCoords[packedCoord] === 255) return + if (cardinalRoads >= 3) return Result.action + return Result.noAction + } + /** + * Has some issues, is disabled + */ + private pruneFastFillerRoads() { + if (this.finishedFastFillerRoadPrune) return + + const anchor = this.stampAnchors.fastFiller[0] + + const rectCoords = findCoordsInsideRect( + anchor.x - stamps.fastFiller.offset, + anchor.y - stamps.fastFiller.offset, + anchor.x + stamps.fastFiller.offset, + anchor.y + stamps.fastFiller.offset, + ) + + for (const coord of rectCoords) { + const packedCoord = packAsNum(coord) + if (this.roadCoords[packedCoord] !== 1) continue + + if (this.fastFillerPruneRoadCoord(coord) === Result.action) { + this.roadCoords[packedCoord] = 0 + continue + } + + this.setBasePlansXY(coord.x, coord.y, STRUCTURE_ROAD, 3) + this.roadCoords[packedCoord] = 1 + this.byPlannedRoad[packedCoord] = 0 + } - this.baseCoords[packedCoord] = 255 - }) - } + this.finishedFastFillerRoadPrune = true + } + private avoidSources() { + if (this.markSourcesAvoid) return - this.markSourcesAvoid = true + for (const source of this.room.find(FIND_SOURCES)) { + forAdjacentCoords(source.pos, adjCoord => { + const packedCoord = packAsNum(adjCoord) + if (this.terrainCoords[packedCoord] === 255) return + + this.baseCoords[packedCoord] = 255 + }) } - private avoidMineral() { - if (this.mineralHarvestPositions) return - const mineralHarvestPositions: RoomPosition[] = [] - const mineralPos = this.room.roomManager.mineral.pos + this.markSourcesAvoid = true + } + private avoidMineral() { + if (this.mineralHarvestPositions) return - for (const offset of adjacentOffsets) { - const adjPos = new RoomPosition( - offset.x + mineralPos.x, - offset.y + mineralPos.y, - this.room.name, - ) + const mineralHarvestPositions: RoomPosition[] = [] + const mineralPos = this.room.roomManager.mineral.pos - const packedCoord = packAsNum(adjPos) - if (this.terrainCoords[packedCoord] === 255) continue + for (const offset of adjacentOffsets) { + const adjPos = new RoomPosition( + offset.x + mineralPos.x, + offset.y + mineralPos.y, + this.room.name, + ) - this.baseCoords[packedCoord] = 255 - mineralHarvestPositions.push(adjPos) - } + const packedCoord = packAsNum(adjPos) + if (this.terrainCoords[packedCoord] === 255) continue - this.mineralHarvestPositions = mineralHarvestPositions + this.baseCoords[packedCoord] = 255 + mineralHarvestPositions.push(adjPos) } - private postFastFillerConfig() { - if (this.communeSources) return - - const fastFillerPos = new RoomPosition( - this.stampAnchors.fastFiller[0].x, - this.stampAnchors.fastFiller[0].y, - this.room.name, - ) - const sources = this.room.find(FIND_SOURCES) - sortBy( - sources, - ({ pos }) => - customPathFinder.findPath({ - origin: pos, - goals: [ - { - pos: fastFillerPos, - range: 3, - }, - ], - weightCoordMaps: [this.diagonalCoords, this.roadCoords], - plainCost: defaultRoadPlanningPlainCost, - }).length, - ) - - for (const coord of findCoordsInRange(this.room.controller.pos, 2)) { - const packedCoord = packAsNum(coord) - this.baseCoords[packedCoord] = this.terrainCoords[packedCoord] - } - this.communeSources = sources + this.mineralHarvestPositions = mineralHarvestPositions + } + private postFastFillerConfig() { + if (this.communeSources) return + + const fastFillerPos = new RoomPosition( + this.stampAnchors.fastFiller[0].x, + this.stampAnchors.fastFiller[0].y, + this.room.name, + ) + const sources = this.room.find(FIND_SOURCES) + sortBy( + sources, + ({ pos }) => + customPathFinder.findPath({ + origin: pos, + goals: [ + { + pos: fastFillerPos, + range: 3, + }, + ], + weightCoordMaps: [this.diagonalCoords, this.roadCoords], + plainCost: defaultRoadPlanningPlainCost, + }).length, + ) + + for (const coord of findCoordsInRange(this.room.controller.pos, 2)) { + const packedCoord = packAsNum(coord) + this.baseCoords[packedCoord] = this.terrainCoords[packedCoord] } - private findSourceHarvestPositions() { - if (this.sourceHarvestPositions) return - const fastFillerAnchor = new RoomPosition( - this.stampAnchors.fastFiller[0].x, - this.stampAnchors.fastFiller[0].y, - this.room.name, - ) + this.communeSources = sources + } + private findSourceHarvestPositions() { + if (this.sourceHarvestPositions) return - const sourceHarvestPositions: RoomPosition[][] = [] + const fastFillerAnchor = new RoomPosition( + this.stampAnchors.fastFiller[0].x, + this.stampAnchors.fastFiller[0].y, + this.room.name, + ) - for (const i in this.communeSources) { - sourceHarvestPositions.push([]) + const sourceHarvestPositions: RoomPosition[][] = [] - const sourcePos = this.communeSources[i].pos - for (const offset of adjacentOffsets) { - const adjPos = new RoomPosition( - offset.x + sourcePos.x, - offset.y + sourcePos.y, - this.room.name, - ) - const packedCoord = packAsNum(adjPos) + for (const i in this.communeSources) { + sourceHarvestPositions.push([]) - if (this.terrainCoords[packedCoord] === 255) continue - if (this.baseCoords[packedCoord] !== 255) continue + const sourcePos = this.communeSources[i].pos + for (const offset of adjacentOffsets) { + const adjPos = new RoomPosition( + offset.x + sourcePos.x, + offset.y + sourcePos.y, + this.room.name, + ) + const packedCoord = packAsNum(adjPos) - this.baseCoords[packedCoord] = 0 - sourceHarvestPositions[i].push(adjPos) - } - /* + if (this.terrainCoords[packedCoord] === 255) continue + if (this.baseCoords[packedCoord] !== 255) continue + + this.baseCoords[packedCoord] = 0 + sourceHarvestPositions[i].push(adjPos) + } + /* // Remove source harvest positions overlapping with upgrade positions or other source harvest positions // Loop through each pos index @@ -976,149 +972,149 @@ export class RemotePlanner { sourceHarvestPositions.splice(j, 1) } */ - sortBy( - sourceHarvestPositions[i], - origin => - customPathFinder.findPath({ - origin, - goals: [ - { - pos: fastFillerAnchor, - range: 3, - }, - ], - weightCoordMaps: [this.diagonalCoords, this.roadCoords], - plainCost: defaultRoadPlanningPlainCost, - }).length, - ) - - const closestHarvestPos = sourceHarvestPositions[i][0] - - if (!closestHarvestPos) { - throw Error('no closest harvest pos ' + this.room.name) - } - - this.setBasePlansXY(closestHarvestPos.x, closestHarvestPos.y, STRUCTURE_CONTAINER, 3) - const packedCoord = packAsNum(closestHarvestPos) - this.roadCoords[packedCoord] = 20 - this.baseCoords[packedCoord] = 255 - } - - for (const i in this.communeSources) { - const origin = sourceHarvestPositions[i][0] - - const path = customPathFinder.findPath({ - origin: origin, - goals: [ - { - pos: fastFillerAnchor, - range: 3, - }, - ], - weightCoordMaps: [this.diagonalCoords, this.roadCoords], - plainCost: defaultRoadPlanningPlainCost * 2, - swampCost: defaultSwampCost * 2, - }) - - let j = 0 - let pos = path[j] - while (pos && getRange(pos, this.communeSources[i].pos) <= 2) { - this.baseCoords[packAsNum(pos)] = 255 - - j += 1 - pos = path[j] - } - } - - this.sourceHarvestPositions = sourceHarvestPositions - } - private mineral() { - if (this.mineralPath) return - - const goal = new RoomPosition( - this.stampAnchors.hub[0].x, - this.stampAnchors.hub[0].y, - this.room.name, - ) - - sortBy( - this.mineralHarvestPositions, - origin => - customPathFinder.findPath({ - origin, - goals: [ - { - pos: goal, - range: 3, - }, - ], - weightCoordMaps: [this.diagonalCoords, this.roadCoords], - plainCost: defaultRoadPlanningPlainCost, - }).length, - ) - - const path = customPathFinder.findPath({ - origin: this.mineralHarvestPositions[0], - goals: [{ pos: goal, range: 1 }], + sortBy( + sourceHarvestPositions[i], + origin => + customPathFinder.findPath({ + origin, + goals: [ + { + pos: fastFillerAnchor, + range: 3, + }, + ], weightCoordMaps: [this.diagonalCoords, this.roadCoords], - plainCost: defaultRoadPlanningPlainCost * 2, - swampCost: defaultSwampCost * 2, - }) - - for (const pos of path) { - this.roadCoords[packAsNum(pos)] = 1 - this.setBasePlansXY(pos.x, pos.y, STRUCTURE_ROAD, 6) - } - - const closestMineralHarvestPos = this.mineralHarvestPositions[0] + plainCost: defaultRoadPlanningPlainCost, + }).length, + ) - this.setBasePlansXY( - closestMineralHarvestPos.x, - closestMineralHarvestPos.y, - STRUCTURE_CONTAINER, - 6, - ) - const packedCoord = packAsNum(closestMineralHarvestPos) - this.roadCoords[packedCoord] = 20 - this.baseCoords[packedCoord] = 255 + const closestHarvestPos = sourceHarvestPositions[i][0] - const mineralPos = this.room.roomManager.mineral.pos - this.setBasePlansXY(mineralPos.x, mineralPos.y, STRUCTURE_EXTRACTOR, 6) + if (!closestHarvestPos) { + throw Error('no closest harvest pos ' + this.room.name) + } - this.mineralHarvestPositions = this.mineralHarvestPositions.filter(pos => { - return getRange(closestMineralHarvestPos, pos) <= 1 - }) + this.setBasePlansXY(closestHarvestPos.x, closestHarvestPos.y, STRUCTURE_CONTAINER, 3) + const packedCoord = packAsNum(closestHarvestPos) + this.roadCoords[packedCoord] = 20 + this.baseCoords[packedCoord] = 255 + } - this.mineralPath = path + for (const i in this.communeSources) { + const origin = sourceHarvestPositions[i][0] + + const path = customPathFinder.findPath({ + origin: origin, + goals: [ + { + pos: fastFillerAnchor, + range: 3, + }, + ], + weightCoordMaps: [this.diagonalCoords, this.roadCoords], + plainCost: defaultRoadPlanningPlainCost * 2, + swampCost: defaultSwampCost * 2, + }) + + let j = 0 + let pos = path[j] + while (pos && getRange(pos, this.communeSources[i].pos) <= 2) { + this.baseCoords[packAsNum(pos)] = 255 + + j += 1 + pos = path[j] + } } - private sourceStructures() { - if (this.sourceStructureCoords) return - this.stampAnchors.sourceExtension = [] + this.sourceHarvestPositions = sourceHarvestPositions + } + private mineral() { + if (this.mineralPath) return + + const goal = new RoomPosition( + this.stampAnchors.hub[0].x, + this.stampAnchors.hub[0].y, + this.room.name, + ) + + sortBy( + this.mineralHarvestPositions, + origin => + customPathFinder.findPath({ + origin, + goals: [ + { + pos: goal, + range: 3, + }, + ], + weightCoordMaps: [this.diagonalCoords, this.roadCoords], + plainCost: defaultRoadPlanningPlainCost, + }).length, + ) + + const path = customPathFinder.findPath({ + origin: this.mineralHarvestPositions[0], + goals: [{ pos: goal, range: 1 }], + weightCoordMaps: [this.diagonalCoords, this.roadCoords], + plainCost: defaultRoadPlanningPlainCost * 2, + swampCost: defaultSwampCost * 2, + }) + + for (const pos of path) { + this.roadCoords[packAsNum(pos)] = 1 + this.setBasePlansXY(pos.x, pos.y, STRUCTURE_ROAD, 6) + } - const fastFillerAnchor = new RoomPosition( - this.stampAnchors.fastFiller[0].x, - this.stampAnchors.fastFiller[0].y, - this.room.name, - ) - const avoidCoords: Set = new Set() - - for (let i = 0; i < this.sourceHarvestPositions.length; i++) { - const closestHarvestPos = this.sourceHarvestPositions[i][0] - - const path = customPathFinder.findPath({ - origin: closestHarvestPos, - goals: [ - { - pos: fastFillerAnchor, - range: 3, - }, - ], - weightCoordMaps: [this.diagonalCoords, this.roadCoords], - plainCost: defaultRoadPlanningPlainCost * 2, - swampCost: defaultSwampCost * 2, - }) - /* + const closestMineralHarvestPos = this.mineralHarvestPositions[0] + + this.setBasePlansXY( + closestMineralHarvestPos.x, + closestMineralHarvestPos.y, + STRUCTURE_CONTAINER, + 6, + ) + const packedCoord = packAsNum(closestMineralHarvestPos) + this.roadCoords[packedCoord] = 20 + this.baseCoords[packedCoord] = 255 + + const mineralPos = this.room.roomManager.mineral.pos + this.setBasePlansXY(mineralPos.x, mineralPos.y, STRUCTURE_EXTRACTOR, 6) + + this.mineralHarvestPositions = this.mineralHarvestPositions.filter(pos => { + return getRange(closestMineralHarvestPos, pos) <= 1 + }) + + this.mineralPath = path + } + private sourceStructures() { + if (this.sourceStructureCoords) return + + this.stampAnchors.sourceExtension = [] + + const fastFillerAnchor = new RoomPosition( + this.stampAnchors.fastFiller[0].x, + this.stampAnchors.fastFiller[0].y, + this.room.name, + ) + const avoidCoords: Set = new Set() + + for (let i = 0; i < this.sourceHarvestPositions.length; i++) { + const closestHarvestPos = this.sourceHarvestPositions[i][0] + + const path = customPathFinder.findPath({ + origin: closestHarvestPos, + goals: [ + { + pos: fastFillerAnchor, + range: 3, + }, + ], + weightCoordMaps: [this.diagonalCoords, this.roadCoords], + plainCost: defaultRoadPlanningPlainCost * 2, + swampCost: defaultSwampCost * 2, + }) + /* // Temporary fix if (!path.length) { @@ -1127,968 +1123,963 @@ export class RemotePlanner { return } */ - for (const pos of path) { - avoidCoords.add(packAsNum(pos)) - this.room.coordVisual(pos.x, pos.y) - } - } - - const sourceStructureCoords: Coord[][] = [] + for (const pos of path) { + avoidCoords.add(packAsNum(pos)) + this.room.coordVisual(pos.x, pos.y) + } + } - for (let i = 0; i < this.sourceHarvestPositions.length; i++) { - const closestHarvestPos = this.sourceHarvestPositions[i][0] + const sourceStructureCoords: Coord[][] = [] - sourceStructureCoords.push([]) + for (let i = 0; i < this.sourceHarvestPositions.length; i++) { + const closestHarvestPos = this.sourceHarvestPositions[i][0] - forAdjacentCoords(closestHarvestPos, adjCoord => { - const packedAdjCoord = packAsNum(adjCoord) + sourceStructureCoords.push([]) - if (avoidCoords.has(packedAdjCoord)) return - if (this.baseCoords[packedAdjCoord] === 255) return - if (this.roadCoords[packedAdjCoord] > 0) return + forAdjacentCoords(closestHarvestPos, adjCoord => { + const packedAdjCoord = packAsNum(adjCoord) - sourceStructureCoords[i].push(adjCoord) - this.baseCoords[packedAdjCoord] = 255 - this.roadCoords[packedAdjCoord] = 255 - }) + if (avoidCoords.has(packedAdjCoord)) return + if (this.baseCoords[packedAdjCoord] === 255) return + if (this.roadCoords[packedAdjCoord] > 0) return - this.stampAnchors.sourceExtension = this.stampAnchors.sourceExtension.concat( - sourceStructureCoords[i], - ) - this.stampAnchors.sourceExtension.pop() - } + sourceStructureCoords[i].push(adjCoord) + this.baseCoords[packedAdjCoord] = 255 + this.roadCoords[packedAdjCoord] = 255 + }) - this.sourceStructureCoords = sourceStructureCoords + this.stampAnchors.sourceExtension = this.stampAnchors.sourceExtension.concat( + sourceStructureCoords[i], + ) + this.stampAnchors.sourceExtension.pop() } - private planSourceStructures() { - if (this.stampAnchors.sourceLink.length) return - const sourceLinkCoords: Coord[] = [] - const sourceExtensionCoords: Coord[] = [] - const hubAnchor = this.stampAnchors.hub[0] + this.sourceStructureCoords = sourceStructureCoords + } + private planSourceStructures() { + if (this.stampAnchors.sourceLink.length) return - for (let i = 0; i < this.sourceStructureCoords.length; i++) { - let closestCoordIndex: number - let closestRange = Infinity + const sourceLinkCoords: Coord[] = [] + const sourceExtensionCoords: Coord[] = [] + const hubAnchor = this.stampAnchors.hub[0] - for (let j = this.sourceStructureCoords[i].length - 1; j >= 0; j--) { - const coord = this.sourceStructureCoords[i][j] - const packedCoord = packAsNum(coord) + for (let i = 0; i < this.sourceStructureCoords.length; i++) { + let closestCoordIndex: number + let closestRange = Infinity - if (this.minCutCoords.has(packedCoord)) { - this.roadCoords[packedCoord] = 0 - continue - } - - const range = getRange(hubAnchor, coord) - if (range >= closestRange) continue + for (let j = this.sourceStructureCoords[i].length - 1; j >= 0; j--) { + const coord = this.sourceStructureCoords[i][j] + const packedCoord = packAsNum(coord) - closestCoordIndex = j - closestRange = range - } + if (this.minCutCoords.has(packedCoord)) { + this.roadCoords[packedCoord] = 0 + continue + } - if (!closestCoordIndex) continue + const range = getRange(hubAnchor, coord) + if (range >= closestRange) continue - const closestCoord = this.sourceStructureCoords[i][closestCoordIndex] - this.sourceStructureCoords[i].splice(closestCoordIndex, 1) + closestCoordIndex = j + closestRange = range + } - sourceLinkCoords.push(closestCoord) + if (!closestCoordIndex) continue - const packedCoord = packAsNum(closestCoord) - this.baseCoords[packedCoord] = 255 - this.roadCoords[packedCoord] = 255 + const closestCoord = this.sourceStructureCoords[i][closestCoordIndex] + this.sourceStructureCoords[i].splice(closestCoordIndex, 1) - for (const coord of this.sourceStructureCoords[i]) { - const packedCoord = packAsNum(coord) - if (this.minCutCoords.has(packedCoord)) { - this.roadCoords[packedCoord] = 0 - continue - } + sourceLinkCoords.push(closestCoord) - sourceExtensionCoords.push(coord) - this.setBasePlansXY(coord.x, coord.y, STRUCTURE_EXTENSION) + const packedCoord = packAsNum(closestCoord) + this.baseCoords[packedCoord] = 255 + this.roadCoords[packedCoord] = 255 - this.baseCoords[packedCoord] = 255 - this.roadCoords[packedCoord] = 255 - } + for (const coord of this.sourceStructureCoords[i]) { + const packedCoord = packAsNum(coord) + if (this.minCutCoords.has(packedCoord)) { + this.roadCoords[packedCoord] = 0 + continue } - sourceLinkCoords.reverse() - for (const coord of sourceLinkCoords) { - this.setBasePlansXY(coord.x, coord.y, STRUCTURE_LINK) - } + sourceExtensionCoords.push(coord) + this.setBasePlansXY(coord.x, coord.y, STRUCTURE_EXTENSION) - this.stampAnchors.sourceExtension = sourceExtensionCoords - this.stampAnchors.sourceLink = sourceLinkCoords + this.baseCoords[packedCoord] = 255 + this.roadCoords[packedCoord] = 255 + } } - private findCenterUpgradePos() { - if (this.centerUpgradePos) return false - const controllerPos = this.room.controller.pos - let bestCoords: Set = new Set() - let bestScore = 0 + sourceLinkCoords.reverse() + for (const coord of sourceLinkCoords) { + this.setBasePlansXY(coord.x, coord.y, STRUCTURE_LINK) + } - forCoordsAroundRange(controllerPos, 2, coord => { - const packedCoord = packAsNum(coord) - if (this.roadCoords[packAsNum(coord)] > 0) return + this.stampAnchors.sourceExtension = sourceExtensionCoords + this.stampAnchors.sourceLink = sourceLinkCoords + } + private findCenterUpgradePos() { + if (this.centerUpgradePos) return false + const controllerPos = this.room.controller.pos + + let bestCoords: Set = new Set() + let bestScore = 0 + + forCoordsAroundRange(controllerPos, 2, coord => { + const packedCoord = packAsNum(coord) + if (this.roadCoords[packAsNum(coord)] > 0) return + + let score = 0 + + forAdjacentCoords(coord, adjCoord => { + if (this.roadCoords[packAsNum(adjCoord)] > 0) return + + score += 1 + }) + + if (score > bestScore) { + bestCoords = new Set([packedCoord]) + bestScore = score + return + } + if (score === bestScore) { + bestCoords.add(packedCoord) + return + } + }) + + if (!bestCoords.size) return Result.fail + + const centerUpgradePos = this.room.findClosestPos({ + coordMap: this.roadCoords, + sources: [this.stampAnchors.fastFiller[0]], + targetCondition: coord => { + return bestCoords.has(packAsNum(coord)) + }, + }) + + if (!centerUpgradePos) return Result.fail + + const packedCoord = packAsNum(centerUpgradePos) + this.setBasePlansXY(centerUpgradePos.x, centerUpgradePos.y, STRUCTURE_CONTAINER, 2) + this.setBasePlansXY(centerUpgradePos.x, centerUpgradePos.y, STRUCTURE_LINK) + + forCoordsAroundRange(centerUpgradePos, 1, adjCoord => { + const packedAdjCoord = packAsNum(adjCoord) + this.baseCoords[packedAdjCoord] = 255 + this.roadCoords[packedAdjCoord] = 20 + }) + + this.roadCoords[packedCoord] = 255 + this.baseCoords[packedCoord] = 255 + + this.centerUpgradePos = centerUpgradePos + return Result.success + } + private planGridCoords() { + if (this.plannedGridCoords) return + + for (let x = 0; x < roomDimensions; x++) { + for (let y = 0; y < roomDimensions; y++) { + const packedCoord = packXYAsNum(x, y) + if (this.gridCoords[packedCoord] === 0) continue + if (this.roadCoords[packedCoord] === 1) continue + if (this.baseCoords[packedCoord] === 255) continue - let score = 0 + let minRCL = Infinity - forAdjacentCoords(coord, adjCoord => { - if (this.roadCoords[packAsNum(adjCoord)] > 0) return + forAdjacentCoords({ x: x, y: y }, adjCoord => { + const coordData = this.basePlans.get(packCoord(adjCoord)) + if (!coordData) return + if (coordData[0].structureType === STRUCTURE_ROAD) return - score += 1 - }) + const RCL = coordData[0].minRCL + if (RCL >= minRCL) return - if (score > bestScore) { - bestCoords = new Set([packedCoord]) - bestScore = score - return - } - if (score === bestScore) { - bestCoords.add(packedCoord) - return - } + minRCL = RCL }) - if (!bestCoords.size) return Result.fail - - const centerUpgradePos = this.room.findClosestPos({ - coordMap: this.roadCoords, - sources: [this.stampAnchors.fastFiller[0]], - targetCondition: coord => { - return bestCoords.has(packAsNum(coord)) - }, - }) + if (minRCL === Infinity) continue - if (!centerUpgradePos) return Result.fail + this.setBasePlansXY(x, y, STRUCTURE_ROAD, minRCL) + this.roadCoords[packedCoord] = 1 + } + } - const packedCoord = packAsNum(centerUpgradePos) - this.setBasePlansXY(centerUpgradePos.x, centerUpgradePos.y, STRUCTURE_CONTAINER, 2) - this.setBasePlansXY(centerUpgradePos.x, centerUpgradePos.y, STRUCTURE_LINK) + this.plannedGridCoords = true + } + private flipStructuresVertical(stamp: Stamp) { + const flippedStructures: Partial<{ [key in StructureConstant]: Coord[] }> = {} + + for (const structureType in stamp.structures) { + const coords = stamp.structures[structureType] + flippedStructures[structureType as StructureConstant] = coords.map(coord => ({ + x: coord.x, + y: stamp.size + stamp.offset - coord.y - 1, + })) + } - forCoordsAroundRange(centerUpgradePos, 1, adjCoord => { - const packedAdjCoord = packAsNum(adjCoord) - this.baseCoords[packedAdjCoord] = 255 - this.roadCoords[packedAdjCoord] = 20 - }) + return flippedStructures + } - this.roadCoords[packedCoord] = 255 - this.baseCoords[packedCoord] = 255 + private flipStructuresHorizontal(stamp: Stamp) { + const flippedStructures: Partial<{ [key in StructureConstant]: Coord[] }> = {} - this.centerUpgradePos = centerUpgradePos - return Result.success + for (const structureType in stamp.structures) { + const coords = stamp.structures[structureType] + flippedStructures[structureType as StructureConstant] = coords.map(coord => ({ + x: stamp.size + stamp.offset - coord.x - 1, + y: coord.y, + })) } - private planGridCoords() { - if (this.plannedGridCoords) return - for (let x = 0; x < roomDimensions; x++) { - for (let y = 0; y < roomDimensions; y++) { - const packedCoord = packXYAsNum(x, y) - if (this.gridCoords[packedCoord] === 0) continue - if (this.roadCoords[packedCoord] === 1) continue - if (this.baseCoords[packedCoord] === 255) continue + return flippedStructures + } + private planStamps(args: PlanStampsArgs) { + if (!args.coordMap) args.coordMap = this.baseCoords - let minRCL = Infinity + const stamp = stamps[args.stampType] - forAdjacentCoords({ x: x, y: y }, adjCoord => { - const coordData = this.basePlans.get(packCoord(adjCoord)) - if (!coordData) return - if (coordData[0].structureType === STRUCTURE_ROAD) return + args.count -= this.stampAnchors[args.stampType].length - const RCL = coordData[0].minRCL - if (RCL >= minRCL) return + for (; args.count > 0; args.count -= 1) { + let stampAnchor: Coord | false - minRCL = RCL - }) + if (args.dynamic) { + if (args.weighted) { + stampAnchor = this.findDynamicStampAnchorWeighted({ + stamp, + startCoords: args.startCoords, + conditions: args.conditions, + dynamicWeight: args.dynamicWeight, + }) + if (!stampAnchor) return Result.fail - if (minRCL === Infinity) continue + args.consequence(stampAnchor) + this.stampAnchors[args.stampType].push(stampAnchor) - this.setBasePlansXY(x, y, STRUCTURE_ROAD, minRCL) - this.roadCoords[packedCoord] = 1 - } + continue } + stampAnchor = this.findDynamicStampAnchor({ + stamp, + startCoords: args.startCoords, + conditions: args.conditions, + }) + if (!stampAnchor) return Result.fail - this.plannedGridCoords = true - } - private flipStructuresVertical(stamp: Stamp) { - const flippedStructures: Partial<{ [key in StructureConstant]: Coord[] }> = {} + args.consequence(stampAnchor) + this.stampAnchors[args.stampType].push(stampAnchor) - for (const structureType in stamp.structures) { - const coords = stamp.structures[structureType] - flippedStructures[structureType as StructureConstant] = coords.map(coord => ({ - x: coord.x, - y: stamp.size + stamp.offset - coord.y - 1, - })) - } + continue + } - return flippedStructures - } + // Not dynamic - private flipStructuresHorizontal(stamp: Stamp) { - const flippedStructures: Partial<{ [key in StructureConstant]: Coord[] }> = {} + // Run distance transform with the baseCM - for (const structureType in stamp.structures) { - const coords = stamp.structures[structureType] - flippedStructures[structureType as StructureConstant] = coords.map(coord => ({ - x: stamp.size + stamp.offset - coord.x - 1, - y: coord.y, - })) - } + const distanceCoords = args.diagonalDT + ? this.room.diagonalDistanceTransform(args.coordMap, false, args.minAvoid) + : this.room.distanceTransform(args.coordMap, false, args.minAvoid) + + stampAnchor = this.findStampAnchor({ + stamp, + startCoords: args.startCoords, + cardinalFlood: args.cardinalFlood, + coordMap: distanceCoords, + }) + if (!stampAnchor) return Result.fail - return flippedStructures + args.consequence(stampAnchor) + this.stampAnchors[args.stampType].push(stampAnchor) } - private planStamps(args: PlanStampsArgs) { - if (!args.coordMap) args.coordMap = this.baseCoords - const stamp = stamps[args.stampType] + return Result.success + } + private findStampAnchor(args: FindStampAnchorArgs) { + let visitedCoords = new Uint8Array(2500) + for (const coord of args.startCoords) visitedCoords[packAsNum(coord)] = 1 - args.count -= this.stampAnchors[args.stampType].length + let thisGeneration = args.startCoords + let nextGeneration: Coord[] - for (; args.count > 0; args.count -= 1) { - let stampAnchor: Coord | false + while (thisGeneration.length) { + nextGeneration = [] - if (args.dynamic) { - if (args.weighted) { - stampAnchor = this.findDynamicStampAnchorWeighted({ - stamp, - startCoords: args.startCoords, - conditions: args.conditions, - dynamicWeight: args.dynamicWeight, - }) - if (!stampAnchor) return Result.fail + let localVisitedCoords = new Uint8Array(visitedCoords) - args.consequence(stampAnchor) - this.stampAnchors[args.stampType].push(stampAnchor) + // Flood cardinal directions, excluding impassibles - continue - } - stampAnchor = this.findDynamicStampAnchor({ - stamp, - startCoords: args.startCoords, - conditions: args.conditions, - }) - if (!stampAnchor) return Result.fail + if (args.cardinalFlood) { + // Iterate through positions of this gen - args.consequence(stampAnchor) - this.stampAnchors[args.stampType].push(stampAnchor) + for (const coord1 of thisGeneration) { + if (this.isViableStampAnchor(args, coord1)) return coord1 - continue - } + // Add viable adjacent coords to the next generation - // Not dynamic + for (const offset of cardinalOffsets) { + const coord2 = { + x: coord1.x + offset.x, + y: coord1.y + offset.y, + } - // Run distance transform with the baseCM + if (!isXYInRoom(coord2.x, coord2.y)) continue - const distanceCoords = args.diagonalDT - ? this.room.diagonalDistanceTransform(args.coordMap, false, args.minAvoid) - : this.room.distanceTransform(args.coordMap, false, args.minAvoid) + if (localVisitedCoords[packAsNum(coord2)] === 1) continue + localVisitedCoords[packAsNum(coord2)] = 1 - stampAnchor = this.findStampAnchor({ - stamp, - startCoords: args.startCoords, - cardinalFlood: args.cardinalFlood, - coordMap: distanceCoords, - }) - if (!stampAnchor) return Result.fail + if (args.coordMap[packAsNum(coord2)] === 0) continue - args.consequence(stampAnchor) - this.stampAnchors[args.stampType].push(stampAnchor) + nextGeneration.push(coord2) + } } + } - return Result.success - } - private findStampAnchor(args: FindStampAnchorArgs) { - let visitedCoords = new Uint8Array(2500) - for (const coord of args.startCoords) visitedCoords[packAsNum(coord)] = 1 + // Flood all adjacent positions - let thisGeneration = args.startCoords - let nextGeneration: Coord[] + if (!nextGeneration.length) { + localVisitedCoords = new Uint8Array(visitedCoords) - while (thisGeneration.length) { - nextGeneration = [] + // Iterate through positions of this gen - let localVisitedCoords = new Uint8Array(visitedCoords) + for (const coord1 of thisGeneration) { + if (this.isViableStampAnchor(args, coord1)) return coord1 - // Flood cardinal directions, excluding impassibles + // Add viable adjacent coords to the next generation - if (args.cardinalFlood) { - // Iterate through positions of this gen + for (const offset of adjacentOffsets) { + const coord2 = { + x: coord1.x + offset.x, + y: coord1.y + offset.y, + } - for (const coord1 of thisGeneration) { - if (this.isViableStampAnchor(args, coord1)) return coord1 + if (!isXYInRoom(coord2.x, coord2.y)) continue - // Add viable adjacent coords to the next generation + if (localVisitedCoords[packAsNum(coord2)] === 1) continue + localVisitedCoords[packAsNum(coord2)] = 1 - for (const offset of cardinalOffsets) { - const coord2 = { - x: coord1.x + offset.x, - y: coord1.y + offset.y, - } + if (args.coordMap[packAsNum(coord2)] === 0) continue - if (!isXYInRoom(coord2.x, coord2.y)) continue + nextGeneration.push(coord2) + } + } + } - if (localVisitedCoords[packAsNum(coord2)] === 1) continue - localVisitedCoords[packAsNum(coord2)] = 1 + // Flood all adjacent positions, including diagonals - if (args.coordMap[packAsNum(coord2)] === 0) continue + if (!nextGeneration.length) { + localVisitedCoords = new Uint8Array(visitedCoords) - nextGeneration.push(coord2) - } - } - } + // Iterate through positions of this gen - // Flood all adjacent positions + for (const coord1 of thisGeneration) { + if (this.isViableStampAnchor(args, coord1)) return coord1 - if (!nextGeneration.length) { - localVisitedCoords = new Uint8Array(visitedCoords) + // Add viable adjacent coords to the next generation - // Iterate through positions of this gen + for (const offset of adjacentOffsets) { + const coord2 = { + x: coord1.x + offset.x, + y: coord1.y + offset.y, + } - for (const coord1 of thisGeneration) { - if (this.isViableStampAnchor(args, coord1)) return coord1 + if (!isXYInRoom(coord2.x, coord2.y)) continue - // Add viable adjacent coords to the next generation + if (localVisitedCoords[packAsNum(coord2)] === 1) continue + localVisitedCoords[packAsNum(coord2)] = 1 - for (const offset of adjacentOffsets) { - const coord2 = { - x: coord1.x + offset.x, - y: coord1.y + offset.y, - } + nextGeneration.push(coord2) + } + } + } - if (!isXYInRoom(coord2.x, coord2.y)) continue + // Set this gen to next gen - if (localVisitedCoords[packAsNum(coord2)] === 1) continue - localVisitedCoords[packAsNum(coord2)] = 1 + visitedCoords = new Uint8Array(localVisitedCoords) + thisGeneration = nextGeneration + } - if (args.coordMap[packAsNum(coord2)] === 0) continue + // No stampAnchor was found - nextGeneration.push(coord2) - } - } - } + return false + } + private isViableStampAnchor(args: FindStampAnchorArgs, coord1: Coord) { + // Get the value of the pos - // Flood all adjacent positions, including diagonals + const posValue = args.coordMap[packAsNum(coord1)] + if (posValue === 255) return false + if (posValue === 0) return false + if (posValue < args.stamp.size) return false + if (this.isCloseToExit(coord1, args.stamp.protectionOffset + 1)) return false + return true + } + private findDynamicStampAnchor(args: FindDynamicStampAnchorArgs) { + let visitedCoords = new Uint8Array(2500) + for (const coord of args.startCoords) visitedCoords[packAsNum(coord)] = 1 - if (!nextGeneration.length) { - localVisitedCoords = new Uint8Array(visitedCoords) + let thisGeneration = args.startCoords + let nextGeneration: Coord[] - // Iterate through positions of this gen + while (thisGeneration.length) { + nextGeneration = [] - for (const coord1 of thisGeneration) { - if (this.isViableStampAnchor(args, coord1)) return coord1 + let localVisitedCoords = new Uint8Array(visitedCoords) - // Add viable adjacent coords to the next generation + // Flood all adjacent positions - for (const offset of adjacentOffsets) { - const coord2 = { - x: coord1.x + offset.x, - y: coord1.y + offset.y, - } + if (!nextGeneration.length) { + localVisitedCoords = new Uint8Array(visitedCoords) - if (!isXYInRoom(coord2.x, coord2.y)) continue + // Iterate through positions of this gen - if (localVisitedCoords[packAsNum(coord2)] === 1) continue - localVisitedCoords[packAsNum(coord2)] = 1 + for (const coord1 of thisGeneration) { + if (this.isViableDynamicStampAnchor(args, coord1)) return coord1 - nextGeneration.push(coord2) - } - } + // Add viable adjacent coords to the next generation + + for (const offset of adjacentOffsets) { + const coord2 = { + x: coord1.x + offset.x, + y: coord1.y + offset.y, } - // Set this gen to next gen + if (!isXYInRoom(coord2.x, coord2.y)) continue + + if (localVisitedCoords[packAsNum(coord2)] === 1) continue + localVisitedCoords[packAsNum(coord2)] = 1 - visitedCoords = new Uint8Array(localVisitedCoords) - thisGeneration = nextGeneration + if (this.baseCoords[packAsNum(coord2)] === 255) continue + + nextGeneration.push(coord2) + } } + } - // No stampAnchor was found + // Flood all adjacent positions, including diagonals - return false - } - private isViableStampAnchor(args: FindStampAnchorArgs, coord1: Coord) { - // Get the value of the pos + if (!nextGeneration.length) { + localVisitedCoords = new Uint8Array(visitedCoords) - const posValue = args.coordMap[packAsNum(coord1)] - if (posValue === 255) return false - if (posValue === 0) return false - if (posValue < args.stamp.size) return false - if (this.isCloseToExit(coord1, args.stamp.protectionOffset + 1)) return false - return true - } - private findDynamicStampAnchor(args: FindDynamicStampAnchorArgs) { - let visitedCoords = new Uint8Array(2500) - for (const coord of args.startCoords) visitedCoords[packAsNum(coord)] = 1 + // Iterate through positions of this gen - let thisGeneration = args.startCoords - let nextGeneration: Coord[] + for (const coord1 of thisGeneration) { + if (this.isViableDynamicStampAnchor(args, coord1)) return coord1 - while (thisGeneration.length) { - nextGeneration = [] + // Add viable adjacent coords to the next generation - let localVisitedCoords = new Uint8Array(visitedCoords) + for (const offset of adjacentOffsets) { + const coord2 = { + x: coord1.x + offset.x, + y: coord1.y + offset.y, + } - // Flood all adjacent positions + if (!isXYInRoom(coord2.x, coord2.y)) continue - if (!nextGeneration.length) { - localVisitedCoords = new Uint8Array(visitedCoords) + if (localVisitedCoords[packAsNum(coord2)] === 1) continue + localVisitedCoords[packAsNum(coord2)] = 1 - // Iterate through positions of this gen + nextGeneration.push(coord2) + } + } + } - for (const coord1 of thisGeneration) { - if (this.isViableDynamicStampAnchor(args, coord1)) return coord1 + // Set this gen to next gen - // Add viable adjacent coords to the next generation + visitedCoords = new Uint8Array(localVisitedCoords) + thisGeneration = nextGeneration + } - for (const offset of adjacentOffsets) { - const coord2 = { - x: coord1.x + offset.x, - y: coord1.y + offset.y, - } + // No stampAnchor was found - if (!isXYInRoom(coord2.x, coord2.y)) continue + return false + } + private findDynamicStampAnchorWeighted(args: FindDynamicStampAnchorWeightedArgs) { + let visitedCoords = new Uint8Array(2500) + for (const coord of args.startCoords) visitedCoords[packAsNum(coord)] = 1 - if (localVisitedCoords[packAsNum(coord2)] === 1) continue - localVisitedCoords[packAsNum(coord2)] = 1 + let fromOrigin = new Uint8Array(2500) + let lowestNextGenCost = Infinity + let thisGeneration = args.startCoords + let nextGeneration: Coord[] - if (this.baseCoords[packAsNum(coord2)] === 255) continue + while (thisGeneration.length) { + nextGeneration = [] + let lowestGenCost = lowestNextGenCost + lowestNextGenCost = Infinity - nextGeneration.push(coord2) - } - } - } + let localVisitedCoords = new Uint8Array(visitedCoords) - // Flood all adjacent positions, including diagonals + // Flood adjacent coords that are passible - if (!nextGeneration.length) { - localVisitedCoords = new Uint8Array(visitedCoords) + for (const coord of thisGeneration) { + const packedCoord = packAsNum(coord) + const coordCostFromOrigin = fromOrigin[packedCoord] + const coordCost = args.dynamicWeight[packedCoord] + coordCostFromOrigin - // Iterate through positions of this gen + if (coordCost > lowestGenCost) { + nextGeneration.push(coord) + continue + } - for (const coord1 of thisGeneration) { - if (this.isViableDynamicStampAnchor(args, coord1)) return coord1 + if (this.isViableDynamicStampAnchor(args, coord)) return coord - // Add viable adjacent coords to the next generation + // Add viable adjacent coords to the next generation - for (const offset of adjacentOffsets) { - const coord2 = { - x: coord1.x + offset.x, - y: coord1.y + offset.y, - } + for (const offset of adjacentOffsets) { + const adjCoord = { + x: coord.x + offset.x, + y: coord.y + offset.y, + } - if (!isXYInRoom(coord2.x, coord2.y)) continue + if (!isXYInRoom(coord.x, coord.y)) continue - if (localVisitedCoords[packAsNum(coord2)] === 1) continue - localVisitedCoords[packAsNum(coord2)] = 1 + const packedAdjCoord = packAsNum(adjCoord) - nextGeneration.push(coord2) - } - } - } + if (localVisitedCoords[packedAdjCoord] === 1) continue + localVisitedCoords[packedAdjCoord] = 1 - // Set this gen to next gen + if (this.baseCoords[packedAdjCoord] === 255) continue - visitedCoords = new Uint8Array(localVisitedCoords) - thisGeneration = nextGeneration - } + nextGeneration.push(adjCoord) - // No stampAnchor was found + const adjCostFromOrigin = (fromOrigin[packedAdjCoord] = + coordCostFromOrigin + dynamicDistanceWeight) + const adjCoordCost = args.dynamicWeight[packedAdjCoord] + adjCostFromOrigin - return false - } - private findDynamicStampAnchorWeighted(args: FindDynamicStampAnchorWeightedArgs) { - let visitedCoords = new Uint8Array(2500) - for (const coord of args.startCoords) visitedCoords[packAsNum(coord)] = 1 - - let fromOrigin = new Uint8Array(2500) - let lowestNextGenCost = Infinity - let thisGeneration = args.startCoords - let nextGeneration: Coord[] + if (adjCoordCost < lowestNextGenCost) lowestNextGenCost = adjCoordCost + } + } - while (thisGeneration.length) { - nextGeneration = [] - let lowestGenCost = lowestNextGenCost - lowestNextGenCost = Infinity + // Flood all adjacent coords - let localVisitedCoords = new Uint8Array(visitedCoords) + if (!nextGeneration.length) { + localVisitedCoords = new Uint8Array(visitedCoords) - // Flood adjacent coords that are passible + for (const coord of thisGeneration) { + const packedCoord = packAsNum(coord) + const coordCostFromOrigin = fromOrigin[packedCoord] + const coordCost = args.dynamicWeight[packedCoord] + coordCostFromOrigin - for (const coord of thisGeneration) { - const packedCoord = packAsNum(coord) - const coordCostFromOrigin = fromOrigin[packedCoord] - const coordCost = args.dynamicWeight[packedCoord] + coordCostFromOrigin + if (coordCost > lowestGenCost) { + nextGeneration.push(coord) + continue + } - if (coordCost > lowestGenCost) { - nextGeneration.push(coord) - continue - } + if (this.isViableDynamicStampAnchor(args, coord)) return coord - if (this.isViableDynamicStampAnchor(args, coord)) return coord + // Add viable adjacent coords to the next generation - // Add viable adjacent coords to the next generation + for (const offset of adjacentOffsets) { + const adjCoord = { + x: coord.x + offset.x, + y: coord.y + offset.y, + } - for (const offset of adjacentOffsets) { - const adjCoord = { - x: coord.x + offset.x, - y: coord.y + offset.y, - } + if (!isXYInRoom(coord.x, coord.y)) continue - if (!isXYInRoom(coord.x, coord.y)) continue + const packedAdjCoord = packAsNum(adjCoord) - const packedAdjCoord = packAsNum(adjCoord) + if (localVisitedCoords[packedAdjCoord] === 1) continue + localVisitedCoords[packedAdjCoord] = 1 - if (localVisitedCoords[packedAdjCoord] === 1) continue - localVisitedCoords[packedAdjCoord] = 1 + nextGeneration.push(adjCoord) - if (this.baseCoords[packedAdjCoord] === 255) continue + const adjCostFromOrigin = (fromOrigin[packedAdjCoord] = + coordCostFromOrigin + dynamicDistanceWeight) + const adjCoordCost = args.dynamicWeight[packedAdjCoord] + adjCostFromOrigin - nextGeneration.push(adjCoord) + if (adjCoordCost < lowestNextGenCost) lowestNextGenCost = adjCoordCost + } + } + } - const adjCostFromOrigin = (fromOrigin[packedAdjCoord] = - coordCostFromOrigin + dynamicDistanceWeight) - const adjCoordCost = args.dynamicWeight[packedAdjCoord] + adjCostFromOrigin + // Set this gen to next gen - if (adjCoordCost < lowestNextGenCost) lowestNextGenCost = adjCoordCost - } - } + visitedCoords = new Uint8Array(localVisitedCoords) + thisGeneration = nextGeneration + } - // Flood all adjacent coords + // No stampAnchor was found + + return false + } + private isViableDynamicStampAnchor(args: FindDynamicStampAnchorArgs, coord1: Coord) { + // Get the value of the pos + /* this.room.visual.rect(coord1.x - 0.5, coord1.y - 0.5, 1, 1, { fill: customColors.red }) */ + if (this.baseCoords[packAsNum(coord1)] === 255) return false + if (this.roadCoords[packAsNum(coord1)] > 0) return false + if (this.isCloseToExit(coord1, args.stamp.protectionOffset + 2)) return false + if (!args.conditions(coord1)) return false + + return true + } + /** + * Finds wether the coord is in a specified range to an exit, flooding while avoiding walls + * @param startCoord The string coordinate + * @param range The max number of generations to do + */ + private isCloseToExit(startCoord: Coord, range: number) { + let visitedCoords = new Uint8Array(2500) + visitedCoords[packAsNum(startCoord)] = 1 + + let generations = 0 + let thisGeneration = [startCoord] + let nextGeneration: Coord[] + + while (thisGeneration.length && generations < range) { + nextGeneration = [] + + // Iterate through positions of this gen + + for (const coord1 of thisGeneration) { + // Add viable adjacent coords to the next generation - if (!nextGeneration.length) { - localVisitedCoords = new Uint8Array(visitedCoords) + for (const offset of adjacentOffsets) { + const coord2 = { + x: coord1.x + offset.x, + y: coord1.y + offset.y, + } - for (const coord of thisGeneration) { - const packedCoord = packAsNum(coord) - const coordCostFromOrigin = fromOrigin[packedCoord] - const coordCost = args.dynamicWeight[packedCoord] + coordCostFromOrigin + if (visitedCoords[packAsNum(coord2)] === 1) continue + visitedCoords[packAsNum(coord2)] = 1 - if (coordCost > lowestGenCost) { - nextGeneration.push(coord) - continue - } + if (this.room.roomManager.exitCoords.has(packCoord(coord2))) return true - if (this.isViableDynamicStampAnchor(args, coord)) return coord + if (this.terrainCoords[packAsNum(coord2)] === 255) continue - // Add viable adjacent coords to the next generation + nextGeneration.push(coord2) + } + } - for (const offset of adjacentOffsets) { - const adjCoord = { - x: coord.x + offset.x, - y: coord.y + offset.y, - } + // Set up for next generation - if (!isXYInRoom(coord.x, coord.y)) continue + generations += 1 + thisGeneration = nextGeneration + } - const packedAdjCoord = packAsNum(adjCoord) + return false + } + private findFastFillerOrigin() { + if (this.fastFillerStartCoords) return this.fastFillerStartCoords[this.planAttempts.length] - if (localVisitedCoords[packedAdjCoord] === 1) continue - localVisitedCoords[packedAdjCoord] = 1 + // Controller - nextGeneration.push(adjCoord) + const origins: Coord[] = [this.room.controller.pos] - const adjCostFromOrigin = (fromOrigin[packedAdjCoord] = - coordCostFromOrigin + dynamicDistanceWeight) - const adjCoordCost = args.dynamicWeight[packedAdjCoord] + adjCostFromOrigin + // Both sources - if (adjCoordCost < lowestNextGenCost) lowestNextGenCost = adjCoordCost - } - } - } + const sources = this.room.find(FIND_SOURCES) + for (const source of sources) origins.push(source.pos) - // Set this gen to next gen + // Find the closest source pos and its path to the controller - visitedCoords = new Uint8Array(localVisitedCoords) - thisGeneration = nextGeneration - } + let shortestPath: RoomPosition[] - // No stampAnchor was found + for (const source of sources) { + const path = customPathFinder.findPath({ + origin: source.pos, + goals: [{ pos: this.room.controller.pos, range: 1 }], + plainCost: defaultRoadPlanningPlainCost, + }) + if (shortestPath && path.length >= shortestPath.length) continue - return false + shortestPath = path } - private isViableDynamicStampAnchor(args: FindDynamicStampAnchorArgs, coord1: Coord) { - // Get the value of the pos - /* this.room.visual.rect(coord1.x - 0.5, coord1.y - 0.5, 1, 1, { fill: customColors.red }) */ - if (this.baseCoords[packAsNum(coord1)] === 255) return false - if (this.roadCoords[packAsNum(coord1)] > 0) return false - if (this.isCloseToExit(coord1, args.stamp.protectionOffset + 2)) return false - if (!args.conditions(coord1)) return false - return true - } - /** - * Finds wether the coord is in a specified range to an exit, flooding while avoiding walls - * @param startCoord The string coordinate - * @param range The max number of generations to do - */ - private isCloseToExit(startCoord: Coord, range: number) { - let visitedCoords = new Uint8Array(2500) - visitedCoords[packAsNum(startCoord)] = 1 + let origin = shortestPath[Math.floor(shortestPath.length / 2)] + if (origin) origins.push(origin) - let generations = 0 - let thisGeneration = [startCoord] - let nextGeneration: Coord[] + // Avg path between sources, if more than 1 - while (thisGeneration.length && generations < range) { - nextGeneration = [] + if (sources.length > 1) { + const path = customPathFinder.findPath({ + origin: sources[0].pos, + goals: [{ pos: sources[1].pos, range: 1 }], + plainCost: defaultRoadPlanningPlainCost, + }) - // Iterate through positions of this gen - - for (const coord1 of thisGeneration) { - // Add viable adjacent coords to the next generation - - for (const offset of adjacentOffsets) { - const coord2 = { - x: coord1.x + offset.x, - y: coord1.y + offset.y, - } - - if (visitedCoords[packAsNum(coord2)] === 1) continue - visitedCoords[packAsNum(coord2)] = 1 + origin = path[Math.floor(path.length / 2)] + if (origin) origins.push(origin) + } - if (this.room.roomManager.exitCoords.has(packCoord(coord2))) return true + this.fastFillerStartCoords = origins + return this.fastFillerStartCoords[this.planAttempts.length] + } + private fastFiller() { + if (this.stampAnchors.fastFiller.length) return Result.noAction - if (this.terrainCoords[packAsNum(coord2)] === 255) continue + for (const coord of findCoordsInRange(this.room.controller.pos, 2)) { + this.baseCoords[packAsNum(coord)] = 255 + } - nextGeneration.push(coord2) - } - } + const result = this.planStamps({ + stampType: 'fastFiller', + count: 1, + startCoords: [this.findFastFillerOrigin()], + cardinalFlood: true, + consequence: stampAnchor => { + const stampOffset = stamps.fastFiller.offset + const structures = stamps.fastFiller.structures + + for (const coord of structures.road) { + const properCoord = { + x: coord.x + stampAnchor.x - stampOffset, + y: coord.y + stampAnchor.y - stampOffset, + } + const packedCoord = packAsNum(properCoord) + this.setBasePlansXY(properCoord.x, properCoord.y, STRUCTURE_ROAD, 3) + this.roadCoords[packedCoord] = 1 + this.byPlannedRoad[packedCoord] = 0 + } + + const properCoord = { + x: structures.link[0].x + stampAnchor.x - stampOffset, + y: structures.link[0].y + stampAnchor.y - stampOffset, + } + const packedCoord = packAsNum(properCoord) + this.setBasePlansXY(properCoord.x, properCoord.y, STRUCTURE_LINK, 6) + this.baseCoords[packedCoord] = 255 + this.roadCoords[packedCoord] = 255 - // Set up for next generation + const fastFillerPos = new RoomPosition(stampAnchor.x, stampAnchor.y, this.room.name) + const sources = this.room.find(FIND_SOURCES) + sortBy( + sources, + ({ pos }) => + customPathFinder.findPath({ + origin: pos, + goals: [ + { + pos: fastFillerPos, + range: 3, + }, + ], + weightCoordMaps: [this.diagonalCoords, this.roadCoords], + plainCost: defaultRoadPlanningPlainCost, + }).length, + ) - generations += 1 - thisGeneration = nextGeneration - } + const fastFillerCoords = structures.empty + sortBy( + fastFillerCoords, + ({ x, y }) => + customPathFinder.findPath({ + origin: new RoomPosition( + x + stampAnchor.x - stampOffset, + y + stampAnchor.y - stampOffset, + this.room.name, + ), + goals: [ + { + pos: sources[0].pos, + range: 1, + }, + ], + weightCoordMaps: [this.diagonalCoords, this.roadCoords], + plainCost: defaultRoadPlanningPlainCost, + }).length, + ) - return false - } - private findFastFillerOrigin() { - if (this.fastFillerStartCoords) return this.fastFillerStartCoords[this.planAttempts.length] + let containerMinRCL = 1 + const containerCoords = [...structures.container] + const extensionCoords = [...structures.extension] + const spawnCoords = [...structures.spawn] - // Controller + for (let i = 0; i < fastFillerCoords.length; i++) { + const coord = fastFillerCoords[i] - const origins: Coord[] = [this.room.controller.pos] + for (let j = extensionCoords.length - 1; j >= 0; j--) { + const structureCoord = extensionCoords[j] + if (getRange(coord, structureCoord) > 1) continue - // Both sources + const properCoord = { + x: structureCoord.x + stampAnchor.x - stampOffset, + y: structureCoord.y + stampAnchor.y - stampOffset, + } + const packedCoord = packAsNum(properCoord) + this.setBasePlansXY(properCoord.x, properCoord.y, STRUCTURE_EXTENSION) + this.baseCoords[packedCoord] = 255 + this.roadCoords[packedCoord] = 255 - const sources = this.room.find(FIND_SOURCES) - for (const source of sources) origins.push(source.pos) + extensionCoords.splice(j, 1) + } - // Find the closest source pos and its path to the controller + for (let j = spawnCoords.length - 1; j >= 0; j--) { + const structureCoord = spawnCoords[j] + if (getRange(coord, structureCoord) > 1) continue - let shortestPath: RoomPosition[] + const properCoord = { + x: structureCoord.x + stampAnchor.x - stampOffset, + y: structureCoord.y + stampAnchor.y - stampOffset, + } + const packedCoord = packAsNum(properCoord) + this.setBasePlansXY(properCoord.x, properCoord.y, STRUCTURE_SPAWN) + this.baseCoords[packedCoord] = 255 + this.roadCoords[packedCoord] = 255 - for (const source of sources) { - const path = customPathFinder.findPath({ - origin: source.pos, - goals: [{ pos: this.room.controller.pos, range: 1 }], - plainCost: defaultRoadPlanningPlainCost, - }) - if (shortestPath && path.length >= shortestPath.length) continue + // It's not our first room, have a rampart planned to build the spawn under - shortestPath = path - } + if (i === 0 && !this.isStartRoom) { + } - let origin = shortestPath[Math.floor(shortestPath.length / 2)] - if (origin) origins.push(origin) + spawnCoords.splice(j, 1) + break + } - // Avg path between sources, if more than 1 + for (let j = containerCoords.length - 1; j >= 0; j--) { + const structureCoord = containerCoords[j] + if (getRange(coord, structureCoord) > 1) continue - if (sources.length > 1) { - const path = customPathFinder.findPath({ - origin: sources[0].pos, - goals: [{ pos: sources[1].pos, range: 1 }], - plainCost: defaultRoadPlanningPlainCost, - }) + const properCoord = { + x: structureCoord.x + stampAnchor.x - stampOffset, + y: structureCoord.y + stampAnchor.y - stampOffset, + } + const packedCoord = packAsNum(properCoord) + this.setBasePlansXY(properCoord.x, properCoord.y, STRUCTURE_CONTAINER, containerMinRCL) + this.baseCoords[packedCoord] = 255 + this.roadCoords[packedCoord] = 255 - origin = path[Math.floor(path.length / 2)] - if (origin) origins.push(origin) - } + containerMinRCL += 2 + containerCoords.splice(j, 1) + break + } + } + }, + }) + + return result + } + private hub() { + const fastFillerPos = new RoomPosition( + this.stampAnchors.fastFiller[0].x, + this.stampAnchors.fastFiller[0].y, + this.room.name, + ) + + let closestSource: Source + let closestSourceDistance = Infinity + + for (const source of this.room.find(FIND_SOURCES)) { + const range = customPathFinder.findPath({ + origin: source.pos, + goals: [ + { + pos: fastFillerPos, + range: 3, + }, + ], + plainCost: defaultRoadPlanningPlainCost, + }).length + if (range > closestSourceDistance) continue + + closestSourceDistance = range + closestSource = source + } - this.fastFillerStartCoords = origins - return this.fastFillerStartCoords[this.planAttempts.length] + let pathOrigin: RoomPosition + if (getRange(fastFillerPos, this.centerUpgradePos) >= 10) { + pathOrigin = this.centerUpgradePos + } else { + pathOrigin = closestSource.pos } - private fastFiller() { - if (this.stampAnchors.fastFiller.length) return Result.noAction - for (const coord of findCoordsInRange(this.room.controller.pos, 2)) { - this.baseCoords[packAsNum(coord)] = 255 + const path = customPathFinder.findPath({ + origin: pathOrigin, + goals: [{ pos: fastFillerPos, range: 3 }], + weightCoordMaps: [this.roadCoords], + plainCost: defaultRoadPlanningPlainCost, + }) + const origin = path[path.length - 1] || pathOrigin + + this.planStamps({ + stampType: 'hub', + count: 1, + startCoords: [origin], + dynamic: true, + weighted: true, + dynamicWeight: this.reverseExitFlood, + /** + * Don't place on a gridCoord and ensure cardinal directions aren't gridCoords but are each adjacent to one + */ + conditions: coord => { + if (this.gridCoords[packAsNum(coord)] > 0) return false + + for (const offsets of cardinalOffsets) { + const packedCoord = packXYAsNum(coord.x + offsets.x, coord.y + offsets.y) + if (this.roadCoords[packedCoord] > 0) return false + if (this.byPlannedRoad[packedCoord] !== 1) return false } - const result = this.planStamps({ - stampType: 'fastFiller', - count: 1, - startCoords: [this.findFastFillerOrigin()], - cardinalFlood: true, - consequence: stampAnchor => { - const stampOffset = stamps.fastFiller.offset - const structures = stamps.fastFiller.structures - - for (const coord of structures.road) { - const properCoord = { - x: coord.x + stampAnchor.x - stampOffset, - y: coord.y + stampAnchor.y - stampOffset, - } - const packedCoord = packAsNum(properCoord) - this.setBasePlansXY(properCoord.x, properCoord.y, STRUCTURE_ROAD, 3) - this.roadCoords[packedCoord] = 1 - this.byPlannedRoad[packedCoord] = 0 - } - - const properCoord = { - x: structures.link[0].x + stampAnchor.x - stampOffset, - y: structures.link[0].y + stampAnchor.y - stampOffset, - } - const packedCoord = packAsNum(properCoord) - this.setBasePlansXY(properCoord.x, properCoord.y, STRUCTURE_LINK, 6) - this.baseCoords[packedCoord] = 255 - this.roadCoords[packedCoord] = 255 - - const fastFillerPos = new RoomPosition(stampAnchor.x, stampAnchor.y, this.room.name) - const sources = this.room.find(FIND_SOURCES) - sortBy( - sources, - ({ pos }) => - customPathFinder.findPath({ - origin: pos, - goals: [ - { - pos: fastFillerPos, - range: 3, - }, - ], - weightCoordMaps: [this.diagonalCoords, this.roadCoords], - plainCost: defaultRoadPlanningPlainCost, - }).length, - ) - - const fastFillerCoords = structures.empty - sortBy( - fastFillerCoords, - ({ x, y }) => - customPathFinder.findPath({ - origin: new RoomPosition( - x + stampAnchor.x - stampOffset, - y + stampAnchor.y - stampOffset, - this.room.name, - ), - goals: [ - { - pos: sources[0].pos, - range: 1, - }, - ], - weightCoordMaps: [this.diagonalCoords, this.roadCoords], - plainCost: defaultRoadPlanningPlainCost, - }).length, - ) - - let containerMinRCL = 1 - const containerCoords = [...structures.container] - const extensionCoords = [...structures.extension] - const spawnCoords = [...structures.spawn] - - for (let i = 0; i < fastFillerCoords.length; i++) { - const coord = fastFillerCoords[i] - - for (let j = extensionCoords.length - 1; j >= 0; j--) { - const structureCoord = extensionCoords[j] - if (getRange(coord, structureCoord) > 1) continue - - const properCoord = { - x: structureCoord.x + stampAnchor.x - stampOffset, - y: structureCoord.y + stampAnchor.y - stampOffset, - } - const packedCoord = packAsNum(properCoord) - this.setBasePlansXY(properCoord.x, properCoord.y, STRUCTURE_EXTENSION) - this.baseCoords[packedCoord] = 255 - this.roadCoords[packedCoord] = 255 - - extensionCoords.splice(j, 1) - } - - for (let j = spawnCoords.length - 1; j >= 0; j--) { - const structureCoord = spawnCoords[j] - if (getRange(coord, structureCoord) > 1) continue - - const properCoord = { - x: structureCoord.x + stampAnchor.x - stampOffset, - y: structureCoord.y + stampAnchor.y - stampOffset, - } - const packedCoord = packAsNum(properCoord) - this.setBasePlansXY(properCoord.x, properCoord.y, STRUCTURE_SPAWN) - this.baseCoords[packedCoord] = 255 - this.roadCoords[packedCoord] = 255 - - // It's not our first room, have a rampart planned to build the spawn under - - if (i === 0 && !this.isStartRoom) { - } - - spawnCoords.splice(j, 1) - break - } - - for (let j = containerCoords.length - 1; j >= 0; j--) { - const structureCoord = containerCoords[j] - if (getRange(coord, structureCoord) > 1) continue - - const properCoord = { - x: structureCoord.x + stampAnchor.x - stampOffset, - y: structureCoord.y + stampAnchor.y - stampOffset, - } - const packedCoord = packAsNum(properCoord) - this.setBasePlansXY( - properCoord.x, - properCoord.y, - STRUCTURE_CONTAINER, - containerMinRCL, - ) - this.baseCoords[packedCoord] = 255 - this.roadCoords[packedCoord] = 255 - - containerMinRCL += 2 - containerCoords.splice(j, 1) - break - } - } - }, - }) + return true + }, + consequence: stampAnchor => { + this.room.errorVisual(stampAnchor) + this.baseCoords[packAsNum(stampAnchor)] = 255 + this.roadCoords[packAsNum(stampAnchor)] = 20 - return result - } - private hub() { - const fastFillerPos = new RoomPosition( - this.stampAnchors.fastFiller[0].x, - this.stampAnchors.fastFiller[0].y, - this.room.name, - ) + const structureCoords: Coord[] = [] - let closestSource: Source - let closestSourceDistance = Infinity - - for (const source of this.room.find(FIND_SOURCES)) { - const range = customPathFinder.findPath({ - origin: source.pos, - goals: [ - { - pos: fastFillerPos, - range: 3, - }, - ], - plainCost: defaultRoadPlanningPlainCost, - }).length - if (range > closestSourceDistance) continue - - closestSourceDistance = range - closestSource = source - } + for (const offset of cardinalOffsets) { + structureCoords.push({ + x: stampAnchor.x + offset.x, + y: stampAnchor.y + offset.y, + }) + } + + let [coord, i] = this.findStorageCoord(structureCoords) + structureCoords.splice(i, 1) + this.setBasePlansXY(coord.x, coord.y, STRUCTURE_STORAGE, 4) + this.baseCoords[packAsNum(coord)] = 255 + this.roadCoords[packAsNum(coord)] = 255 + + if (stampAnchor.y === coord.y) + coord = { + x: stampAnchor.x - coord.x + stampAnchor.x, + y: coord.y, + } + else + coord = { + x: coord.x, + y: stampAnchor.y - coord.y + stampAnchor.y, + } + + for (i = 0; i < structureCoords.length; i++) { + if (areCoordsEqual(coord, structureCoords[i])) break + } + + structureCoords.splice(i, 1) + this.setBasePlansXY(coord.x, coord.y, STRUCTURE_TERMINAL, 6) + this.baseCoords[packAsNum(coord)] = 255 + this.roadCoords[packAsNum(coord)] = 255 - let pathOrigin: RoomPosition - if (getRange(fastFillerPos, this.centerUpgradePos) >= 10) { - pathOrigin = this.centerUpgradePos - } else { - pathOrigin = closestSource.pos - } + // + ;[coord, i] = findClosestCoord(this.room.controller.pos, structureCoords) + structureCoords.splice(i, 1) + this.setBasePlansXY(coord.x, coord.y, STRUCTURE_LINK, 5) + this.baseCoords[packAsNum(coord)] = 255 + this.roadCoords[packAsNum(coord)] = 255 + + coord = structureCoords[0] + this.setBasePlansXY(coord.x, coord.y, STRUCTURE_FACTORY, 7) + this.baseCoords[packAsNum(coord)] = 255 + this.roadCoords[packAsNum(coord)] = 255 const path = customPathFinder.findPath({ - origin: pathOrigin, - goals: [{ pos: fastFillerPos, range: 3 }], - weightCoordMaps: [this.roadCoords], - plainCost: defaultRoadPlanningPlainCost, + origin: new RoomPosition(stampAnchor.x, stampAnchor.y, this.room.name), + goals: [{ pos: fastFillerPos, range: 3 }], + weightCoordMaps: [this.diagonalCoords, this.gridCoords, this.roadCoords], + plainCost: defaultRoadPlanningPlainCost * 2, + swampCost: defaultSwampCost * 2, }) - const origin = path[path.length - 1] || pathOrigin - - this.planStamps({ - stampType: 'hub', - count: 1, - startCoords: [origin], - dynamic: true, - weighted: true, - dynamicWeight: this.reverseExitFlood, - /** - * Don't place on a gridCoord and ensure cardinal directions aren't gridCoords but are each adjacent to one - */ - conditions: coord => { - if (this.gridCoords[packAsNum(coord)] > 0) return false - - for (const offsets of cardinalOffsets) { - const packedCoord = packXYAsNum(coord.x + offsets.x, coord.y + offsets.y) - if (this.roadCoords[packedCoord] > 0) return false - if (this.byPlannedRoad[packedCoord] !== 1) return false - } - - return true - }, - consequence: stampAnchor => { - this.room.errorVisual(stampAnchor) - this.baseCoords[packAsNum(stampAnchor)] = 255 - this.roadCoords[packAsNum(stampAnchor)] = 20 - - const structureCoords: Coord[] = [] - - for (const offset of cardinalOffsets) { - structureCoords.push({ - x: stampAnchor.x + offset.x, - y: stampAnchor.y + offset.y, - }) - } - - let [coord, i] = this.findStorageCoord(structureCoords) - structureCoords.splice(i, 1) - this.setBasePlansXY(coord.x, coord.y, STRUCTURE_STORAGE, 4) - this.baseCoords[packAsNum(coord)] = 255 - this.roadCoords[packAsNum(coord)] = 255 - - if (stampAnchor.y === coord.y) - coord = { - x: stampAnchor.x - coord.x + stampAnchor.x, - y: coord.y, - } - else - coord = { - x: coord.x, - y: stampAnchor.y - coord.y + stampAnchor.y, - } - - for (i = 0; i < structureCoords.length; i++) { - if (areCoordsEqual(coord, structureCoords[i])) break - } - - structureCoords.splice(i, 1) - this.setBasePlansXY(coord.x, coord.y, STRUCTURE_TERMINAL, 6) - this.baseCoords[packAsNum(coord)] = 255 - this.roadCoords[packAsNum(coord)] = 255 - - // - ;[coord, i] = findClosestCoord(this.room.controller.pos, structureCoords) - structureCoords.splice(i, 1) - this.setBasePlansXY(coord.x, coord.y, STRUCTURE_LINK, 5) - this.baseCoords[packAsNum(coord)] = 255 - this.roadCoords[packAsNum(coord)] = 255 - - coord = structureCoords[0] - this.setBasePlansXY(coord.x, coord.y, STRUCTURE_FACTORY, 7) - this.baseCoords[packAsNum(coord)] = 255 - this.roadCoords[packAsNum(coord)] = 255 - - const path = customPathFinder.findPath({ - origin: new RoomPosition(stampAnchor.x, stampAnchor.y, this.room.name), - goals: [{ pos: fastFillerPos, range: 3 }], - weightCoordMaps: [this.diagonalCoords, this.gridCoords, this.roadCoords], - plainCost: defaultRoadPlanningPlainCost * 2, - swampCost: defaultSwampCost * 2, - }) - - for (const pos of path) { - this.setBasePlansXY(pos.x, pos.y, STRUCTURE_ROAD, 3) - this.roadCoords[packAsNum(pos)] = 1 - } - }, - }) - } - private findStorageCoord(structureCoords: Coord[]): [Coord, number] { - /* + + for (const pos of path) { + this.setBasePlansXY(pos.x, pos.y, STRUCTURE_ROAD, 3) + this.roadCoords[packAsNum(pos)] = 1 + } + }, + }) + } + private findStorageCoord(structureCoords: Coord[]): [Coord, number] { + /* for (let i = 0; i < structureCoords.length; i++) { const coord = structureCoords[i] @@ -2103,775 +2094,770 @@ export class RemotePlanner { return [coord, i] } */ - return findClosestCoord(this.stampAnchors.fastFiller[0], structureCoords) - } - private labs() { - this.planStamps({ - stampType: 'inputLab', - count: 1, - startCoords: [this.stampAnchors.hub[0]], - dynamic: true, - weighted: true, - dynamicWeight: this.reverseExitFlood, - /** - * Ensure we can place all 10 labs where they are in range 2 of the 2 inputs, so can all be utilized for reactions - */ - conditions: coord1 => { - const packedNumCoord1 = packAsNum(coord1) - if (this.byPlannedRoad[packedNumCoord1] !== 1) return false - if (this.roadCoords[packedNumCoord1] > 0) return false - - let outputLabCoords: Coord[] - - // Record - - const packedAdjCoords1: Set = new Set() - const range = 2 - for (let x = coord1.x - range; x <= coord1.x + range; x += 1) { - for (let y = coord1.y - range; y <= coord1.y + range; y += 1) { - const packedCoordNum = packXYAsNum(x, y) - if (this.byPlannedRoad[packedCoordNum] !== 1) continue - if (this.roadCoords[packedCoordNum] > 0) continue - - packedAdjCoords1.add(packXYAsCoord(x, y)) - } - } - - const packedCoord1 = packCoord(coord1) - - for (const coord2 of findCoordsInRangeXY(coord1.x, coord1.y, range)) { - const packedCoord2Num = packAsNum(coord2) - if (this.byPlannedRoad[packedCoord2Num] !== 1) continue - if (this.roadCoords[packedCoord2Num] > 0) continue - - const packedCoord2 = packCoord(coord2) - if (packedCoord1 === packedCoord2) continue - - outputLabCoords = [] - - for (const adjCoord2 of findCoordsInRangeXY(coord2.x, coord2.y, range)) { - const packedAdjCoord2 = packCoord(adjCoord2) - if (packedCoord1 === packedAdjCoord2) continue - if (packedCoord2 === packedAdjCoord2) continue - if (!packedAdjCoords1.has(packedAdjCoord2)) continue - - outputLabCoords.push(adjCoord2) - if (outputLabCoords.length >= 8) { - this.inputLab2Coord = coord2 - this.outputLabCoords = outputLabCoords - return true - } - } - } - - return false - }, - consequence: stampAnchor => { - this.setBasePlansXY(stampAnchor.x, stampAnchor.y, STRUCTURE_LAB, 6) - this.baseCoords[packAsNum(stampAnchor)] = 255 - this.roadCoords[packAsNum(stampAnchor)] = 255 - - this.setBasePlansXY(this.inputLab2Coord.x, this.inputLab2Coord.y, STRUCTURE_LAB, 6) - this.baseCoords[packAsNum(this.inputLab2Coord)] = 255 - this.roadCoords[packAsNum(this.inputLab2Coord)] = 255 - - const goal = new RoomPosition( - this.stampAnchors.hub[0].x, - this.stampAnchors.hub[0].y, - this.room.name, - ) - - sortBy( - this.outputLabCoords, - ({ x, y }) => - customPathFinder.findPath({ - origin: new RoomPosition(x, y, this.room.name), - goals: [ - { - pos: goal, - range: 3, - }, - ], - weightCoordMaps: [this.gridCoords, this.roadCoords], - plainCost: defaultRoadPlanningPlainCost, - }).length, - ) - - for (const coord of this.outputLabCoords) { - this.setBasePlansXY(coord.x, coord.y, STRUCTURE_LAB) - this.baseCoords[packAsNum(coord)] = 255 - this.roadCoords[packAsNum(coord)] = 255 - } - }, - }) - } - private gridExtensions() { - this.planStamps({ - stampType: 'gridExtension', - count: - CONTROLLER_STRUCTURES.extension[8] - - stamps.fastFiller.structures[STRUCTURE_EXTENSION].length - - this.stampAnchors.sourceExtension.length, - startCoords: [this.stampAnchors.hub[0]], - dynamic: true, - weighted: true, - dynamicWeight: this.reverseExitFlood, - /** - * Don't place on a gridCoord and ensure there is a gridCoord adjacent - */ - conditions: coord => { - const packedCoord = packAsNum(coord) - if (this.baseCoords[packedCoord] === 255) return false - if (this.byPlannedRoad[packedCoord] !== 1) return false - - return true - }, - consequence: stampAnchor => { - this.setBasePlansXY(stampAnchor.x, stampAnchor.y, STRUCTURE_EXTENSION) - this.baseCoords[packAsNum(stampAnchor)] = 255 - this.roadCoords[packAsNum(stampAnchor)] = 255 - }, - }) - } - private gridExtensionSourcePaths() { - if (this.sourcePaths) return - - const hubAnchorPos = new RoomPosition( - this.stampAnchors.hub[0].x, - this.stampAnchors.hub[0].y, - this.room.name, - ) + return findClosestCoord(this.stampAnchors.fastFiller[0], structureCoords) + } + private labs() { + this.planStamps({ + stampType: 'inputLab', + count: 1, + startCoords: [this.stampAnchors.hub[0]], + dynamic: true, + weighted: true, + dynamicWeight: this.reverseExitFlood, + /** + * Ensure we can place all 10 labs where they are in range 2 of the 2 inputs, so can all be utilized for reactions + */ + conditions: coord1 => { + const packedNumCoord1 = packAsNum(coord1) + if (this.byPlannedRoad[packedNumCoord1] !== 1) return false + if (this.roadCoords[packedNumCoord1] > 0) return false - for (let i = this.stampAnchors.gridExtension.length - 1; i >= 0; i -= 5) { - const coord = this.stampAnchors.gridExtension[i] + let outputLabCoords: Coord[] - const path = customPathFinder.findPath({ - origin: new RoomPosition(coord.x, coord.y, this.room.name), - goals: [{ pos: hubAnchorPos, range: 2 }], - weightCoordMaps: [this.diagonalCoords, this.gridCoords, this.roadCoords], - plainCost: defaultRoadPlanningPlainCost * 2, - swampCost: defaultSwampCost * 2, - }) + // Record - const minRCL = this.basePlans.getXY(coord.x, coord.y)[0].minRCL - - for (const pos of path) { - this.setBasePlansXY(pos.x, pos.y, STRUCTURE_ROAD, minRCL) - this.roadCoords[packAsNum(pos)] = 1 - } - } - - const fastFillerAnchor = new RoomPosition( - this.stampAnchors.fastFiller[0].x, - this.stampAnchors.fastFiller[0].y, - this.room.name, - ) - const sourcePaths: RoomPosition[][] = [] - - for (let i = this.communeSources.length - 1; i >= 0; i -= 1) { - const origin = this.sourceHarvestPositions[i][0] - - const path = customPathFinder.findPath({ - origin: origin, - goals: [ - { - pos: fastFillerAnchor, - range: 3, - }, - ], - weightCoordMaps: [this.diagonalCoords, this.roadCoords], - plainCost: defaultRoadPlanningPlainCost * 2, - swampCost: defaultSwampCost * 2, - }) - - for (const pos of path) { - this.setBasePlansXY(pos.x, pos.y, STRUCTURE_ROAD, 3) - this.roadCoords[packAsNum(pos)] = 1 - } + const packedAdjCoords1: Set = new Set() + const range = 2 + for (let x = coord1.x - range; x <= coord1.x + range; x += 1) { + for (let y = coord1.y - range; y <= coord1.y + range; y += 1) { + const packedCoordNum = packXYAsNum(x, y) + if (this.byPlannedRoad[packedCoordNum] !== 1) continue + if (this.roadCoords[packedCoordNum] > 0) continue - sourcePaths.push(path) + packedAdjCoords1.add(packXYAsCoord(x, y)) + } } - const upgradePath = customPathFinder.findPath({ - origin: this.centerUpgradePos, - goals: [ - { - pos: new RoomPosition( - this.stampAnchors.fastFiller[0].x, - this.stampAnchors.fastFiller[0].y, - this.room.name, - ), - range: 3, - }, - ], - weightCoordMaps: [this.diagonalCoords, this.roadCoords], - plainCost: defaultRoadPlanningPlainCost * 2, - swampCost: defaultSwampCost * 2, - }) + const packedCoord1 = packCoord(coord1) - for (const pos of upgradePath) { - this.roadCoords[packAsNum(pos)] = 1 - this.setBasePlansXY(pos.x, pos.y, STRUCTURE_ROAD, 3) - } + for (const coord2 of findCoordsInRangeXY(coord1.x, coord1.y, range)) { + const packedCoord2Num = packAsNum(coord2) + if (this.byPlannedRoad[packedCoord2Num] !== 1) continue + if (this.roadCoords[packedCoord2Num] > 0) continue - this.upgradePath = upgradePath - this.sourcePaths = sourcePaths.reverse() - } - private observer() { - this.planStamps({ - stampType: 'observer', - count: 1, - startCoords: [this.stampAnchors.hub[0]], - dynamic: true, - weighted: true, - dynamicWeight: this.reverseExitFlood, - /** - * Don't place on a gridCoord and ensure there is a gridCoord adjacent - */ - conditions: coord => { - const packedCoord = packAsNum(coord) - if (this.baseCoords[packedCoord] === 255) return false - if (this.gridCoords[packedCoord] > 0) return false - - return true - }, - consequence: stampAnchor => { - this.setBasePlansXY(stampAnchor.x, stampAnchor.y, STRUCTURE_OBSERVER, 8) - this.baseCoords[packAsNum(stampAnchor)] = 255 - this.roadCoords[packAsNum(stampAnchor)] = 255 - }, - }) - } - private nuker() { - this.planStamps({ - stampType: 'nuker', - count: 1, - startCoords: [this.stampAnchors.hub[0]], - dynamic: true, - weighted: true, - dynamicWeight: this.reverseExitFlood, - /** - * Don't place on a gridCoord and ensure there is a gridCoord adjacent - */ - conditions: coord => { - const packedCoord = packAsNum(coord) - if (this.baseCoords[packedCoord] === 255) return false - if (this.byPlannedRoad[packedCoord] !== 1) return false - - return true - }, - consequence: stampAnchor => { - this.setBasePlansXY(stampAnchor.x, stampAnchor.y, STRUCTURE_NUKER, 8) - this.baseCoords[packAsNum(stampAnchor)] = 255 - this.roadCoords[packAsNum(stampAnchor)] = 255 - }, - }) - } - private powerSpawn() { - this.planStamps({ - stampType: 'powerSpawn', - count: 1, - startCoords: [this.stampAnchors.hub[0]], - dynamic: true, - weighted: true, - dynamicWeight: this.reverseExitFlood, - /** - * Don't place on a gridCoord and ensure there is a gridCoord adjacent - */ - conditions: coord => { - const packedCoord = packAsNum(coord) - if (this.baseCoords[packedCoord] === 255) return false - if (this.byPlannedRoad[packedCoord] !== 1) return false - - return true - }, - consequence: stampAnchor => { - this.setBasePlansXY(stampAnchor.x, stampAnchor.y, STRUCTURE_POWER_SPAWN, 8) - this.baseCoords[packAsNum(stampAnchor)] = 255 - this.roadCoords[packAsNum(stampAnchor)] = 255 - }, - }) - } - private runMinCut() { - if (this.minCutCoords) return + const packedCoord2 = packCoord(coord2) + if (packedCoord1 === packedCoord2) continue - const cm = new PathFinder.CostMatrix() - const terrain = this.room.getTerrain() + outputLabCoords = [] - for (let x = 0; x < roomDimensions; x++) { - for (let y = 0; y < roomDimensions; y++) { - if (terrain.get(x, y) !== TERRAIN_MASK_WALL) continue + for (const adjCoord2 of findCoordsInRangeXY(coord2.x, coord2.y, range)) { + const packedAdjCoord2 = packCoord(adjCoord2) + if (packedCoord1 === packedAdjCoord2) continue + if (packedCoord2 === packedAdjCoord2) continue + if (!packedAdjCoords1.has(packedAdjCoord2)) continue - cm.set(x, y, 255) + outputLabCoords.push(adjCoord2) + if (outputLabCoords.length >= 8) { + this.inputLab2Coord = coord2 + this.outputLabCoords = outputLabCoords + return true } + } } - const protectionCoords: Set = new Set() + return false + }, + consequence: stampAnchor => { + this.setBasePlansXY(stampAnchor.x, stampAnchor.y, STRUCTURE_LAB, 6) + this.baseCoords[packAsNum(stampAnchor)] = 255 + this.roadCoords[packAsNum(stampAnchor)] = 255 - // General stamps + this.setBasePlansXY(this.inputLab2Coord.x, this.inputLab2Coord.y, STRUCTURE_LAB, 6) + this.baseCoords[packAsNum(this.inputLab2Coord)] = 255 + this.roadCoords[packAsNum(this.inputLab2Coord)] = 255 - for (const key in this.stampAnchors) { - const stampType = key as StampTypes - const stamp = stamps[stampType] + const goal = new RoomPosition( + this.stampAnchors.hub[0].x, + this.stampAnchors.hub[0].y, + this.room.name, + ) - for (const coord of this.stampAnchors[stampType]) { - for (const nearbyCoord of findCoordsInRange(coord, stamp.protectionOffset)) { - const packedNearbyCoord = packAsNum(nearbyCoord) - if (this.terrainCoords[packedNearbyCoord] === 255) continue - if (this.byExitCoords[packedNearbyCoord] === 255) continue + sortBy( + this.outputLabCoords, + ({ x, y }) => + customPathFinder.findPath({ + origin: new RoomPosition(x, y, this.room.name), + goals: [ + { + pos: goal, + range: 3, + }, + ], + weightCoordMaps: [this.gridCoords, this.roadCoords], + plainCost: defaultRoadPlanningPlainCost, + }).length, + ) - protectionCoords.add(packedNearbyCoord) - } - } - } + for (const coord of this.outputLabCoords) { + this.setBasePlansXY(coord.x, coord.y, STRUCTURE_LAB) + this.baseCoords[packAsNum(coord)] = 255 + this.roadCoords[packAsNum(coord)] = 255 + } + }, + }) + } + private gridExtensions() { + this.planStamps({ + stampType: 'gridExtension', + count: + CONTROLLER_STRUCTURES.extension[8] - + stamps.fastFiller.structures[STRUCTURE_EXTENSION].length - + this.stampAnchors.sourceExtension.length, + startCoords: [this.stampAnchors.hub[0]], + dynamic: true, + weighted: true, + dynamicWeight: this.reverseExitFlood, + /** + * Don't place on a gridCoord and ensure there is a gridCoord adjacent + */ + conditions: coord => { + const packedCoord = packAsNum(coord) + if (this.baseCoords[packedCoord] === 255) return false + if (this.byPlannedRoad[packedCoord] !== 1) return false - const hubAnchor = new RoomPosition( - this.stampAnchors.hub[0].x, - this.stampAnchors.hub[0].y, - this.room.name, - ) - const fastFillerAnchor = new RoomPosition( + return true + }, + consequence: stampAnchor => { + this.setBasePlansXY(stampAnchor.x, stampAnchor.y, STRUCTURE_EXTENSION) + this.baseCoords[packAsNum(stampAnchor)] = 255 + this.roadCoords[packAsNum(stampAnchor)] = 255 + }, + }) + } + private gridExtensionSourcePaths() { + if (this.sourcePaths) return + + const hubAnchorPos = new RoomPosition( + this.stampAnchors.hub[0].x, + this.stampAnchors.hub[0].y, + this.room.name, + ) + + for (let i = this.stampAnchors.gridExtension.length - 1; i >= 0; i -= 5) { + const coord = this.stampAnchors.gridExtension[i] + + const path = customPathFinder.findPath({ + origin: new RoomPosition(coord.x, coord.y, this.room.name), + goals: [{ pos: hubAnchorPos, range: 2 }], + weightCoordMaps: [this.diagonalCoords, this.gridCoords, this.roadCoords], + plainCost: defaultRoadPlanningPlainCost * 2, + swampCost: defaultSwampCost * 2, + }) + + const minRCL = this.basePlans.getXY(coord.x, coord.y)[0].minRCL + + for (const pos of path) { + this.setBasePlansXY(pos.x, pos.y, STRUCTURE_ROAD, minRCL) + this.roadCoords[packAsNum(pos)] = 1 + } + } + + const fastFillerAnchor = new RoomPosition( + this.stampAnchors.fastFiller[0].x, + this.stampAnchors.fastFiller[0].y, + this.room.name, + ) + const sourcePaths: RoomPosition[][] = [] + + for (let i = this.communeSources.length - 1; i >= 0; i -= 1) { + const origin = this.sourceHarvestPositions[i][0] + + const path = customPathFinder.findPath({ + origin: origin, + goals: [ + { + pos: fastFillerAnchor, + range: 3, + }, + ], + weightCoordMaps: [this.diagonalCoords, this.roadCoords], + plainCost: defaultRoadPlanningPlainCost * 2, + swampCost: defaultSwampCost * 2, + }) + + for (const pos of path) { + this.setBasePlansXY(pos.x, pos.y, STRUCTURE_ROAD, 3) + this.roadCoords[packAsNum(pos)] = 1 + } + + sourcePaths.push(path) + } + + const upgradePath = customPathFinder.findPath({ + origin: this.centerUpgradePos, + goals: [ + { + pos: new RoomPosition( this.stampAnchors.fastFiller[0].x, this.stampAnchors.fastFiller[0].y, this.room.name, - ) + ), + range: 3, + }, + ], + weightCoordMaps: [this.diagonalCoords, this.roadCoords], + plainCost: defaultRoadPlanningPlainCost * 2, + swampCost: defaultSwampCost * 2, + }) + + for (const pos of upgradePath) { + this.roadCoords[packAsNum(pos)] = 1 + this.setBasePlansXY(pos.x, pos.y, STRUCTURE_ROAD, 3) + } - let path = customPathFinder.findPath({ - origin: hubAnchor, - goals: [ - { - pos: fastFillerAnchor, - range: 3, - }, - ], - weightCoordMaps: [this.diagonalCoords, this.roadCoords], - plainCost: defaultRoadPlanningPlainCost * 2, - swampCost: defaultSwampCost * 2, - }) + this.upgradePath = upgradePath + this.sourcePaths = sourcePaths.reverse() + } + private observer() { + this.planStamps({ + stampType: 'observer', + count: 1, + startCoords: [this.stampAnchors.hub[0]], + dynamic: true, + weighted: true, + dynamicWeight: this.reverseExitFlood, + /** + * Don't place on a gridCoord and ensure there is a gridCoord adjacent + */ + conditions: coord => { + const packedCoord = packAsNum(coord) + if (this.baseCoords[packedCoord] === 255) return false + if (this.gridCoords[packedCoord] > 0) return false - for (const pos of path) { - for (const adjCoord of findCoordsInRange(pos, 3)) { - const adjPackedCoord = packAsNum(adjCoord) - if (this.terrainCoords[adjPackedCoord] > 0) continue - if (this.byExitCoords[adjPackedCoord] > 0) continue + return true + }, + consequence: stampAnchor => { + this.setBasePlansXY(stampAnchor.x, stampAnchor.y, STRUCTURE_OBSERVER, 8) + this.baseCoords[packAsNum(stampAnchor)] = 255 + this.roadCoords[packAsNum(stampAnchor)] = 255 + }, + }) + } + private nuker() { + this.planStamps({ + stampType: 'nuker', + count: 1, + startCoords: [this.stampAnchors.hub[0]], + dynamic: true, + weighted: true, + dynamicWeight: this.reverseExitFlood, + /** + * Don't place on a gridCoord and ensure there is a gridCoord adjacent + */ + conditions: coord => { + const packedCoord = packAsNum(coord) + if (this.baseCoords[packedCoord] === 255) return false + if (this.byPlannedRoad[packedCoord] !== 1) return false - protectionCoords.add(adjPackedCoord) - } - } + return true + }, + consequence: stampAnchor => { + this.setBasePlansXY(stampAnchor.x, stampAnchor.y, STRUCTURE_NUKER, 8) + this.baseCoords[packAsNum(stampAnchor)] = 255 + this.roadCoords[packAsNum(stampAnchor)] = 255 + }, + }) + } + private powerSpawn() { + this.planStamps({ + stampType: 'powerSpawn', + count: 1, + startCoords: [this.stampAnchors.hub[0]], + dynamic: true, + weighted: true, + dynamicWeight: this.reverseExitFlood, + /** + * Don't place on a gridCoord and ensure there is a gridCoord adjacent + */ + conditions: coord => { + const packedCoord = packAsNum(coord) + if (this.baseCoords[packedCoord] === 255) return false + if (this.byPlannedRoad[packedCoord] !== 1) return false - // Prune protection coords not contigious with fastFiller anchor group + return true + }, + consequence: stampAnchor => { + this.setBasePlansXY(stampAnchor.x, stampAnchor.y, STRUCTURE_POWER_SPAWN, 8) + this.baseCoords[packAsNum(stampAnchor)] = 255 + this.roadCoords[packAsNum(stampAnchor)] = 255 + }, + }) + } + private runMinCut() { + if (this.minCutCoords) return + + const cm = new PathFinder.CostMatrix() + const terrain = this.room.getTerrain() + + for (let x = 0; x < roomDimensions; x++) { + for (let y = 0; y < roomDimensions; y++) { + if (terrain.get(x, y) !== TERRAIN_MASK_WALL) continue + + cm.set(x, y, 255) + } + } - const startCoords = this.stampAnchors.fastFiller - const contigiousProtectionCoords: Set = new Set() - let visitedCoords = new Uint8Array(2500) + const protectionCoords: Set = new Set() - for (const coord of startCoords) { - const packedCoord = packAsNum(coord) - visitedCoords[packedCoord] = 1 - contigiousProtectionCoords.add(coord) - cm.set(coord.x, coord.y, 1) - } + // General stamps + + for (const key in this.stampAnchors) { + const stampType = key as StampTypes + const stamp = stamps[stampType] + + for (const coord of this.stampAnchors[stampType]) { + for (const nearbyCoord of findCoordsInRange(coord, stamp.protectionOffset)) { + const packedNearbyCoord = packAsNum(nearbyCoord) + if (this.terrainCoords[packedNearbyCoord] === 255) continue + if (this.byExitCoords[packedNearbyCoord] === 255) continue - let thisGeneration = startCoords - let nextGeneration: Coord[] + protectionCoords.add(packedNearbyCoord) + } + } + } - while (thisGeneration.length) { - nextGeneration = [] + const hubAnchor = new RoomPosition( + this.stampAnchors.hub[0].x, + this.stampAnchors.hub[0].y, + this.room.name, + ) + const fastFillerAnchor = new RoomPosition( + this.stampAnchors.fastFiller[0].x, + this.stampAnchors.fastFiller[0].y, + this.room.name, + ) + + let path = customPathFinder.findPath({ + origin: hubAnchor, + goals: [ + { + pos: fastFillerAnchor, + range: 3, + }, + ], + weightCoordMaps: [this.diagonalCoords, this.roadCoords], + plainCost: defaultRoadPlanningPlainCost * 2, + swampCost: defaultSwampCost * 2, + }) + + for (const pos of path) { + for (const adjCoord of findCoordsInRange(pos, 3)) { + const adjPackedCoord = packAsNum(adjCoord) + if (this.terrainCoords[adjPackedCoord] > 0) continue + if (this.byExitCoords[adjPackedCoord] > 0) continue + + protectionCoords.add(adjPackedCoord) + } + } - // Iterate through positions of this gen + // Prune protection coords not contigious with fastFiller anchor group - for (const coord1 of thisGeneration) { - // Add viable adjacent coords to the next generation + const startCoords = this.stampAnchors.fastFiller + const contigiousProtectionCoords: Set = new Set() + let visitedCoords = new Uint8Array(2500) - for (const offset of adjacentOffsets) { - const adjCoord = { - x: coord1.x + offset.x, - y: coord1.y + offset.y, - } - const packedAdjCoord = packAsNum(adjCoord) + for (const coord of startCoords) { + const packedCoord = packAsNum(coord) + visitedCoords[packedCoord] = 1 + contigiousProtectionCoords.add(coord) + cm.set(coord.x, coord.y, 1) + } - if (visitedCoords[packedAdjCoord] === 1) continue - visitedCoords[packedAdjCoord] = 1 + let thisGeneration = startCoords + let nextGeneration: Coord[] - if (!protectionCoords.has(packedAdjCoord)) continue + while (thisGeneration.length) { + nextGeneration = [] - contigiousProtectionCoords.add(adjCoord) - cm.set(adjCoord.x, adjCoord.y, defaultMinCutDepth) - nextGeneration.push(adjCoord) - } - } + // Iterate through positions of this gen - // Set this gen to next gen + for (const coord1 of thisGeneration) { + // Add viable adjacent coords to the next generation - thisGeneration = nextGeneration - } + for (const offset of adjacentOffsets) { + const adjCoord = { + x: coord1.x + offset.x, + y: coord1.y + offset.y, + } + const packedAdjCoord = packAsNum(adjCoord) - // Flood from contigious protectionCoords to get depth for distance-weighting + if (visitedCoords[packedAdjCoord] === 1) continue + visitedCoords[packedAdjCoord] = 1 - visitedCoords = new Uint8Array(2500) + if (!protectionCoords.has(packedAdjCoord)) continue - for (const coord of contigiousProtectionCoords) { - thisGeneration.push(coord) - visitedCoords[packAsNum(coord)] = 1 + contigiousProtectionCoords.add(adjCoord) + cm.set(adjCoord.x, adjCoord.y, defaultMinCutDepth) + nextGeneration.push(adjCoord) } + } - let depth = defaultMinCutDepth + 1 + // Set this gen to next gen + + thisGeneration = nextGeneration + } - while (thisGeneration.length) { - nextGeneration = [] + // Flood from contigious protectionCoords to get depth for distance-weighting - // Flood all adjacent positions + visitedCoords = new Uint8Array(2500) - if (!nextGeneration.length) { - // Iterate through positions of this gen + for (const coord of contigiousProtectionCoords) { + thisGeneration.push(coord) + visitedCoords[packAsNum(coord)] = 1 + } - for (const coord1 of thisGeneration) { - // Add viable adjacent coords to the next generation + let depth = defaultMinCutDepth + 1 - for (const offset of adjacentOffsets) { - const adjCoord = { - x: coord1.x + offset.x, - y: coord1.y + offset.y, - } - const packedAdjCoord = packAsNum(adjCoord) + while (thisGeneration.length) { + nextGeneration = [] - if (!isXYInRoom(adjCoord.x, adjCoord.y)) continue + // Flood all adjacent positions - if (visitedCoords[packedAdjCoord] === 1) continue - visitedCoords[packedAdjCoord] = 1 + if (!nextGeneration.length) { + // Iterate through positions of this gen - if (this.terrainCoords[packedAdjCoord] === 255) continue + for (const coord1 of thisGeneration) { + // Add viable adjacent coords to the next generation - cm.set(adjCoord.x, adjCoord.y, depth) - nextGeneration.push(adjCoord) - } - } + for (const offset of adjacentOffsets) { + const adjCoord = { + x: coord1.x + offset.x, + y: coord1.y + offset.y, } + const packedAdjCoord = packAsNum(adjCoord) - // Set this gen to next gen + if (!isXYInRoom(adjCoord.x, adjCoord.y)) continue - thisGeneration = nextGeneration - depth += 1 + if (visitedCoords[packedAdjCoord] === 1) continue + visitedCoords[packedAdjCoord] = 1 + + if (this.terrainCoords[packedAdjCoord] === 255) continue + + cm.set(adjCoord.x, adjCoord.y, depth) + nextGeneration.push(adjCoord) + } } + } - // + // Set this gen to next gen + + thisGeneration = nextGeneration + depth += 1 + } - const result = minCutToExit(Array.from(contigiousProtectionCoords), cm) - const minCutCoords: Set = new Set() + // + + const result = minCutToExit(Array.from(contigiousProtectionCoords), cm) + const minCutCoords: Set = new Set() - for (const coord of result) { - const packedCoord = packAsNum(coord) - this.rampartCoords[packedCoord] = 1 + for (const coord of result) { + const packedCoord = packAsNum(coord) + this.rampartCoords[packedCoord] = 1 - minCutCoords.add(packedCoord) + minCutCoords.add(packedCoord) - this.stampAnchors.minCutRampart.push(coord) - /* this.roadCoords[packedCoord] = 1 + this.stampAnchors.minCutRampart.push(coord) + /* this.roadCoords[packedCoord] = 1 this.basePlans.setXY(coord.x, coord.y, STRUCTURE_ROAD, 4) */ - } - /* + } + /* for (const coord of contigiousProtectionCoords) this.room.coordVisual(coord.x, coord.y) for (const packedCoord of minCutCoords) { const coord = unpackNumAsCoord(packedCoord) this.room.coordVisual(coord.x, coord.y, customColors.green) } */ - this.minCutCoords = minCutCoords - } - private groupMinCutCoords() { - if (this.groupedMinCutCoords) return + this.minCutCoords = minCutCoords + } + private groupMinCutCoords() { + if (this.groupedMinCutCoords) return - // Construct a costMatrix to store visited positions + // Construct a costMatrix to store visited positions - const visitedCoords = new Uint8Array(2500) + const visitedCoords = new Uint8Array(2500) - const groupedMinCutCoords: Coord[][] = [] - let groupIndex = 0 + const groupedMinCutCoords: Coord[][] = [] + let groupIndex = 0 - // Loop through each pos of positions + // Loop through each pos of positions - for (const packedCoord of this.minCutCoords) { - const coord = unpackNumAsCoord(packedCoord) - - if (visitedCoords[packAsNum(coord)] === 1) continue - visitedCoords[packAsNum(coord)] = 1 + for (const packedCoord of this.minCutCoords) { + const coord = unpackNumAsCoord(packedCoord) - groupedMinCutCoords[groupIndex] = [new RoomPosition(coord.x, coord.y, this.room.name)] + if (visitedCoords[packAsNum(coord)] === 1) continue + visitedCoords[packAsNum(coord)] = 1 - // Construct values for floodFilling + groupedMinCutCoords[groupIndex] = [new RoomPosition(coord.x, coord.y, this.room.name)] - let thisGeneration = [coord] - let nextGeneration: Coord[] = [] - let groupSize = 0 + // Construct values for floodFilling - // So long as there are positions in this gen + let thisGeneration = [coord] + let nextGeneration: Coord[] = [] + let groupSize = 0 - while (thisGeneration.length) { - // Reset next gen + // So long as there are positions in this gen - nextGeneration = [] + while (thisGeneration.length) { + // Reset next gen - // Iterate through positions of this gen + nextGeneration = [] - for (const pos of thisGeneration) { - // Loop through adjacent positions + // Iterate through positions of this gen - for (const adjCoord of findAdjacentCoordsToCoord(pos)) { - const packedAdjacentCoord = packAsNum(adjCoord) + for (const pos of thisGeneration) { + // Loop through adjacent positions - // Iterate if the adjacent pos has been visited or isn't a tile + for (const adjCoord of findAdjacentCoordsToCoord(pos)) { + const packedAdjacentCoord = packAsNum(adjCoord) - if (visitedCoords[packedAdjacentCoord] === 1) continue - visitedCoords[packedAdjacentCoord] = 1 + // Iterate if the adjacent pos has been visited or isn't a tile - // If a rampart is not planned for this position, iterate + if (visitedCoords[packedAdjacentCoord] === 1) continue + visitedCoords[packedAdjacentCoord] = 1 - if (!this.minCutCoords.has(packedAdjacentCoord)) continue + // If a rampart is not planned for this position, iterate - // Add it to the next gen and this group + if (!this.minCutCoords.has(packedAdjacentCoord)) continue - groupedMinCutCoords[groupIndex].push( - new RoomPosition(adjCoord.x, adjCoord.y, this.room.name), - ) + // Add it to the next gen and this group - groupSize += 1 - nextGeneration.push(adjCoord) - } - } + groupedMinCutCoords[groupIndex].push( + new RoomPosition(adjCoord.x, adjCoord.y, this.room.name), + ) - if (groupSize >= maxRampartGroupSize) break + groupSize += 1 + nextGeneration.push(adjCoord) + } + } - // Set this gen to next gen + if (groupSize >= maxRampartGroupSize) break - thisGeneration = nextGeneration - } + // Set this gen to next gen - // Config for next group + thisGeneration = nextGeneration + } - groupIndex += 1 - } + // Config for next group - this.groupedMinCutCoords = groupedMinCutCoords + groupIndex += 1 } - /** - * Flood fill from exits, recording coords that aren't procted - */ - private findUnprotectedCoords() { - if (this.unprotectedCoords) return - - const unprotectedCoords = new Uint8Array(2500) - let visitedCoords = new Uint8Array(2500) - let thisGeneration = this.exitCoords - let nextGeneration: Coord[] - for (const coord of thisGeneration) { - const packedCoord = packAsNum(coord) - visitedCoords[packedCoord] = 1 - unprotectedCoords[packedCoord] = 255 - } - - while (thisGeneration.length) { - nextGeneration = [] + this.groupedMinCutCoords = groupedMinCutCoords + } + /** + * Flood fill from exits, recording coords that aren't procted + */ + private findUnprotectedCoords() { + if (this.unprotectedCoords) return + + const unprotectedCoords = new Uint8Array(2500) + let visitedCoords = new Uint8Array(2500) + let thisGeneration = this.exitCoords + let nextGeneration: Coord[] + + for (const coord of thisGeneration) { + const packedCoord = packAsNum(coord) + visitedCoords[packedCoord] = 1 + unprotectedCoords[packedCoord] = 255 + } - // Iterate through positions of this gen + while (thisGeneration.length) { + nextGeneration = [] - for (const coord of thisGeneration) { - // Add viable adjacent coords to the next generation + // Iterate through positions of this gen - for (const offset of adjacentOffsets) { - const adjCoord = { - x: coord.x + offset.x, - y: coord.y + offset.y, - } + for (const coord of thisGeneration) { + // Add viable adjacent coords to the next generation - if (!isXYInRoom(adjCoord.x, adjCoord.y)) continue + for (const offset of adjacentOffsets) { + const adjCoord = { + x: coord.x + offset.x, + y: coord.y + offset.y, + } - const packedAdjCoord = packAsNum(adjCoord) + if (!isXYInRoom(adjCoord.x, adjCoord.y)) continue - if (visitedCoords[packedAdjCoord] === 1) continue - visitedCoords[packedAdjCoord] = 1 + const packedAdjCoord = packAsNum(adjCoord) - // We have hit a barrier + if (visitedCoords[packedAdjCoord] === 1) continue + visitedCoords[packedAdjCoord] = 1 - if (this.terrainCoords[packedAdjCoord] === 255) continue - if (this.minCutCoords.has(packedAdjCoord)) continue + // We have hit a barrier - unprotectedCoords[packedAdjCoord] = 255 - nextGeneration.push(adjCoord) + if (this.terrainCoords[packedAdjCoord] === 255) continue + if (this.minCutCoords.has(packedAdjCoord)) continue - for (const adjCoord2 of findCoordsInRange(adjCoord, 3)) { - const packedAdjCoord2 = packAsNum(adjCoord2) - if (this.terrainCoords[packedAdjCoord2] > 0) continue - if (this.minCutCoords.has(packedAdjCoord2)) continue + unprotectedCoords[packedAdjCoord] = 255 + nextGeneration.push(adjCoord) - const currentWeight = unprotectedCoords[packedAdjCoord2] + for (const adjCoord2 of findCoordsInRange(adjCoord, 3)) { + const packedAdjCoord2 = packAsNum(adjCoord2) + if (this.terrainCoords[packedAdjCoord2] > 0) continue + if (this.minCutCoords.has(packedAdjCoord2)) continue - if (this.roadCoords[packedAdjCoord2] === 1) { - unprotectedCoords[packedAdjCoord2] = Math.max( - unprotectedCoordWeight * 0.5, - currentWeight, - ) - continue - } + const currentWeight = unprotectedCoords[packedAdjCoord2] - unprotectedCoords[packedAdjCoord2] = Math.max( - unprotectedCoordWeight, - currentWeight, - ) - } - } + if (this.roadCoords[packedAdjCoord2] === 1) { + unprotectedCoords[packedAdjCoord2] = Math.max( + unprotectedCoordWeight * 0.5, + currentWeight, + ) + continue } - // Set up for next generation - - thisGeneration = nextGeneration + unprotectedCoords[packedAdjCoord2] = Math.max(unprotectedCoordWeight, currentWeight) + } } + } - const addedMinCutRamparts: Coord[] = [] + // Set up for next generation - // Weight coords near ramparts that could be ranged attacked + thisGeneration = nextGeneration + } - for (const packedCoord of this.minCutCoords) { - const coord = unpackNumAsCoord(packedCoord) + const addedMinCutRamparts: Coord[] = [] - forCoordsInRange(coord, 2, adjCoord => { - const packedAdjCoord = packAsNum(adjCoord) - if (this.terrainCoords[packedAdjCoord] > 0) return - if (unprotectedCoords[packedAdjCoord] === 255) return + // Weight coords near ramparts that could be ranged attacked - if (!this.minCutCoords.has(packedAdjCoord) && getRange(coord, adjCoord) === 1) { - this.rampartCoords[packedAdjCoord] = 1 + for (const packedCoord of this.minCutCoords) { + const coord = unpackNumAsCoord(packedCoord) - addedMinCutRamparts.push(adjCoord) - } + forCoordsInRange(coord, 2, adjCoord => { + const packedAdjCoord = packAsNum(adjCoord) + if (this.terrainCoords[packedAdjCoord] > 0) return + if (unprotectedCoords[packedAdjCoord] === 255) return - if (this.roadCoords[packedAdjCoord] === 1) { - unprotectedCoords[packedAdjCoord] = unprotectedCoordWeight * 0.5 - return - } + if (!this.minCutCoords.has(packedAdjCoord) && getRange(coord, adjCoord) === 1) { + this.rampartCoords[packedAdjCoord] = 1 - unprotectedCoords[packedAdjCoord] = unprotectedCoordWeight - }) + addedMinCutRamparts.push(adjCoord) } - this.stampAnchors.minCutRampart = - this.stampAnchors.minCutRampart.concat(addedMinCutRamparts) - this.unprotectedCoords = unprotectedCoords + if (this.roadCoords[packedAdjCoord] === 1) { + unprotectedCoords[packedAdjCoord] = unprotectedCoordWeight * 0.5 + return + } + + unprotectedCoords[packedAdjCoord] = unprotectedCoordWeight + }) } - private onboardingRamparts() { - if (this.stampAnchors.onboardingRampart.length) return - const onboardingCoords: Set = new Set() - const hubAnchorPos = new RoomPosition( - this.stampAnchors.hub[0].x, - this.stampAnchors.hub[0].y, - this.room.name, - ) + this.stampAnchors.minCutRampart = this.stampAnchors.minCutRampart.concat(addedMinCutRamparts) + this.unprotectedCoords = unprotectedCoords + } + private onboardingRamparts() { + if (this.stampAnchors.onboardingRampart.length) return - for (const group of this.groupedMinCutCoords) { - const [closestCoord] = findClosestCoord(hubAnchorPos, group) + const onboardingCoords: Set = new Set() + const hubAnchorPos = new RoomPosition( + this.stampAnchors.hub[0].x, + this.stampAnchors.hub[0].y, + this.room.name, + ) - // Path from the hubAnchor to the cloestPosToAnchor + for (const group of this.groupedMinCutCoords) { + const [closestCoord] = findClosestCoord(hubAnchorPos, group) - const path = customPathFinder.findPath({ - origin: new RoomPosition(closestCoord.x, closestCoord.y, this.room.name), - goals: [{ pos: hubAnchorPos, range: 2 }], - weightCoordMaps: [this.diagonalCoords, this.roadCoords, this.unprotectedCoords], - plainCost: defaultRoadPlanningPlainCost * 2, - swampCost: defaultSwampCost * 2, - }) + // Path from the hubAnchor to the cloestPosToAnchor - // Construct the onboardingIndex + const path = customPathFinder.findPath({ + origin: new RoomPosition(closestCoord.x, closestCoord.y, this.room.name), + goals: [{ pos: hubAnchorPos, range: 2 }], + weightCoordMaps: [this.diagonalCoords, this.roadCoords, this.unprotectedCoords], + plainCost: defaultRoadPlanningPlainCost * 2, + swampCost: defaultSwampCost * 2, + }) - let onboardingIndex = 0 - let onboardingCount = 0 - let forThreat = false + // Construct the onboardingIndex - // So long as there is a pos in path with an index of onboardingIndex + let onboardingIndex = 0 + let onboardingCount = 0 + let forThreat = false - while (path[onboardingIndex]) { - // Get the pos in path with an index of onboardingIndex + // So long as there is a pos in path with an index of onboardingIndex - const coord = path[onboardingIndex] - const packedCoord = packAsNum(coord) + while (path[onboardingIndex]) { + // Get the pos in path with an index of onboardingIndex - onboardingIndex += 1 + const coord = path[onboardingIndex] + const packedCoord = packAsNum(coord) - // If there are already rampart plans at this pos + onboardingIndex += 1 - if (this.minCutCoords.has(packedCoord) && !onboardingCoords.has(packedCoord)) - continue + // If there are already rampart plans at this pos - // Record the coord + if (this.minCutCoords.has(packedCoord) && !onboardingCoords.has(packedCoord)) continue - /* this.roadCoords[packedCoord] = 1 - this.basePlans.setXY(coord.x, coord.y, STRUCTURE_ROAD, 4) */ - onboardingCoords.add(packedCoord) - this.rampartCoords[packedCoord] = 1 + // Record the coord - onboardingCount += 1 - if (forThreat) break - if (onboardingCount === minOnboardingRamparts) forThreat = true - } + /* this.roadCoords[packedCoord] = 1 + this.basePlans.setXY(coord.x, coord.y, STRUCTURE_ROAD, 4) */ + onboardingCoords.add(packedCoord) + this.rampartCoords[packedCoord] = 1 - for (let i = Math.max(onboardingIndex - 1, 0); i < path.length; i++) { - const pos = path[i] + onboardingCount += 1 + if (forThreat) break + if (onboardingCount === minOnboardingRamparts) forThreat = true + } - this.roadCoords[packAsNum(pos)] = 1 - this.setBasePlansXY(pos.x, pos.y, STRUCTURE_ROAD, 4) - } - } + for (let i = Math.max(onboardingIndex - 1, 0); i < path.length; i++) { + const pos = path[i] - this.stampAnchors.onboardingRampart = Array.from(onboardingCoords).map(packedCoord => - unpackNumAsCoord(packedCoord), - ) + this.roadCoords[packAsNum(pos)] = 1 + this.setBasePlansXY(pos.x, pos.y, STRUCTURE_ROAD, 4) + } } - private findOutsideMinCut() { - if (this.outsideMinCut) return - const outsideMinCut: Set = new Set() + this.stampAnchors.onboardingRampart = Array.from(onboardingCoords).map(packedCoord => + unpackNumAsCoord(packedCoord), + ) + } + private findOutsideMinCut() { + if (this.outsideMinCut) return - const visitedCoords = new Uint8Array(2500) - let thisGeneration = this.minCutCoords - for (const packedCoord of thisGeneration) { - visitedCoords[packedCoord] = 1 - } + const outsideMinCut: Set = new Set() - let nextGeneration: Set - let depth = 0 + const visitedCoords = new Uint8Array(2500) + let thisGeneration = this.minCutCoords + for (const packedCoord of thisGeneration) { + visitedCoords[packedCoord] = 1 + } - while (thisGeneration.size) { - nextGeneration = new Set() + let nextGeneration: Set + let depth = 0 - for (const packedCoord of thisGeneration) { - const coord = unpackNumAsCoord(packedCoord) - forAdjacentCoords(coord, adjCoord => { - const packedAdjCoord = packAsNum(adjCoord) + while (thisGeneration.size) { + nextGeneration = new Set() - if (visitedCoords[packedAdjCoord] === 1) return - visitedCoords[packedAdjCoord] = 1 + for (const packedCoord of thisGeneration) { + const coord = unpackNumAsCoord(packedCoord) + forAdjacentCoords(coord, adjCoord => { + const packedAdjCoord = packAsNum(adjCoord) - if (this.unprotectedCoords[packedAdjCoord] !== 255) return + if (visitedCoords[packedAdjCoord] === 1) return + visitedCoords[packedAdjCoord] = 1 - outsideMinCut.add(packedAdjCoord) - nextGeneration.add(packedAdjCoord) - }) - } + if (this.unprotectedCoords[packedAdjCoord] !== 255) return - depth += 1 - if (depth >= 4) break + outsideMinCut.add(packedAdjCoord) + nextGeneration.add(packedAdjCoord) + }) + } - thisGeneration = nextGeneration - depth += 1 - } + depth += 1 + if (depth >= 4) break - this.outsideMinCut = outsideMinCut + thisGeneration = nextGeneration + depth += 1 } - private findInsideMinCut() { - if (this.insideMinCut) return - const insideMinCut: Set = new Set() - /* + this.outsideMinCut = outsideMinCut + } + private findInsideMinCut() { + if (this.insideMinCut) return + + const insideMinCut: Set = new Set() + /* for (let x = 0; x < roomDimensions; x++) { for (let y = 0; y < roomDimensions; y++) { const packedCoord = packXYAsNum(x, y) @@ -2884,461 +2870,455 @@ export class RemotePlanner { } */ - const visitedCoords = new Uint8Array(2500) - let thisGeneration = this.minCutCoords - for (const packedCoord of thisGeneration) { - visitedCoords[packedCoord] = 1 - } - let nextGeneration: Set - let depth = 0 - - while (thisGeneration.size) { - nextGeneration = new Set() + const visitedCoords = new Uint8Array(2500) + let thisGeneration = this.minCutCoords + for (const packedCoord of thisGeneration) { + visitedCoords[packedCoord] = 1 + } + let nextGeneration: Set + let depth = 0 - for (const packedCoord of thisGeneration) { - const coord = unpackNumAsCoord(packedCoord) - forAdjacentCoords(coord, adjCoord => { - const packedAdjCoord = packAsNum(adjCoord) + while (thisGeneration.size) { + nextGeneration = new Set() - if (visitedCoords[packedAdjCoord] === 1) return - visitedCoords[packedAdjCoord] = 1 + for (const packedCoord of thisGeneration) { + const coord = unpackNumAsCoord(packedCoord) + forAdjacentCoords(coord, adjCoord => { + const packedAdjCoord = packAsNum(adjCoord) - if (this.roadCoords[packedAdjCoord] > 0) return - if (this.unprotectedCoords[packedAdjCoord] === 255) return + if (visitedCoords[packedAdjCoord] === 1) return + visitedCoords[packedAdjCoord] = 1 - nextGeneration.add(packedAdjCoord) + if (this.roadCoords[packedAdjCoord] > 0) return + if (this.unprotectedCoords[packedAdjCoord] === 255) return - if (this.rampartCoords[packedAdjCoord] === 1) return - insideMinCut.add(packedAdjCoord) - }) - } + nextGeneration.add(packedAdjCoord) - depth += 1 - if (depth >= 5) break + if (this.rampartCoords[packedAdjCoord] === 1) return + insideMinCut.add(packedAdjCoord) + }) + } - thisGeneration = nextGeneration - } + depth += 1 + if (depth >= 5) break - this.insideMinCut = insideMinCut + thisGeneration = nextGeneration } - /** - * Sort of genetic algorithm to find best tower placement combination - */ - private towers() { - if (this.stampAnchors.tower.length) return - - if (this.bestTowerScore === undefined) { - this.bestTowerScore = 0 - this.bestTowerCoords = [] - this.towerAttemptIndex = 0 - } - - for (; this.towerAttemptIndex < 1000; this.towerAttemptIndex++) { - const towerOptions = Array.from(this.insideMinCut) - const towerCoords: TowerDamageCoord[] = [] - const damageMap = new Uint32Array(roomDimensions * roomDimensions) - - for (let towers = 0; towers < CONTROLLER_STRUCTURES.tower[8]; towers++) { - const index = randomIntRange(0, towerOptions.length) - const packedCoord = towerOptions[index] - towerOptions.splice(index, 1) - const coord = unpackNumAsCoord(packedCoord) as TowerDamageCoord - let minIndividualDamage = Infinity - - for (const packedCoord of this.outsideMinCut) { - const damage = towerUtils.estimateRangeDamage( - coord, - unpackNumAsCoord(packedCoord), - ) - damageMap[packedCoord] += damage - - if (damage >= minIndividualDamage) continue - minIndividualDamage = damage - } - - coord.minDamage = minIndividualDamage - towerCoords.push(coord) - } + this.insideMinCut = insideMinCut + } + /** + * Sort of genetic algorithm to find best tower placement combination + */ + private towers() { + if (this.stampAnchors.tower.length) return + + if (this.bestTowerScore === undefined) { + this.bestTowerScore = 0 + this.bestTowerCoords = [] + this.towerAttemptIndex = 0 + } - let minDamage = Infinity + for (; this.towerAttemptIndex < 1000; this.towerAttemptIndex++) { + const towerOptions = Array.from(this.insideMinCut) + const towerCoords: TowerDamageCoord[] = [] + const damageMap = new Uint32Array(roomDimensions * roomDimensions) - for (let x = 0; x < roomDimensions; x++) { - for (let y = 0; y < roomDimensions; y++) { - const damage = damageMap[packXYAsNum(x, y)] - if (damage === 0 || damage >= minDamage) continue + for (let towers = 0; towers < CONTROLLER_STRUCTURES.tower[8]; towers++) { + const index = randomIntRange(0, towerOptions.length) + const packedCoord = towerOptions[index] + towerOptions.splice(index, 1) - minDamage = damage - } - } + const coord = unpackNumAsCoord(packedCoord) as TowerDamageCoord + let minIndividualDamage = Infinity - if (minDamage <= this.bestTowerScore) continue + for (const packedCoord of this.outsideMinCut) { + const damage = towerUtils.estimateRangeDamage(coord, unpackNumAsCoord(packedCoord)) + damageMap[packedCoord] += damage - this.bestTowerScore = minDamage = minDamage - this.bestTowerCoords = towerCoords + if (damage >= minIndividualDamage) continue + minIndividualDamage = damage } - // Make sure we plan and path for the best towers first + coord.minDamage = minIndividualDamage + towerCoords.push(coord) + } - this.bestTowerCoords.sort((a, b) => a.minDamage - b.minDamage).reverse() + let minDamage = Infinity - for (const coord of this.bestTowerCoords) { - this.setBasePlansXY(coord.x, coord.y, STRUCTURE_TOWER) + for (let x = 0; x < roomDimensions; x++) { + for (let y = 0; y < roomDimensions; y++) { + const damage = damageMap[packXYAsNum(x, y)] + if (damage === 0 || damage >= minDamage) continue - const packedCoord = packXYAsNum(coord.x, coord.y) - this.baseCoords[packedCoord] = 255 - this.roadCoords[packedCoord] = 255 + minDamage = damage } + } + + if (minDamage <= this.bestTowerScore) continue - this.stampAnchors.tower = this.bestTowerCoords + this.bestTowerScore = minDamage = minDamage + this.bestTowerCoords = towerCoords } - private towerPaths() { - if (this.finishedTowerPaths) return - const hubAnchorPos = new RoomPosition( - this.stampAnchors.hub[0].x, - this.stampAnchors.hub[0].y, - this.room.name, - ) + // Make sure we plan and path for the best towers first - for (const coord of this.bestTowerCoords) { - const minRCL = this.basePlans.getXY(coord.x, coord.y)[0].minRCL - - const path = customPathFinder.findPath({ - origin: new RoomPosition(coord.x, coord.y, this.room.name), - goals: [ - { - pos: hubAnchorPos, - range: 2, - }, - ], - weightCoordMaps: [this.diagonalCoords, this.roadCoords, this.unprotectedCoords], - plainCost: defaultRoadPlanningPlainCost * 2, - swampCost: defaultSwampCost * 2, - }) - - for (const pos of path) { - this.setBasePlansXY(pos.x, pos.y, STRUCTURE_ROAD, minRCL) - this.roadCoords[packAsNum(pos)] = 1 - } - } + this.bestTowerCoords.sort((a, b) => a.minDamage - b.minDamage).reverse() - this.finishedTowerPaths = true - } - private protectFromNuke(coord: Coord, minRCL: number) {} - private shield(coord: Coord, minRCL: number, coversStructure: boolean = true) { - const packedCoord = packAsNum(coord) - if (this.unprotectedCoords[packedCoord] === 0) return + for (const coord of this.bestTowerCoords) { + this.setBasePlansXY(coord.x, coord.y, STRUCTURE_TOWER) - this.stampAnchors.shieldRampart.push(coord) - this.rampartCoords[packedCoord] = 1 - this.unprotectedCoords[packedCoord] = 0 + const packedCoord = packXYAsNum(coord.x, coord.y) + this.baseCoords[packedCoord] = 255 + this.roadCoords[packedCoord] = 255 } - private generalShield() { - if (this.generalShielded) return - - let unprotectedSources = 0 - // Protect source structures and best harvest pos - - for (const coord of this.stampAnchors.sourceExtension) this.shield(coord, 4) - for (const coord of this.stampAnchors.sourceLink) this.shield(coord, 4) - for (const sourceIndex in this.sourceHarvestPositions) { - if ( - this.unprotectedCoords[packAsNum(this.sourceHarvestPositions[sourceIndex][0])] === - 255 - ) { - unprotectedSources += 1 - } - this.shield(this.sourceHarvestPositions[sourceIndex][0], 4, false) - } + this.stampAnchors.tower = this.bestTowerCoords + } + private towerPaths() { + if (this.finishedTowerPaths) return + + const hubAnchorPos = new RoomPosition( + this.stampAnchors.hub[0].x, + this.stampAnchors.hub[0].y, + this.room.name, + ) + + for (const coord of this.bestTowerCoords) { + const minRCL = this.basePlans.getXY(coord.x, coord.y)[0].minRCL + + const path = customPathFinder.findPath({ + origin: new RoomPosition(coord.x, coord.y, this.room.name), + goals: [ + { + pos: hubAnchorPos, + range: 2, + }, + ], + weightCoordMaps: [this.diagonalCoords, this.roadCoords, this.unprotectedCoords], + plainCost: defaultRoadPlanningPlainCost * 2, + swampCost: defaultSwampCost * 2, + }) + + for (const pos of path) { + this.setBasePlansXY(pos.x, pos.y, STRUCTURE_ROAD, minRCL) + this.roadCoords[packAsNum(pos)] = 1 + } + } - // Protect position of + this.finishedTowerPaths = true + } + private protectFromNuke(coord: Coord, minRCL: number) {} + private shield(coord: Coord, minRCL: number, coversStructure: boolean = true) { + const packedCoord = packAsNum(coord) + if (this.unprotectedCoords[packedCoord] === 0) return + + this.stampAnchors.shieldRampart.push(coord) + this.rampartCoords[packedCoord] = 1 + this.unprotectedCoords[packedCoord] = 0 + } + private generalShield() { + if (this.generalShielded) return + + let unprotectedSources = 0 + + // Protect source structures and best harvest pos + + for (const coord of this.stampAnchors.sourceExtension) this.shield(coord, 4) + for (const coord of this.stampAnchors.sourceLink) this.shield(coord, 4) + for (const sourceIndex in this.sourceHarvestPositions) { + if (this.unprotectedCoords[packAsNum(this.sourceHarvestPositions[sourceIndex][0])] === 255) { + unprotectedSources += 1 + } + this.shield(this.sourceHarvestPositions[sourceIndex][0], 4, false) + } - this.shield(this.centerUpgradePos, 4) + // Protect position of - // Protect around the controller + this.shield(this.centerUpgradePos, 4) - forAdjacentCoords(this.room.controller.pos, adjCoord => { - if (this.unprotectedCoords[packAsNum(adjCoord)] !== 255) return - this.isControllerProtected = false + // Protect around the controller - this.shield(adjCoord, 4, false) - }) + forAdjacentCoords(this.room.controller.pos, adjCoord => { + if (this.unprotectedCoords[packAsNum(adjCoord)] !== 255) return + this.isControllerProtected = false - // Protect important structures + this.shield(adjCoord, 4, false) + }) - for (const packedCoord in this.basePlans.map) { - const coord = unpackCoord(packedCoord) - const packedNumCoord = packAsNum(coord) - const coordData = this.basePlans.map[packedCoord] + // Protect important structures - for (const data of coordData) { - if (!structureTypesToProtectSet.has(data.structureType)) continue - if (this.rampartPlans.getXY(coord.x, coord.y)) continue + for (const packedCoord in this.basePlans.map) { + const coord = unpackCoord(packedCoord) + const packedNumCoord = packAsNum(coord) + const coordData = this.basePlans.map[packedCoord] - const isProtected = this.unprotectedCoords[packedNumCoord] === 0 + for (const data of coordData) { + if (!structureTypesToProtectSet.has(data.structureType)) continue + if (this.rampartPlans.getXY(coord.x, coord.y)) continue - this.stampAnchors.shieldRampart.push(coord) - this.rampartCoords[packedNumCoord] = 1 - this.unprotectedCoords[packedNumCoord] = 0 - } - } + const isProtected = this.unprotectedCoords[packedNumCoord] === 0 - this.unprotectedSources = unprotectedSources - this.generalShielded = true + this.stampAnchors.shieldRampart.push(coord) + this.rampartCoords[packedNumCoord] = 1 + this.unprotectedCoords[packedNumCoord] = 0 + } } - private findScore() { - if (this.score) return - let score = 0 - score += this.room.findSwampPlainsRatio() * 10 - score += this.sourcePaths.length + this.unprotectedSources = unprotectedSources + this.generalShielded = true + } + private findScore() { + if (this.score) return - // Prefer protecting the source even more if there is only one + let score = 0 + score += this.room.findSwampPlainsRatio() * 10 + score += this.sourcePaths.length - score += this.unprotectedSources * (30 / this.sourcePaths.length) + // Prefer protecting the source even more if there is only one - // Early RCL we want to have 3 or more harvest positions + score += this.unprotectedSources * (30 / this.sourcePaths.length) - for (const positions of this.sourceHarvestPositions) { - if (positions.length >= 3) continue - score += (3 - positions.length) * 5 - } - score += this.upgradePath.length - score += this.mineralPath.length / 100 - score += - this.stampAnchors.minCutRampart.length * 2 + - this.stampAnchors.shieldRampart.length + - this.stampAnchors.onboardingRampart.length - score += getRange(this.stampAnchors.hub[0], this.centerUpgradePos) / 10 - if (!this.isControllerProtected) score += 15 - score += (CONTROLLER_STRUCTURES.tower[8] * TOWER_POWER_ATTACK - this.bestTowerScore) / 100 - score += this.RCLPlannedStructureTypes[STRUCTURE_ROAD].structures / 100 - - // We want more exits - - score += 6 * 4 - for (const key in Game.map.describeExits(this.room.name)) { - score -= 6 - } + // Early RCL we want to have 3 or more harvest positions - this.score = Math.round(score) + for (const positions of this.sourceHarvestPositions) { + if (positions.length >= 3) continue + score += (3 - positions.length) * 5 + } + score += this.upgradePath.length + score += this.mineralPath.length / 100 + score += + this.stampAnchors.minCutRampart.length * 2 + + this.stampAnchors.shieldRampart.length + + this.stampAnchors.onboardingRampart.length + score += getRange(this.stampAnchors.hub[0], this.centerUpgradePos) / 10 + if (!this.isControllerProtected) score += 15 + score += (CONTROLLER_STRUCTURES.tower[8] * TOWER_POWER_ATTACK - this.bestTowerScore) / 100 + score += this.RCLPlannedStructureTypes[STRUCTURE_ROAD].structures / 100 + + // We want more exits + + score += 6 * 4 + for (const key in Game.map.describeExits(this.room.name)) { + score -= 6 } - private record() { - this.recording = true - - // Delete plan-specific properties - delete this.basePlans - delete this.rampartPlans - delete this.baseCoords - delete this.roadCoords - delete this.rampartCoords - delete this.byExitCoords - delete this.exitCoords - delete this.weightedDiagonalCoords - delete this.diagonalCoords - delete this.gridCoords - delete this.byPlannedRoad - delete this.protectCoords - delete this.protectedCoords - delete this.unprotectedCoords - delete this.minCutCoords - delete this.groupedMinCutCoords - delete this.insideMinCut - delete this.outsideMinCut - delete this.bestTowerScore - delete this.bestTowerCoords - delete this.towerAttemptIndex - delete this.RCLPlannedStructureTypes - - delete this.plannedGridCoords - delete this.finishedGrid - delete this.generalShielded - delete this.finishedFastFillerRoadPrune - delete this.markSourcesAvoid - delete this.finishedTowerPaths - - delete this.sourceHarvestPositions - delete this.sourcePaths - delete this.sourceStructureCoords - delete this.communeSources - delete this.mineralHarvestPositions - delete this.mineralPath - delete this.centerUpgradePos - delete this.upgradePath - delete this.inputLab2Coord - delete this.outputLabCoords - delete this.unprotectedSources - delete this.isControllerProtected - - this.recording = false - } - /** - * Find the plan with the lowest score - */ - private findBestPlanIndex() { - let bestScore = Infinity - let bestPlanIndex: number | undefined - - for (let i = 0; i < this.planAttempts.length; i++) { - const plan = this.planAttempts[i] - - if (plan.score >= bestScore) continue - - bestScore = plan.score - bestPlanIndex = i - } + this.score = Math.round(score) + } + private record() { + this.recording = true + + // Delete plan-specific properties + + delete this.basePlans + delete this.rampartPlans + delete this.baseCoords + delete this.roadCoords + delete this.rampartCoords + delete this.byExitCoords + delete this.exitCoords + delete this.weightedDiagonalCoords + delete this.diagonalCoords + delete this.gridCoords + delete this.byPlannedRoad + delete this.protectCoords + delete this.protectedCoords + delete this.unprotectedCoords + delete this.minCutCoords + delete this.groupedMinCutCoords + delete this.insideMinCut + delete this.outsideMinCut + delete this.bestTowerScore + delete this.bestTowerCoords + delete this.towerAttemptIndex + delete this.RCLPlannedStructureTypes + + delete this.plannedGridCoords + delete this.finishedGrid + delete this.generalShielded + delete this.finishedFastFillerRoadPrune + delete this.markSourcesAvoid + delete this.finishedTowerPaths + + delete this.sourceHarvestPositions + delete this.sourcePaths + delete this.sourceStructureCoords + delete this.communeSources + delete this.mineralHarvestPositions + delete this.mineralPath + delete this.centerUpgradePos + delete this.upgradePath + delete this.inputLab2Coord + delete this.outputLabCoords + delete this.unprotectedSources + delete this.isControllerProtected + + this.recording = false + } + /** + * Find the plan with the lowest score + */ + private findBestPlanIndex() { + let bestScore = Infinity + let bestPlanIndex: number | undefined + + for (let i = 0; i < this.planAttempts.length; i++) { + const plan = this.planAttempts[i] + + if (plan.score >= bestScore) continue + + bestScore = plan.score + bestPlanIndex = i + } - return bestPlanIndex - } - private choosePlan() { - const plan = this.planAttempts[this.findBestPlanIndex()] - const roomMemory = Memory.rooms[this.room.name] - - roomMemory[RoomMemoryKeys.score] = plan.score - roomMemory[RoomMemoryKeys.basePlans] = plan.basePlans - roomMemory[RoomMemoryKeys.rampartPlans] = plan.rampartPlans - roomMemory[RoomMemoryKeys.stampAnchors] = plan.stampAnchors - roomMemory[RoomMemoryKeys.communeSources] = plan.communeSources - roomMemory[RoomMemoryKeys.communeSourceHarvestPositions] = plan.sourceHarvestPositions - roomMemory[RoomMemoryKeys.communeSourcePaths] = plan.sourcePaths - roomMemory[RoomMemoryKeys.mineralPositions] = plan.mineralHarvestPositions - roomMemory[RoomMemoryKeys.mineralPath] = plan.mineralPath - roomMemory[RoomMemoryKeys.centerUpgradePos] = plan.centerUpgradePos - roomMemory[RoomMemoryKeys.upgradePath] = plan.upgradePath - roomMemory[RoomMemoryKeys.communePlanned] = true - } - private visualizeGrid() { - for (let x = 0; x < roomDimensions; x++) { - for (let y = 0; y < roomDimensions; y++) { - const packedCoord = packXYAsNum(x, y) - if (this.baseCoords[packedCoord] === 255) continue - if (this.gridCoords[packedCoord] === 0) continue + return bestPlanIndex + } + private choosePlan() { + const plan = this.planAttempts[this.findBestPlanIndex()] + const roomMemory = Memory.rooms[this.room.name] + + roomMemory[RoomMemoryKeys.score] = plan.score + roomMemory[RoomMemoryKeys.basePlans] = plan.basePlans + roomMemory[RoomMemoryKeys.rampartPlans] = plan.rampartPlans + roomMemory[RoomMemoryKeys.stampAnchors] = plan.stampAnchors + roomMemory[RoomMemoryKeys.communeSources] = plan.communeSources + roomMemory[RoomMemoryKeys.communeSourceHarvestPositions] = plan.sourceHarvestPositions + roomMemory[RoomMemoryKeys.communeSourcePaths] = plan.sourcePaths + roomMemory[RoomMemoryKeys.mineralPositions] = plan.mineralHarvestPositions + roomMemory[RoomMemoryKeys.mineralPath] = plan.mineralPath + roomMemory[RoomMemoryKeys.centerUpgradePos] = plan.centerUpgradePos + roomMemory[RoomMemoryKeys.upgradePath] = plan.upgradePath + roomMemory[RoomMemoryKeys.communePlanned] = true + } + private visualizeGrid() { + for (let x = 0; x < roomDimensions; x++) { + for (let y = 0; y < roomDimensions; y++) { + const packedCoord = packXYAsNum(x, y) + if (this.baseCoords[packedCoord] === 255) continue + if (this.gridCoords[packedCoord] === 0) continue - this.room.visual.structure(x, y, STRUCTURE_ROAD) - } - } + this.room.visual.structure(x, y, STRUCTURE_ROAD) + } } - private visualizeBestPlan() { - this.visualizePlan(this.findBestPlanIndex()) + } + private visualizeBestPlan() { + this.visualizePlan(this.findBestPlanIndex()) + } + private visualizePlans() { + if (this.planVisualizeIndex === undefined) this.planVisualizeIndex = 0 + else { + if (this.planVisualizeIndex >= this.planAttempts.length - 1) this.planVisualizeIndex = 0 + else this.planVisualizeIndex += 1 } - private visualizePlans() { - if (this.planVisualizeIndex === undefined) this.planVisualizeIndex = 0 - else { - if (this.planVisualizeIndex >= this.planAttempts.length - 1) this.planVisualizeIndex = 0 - else this.planVisualizeIndex += 1 - } - this.visualizePlan(this.planVisualizeIndex) - } - private visualizePlan(planIndex: number) { - const plan = this.planAttempts[planIndex] - const basePlans = BasePlans.unpack(plan.basePlans) + this.visualizePlan(this.planVisualizeIndex) + } + private visualizePlan(planIndex: number) { + const plan = this.planAttempts[planIndex] + const basePlans = BasePlans.unpack(plan.basePlans) - for (const packedCoord in basePlans.map) { - const coord = unpackCoord(packedCoord) - const coordData = basePlans.map[packedCoord] + for (const packedCoord in basePlans.map) { + const coord = unpackCoord(packedCoord) + const coordData = basePlans.map[packedCoord] - for (const data of coordData) { - if (data.structureType !== STRUCTURE_ROAD) continue + for (const data of coordData) { + if (data.structureType !== STRUCTURE_ROAD) continue - this.room.visual.structure(coord.x, coord.y, data.structureType) - } - } - - this.room.visual.connectRoads({ - opacity: 1, - }) + this.room.visual.structure(coord.x, coord.y, data.structureType) + } + } - for (const packedCoord in basePlans.map) { - const coord = unpackCoord(packedCoord) - const coordData = basePlans.map[packedCoord] + this.room.visual.connectRoads({ + opacity: 1, + }) - for (const data of coordData) { - if (data.structureType === STRUCTURE_ROAD) { - this.room.visual.text(data.minRCL.toString(), coord.x, coord.y) - continue - } + for (const packedCoord in basePlans.map) { + const coord = unpackCoord(packedCoord) + const coordData = basePlans.map[packedCoord] - this.room.visual.structure(coord.x, coord.y, data.structureType) - this.room.visual.text(data.minRCL.toString(), coord.x, coord.y) - } + for (const data of coordData) { + if (data.structureType === STRUCTURE_ROAD) { + this.room.visual.text(data.minRCL.toString(), coord.x, coord.y) + continue } - const rampartPlans = RampartPlans.unpack(plan.rampartPlans) + this.room.visual.structure(coord.x, coord.y, data.structureType) + this.room.visual.text(data.minRCL.toString(), coord.x, coord.y) + } + } - for (const packedCoord in rampartPlans.map) { - const coord = unpackCoord(packedCoord) + const rampartPlans = RampartPlans.unpack(plan.rampartPlans) - if (rampartPlans.get(packedCoord).buildForNuke) { - this.room.visual.structure(coord.x, coord.y, STRUCTURE_RAMPART, { opacity: 0.2 }) - continue - } + for (const packedCoord in rampartPlans.map) { + const coord = unpackCoord(packedCoord) - if (rampartPlans.get(packedCoord).buildForThreat) { - this.room.visual.structure(coord.x, coord.y, STRUCTURE_RAMPART, { opacity: 0.2 }) - continue - } - this.room.visual.structure(coord.x, coord.y, STRUCTURE_RAMPART, { opacity: 0.5 }) - } + if (rampartPlans.get(packedCoord).buildForNuke) { + this.room.visual.structure(coord.x, coord.y, STRUCTURE_RAMPART, { opacity: 0.2 }) + continue + } - const fastFillerStartCoord = this.fastFillerStartCoords[planIndex] - this.room.coordVisual(fastFillerStartCoord.x, fastFillerStartCoord.y, customColors.yellow) + if (rampartPlans.get(packedCoord).buildForThreat) { + this.room.visual.structure(coord.x, coord.y, STRUCTURE_RAMPART, { opacity: 0.2 }) + continue + } + this.room.visual.structure(coord.x, coord.y, STRUCTURE_RAMPART, { opacity: 0.5 }) + } - const stampAnchors = unpackStampAnchors(plan.stampAnchors) + const fastFillerStartCoord = this.fastFillerStartCoords[planIndex] + this.room.coordVisual(fastFillerStartCoord.x, fastFillerStartCoord.y, customColors.yellow) - this.room.visual.text( - 'Attempt: ' + (planIndex + 1), - stampAnchors.fastFiller[0].x, - stampAnchors.fastFiller[0].y, - ) - } - private visualizeCurrentPlan() { - for (const packedCoord in this.basePlans.map) { - const coord = unpackCoord(packedCoord) - const coordData = this.basePlans.map[packedCoord] + const stampAnchors = unpackStampAnchors(plan.stampAnchors) - for (const data of coordData) { - if (data.structureType !== STRUCTURE_ROAD) continue + this.room.visual.text( + 'Attempt: ' + (planIndex + 1), + stampAnchors.fastFiller[0].x, + stampAnchors.fastFiller[0].y, + ) + } + private visualizeCurrentPlan() { + for (const packedCoord in this.basePlans.map) { + const coord = unpackCoord(packedCoord) + const coordData = this.basePlans.map[packedCoord] - this.room.visual.structure(coord.x, coord.y, data.structureType) - } - } + for (const data of coordData) { + if (data.structureType !== STRUCTURE_ROAD) continue - this.room.visual.connectRoads({ - opacity: 1, - }) + this.room.visual.structure(coord.x, coord.y, data.structureType) + } + } - for (const packedCoord in this.basePlans.map) { - const coord = unpackCoord(packedCoord) - const coordData = this.basePlans.map[packedCoord] + this.room.visual.connectRoads({ + opacity: 1, + }) - for (const data of coordData) { - if (data.structureType === STRUCTURE_ROAD) { - this.room.visual.text(data.minRCL.toString(), coord.x, coord.y) - continue - } + for (const packedCoord in this.basePlans.map) { + const coord = unpackCoord(packedCoord) + const coordData = this.basePlans.map[packedCoord] - this.room.visual.structure(coord.x, coord.y, data.structureType) - this.room.visual.text(data.minRCL.toString(), coord.x, coord.y) - } + for (const data of coordData) { + if (data.structureType === STRUCTURE_ROAD) { + this.room.visual.text(data.minRCL.toString(), coord.x, coord.y) + continue } - for (const packedCoord in this.rampartPlans.map) { - const coord = unpackCoord(packedCoord) + this.room.visual.structure(coord.x, coord.y, data.structureType) + this.room.visual.text(data.minRCL.toString(), coord.x, coord.y) + } + } - if (this.rampartPlans.get(packedCoord).buildForThreat) { - this.room.visual.structure(coord.x, coord.y, STRUCTURE_RAMPART, { opacity: 0.2 }) - continue - } - this.room.visual.structure(coord.x, coord.y, STRUCTURE_RAMPART, { opacity: 0.5 }) - } + for (const packedCoord in this.rampartPlans.map) { + const coord = unpackCoord(packedCoord) + + if (this.rampartPlans.get(packedCoord).buildForThreat) { + this.room.visual.structure(coord.x, coord.y, STRUCTURE_RAMPART, { opacity: 0.2 }) + continue + } + this.room.visual.structure(coord.x, coord.y, STRUCTURE_RAMPART, { opacity: 0.5 }) + } - // Labs + // Labs - /* + /* this.room.coordVisual(this.stampAnchors.labs[0].x, this.stampAnchors.labs[0].y, customColors.orange) this.room.coordVisual(this.inputLab2Coord.x, this.inputLab2Coord.y, customColors.orange) @@ -3347,8 +3327,8 @@ export class RemotePlanner { this.room.visual.line(coord.x, coord.y, this.inputLab2Coord.x, this.inputLab2Coord.y) } */ - /* this.room.visualizeCoordMap(this.reverseExitFlood) */ - /* this.room.visualizeCoordMap(this.byPlannedRoad, true, 100) */ - /* this.room.visualizeCoordMap(this.terrainCoords, true) */ - } + /* this.room.visualizeCoordMap(this.reverseExitFlood) */ + /* this.room.visualizeCoordMap(this.byPlannedRoad, true, 100) */ + /* this.room.visualizeCoordMap(this.terrainCoords, true) */ + } } diff --git a/src/room/room.ts b/src/room/room.ts index 9d24a1260..a5dc4820a 100644 --- a/src/room/room.ts +++ b/src/room/room.ts @@ -61,33 +61,33 @@ import { BasePlans } from './construction/basePlans' import { RampartPlans } from './construction/rampartPlans' import { PathGoal, customPathFinder } from 'international/customPathFinder' import { roomNameUtils } from './roomNameUtils' -import { collectiveManager } from 'international/collective' +import { CollectiveManager } from 'international/collective' import { customLog } from 'utils/logging' import { structureUtils } from './structureUtils' import { remoteProcs } from './remoteProcs' import { logisticsProcs } from './logisticsProcs' export interface InterpretedRoomEvent { - eventType: EventConstant - actionType?: EventAttackType | EventHealType - amount?: number - target?: Id + eventType: EventConstant + actionType?: EventAttackType | EventHealType + amount?: number + target?: Id } export interface DeadCreepNames { - my: Set - enemy: Set - ally: Set + my: Set + enemy: Set + ally: Set } export interface NotMyCreeps { - ally: Creep[] - enemy: Creep[] + ally: Creep[] + enemy: Creep[] } export interface NotMyConstructionSites { - ally: ConstructionSite[] - enemy: ConstructionSite[] + ally: ConstructionSite[] + enemy: ConstructionSite[] } export class RoomManager { @@ -542,10 +542,10 @@ export class RoomManager { isStartRoom() { return ( - collectiveManager.communes.size === 1 && + CollectiveManager.communes.size === 1 && this.room.controller.my && this.room.controller.safeMode && - collectiveManager.communes.has(this.room.name) + CollectiveManager.communes.has(this.room.name) ) } @@ -1727,7 +1727,7 @@ export class RoomManager { if (this._quadCostMatrix) return this._quadCostMatrix const quadCostMatrix = new PathFinder.CostMatrix() - const terrainCoords = new Uint8Array(collectiveManager.getTerrainBinary(this.room.name)) + const terrainCoords = new Uint8Array(CollectiveManager.getTerrainBinary(this.room.name)) const roadCoords = new Set() for (const road of this.structures.road) roadCoords.add(packCoord(road.pos)) @@ -1880,7 +1880,7 @@ export class RoomManager { if (this._quadBulldozeCostMatrix) return this._quadBulldozeCostMatrix const quadBulldozeCostMatrix = new PathFinder.CostMatrix() - const terrainCoords = new Uint8Array(collectiveManager.getTerrainBinary(this.room.name)) + const terrainCoords = new Uint8Array(CollectiveManager.getTerrainBinary(this.room.name)) const roadCoords = new Set() for (const road of this.structures.road) roadCoords.add(packCoord(road.pos)) diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index 71bea602b..0bf89b879 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -29,7 +29,7 @@ import { randomIntRange, roundTo, } from 'utils/utils' -import { collectiveManager } from 'international/collective' +import { CollectiveManager } from 'international/collective' import { packCoord, packCoordList, packXYAsCoord, unpackPosList } from 'other/codec' import { playerManager } from 'international/players' import { roomNameUtils } from './roomNameUtils' @@ -174,7 +174,7 @@ Room.prototype.scoutMyRemote = function (scoutingRoom) { if ( roomMemory[RoomMemoryKeys.type] === RoomTypes.remote && - !collectiveManager.communes.has(roomMemory[RoomMemoryKeys.commune]) + !CollectiveManager.communes.has(roomMemory[RoomMemoryKeys.commune]) ) roomMemory[RoomMemoryKeys.type] = RoomTypes.neutral @@ -242,7 +242,7 @@ Room.prototype.scoutMyRemote = function (scoutingRoom) { for (const pos of path) { newSourceEfficacy += - collectiveManager.getTerrainBinary(pos.roomName)[packAsNum(pos)] === + CollectiveManager.getTerrainBinary(pos.roomName)[packAsNum(pos)] === TERRAIN_MASK_SWAMP ? defaultSwampCost : 1 @@ -847,7 +847,7 @@ Room.prototype.distanceTransform = function ( const distanceCoords = new Uint8Array(2500) - if (!initialCoords) initialCoords = new Uint8Array(collectiveManager.getTerrainBinary(this.name)) + if (!initialCoords) initialCoords = new Uint8Array(CollectiveManager.getTerrainBinary(this.name)) let x let y @@ -942,7 +942,7 @@ Room.prototype.diagonalDistanceTransform = function ( const distanceCoords = new Uint8Array(2500) - if (!initialCoords) initialCoords = new Uint8Array(collectiveManager.getTerrainBinary(this.name)) + if (!initialCoords) initialCoords = new Uint8Array(CollectiveManager.getTerrainBinary(this.name)) let x let y @@ -1559,7 +1559,7 @@ Room.prototype.createPowerTask = function (target, powerType, priority) { const effect = target.effectsData.get(powerType) const cooldown = effect ? effect.ticksRemaining : 0 - const ID = collectiveManager.newTickID() + const ID = CollectiveManager.newTickID() return (this.powerTasks[ID] = { taskID: ID, @@ -1636,7 +1636,7 @@ Room.prototype.createRoomLogisticsRequest = function (args) { if (args.priority === undefined) args.priority = 1 else args.priority = roundTo(args.priority / 20, 2) - const ID = collectiveManager.newTickID() + const ID = CollectiveManager.newTickID() if (Game.flags[FlagNames.debugRoomLogistics]) { if (args.type === RoomLogisticsRequestTypes.offer) { diff --git a/src/room/roomNameUtils.ts b/src/room/roomNameUtils.ts index 3b5facf9d..0f88016fb 100644 --- a/src/room/roomNameUtils.ts +++ b/src/room/roomNameUtils.ts @@ -12,15 +12,15 @@ import { roomTypeProperties, roomTypes, } from 'international/constants' -import { collectiveManager } from 'international/collective' +import { CollectiveManager } from 'international/collective' import { - findAdjacentCoordsToCoord, - forAdjacentCoords, - forRoomNamesAroundRangeXY, - getRange, - packAsNum, - packXYAsNum, - roundTo, + findAdjacentCoordsToCoord, + forAdjacentCoords, + forRoomNamesAroundRangeXY, + getRange, + packAsNum, + packXYAsNum, + roundTo, } from 'utils/utils' import { unpackPosAt } from 'other/codec' import { CommuneManager } from './commune/commune' @@ -33,9 +33,9 @@ import { roomNameProcs } from './roomNameProcs' * @returns Wether or not the position should be flooded next generation */ type FloodForCoordCheck = ( - coord: Coord, - packedCoord: number, - generation?: number, + coord: Coord, + packedCoord: number, + generation?: number, ) => boolean | Result.stop export class RoomNameUtils { @@ -107,7 +107,7 @@ export class RoomNameUtils { const roomMemory = Memory.rooms[roomName] const mineralType = roomMemory[RoomMemoryKeys.mineralType] const mineralScore = - collectiveManager.mineralNodes[mineralType] - collectiveManager.avgCommunesPerMineral + CollectiveManager.mineralNodes[mineralType] - CollectiveManager.avgCommunesPerMineral dynamicScore += mineralScore * 40 dynamicScore = roundTo(dynamicScore, 2) @@ -168,6 +168,7 @@ export class RoomNameUtils { return false } + /** * Removes roomType-based values in the room's memory that don't match its type */ @@ -184,13 +185,14 @@ export class RoomNameUtils { delete roomMemory[key as unknown as keyof RoomMemory] } } + /** * Finds the name of the closest commune, exluding the specified roomName */ findClosestCommuneName(roomName: string) { const communesNotThis = [] - for (const communeName of collectiveManager.communes) { + for (const communeName of CollectiveManager.communes) { if (roomName == communeName) continue communesNotThis.push(communeName) @@ -202,7 +204,7 @@ export class RoomNameUtils { )[0] } findClosestClaimType(roomName: string) { - return Array.from(collectiveManager.communes).sort( + return Array.from(CollectiveManager.communes).sort( (a, b) => Game.map.getRoomLinearDistance(roomName, a) - Game.map.getRoomLinearDistance(roomName, b), )[0] diff --git a/src/room/roomVisuals.ts b/src/room/roomVisuals.ts index 8db029ee7..ec71860cc 100644 --- a/src/room/roomVisuals.ts +++ b/src/room/roomVisuals.ts @@ -14,728 +14,713 @@ import { customLog } from 'utils/logging' import { findObjectWithID, unpackNumAsCoord } from 'utils/utils' import { RoomManager } from './room' import { Rectangle, Table, Dial, Grid, Bar, Dashboard, LineChart, Label } from 'screeps-viz' -import { simpleAllies, AllyRequestTypes } from 'international/simpleAllies/simpleAllies' -import { collectiveManager } from 'international/collective' +import { simpleAllies } from 'international/simpleAllies/simpleAllies' +import { CollectiveManager } from 'international/collective' import { playerManager } from 'international/players' import { unpackCoord } from 'other/codec' export class RoomVisualsManager { - roomManager: RoomManager - - constructor(roomManager: RoomManager) { - this.roomManager = roomManager - } - - public run() { + roomManager: RoomManager + + constructor(roomManager: RoomManager) { + this.roomManager = roomManager + } + + public run() { + this.roomVisuals() + } + + private roomVisuals() { + // Stop if roomVisuals are disabled + + if (!global.settings.roomVisuals) return + + this.controllerVisuals() + this.spawnVisuals() + this.cSiteTargetVisuals() + this.reservedCoordsVisuals() + } + + private controllerVisuals() { + // Stop if there is no controller + + if (!this.roomManager.room.controller) return + + // If the controller is mine + + if (this.roomManager.room.controller.my) { + // If the controller level is less than 8, show percentage to next level + + if (this.roomManager.room.controller.level < 8) + this.roomManager.room.visual.text( + `%${( + (this.roomManager.room.controller.progress / + this.roomManager.room.controller.progressTotal) * + 100 + ).toFixed(2)}`, + this.roomManager.room.controller.pos.x, + this.roomManager.room.controller.pos.y - 1, + { + backgroundColor: 'rgb(255, 0, 0, 0)', + font: 0.5, + opacity: 1, + color: customColors.lightBlue, + stroke: customColors.white, + strokeWidth: 0.03, + }, + ) - this.roomVisuals() + // Show the controller's level + + this.roomManager.room.visual.text( + `${this.roomManager.room.controller.level}`, + this.roomManager.room.controller.pos, + { + backgroundColor: 'rgb(255, 0, 0, 0)', + font: 0.5, + opacity: 0.8, + }, + ) + return } - private roomVisuals() { - // Stop if roomVisuals are disabled + // If the controller is reserved - if (!global.settings.roomVisuals) return + if (this.roomManager.room.controller.reservation) { + // Define the reservationColor based on some conditions - this.controllerVisuals() - this.spawnVisuals() - this.cSiteTargetVisuals() - this.reservedCoordsVisuals() - } - - private controllerVisuals() { - // Stop if there is no controller - - if (!this.roomManager.room.controller) return - - // If the controller is mine - - if (this.roomManager.room.controller.my) { - // If the controller level is less than 8, show percentage to next level - - if (this.roomManager.room.controller.level < 8) - this.roomManager.room.visual.text( - `%${( - (this.roomManager.room.controller.progress / - this.roomManager.room.controller.progressTotal) * - 100 - ).toFixed(2)}`, - this.roomManager.room.controller.pos.x, - this.roomManager.room.controller.pos.y - 1, - { - backgroundColor: 'rgb(255, 0, 0, 0)', - font: 0.5, - opacity: 1, - color: customColors.lightBlue, - stroke: customColors.white, - strokeWidth: 0.03, - }, - ) - - // Show the controller's level - - this.roomManager.room.visual.text( - `${this.roomManager.room.controller.level}`, - this.roomManager.room.controller.pos, - { - backgroundColor: 'rgb(255, 0, 0, 0)', - font: 0.5, - opacity: 0.8, - }, - ) - return + const color = () => { + if (this.roomManager.room.controller.reservation.username === Memory.me) { + return customColors.lightBlue } - // If the controller is reserved - - if (this.roomManager.room.controller.reservation) { - // Define the reservationColor based on some conditions - - const color = () => { - if (this.roomManager.room.controller.reservation.username === Memory.me) { - return customColors.lightBlue - } - - if ( - global.settings.allies.includes( - this.roomManager.room.controller.reservation.username, - ) - ) { - return customColors.green - } - - return customColors.red - } - - // Show the reservation time - - this.roomManager.room.visual.text( - `${this.roomManager.room.controller.reservation.ticksToEnd}`, - this.roomManager.room.controller.pos, - { - backgroundColor: 'rgb(255, 0, 0, 0)', - font: 0.5, - opacity: 0.8, - color: color(), - stroke: customColors.white, - strokeWidth: 0.03, - }, - ) + if ( + global.settings.allies.includes(this.roomManager.room.controller.reservation.username) + ) { + return customColors.green } + + return customColors.red + } + + // Show the reservation time + + this.roomManager.room.visual.text( + `${this.roomManager.room.controller.reservation.ticksToEnd}`, + this.roomManager.room.controller.pos, + { + backgroundColor: 'rgb(255, 0, 0, 0)', + font: 0.5, + opacity: 0.8, + color: color(), + stroke: customColors.white, + strokeWidth: 0.03, + }, + ) } + } - private spawnVisuals() { - // Get the spawns in the room + private spawnVisuals() { + // Get the spawns in the room - const spawns = this.roomManager.structures.spawn + const spawns = this.roomManager.structures.spawn - // Loop through them + // Loop through them - for (const spawn of spawns) { - // Iterate if the spawn isn't spawning + for (const spawn of spawns) { + // Iterate if the spawn isn't spawning - if (!spawn.spawning) continue + if (!spawn.spawning) continue - // Get the spawning creep, iterating if it's undefined + // Get the spawning creep, iterating if it's undefined - const creep = Game.creeps[spawn.spawning.name] - if (!creep) continue + const creep = Game.creeps[spawn.spawning.name] + if (!creep) continue - // Otherwise display the role of the creep being spawn + // Otherwise display the role of the creep being spawn - this.roomManager.room.visual.text(creep.role, spawn.pos.x, spawn.pos.y + 0.25, { - backgroundColor: 'rgb(255, 0, 0, 0)', - font: 0.5, - opacity: 1, - color: customColors.lightBlue, - stroke: customColors.white, - strokeWidth: 0.03, - }) + this.roomManager.room.visual.text(creep.role, spawn.pos.x, spawn.pos.y + 0.25, { + backgroundColor: 'rgb(255, 0, 0, 0)', + font: 0.5, + opacity: 1, + color: customColors.lightBlue, + stroke: customColors.white, + strokeWidth: 0.03, + }) - // And display how many ticks left until spawned + // And display how many ticks left until spawned - this.roomManager.room.visual.text( - (spawn.spawning.remainingTime - 1).toString(), - spawn.pos.x, - spawn.pos.y - 0.25, - { - backgroundColor: 'rgb(255, 0, 0, 0)', - font: 0.5, - opacity: 1, - color: customColors.lightBlue, - stroke: customColors.white, - strokeWidth: 0.03, - }, - ) - } + this.roomManager.room.visual.text( + (spawn.spawning.remainingTime - 1).toString(), + spawn.pos.x, + spawn.pos.y - 0.25, + { + backgroundColor: 'rgb(255, 0, 0, 0)', + font: 0.5, + opacity: 1, + color: customColors.lightBlue, + stroke: customColors.white, + strokeWidth: 0.03, + }, + ) } + } - private cSiteTargetVisuals() { - // If there is not a CSTID, stop - - if (!this.roomManager.room.memory[RoomMemoryKeys.constructionSiteTarget]) return + private cSiteTargetVisuals() { + // If there is not a CSTID, stop - // Convert the construction target ID into a game object + if (!this.roomManager.room.memory[RoomMemoryKeys.constructionSiteTarget]) return - const constructionTarget = findObjectWithID( - this.roomManager.room.memory[RoomMemoryKeys.constructionSiteTarget], - ) + // Convert the construction target ID into a game object - // If the constructionTarget exists, show visuals for it + const constructionTarget = findObjectWithID( + this.roomManager.room.memory[RoomMemoryKeys.constructionSiteTarget], + ) - if (constructionTarget) this.roomManager.room.visual.text('🚧', constructionTarget.pos) - } + // If the constructionTarget exists, show visuals for it - private reservedCoordsVisuals() { + if (constructionTarget) this.roomManager.room.visual.text('🚧', constructionTarget.pos) + } - for (const [packedCoord] of this.roomManager.reservedCoords) { + private reservedCoordsVisuals() { + for (const [packedCoord] of this.roomManager.reservedCoords) { + const coord = unpackCoord(packedCoord) - const coord = unpackCoord(packedCoord) - - this.roomManager.room.coordVisual(coord.x, coord.y) - } + this.roomManager.room.coordVisual(coord.x, coord.y) } - - public internationalDataVisuals() { - this.internationalAllyWorkRequestsDataVisuals( - this.internationalAllyCombatRequestsDataVisuals( - this.internationalAllyResourceRequestsDataVisuals( - this.internationalRequestsDataVisuals( - this.internationalTerminalRequestsDataVisuals( - this.internationalStatDataVisuals( - this.internationalGeneralDataVisuals(1), - ), - ), - ), - ), + } + + public internationalDataVisuals() { + this.internationalAllyWorkRequestsDataVisuals( + this.internationalAllyCombatRequestsDataVisuals( + this.internationalAllyResourceRequestsDataVisuals( + this.internationalRequestsDataVisuals( + this.internationalTerminalRequestsDataVisuals( + this.internationalStatDataVisuals(this.internationalGeneralDataVisuals(1)), ), - ) + ), + ), + ), + ) + } + + private internationalGeneralDataVisuals(y: number) { + const headers = ['funnelOrder', 'highestThreat', 'minCredits', 'last config'] + + const data: any[][] = [[]] + + const funnelOrder = CollectiveManager.getFunnelOrder() + + data[0].push( + funnelOrder.slice(0, 3), + playerManager.highestThreat, + CollectiveManager.minCredits, + Game.time - Memory.lastConfig, + ) + + const height = 3 + data.length + + Dashboard({ + config: { + room: this.roomManager.room.name, + }, + widgets: [ + { + pos: { + x: 1, + y, + }, + width: 47, + height, + widget: Rectangle({ + data: Table(() => ({ + data, + config: { + label: 'International', + headers, + }, + })), + }), + }, + ], + }) + + return y + height + } + + private internationalStatDataVisuals(y: number) { + const headers = [ + 'est. income', + 'commune harvest', + 'remote harvest', + 'upgrade', + 'build', + 'repair other', + 'barricade repair', + 'spawn util', + ] + + const data: any[][] = [[]] + + let totalEstimatedIncome = 0 + let totalCommuneEnergyHarvested = 0 + let totalRemoteEnergyHarvested = 0 + let totalUpgrade = 0 + let totalBuild = 0 + let totalRepairOther = 0 + let totalBarricadeRepair = 0 + let totalSpawn = 0 + + for (const roomName in Memory.stats.rooms) { + const room = Game.rooms[roomName] + const roomStats = Memory.stats.rooms[roomName] + + totalEstimatedIncome += room.communeManager.estimatedEnergyIncome + totalCommuneEnergyHarvested += roomStats.eih + totalRemoteEnergyHarvested += roomStats.reih + totalUpgrade += roomStats.eou + totalBuild += roomStats.eob + totalRepairOther += roomStats.eoro + totalBarricadeRepair += roomStats.eorwr + totalSpawn += roomStats.su } - private internationalGeneralDataVisuals(y: number) { - const headers = ['funnelOrder', 'highestThreat', 'minCredits', 'last config'] - - const data: any[][] = [[]] - - const funnelOrder = collectiveManager.getFunnelOrder() - - data[0].push( - funnelOrder.slice(0, 3), - playerManager.highestThreat, - collectiveManager.minCredits, - Game.time - Memory.lastConfig, - ) - - const height = 3 + data.length - - Dashboard({ - config: { - room: this.roomManager.room.name, - }, - widgets: [ - { - pos: { - x: 1, - y, - }, - width: 47, - height, - widget: Rectangle({ - data: Table(() => ({ - data, - config: { - label: 'International', - headers, - }, - })), - }), - }, - ], - }) - - return y + height + const avgSpawn = totalSpawn / CollectiveManager.communes.size + + data[0].push( + totalEstimatedIncome.toFixed(2), + totalCommuneEnergyHarvested.toFixed(2), + totalRemoteEnergyHarvested.toFixed(2), + totalUpgrade.toFixed(2), + totalBuild.toFixed(2), + totalRepairOther.toFixed(2), + totalBarricadeRepair.toFixed(2), + avgSpawn.toFixed(2), + ) + + const height = 3 + data.length + + Dashboard({ + config: { + room: this.roomManager.room.name, + }, + widgets: [ + { + pos: { + x: 1, + y, + }, + width: 47, + height, + widget: Rectangle({ + data: Table(() => ({ + data, + config: { + label: 'International', + headers, + }, + })), + }), + }, + ], + }) + + return y + height + } + + private internationalRequestsDataVisuals(y: number) { + const headers = ['requestName', 'type', 'responderName', 'abandon'] + + const data: any[][] = [] + + for (const requestName in Memory.workRequests) { + const request = Memory.workRequests[requestName] + + if (!request[WorkRequestKeys.responder]) continue + + const row: any[] = [ + requestName, + 'default', + request[WorkRequestKeys.responder], + request[WorkRequestKeys.abandon], + ] + data.push(row) } - private internationalStatDataVisuals(y: number) { - const headers = [ - 'est. income', - 'commune harvest', - 'remote harvest', - 'upgrade', - 'build', - 'repair other', - 'barricade repair', - 'spawn util', - ] - - const data: any[][] = [[]] - - let totalEstimatedIncome = 0 - let totalCommuneEnergyHarvested = 0 - let totalRemoteEnergyHarvested = 0 - let totalUpgrade = 0 - let totalBuild = 0 - let totalRepairOther = 0 - let totalBarricadeRepair = 0 - let totalSpawn = 0 - - for (const roomName in Memory.stats.rooms) { - const room = Game.rooms[roomName] - const roomStats = Memory.stats.rooms[roomName] - - totalEstimatedIncome += room.communeManager.estimatedEnergyIncome - totalCommuneEnergyHarvested += roomStats.eih - totalRemoteEnergyHarvested += roomStats.reih - totalUpgrade += roomStats.eou - totalBuild += roomStats.eob - totalRepairOther += roomStats.eoro - totalBarricadeRepair += roomStats.eorwr - totalSpawn += roomStats.su - } + for (const requestName in Memory.combatRequests) { + const request = Memory.combatRequests[requestName] - const avgSpawn = totalSpawn / collectiveManager.communes.size - - data[0].push( - totalEstimatedIncome.toFixed(2), - totalCommuneEnergyHarvested.toFixed(2), - totalRemoteEnergyHarvested.toFixed(2), - totalUpgrade.toFixed(2), - totalBuild.toFixed(2), - totalRepairOther.toFixed(2), - totalBarricadeRepair.toFixed(2), - avgSpawn.toFixed(2), - ) + if (request[CombatRequestKeys.type] !== 'defend' && !request[CombatRequestKeys.responder]) + continue - const height = 3 + data.length - - Dashboard({ - config: { - room: this.roomManager.room.name, - }, - widgets: [ - { - pos: { - x: 1, - y, - }, - width: 47, - height, - widget: Rectangle({ - data: Table(() => ({ - data, - config: { - label: 'International', - headers, - }, - })), - }), - }, - ], - }) - - return y + height + const row: any[] = [ + requestName, + request[CombatRequestKeys.type], + request[CombatRequestKeys.responder] || 'none', + request[CombatRequestKeys.abandon], + ] + data.push(row) } - private internationalRequestsDataVisuals(y: number) { - const headers = ['requestName', 'type', 'responderName', 'abandon'] - - const data: any[][] = [] - - for (const requestName in Memory.workRequests) { - const request = Memory.workRequests[requestName] - - if (!request[WorkRequestKeys.responder]) continue + for (const requestName in Memory.haulRequests) { + const request = Memory.haulRequests[requestName] - const row: any[] = [ - requestName, - 'default', - request[WorkRequestKeys.responder], - request[WorkRequestKeys.abandon], - ] - data.push(row) - } - - for (const requestName in Memory.combatRequests) { - const request = Memory.combatRequests[requestName] - - if ( - request[CombatRequestKeys.type] !== 'defend' && - !request[CombatRequestKeys.responder] - ) - continue - - const row: any[] = [ - requestName, - request[CombatRequestKeys.type], - request[CombatRequestKeys.responder] || 'none', - request[CombatRequestKeys.abandon], - ] - data.push(row) - } + if (!request[HaulRequestKeys.responder]) continue - for (const requestName in Memory.haulRequests) { - const request = Memory.haulRequests[requestName] - - if (!request[HaulRequestKeys.responder]) continue - - const row: any[] = [ - requestName, - request[HaulRequestKeys.type], - request[HaulRequestKeys.responder], - request[HaulRequestKeys.abandon], - ] - data.push(row) - } - - const height = 3 + data.length - - Dashboard({ - config: { - room: this.roomManager.room.name, - }, - widgets: [ - { - pos: { - x: 1, - y, - }, - width: 47, - height, - widget: Rectangle({ - data: Table(() => ({ - data, - config: { - label: 'My Requests', - headers, - }, - })), - }), - }, - ], - }) - - return y + height + const row: any[] = [ + requestName, + request[HaulRequestKeys.type], + request[HaulRequestKeys.responder], + request[HaulRequestKeys.abandon], + ] + data.push(row) } - private internationalTerminalRequestsDataVisuals(y: number) { - const headers = ['roomName', 'resource', 'amount', 'priority'] - - const data: any[][] = [] - - for (const ID in collectiveManager.terminalRequests) { - const request = collectiveManager.terminalRequests[ID] - - const row: any[] = [ - request.roomName, - request.resource, - request.amount, - request.priority, - ] - data.push(row) - } - - const height = 3 + data.length - - Dashboard({ - config: { - room: this.roomManager.room.name, - }, - widgets: [ - { - pos: { - x: 1, - y, - }, - width: 47, - height, - widget: Rectangle({ - data: Table(() => ({ - data, - config: { - label: 'My Terminal Requests', - headers, - }, - })), - }), - }, - ], - }) - - return y + height + const height = 3 + data.length + + Dashboard({ + config: { + room: this.roomManager.room.name, + }, + widgets: [ + { + pos: { + x: 1, + y, + }, + width: 47, + height, + widget: Rectangle({ + data: Table(() => ({ + data, + config: { + label: 'My Requests', + headers, + }, + })), + }), + }, + ], + }) + + return y + height + } + + private internationalTerminalRequestsDataVisuals(y: number) { + const headers = ['roomName', 'resource', 'amount', 'priority'] + + const data: any[][] = [] + + for (const ID in CollectiveManager.terminalRequests) { + const request = CollectiveManager.terminalRequests[ID] + + const row: any[] = [request.roomName, request.resource, request.amount, request.priority] + data.push(row) } - private internationalAllyResourceRequestsDataVisuals(y: number) { - if (!simpleAllies.allySegmentData) { - return y - } - - const headers = ['room', 'resource', 'amount', 'priority'] + const height = 3 + data.length + + Dashboard({ + config: { + room: this.roomManager.room.name, + }, + widgets: [ + { + pos: { + x: 1, + y, + }, + width: 47, + height, + widget: Rectangle({ + data: Table(() => ({ + data, + config: { + label: 'My Terminal Requests', + headers, + }, + })), + }), + }, + ], + }) + + return y + height + } + + private internationalAllyResourceRequestsDataVisuals(y: number) { + if (!simpleAllies.allySegmentData) { + return y + } - const data: any[][] = [] + const headers = ['room', 'resource', 'amount', 'priority'] - const requests = simpleAllies.allySegmentData.requests.resource - for (const ID in requests) { - const request = requests[ID] + const data: any[][] = [] - const row: any[] = [ - request.roomName, - request.resourceType, - request.amount, - request.priority.toFixed(2), - ] - data.push(row) - continue - } + const requests = simpleAllies.allySegmentData.requests.resource + for (const ID in requests) { + const request = requests[ID] - const height = 3 + data.length - - Dashboard({ - config: { - room: this.roomManager.room.name, - }, - widgets: [ - { - pos: { - x: 1, - y, - }, - width: 47, - height, - widget: Rectangle({ - data: Table(() => ({ - data, - config: { - label: 'Incoming Ally Resource Requests', - headers, - }, - })), - }), - }, - ], - }) - - return y + height + const row: any[] = [ + request.roomName, + request.resourceType, + request.amount, + request.priority.toFixed(2), + ] + data.push(row) + continue } - private internationalAllyCombatRequestsDataVisuals(y: number) { - if (!simpleAllies.allySegmentData) { - return y - } - - const headers = ['room', 'minDamage', 'minMeleeHeal', 'minRangedHeal', 'priority'] - - const data: any[][] = [] + const height = 3 + data.length + + Dashboard({ + config: { + room: this.roomManager.room.name, + }, + widgets: [ + { + pos: { + x: 1, + y, + }, + width: 47, + height, + widget: Rectangle({ + data: Table(() => ({ + data, + config: { + label: 'Incoming Ally Resource Requests', + headers, + }, + })), + }), + }, + ], + }) + + return y + height + } + + private internationalAllyCombatRequestsDataVisuals(y: number) { + if (!simpleAllies.allySegmentData) { + return y + } - const defenseRequests = simpleAllies.allySegmentData.requests.defense - for (const roomName in defenseRequests) { - const request = defenseRequests[roomName] + const headers = ['room', 'minDamage', 'minMeleeHeal', 'minRangedHeal', 'priority'] - const row: any[] = [roomName, request.priority.toFixed(2)] - data.push(row) - continue - } + const data: any[][] = [] - const attackRequests = simpleAllies.allySegmentData.requests.attack - for (const roomName in attackRequests) { - const request = attackRequests[roomName] + const defenseRequests = simpleAllies.allySegmentData.requests.defense + for (const roomName in defenseRequests) { + const request = defenseRequests[roomName] - const row: any[] = [roomName, request.priority.toFixed(2)] - data.push(row) - continue - } - - const height = 3 + data.length - - Dashboard({ - config: { - room: this.roomManager.room.name, - }, - widgets: [ - { - pos: { - x: 1, - y, - }, - width: 47, - height, - widget: Rectangle({ - data: Table(() => ({ - data, - config: { - label: 'Incoming Ally Combat Requests', - headers, - }, - })), - }), - }, - ], - }) - - return y + height + const row: any[] = [roomName, request.priority.toFixed(2)] + data.push(row) + continue } - private internationalAllyWorkRequestsDataVisuals(y: number) { - if (!simpleAllies.allySegmentData) { - return y - } + const attackRequests = simpleAllies.allySegmentData.requests.attack + for (const roomName in attackRequests) { + const request = attackRequests[roomName] - const headers = ['room', 'type', 'priority'] - - const data: any[][] = [] + const row: any[] = [roomName, request.priority.toFixed(2)] + data.push(row) + continue + } - const requests = simpleAllies.allySegmentData.requests.work - for (const roomName in requests) { - const request = requests[roomName] + const height = 3 + data.length + + Dashboard({ + config: { + room: this.roomManager.room.name, + }, + widgets: [ + { + pos: { + x: 1, + y, + }, + width: 47, + height, + widget: Rectangle({ + data: Table(() => ({ + data, + config: { + label: 'Incoming Ally Combat Requests', + headers, + }, + })), + }), + }, + ], + }) + + return y + height + } + + private internationalAllyWorkRequestsDataVisuals(y: number) { + if (!simpleAllies.allySegmentData) { + return y + } - const row: any[] = [roomName, request.workType, request.priority.toFixed(2)] - data.push(row) - continue - } + const headers = ['room', 'type', 'priority'] - const height = 3 + data.length - - Dashboard({ - config: { - room: this.roomManager.room.name, - }, - widgets: [ - { - pos: { - x: 1, - y, - }, - width: 47, - height, - widget: Rectangle({ - data: Table(() => ({ - data, - config: { - label: 'Incoming Ally Build Requests', - headers, - }, - })), - }), - }, - ], - }) - - return y + height - } + const data: any[][] = [] - private generalDataVisuals(y: number) { - const headers = [ - 'energy', - 'minEnergy', - 'minRampartHits', - 'threatened', - 'last attacked', - 'upgrade thresh', - 'build thresh', - 'inferiority', - ] - - const roomMemory = Memory.rooms[this.roomManager.room.name] - - const data: any[][] = [ - [ - this.roomManager.resourcesInStoringStructures.energy || 0, - this.roomManager.room.communeManager.minStoredEnergy, - this.roomManager.room.communeManager.minRampartHits, - roomMemory[RoomMemoryKeys.threatened].toFixed(2), - roomMemory[RoomMemoryKeys.lastAttackedBy], - this.roomManager.room.communeManager.storedEnergyUpgradeThreshold, - this.roomManager.room.communeManager.storedEnergyBuildThreshold, - this.roomManager.room.towerInferiority || 'false', - ], - ] - - const height = 3 + data.length - - Dashboard({ - config: { - room: this.roomManager.room.name, - }, - widgets: [ - { - pos: { - x: 1, - y, - }, - width: 47, - height, - widget: Rectangle({ - data: Table(() => ({ - data, - config: { - label: 'General', - headers, - }, - })), - }), - }, - ], - }) - - return y + height - } + const requests = simpleAllies.allySegmentData.requests.work + for (const roomName in requests) { + const request = requests[roomName] - statDataVisuals(y: number) { - const headers = [ - 'estimatedIncome', - 'CHarvest', - 'RHarvest', - 'upgrade', - 'build', - 'rep Other', - 'rep barricade', - 'barricades cost', - 'spawn util', - ] - - const roomStats = Memory.stats.rooms[this.roomManager.room.name] - - const data: any[][] = [ - [ - this.roomManager.room.communeManager.estimatedEnergyIncome, - roomStats.eih.toFixed(2), - roomStats.reih.toFixed(2), - roomStats.eou.toFixed(2), - roomStats.eob.toFixed(2), - roomStats.eoro.toFixed(2), - roomStats.eorwr.toFixed(2), - this.roomManager.room.communeManager.rampartsMaintenanceCost, - (roomStats.su * 100).toFixed(2) + '%', - ], - ] - - const height = 3 + data.length - - Dashboard({ - config: { - room: this.roomManager.room.name, - }, - widgets: [ - { - pos: { - x: 1, - y, - }, - width: 47, - height, - widget: Rectangle({ - data: Table(() => ({ - data, - config: { - label: 'Stats', - headers, - }, - })), - }), - }, - ], - }) - - return y + height + const row: any[] = [roomName, request.workType, request.priority.toFixed(2)] + data.push(row) + continue } - requestDataVisuals(y: number) {} + const height = 3 + data.length + + Dashboard({ + config: { + room: this.roomManager.room.name, + }, + widgets: [ + { + pos: { + x: 1, + y, + }, + width: 47, + height, + widget: Rectangle({ + data: Table(() => ({ + data, + config: { + label: 'Incoming Ally Build Requests', + headers, + }, + })), + }), + }, + ], + }) + + return y + height + } + + private generalDataVisuals(y: number) { + const headers = [ + 'energy', + 'minEnergy', + 'minRampartHits', + 'threatened', + 'last attacked', + 'upgrade thresh', + 'build thresh', + 'inferiority', + ] + + const roomMemory = Memory.rooms[this.roomManager.room.name] + + const data: any[][] = [ + [ + this.roomManager.resourcesInStoringStructures.energy || 0, + this.roomManager.room.communeManager.minStoredEnergy, + this.roomManager.room.communeManager.minRampartHits, + roomMemory[RoomMemoryKeys.threatened].toFixed(2), + roomMemory[RoomMemoryKeys.lastAttackedBy], + this.roomManager.room.communeManager.storedEnergyUpgradeThreshold, + this.roomManager.room.communeManager.storedEnergyBuildThreshold, + this.roomManager.room.towerInferiority || 'false', + ], + ] + + const height = 3 + data.length + + Dashboard({ + config: { + room: this.roomManager.room.name, + }, + widgets: [ + { + pos: { + x: 1, + y, + }, + width: 47, + height, + widget: Rectangle({ + data: Table(() => ({ + data, + config: { + label: 'General', + headers, + }, + })), + }), + }, + ], + }) + + return y + height + } + + statDataVisuals(y: number) { + const headers = [ + 'estimatedIncome', + 'CHarvest', + 'RHarvest', + 'upgrade', + 'build', + 'rep Other', + 'rep barricade', + 'barricades cost', + 'spawn util', + ] + + const roomStats = Memory.stats.rooms[this.roomManager.room.name] + + const data: any[][] = [ + [ + this.roomManager.room.communeManager.estimatedEnergyIncome, + roomStats.eih.toFixed(2), + roomStats.reih.toFixed(2), + roomStats.eou.toFixed(2), + roomStats.eob.toFixed(2), + roomStats.eoro.toFixed(2), + roomStats.eorwr.toFixed(2), + this.roomManager.room.communeManager.rampartsMaintenanceCost, + (roomStats.su * 100).toFixed(2) + '%', + ], + ] + + const height = 3 + data.length + + Dashboard({ + config: { + room: this.roomManager.room.name, + }, + widgets: [ + { + pos: { + x: 1, + y, + }, + width: 47, + height, + widget: Rectangle({ + data: Table(() => ({ + data, + config: { + label: 'Stats', + headers, + }, + })), + }), + }, + ], + }) + + return y + height + } + + requestDataVisuals(y: number) {} } diff --git a/src/room/rooms.ts b/src/room/rooms.ts index 38373a142..f73ed903a 100644 --- a/src/room/rooms.ts +++ b/src/room/rooms.ts @@ -21,9 +21,9 @@ import { CommuneManager } from './commune/commune' import { RoomManager } from './room' import { LogTypes, customLog } from 'utils/logging' -class RoomsManager { +export class RoomsManager { - updateRun() { + static updateRun() { for (const roomName in Game.rooms) { const room = Game.rooms[roomName] @@ -38,14 +38,14 @@ class RoomsManager { } } - initRun() { + static initRun() { for (const roomName in Game.rooms) { const room = Game.rooms[roomName] room.roomManager.initRun() } } - run() { + static run() { for (const roomName in Game.rooms) { @@ -53,7 +53,7 @@ class RoomsManager { } } - private runRoom(roomName: string) { + private static runRoom(roomName: string) { const startCPU = Game.cpu.generatePixel() @@ -78,5 +78,3 @@ class RoomsManager { statsManager.updateCommuneStat(roomName, RoomStatsKeys.CpuUsed, usedCPU) } } - -export const roomsManager = new RoomsManager() diff --git a/src/utils/logging.ts b/src/utils/logging.ts index 97b0df69e..362211487 100644 --- a/src/utils/logging.ts +++ b/src/utils/logging.ts @@ -1,88 +1,86 @@ -import { collectiveManager } from 'international/collective' +import { CollectiveManager } from 'international/collective' const customColors = { - white: '#ffffff', - lightGrey: '#eaeaea', - midGrey: '#bcbcbc', - darkGrey: '#5e5e5e', - lightBlue: '#0f66fc', - darkBlue: '#02007d', - black: '#000000', - yellow: '#f5cf95', - lightYellow: '#f7f7b4', - red: '#d10000', - green: '#00d137', - brown: '#aa7253', - purple: '#8b06a3', - pink: '#d60ef9', - orange: '#f27602', - teal: '#02f2e2', + white: '#ffffff', + lightGrey: '#eaeaea', + midGrey: '#bcbcbc', + darkGrey: '#5e5e5e', + lightBlue: '#0f66fc', + darkBlue: '#02007d', + black: '#000000', + yellow: '#f5cf95', + lightYellow: '#f7f7b4', + red: '#d10000', + green: '#00d137', + brown: '#aa7253', + purple: '#8b06a3', + pink: '#d60ef9', + orange: '#f27602', + teal: '#02f2e2', } export enum LogTypes { - info, - warning, - error, - debug, + info, + warning, + error, + debug, } const logTypeProperties = { - [LogTypes.info]: { - textColor: customColors.black, - BGColor: customColors.white, - preface: '(Info) ', - }, - [LogTypes.warning]: { - textColor: customColors.black, - BGColor: customColors.lightYellow, - preface: '(Warning)', - }, - [LogTypes.error]: { - textColor: customColors.white, - BGColor: customColors.red, - preface: ' (Error)', - }, - [LogTypes.debug]: { - textColor: customColors.white, - BGColor: customColors.lightBlue, - preface: ' (Debug)', - }, + [LogTypes.info]: { + textColor: customColors.black, + BGColor: customColors.white, + preface: '(Info) ', + }, + [LogTypes.warning]: { + textColor: customColors.black, + BGColor: customColors.lightYellow, + preface: '(Warning)', + }, + [LogTypes.error]: { + textColor: customColors.white, + BGColor: customColors.red, + preface: ' (Error)', + }, + [LogTypes.debug]: { + textColor: customColors.white, + BGColor: customColors.lightBlue, + preface: ' (Debug)', + }, } interface LogOpts { - type?: LogTypes - position?: number - BGColor?: string - textColor?: string + type?: LogTypes + position?: number + BGColor?: string + textColor?: string } const positionPaddingPixels = 8 export function customLog(title: any, message?: any, opts?: LogOpts) { - if (!global.settings.logging) return + if (!global.settings.logging) return - if (!opts) opts = {} - if (!global.settings.debugLogging && opts.type === LogTypes.debug) return + if (!opts) opts = {} + if (!global.settings.debugLogging && opts.type === LogTypes.debug) return - const logType = opts.type ?? LogTypes.info - const logProperties = logTypeProperties[logType] + const logType = opts.type ?? LogTypes.info + const logProperties = logTypeProperties[logType] - const BGColor = opts.BGColor ?? logProperties.BGColor - const textColor = opts.textColor ?? logProperties.textColor + const BGColor = opts.BGColor ?? logProperties.BGColor + const textColor = opts.textColor ?? logProperties.textColor - // Create the title - collectiveManager.logs += `
${logProperties.preface} ${title}:
` + // Create the title + CollectiveManager.logs += `
${ + logProperties.preface + } ${title}:
` - collectiveManager.logs += `
${message ?? ''}
` + CollectiveManager.logs += `
${ + message ?? '' + }
` } export function stringifyLog(title: any, message: any, opts?: LogOpts) { - return customLog(title, global.debugUtils.stringify(message), opts) + return customLog(title, global.debugUtils.stringify(message), opts) } diff --git a/src/utils/procs.ts b/src/utils/procs.ts index 607fe8e1d..ec22dd27f 100644 --- a/src/utils/procs.ts +++ b/src/utils/procs.ts @@ -1,17 +1,17 @@ // General processes -import { collectiveManager } from "international/collective" +import { CollectiveManager } from 'international/collective' import { LogTypes, customLog } from "./logging" export class Procs { outOfBucket() { - collectiveManager.logs = '' + CollectiveManager.logs = '' customLog('Skipping tick due to low bucket, bucket remaining', Game.cpu.bucket, { type: LogTypes.warning, }) console.log( global.settings.logging - ? collectiveManager.logs + ? CollectiveManager.logs : `Skipping tick due to low bucket, bucket remaining ${Game.cpu.bucket}`, ) } From ae937e237c68fe45f2cc3b036210db286db72274 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Mon, 22 Jan 2024 23:05:17 -0800 Subject: [PATCH 092/190] more static conversion, basic scheduler structure --- src/international/customPathFinder.ts | 25 +++++----- src/international/endTick.ts | 4 +- src/international/garbageCollector.ts | 18 ++++---- src/international/init.ts | 14 +++--- src/international/migration.ts | 2 +- src/international/respawn.ts | 2 +- src/international/roomPruning.ts | 10 ++-- src/international/schedule/schedule.ts | 15 ++++++ src/international/schedule/schedule.types.ts | 23 ++++++++++ src/main.ts | 18 ++++---- src/other/profilerRegister.ts | 2 + src/room/construction/communePlanner.ts | 46 +++++++++---------- src/room/creeps/creepMoveProcs.ts | 4 +- .../creeps/creepPrototypes/creepFunctions.ts | 8 ++-- src/room/remotePlanner.ts | 46 +++++++++---------- src/room/room.ts | 16 +++---- src/room/roomFunctions.ts | 4 +- src/utils/sleepable.ts | 38 +++++++++++++++ 18 files changed, 185 insertions(+), 110 deletions(-) create mode 100644 src/international/schedule/schedule.ts create mode 100644 src/international/schedule/schedule.types.ts diff --git a/src/international/customPathFinder.ts b/src/international/customPathFinder.ts index 8e94edd25..b6eee9095 100644 --- a/src/international/customPathFinder.ts +++ b/src/international/customPathFinder.ts @@ -104,9 +104,12 @@ export interface CustomPathFinderArgs { minReservedCoordType?: ReservedCoordTypes } +/** + * stateless + */ export class CustomPathFinder { - findPath(args: CustomPathFinderArgs) { + static findPath(args: CustomPathFinderArgs) { const allowedRoomNames = this.findAllowedRooms(args) if (allowedRoomNames === Result.fail) return [] @@ -117,7 +120,7 @@ export class CustomPathFinder { return result } - private findAllowedRooms(args: CustomPathFinderArgs) { + private static findAllowedRooms(args: CustomPathFinderArgs) { const allowedRoomNames = new Set([args.origin.roomName]) @@ -131,7 +134,7 @@ export class CustomPathFinder { return this.multiGoalRoute(args, allowedRoomNames) } - private singleGoalRoute(args: CustomPathFinderArgs, allowedRoomNames: Set) { + private static singleGoalRoute(args: CustomPathFinderArgs, allowedRoomNames: Set) { const goal = args.goals[0] // If the goal is in the same room as the origin @@ -154,7 +157,7 @@ export class CustomPathFinder { return allowedRoomNames } - private multiGoalRoute(args: CustomPathFinderArgs, allowedRoomNames: Set) { + private static multiGoalRoute(args: CustomPathFinderArgs, allowedRoomNames: Set) { /** * Room names for goals that have already been searched and thus don't require another one @@ -198,7 +201,7 @@ export class CustomPathFinder { return allowedRoomNames } - private recordRoutesAllowedRooms(route: RoomRoute, allowedRoomNames: Set, args: CustomPathFinderArgs, goal: PathGoal) { + private static recordRoutesAllowedRooms(route: RoomRoute, allowedRoomNames: Set, args: CustomPathFinderArgs, goal: PathGoal) { for (const roomRoute of route) { allowedRoomNames.add(roomRoute.room) @@ -217,7 +220,7 @@ export class CustomPathFinder { } } - private weightRoom(roomName: string, args: CustomPathFinderArgs, goal: PathGoal) { + private static weightRoom(roomName: string, args: CustomPathFinderArgs, goal: PathGoal) { const roomMemory = Memory.rooms[roomName] if (!roomMemory) { if (roomName === goal.pos.roomName) return 1 @@ -243,7 +246,7 @@ export class CustomPathFinder { } - private weightStructurePlans(args: CustomPathFinderArgs, allowedRoomNames: Set) { + private static weightStructurePlans(args: CustomPathFinderArgs, allowedRoomNames: Set) { if (!args.weightCommuneStructurePlans) return if (!args.weightCoords) args.weightCoords = {} @@ -258,7 +261,7 @@ export class CustomPathFinder { } } - private weightCommuneStructurePlans(args: CustomPathFinderArgs, roomName: string) { + private static weightCommuneStructurePlans(args: CustomPathFinderArgs, roomName: string) { if (!args.weightCommuneStructurePlans) return false const roomMemory = Memory.rooms[roomName] @@ -334,7 +337,7 @@ export class CustomPathFinder { return true } - private weightRemoteStructurePlans(args: CustomPathFinderArgs, roomName: string) { + private static weightRemoteStructurePlans(args: CustomPathFinderArgs, roomName: string) { if (!args.weightRemoteStructurePlans.remoteResourcePathType) return false const roomMemory = Memory.rooms[roomName] @@ -371,7 +374,7 @@ export class CustomPathFinder { return true } - private generatePath(args: CustomPathFinderArgs, allowedRoomNames: Set) { + private static generatePath(args: CustomPathFinderArgs, allowedRoomNames: Set) { args.plainCost = args.plainCost || defaultPlainCost args.swampCost = args.swampCost || defaultSwampCost if (args.avoidKeeperLairs === undefined) args.avoidKeeperLairs = true @@ -678,5 +681,3 @@ export class CustomPathFinder { return pathFinderResult.path } } - -export const customPathFinder = new CustomPathFinder() diff --git a/src/international/endTick.ts b/src/international/endTick.ts index 1d32e85f7..814ca9f95 100644 --- a/src/international/endTick.ts +++ b/src/international/endTick.ts @@ -7,7 +7,7 @@ import { CollectiveManager } from './collective' * Handles logging, stat recording, and more at the end of the tick */ export class EndTickManager { - run() { + static run() { if (!global.settings.logging) return const interval = 100 / Math.floor(global.settings.logging) @@ -39,5 +39,3 @@ export class EndTickManager { console.log(CollectiveManager.logs) } } - -export const endTickManager = new EndTickManager() diff --git a/src/international/garbageCollector.ts b/src/international/garbageCollector.ts index be4f5cc1f..f0ac20c22 100644 --- a/src/international/garbageCollector.ts +++ b/src/international/garbageCollector.ts @@ -1,20 +1,20 @@ -import { Sleepable } from 'utils/sleepable' +import { Sleepable, StaticSleepable } from 'utils/sleepable' import { RoomMemoryKeys } from './constants' /** * Intended to clean Memory, global, segments from stale data */ -export class GarbageCollector extends Sleepable { - // Clean rooms that haven't been scouted in 100k ticks - cleanRoomThreshold = 300000 - sleepFor = 100000 - run() { +export class GarbageCollector extends StaticSleepable { + // Clean rooms that haven't been scouted for a certain amount of ticks + static cleanRoomThreshold = 300000 + static sleepFor = 100000 + static tryRun() { if (this.isSleepingResponsive()) return this.cleanRooms() this.cleanPlayers() } - cleanRooms() { + static cleanRooms() { for (const roomName in Memory.rooms) { const roomMemory = Memory.rooms[roomName] if (Game.time - roomMemory[RoomMemoryKeys.lastScout] < this.cleanRoomThreshold) continue @@ -22,7 +22,5 @@ export class GarbageCollector extends Sleepable { delete Memory.rooms[roomName] } } - cleanPlayers() {} + static cleanPlayers() {} } - -export const garbageCollector = new GarbageCollector() diff --git a/src/international/init.ts b/src/international/init.ts index d91c56a5a..c80202382 100644 --- a/src/international/init.ts +++ b/src/international/init.ts @@ -7,8 +7,8 @@ import { PlayerRelationships } from './constants' /** * Configures variables to align with the bot's expectations, to ensure proper function */ -class InitManager { - public run() { +export class InitManager { + public static tryInit() { this.initMemory() this.initGlobal() } @@ -16,7 +16,7 @@ class InitManager { /** * Construct Memory if it isn't constructed yet */ - private initMemory() { + private static initMemory() { if (Memory.breakingVersion) return this.initSegments() @@ -45,7 +45,7 @@ class InitManager { /** * Construct global if it isn't constructed yet */ - private initGlobal() { + private static initGlobal() { if (global.constructed) return global.constructed = true @@ -56,7 +56,7 @@ class InitManager { this.initPlayers() } - private initPlayers() { + private static initPlayers() { for (const playerName of global.settings.allies) { const playerMemory = Memory.players[playerName] if (!playerMemory) { @@ -67,7 +67,7 @@ class InitManager { } } - private initSegments() { + private static initSegments() { RawMemory.segments[SegmentIDs.basePlans] = JSON.stringify({ @@ -81,5 +81,3 @@ class InitManager { } } - -export const initManager = new InitManager() diff --git a/src/international/migration.ts b/src/international/migration.ts index b2fe73677..e4cff7d92 100644 --- a/src/international/migration.ts +++ b/src/international/migration.ts @@ -6,7 +6,7 @@ import { roomNameProcs } from 'room/roomNameProcs' * Migrate version by performing actions, if required */ export class MigrationManager { - public static run() { + public static tryMigrate() { // We are at the right version, no need to migrate if (Memory.breakingVersion === global.settings.breakingVersion) return diff --git a/src/international/respawn.ts b/src/international/respawn.ts index 7674359a3..1eafcfd81 100644 --- a/src/international/respawn.ts +++ b/src/international/respawn.ts @@ -4,7 +4,7 @@ import { customLog } from 'utils/logging' * Credit to SemperRabbit for this nice piece of code! */ export class RespawnManager { - static run() { + static tryRegisterRespawn() { if (!this.hasRespawned()) return global.clearMemory() diff --git a/src/international/roomPruning.ts b/src/international/roomPruning.ts index 1baf9c884..55766d406 100644 --- a/src/international/roomPruning.ts +++ b/src/international/roomPruning.ts @@ -1,11 +1,11 @@ import { RoomMemoryKeys, WorkRequestKeys, maxControllerLevel } from './constants' import { findLowestScore, randomIntRange } from '../utils/utils' -import { Sleepable } from 'utils/sleepable' +import { Sleepable, StaticSleepable } from 'utils/sleepable' import { CollectiveManager } from './collective' -export class RoomPruningManager extends Sleepable { - sleepFor = randomIntRange(50000, 100000) - run() { +export class RoomPruningManager extends StaticSleepable { + static sleepFor = randomIntRange(50000, 100000) + static run() { if (this.isSleepingResponsive()) return // Make sure all rooms are max RCL @@ -46,5 +46,3 @@ export class RoomPruningManager extends Sleepable { Memory.rooms[highestCommuneScoreCommuneName][RoomMemoryKeys.abandonCommune] = true } } - -export const roomPruningManager = new RoomPruningManager() diff --git a/src/international/schedule/schedule.ts b/src/international/schedule/schedule.ts new file mode 100644 index 000000000..0f4987188 --- /dev/null +++ b/src/international/schedule/schedule.ts @@ -0,0 +1,15 @@ +import { Schedule, ScheduleIntervalTask, ScheduleTask } from "./schedule.types"; + +export const schedule: Schedule = [] + +export class ScheduleProcs { + static addTask(task: ScheduleTask) { + + schedule.push(task) + } + + static addIntervalTask(task: ScheduleIntervalTask) { + + schedule.push(task) + } +} diff --git a/src/international/schedule/schedule.types.ts b/src/international/schedule/schedule.types.ts new file mode 100644 index 000000000..99ec117a1 --- /dev/null +++ b/src/international/schedule/schedule.types.ts @@ -0,0 +1,23 @@ +export type Schedule = ScheduleTask[] + +/** + * Union type. If it has one property of a cronTask, it must have the rest + */ +export interface ScheduleTask { + /** + * The task's opperation to execute when it is allowed to do so + */ + opperation(): void +} + +export interface ScheduleIntervalTask extends ScheduleTask { + /** + * When the task was last ran; or never + */ + lastRan: number | undefined + /** + * How often the run the task + * Its existence determines wether or not a task is a cronjob + */ + interval: number +} diff --git a/src/main.ts b/src/main.ts index 31b97877f..0e7fae393 100644 --- a/src/main.ts +++ b/src/main.ts @@ -11,7 +11,7 @@ import './room/creeps/creepAdditions' import './other/profilerRegister' import { memHack } from 'other/memHack' import { CPUMaxPerTick, Result } from 'international/constants' -import { initManager } from './international/init' +import { InitManager } from './international/init' import { MigrationManager } from 'international/migration' import { RespawnManager } from './international/respawn' import { tickInit } from './international/tickInit' @@ -23,11 +23,11 @@ import { statsManager } from 'international/statsManager' import { playerManager } from 'international/players' import { profiler } from 'other/profiler' import { flagManager } from 'international/flags' -import { roomPruningManager } from 'international/roomPruning' +import { RoomPruningManager } from 'international/roomPruning' import './room/construction/minCut' import { constructionSiteManager } from './international/constructionSiteManager' import { mapVisualsManager } from './international/mapVisuals' -import { endTickManager } from './international/endTick' +import { EndTickManager } from './international/endTick' import { wasm } from 'other/wasmInit' import { requestsManager } from 'international/requests' import { marketManager } from 'international/market/marketOrders' @@ -38,6 +38,7 @@ import { roomDataManager } from 'room/roomData' import { utils } from 'utils/utils' import { procs } from 'utils/procs' import { communeDataManager } from 'room/commune/communeData' +import { GarbageCollector } from 'international/garbageCollector' export function originalLoop() { memHack.run() @@ -51,13 +52,14 @@ export function originalLoop() { if (global.userScript) global.userScript.initialRun() profiler.wrap((): void => { - MigrationManager.run() - RespawnManager.run() - initManager.run() + MigrationManager.tryMigrate() + RespawnManager.tryRegisterRespawn() + InitManager.tryInit() tickInit.configGeneral() statsManager.tickInit() CollectiveManager.update() + GarbageCollector.tryRun() simpleAllies.initRun() wasm.collaborator() @@ -75,7 +77,7 @@ export function originalLoop() { creepOrganizer.run() powerCreepOrganizer.run() - roomPruningManager.run() + RoomPruningManager.run() flagManager.run() constructionSiteManager.run() marketManager.run() @@ -91,7 +93,7 @@ export function originalLoop() { CollectiveManager.advancedGeneratePixel() SegmentsManager.endRun() - endTickManager.run() + EndTickManager.run() }) } export const loop = ErrorMapper.wrapLoop(originalLoop) diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index f48d7a3f0..311a555f3 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -109,10 +109,12 @@ import { RoomsManager } from 'room/rooms' import { SegmentsManager } from 'international/segments' import { wasm } from './wasmInit' import { initSync } from '../wasm/pkg/commiebot_wasm.js' +import { InitManager } from 'international/init' export function profilerRegister() { // Classes + profiler.registerClass(InitManager, 'InitManager') profiler.registerClass(CollectiveManager, 'CollectiveManager') profiler.registerClass(StatsManager, 'StatsManager') profiler.registerClass(PlayerManager, 'PlayerManager') diff --git a/src/room/construction/communePlanner.ts b/src/room/construction/communePlanner.ts index 690b8f9fe..e29a4a5ae 100644 --- a/src/room/construction/communePlanner.ts +++ b/src/room/construction/communePlanner.ts @@ -61,7 +61,7 @@ import { RoomManager } from '../room' import { BasePlans } from './basePlans' import { RampartPlans } from './rampartPlans' import { minCutToExit } from './minCut' -import { customPathFinder } from 'international/customPathFinder' +import { CustomPathFinder } from 'international/customPathFinder' import { towerUtils } from 'room/commune/towerUtils' const unprotectedCoordWeight = defaultRoadPlanningPlainCost * 16 @@ -638,7 +638,7 @@ export class CommunePlanner { // Paths for grid groups for (const leaderCoord of groupLeaders) { - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin: new RoomPosition(leaderCoord.x, leaderCoord.y, this.room.name), goals: [{ pos: anchor, range: 3 }], weightCoordMaps: [this.weightedDiagonalCoords, this.gridCoords, this.baseCoords], @@ -714,7 +714,7 @@ export class CommunePlanner { // Paths for exit groups for (const group of exitGroups) { - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin: new RoomPosition(group[0].x, group[0].y, this.room.name), goals: [{ pos: anchor, range: 3 }], weightCoordMaps: [this.weightedDiagonalCoords, this.gridCoords], @@ -927,7 +927,7 @@ export class CommunePlanner { sortBy( sources, ({ pos }) => - customPathFinder.findPath({ + CustomPathFinder.findPath({ origin: pos, goals: [ { @@ -992,7 +992,7 @@ export class CommunePlanner { sortBy( sourceHarvestPositions[i], origin => - customPathFinder.findPath({ + CustomPathFinder.findPath({ origin, goals: [ { @@ -1020,7 +1020,7 @@ export class CommunePlanner { for (const i in this.communeSources) { const origin = sourceHarvestPositions[i][0] - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin: origin, goals: [ { @@ -1057,7 +1057,7 @@ export class CommunePlanner { sortBy( this.mineralHarvestPositions, origin => - customPathFinder.findPath({ + CustomPathFinder.findPath({ origin, goals: [ { @@ -1070,7 +1070,7 @@ export class CommunePlanner { }).length, ) - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin: this.mineralHarvestPositions[0], goals: [{ pos: goal, range: 1 }], weightCoordMaps: [this.diagonalCoords, this.roadCoords], @@ -1117,7 +1117,7 @@ export class CommunePlanner { for (let i = 0; i < this.sourceHarvestPositions.length; i++) { const closestHarvestPos = this.sourceHarvestPositions[i][0] - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin: closestHarvestPos, goals: [ { @@ -1785,7 +1785,7 @@ export class CommunePlanner { let shortestPath: RoomPosition[] for (const source of sources) { - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin: source.pos, goals: [{ pos: this.room.controller.pos, range: 1 }], plainCost: defaultRoadPlanningPlainCost, @@ -1801,7 +1801,7 @@ export class CommunePlanner { // Avg path between sources, if more than 1 if (sources.length > 1) { - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin: sources[0].pos, goals: [{ pos: sources[1].pos, range: 1 }], plainCost: defaultRoadPlanningPlainCost, @@ -1855,7 +1855,7 @@ export class CommunePlanner { sortBy( sources, ({ pos }) => - customPathFinder.findPath({ + CustomPathFinder.findPath({ origin: pos, goals: [ { @@ -1872,7 +1872,7 @@ export class CommunePlanner { sortBy( fastFillerCoords, ({ x, y }) => - customPathFinder.findPath({ + CustomPathFinder.findPath({ origin: new RoomPosition( x + stampAnchor.x - stampOffset, y + stampAnchor.y - stampOffset, @@ -1968,7 +1968,7 @@ export class CommunePlanner { let closestSourceDistance = Infinity for (const source of this.room.find(FIND_SOURCES)) { - const range = customPathFinder.findPath({ + const range = CustomPathFinder.findPath({ origin: source.pos, goals: [ { @@ -1991,7 +1991,7 @@ export class CommunePlanner { pathOrigin = closestSource.pos } - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin: pathOrigin, goals: [{ pos: fastFillerPos, range: 3 }], weightCoordMaps: [this.roadCoords], @@ -2072,7 +2072,7 @@ export class CommunePlanner { this.baseCoords[packAsNum(coord)] = 255 this.roadCoords[packAsNum(coord)] = 255 - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin: new RoomPosition(stampAnchor.x, stampAnchor.y, this.room.name), goals: [{ pos: fastFillerPos, range: 3 }], weightCoordMaps: [this.diagonalCoords, this.gridCoords, this.roadCoords], @@ -2184,7 +2184,7 @@ export class CommunePlanner { sortBy( this.outputLabCoords, ({ x, y }) => - customPathFinder.findPath({ + CustomPathFinder.findPath({ origin: new RoomPosition(x, y, this.room.name), goals: [ { @@ -2245,7 +2245,7 @@ export class CommunePlanner { for (let i = this.stampAnchors.gridExtension.length - 1; i >= 0; i -= 5) { const coord = this.stampAnchors.gridExtension[i] - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin: new RoomPosition(coord.x, coord.y, this.room.name), goals: [{ pos: hubAnchorPos, range: 2 }], weightCoordMaps: [this.diagonalCoords, this.gridCoords, this.roadCoords], @@ -2271,7 +2271,7 @@ export class CommunePlanner { for (let i = this.communeSources.length - 1; i >= 0; i -= 1) { const origin = this.sourceHarvestPositions[i][0] - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin: origin, goals: [ { @@ -2292,7 +2292,7 @@ export class CommunePlanner { sourcePaths.push(path) } - const upgradePath = customPathFinder.findPath({ + const upgradePath = CustomPathFinder.findPath({ origin: this.centerUpgradePos, goals: [ { @@ -2439,7 +2439,7 @@ export class CommunePlanner { this.room.name, ) - let path = customPathFinder.findPath({ + let path = CustomPathFinder.findPath({ origin: hubAnchor, goals: [ { @@ -2775,7 +2775,7 @@ export class CommunePlanner { // Path from the hubAnchor to the cloestPosToAnchor - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin: new RoomPosition(closestCoord.x, closestCoord.y, this.room.name), goals: [{ pos: hubAnchorPos, range: 2 }], weightCoordMaps: [this.diagonalCoords, this.roadCoords, this.unprotectedCoords], @@ -3017,7 +3017,7 @@ export class CommunePlanner { for (const coord of this.bestTowerCoords) { const minRCL = this.basePlans.getXY(coord.x, coord.y)[0].minRCL - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin: new RoomPosition(coord.x, coord.y, this.room.name), goals: [ { diff --git a/src/room/creeps/creepMoveProcs.ts b/src/room/creeps/creepMoveProcs.ts index 40ec7480d..d791661fc 100644 --- a/src/room/creeps/creepMoveProcs.ts +++ b/src/room/creeps/creepMoveProcs.ts @@ -9,7 +9,7 @@ import { defaultPlainCost, packedPosLength, } from 'international/constants' -import { CustomPathFinderArgs, PathGoal, customPathFinder } from 'international/customPathFinder' +import { CustomPathFinderArgs, PathGoal, CustomPathFinder } from 'international/customPathFinder' import { packCoord, packPos, packPosList, unpackPos, unpackPosAt } from 'other/codec' import { areCoordsEqual, arePositionsEqual, findObjectWithID, getRange } from 'utils/utils' @@ -148,7 +148,7 @@ export class CreepMoveProcs { } // Generate a new path - const path = customPathFinder.findPath(args) + const path = CustomPathFinder.findPath(args) if (!path.length) return Result.fail // Limit the path's length to the cacheAmount diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index fa32413c1..77faa2f13 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -16,7 +16,7 @@ import { statsManager } from 'international/statsManager' import { creepUtils } from '../creepUtils' import { RoomManager } from 'room/room' import { RoomLogisticsRequest } from 'types/roomRequests' -import { customPathFinder } from 'international/customPathFinder' +import { CustomPathFinder } from 'international/customPathFinder' import { communeUtils } from 'room/commune/communeUtils' import { myCreepUtils } from '../myCreepUtils' import { structureUtils } from 'room/structureUtils' @@ -642,7 +642,9 @@ Creep.prototype.hasNonEnergyResource = function () { Creep.prototype.findRecycleTarget = function () { const { room } = this - const spawns = room.roomManager.structures.spawn.filter(spawn => structureUtils.isRCLActionable(spawn)) + const spawns = room.roomManager.structures.spawn.filter(spawn => + structureUtils.isRCLActionable(spawn), + ) if (!spawns.length) return false @@ -909,7 +911,7 @@ Creep.prototype.findQuadBulldozeTargets = function (goalPos) { ) return this.memory[CreepMemoryKeys.quadBulldozeTargets] - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin: this.pos, goals: [ { diff --git a/src/room/remotePlanner.ts b/src/room/remotePlanner.ts index 7372bb550..9ed5a2590 100644 --- a/src/room/remotePlanner.ts +++ b/src/room/remotePlanner.ts @@ -60,7 +60,7 @@ import { RoomManager } from './room' import { BasePlans } from './construction/basePlans' import { RampartPlans } from './construction/rampartPlans' import { minCutToExit } from './construction/minCut' -import { customPathFinder } from 'international/customPathFinder' +import { CustomPathFinder } from 'international/customPathFinder' import { towerUtils } from './commune/towerUtils' const unprotectedCoordWeight = defaultRoadPlanningPlainCost * 16 @@ -624,7 +624,7 @@ export class RemotePlanner { // Paths for grid groups for (const leaderCoord of groupLeaders) { - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin: new RoomPosition(leaderCoord.x, leaderCoord.y, this.room.name), goals: [{ pos: anchor, range: 3 }], weightCoordMaps: [this.weightedDiagonalCoords, this.gridCoords, this.baseCoords], @@ -700,7 +700,7 @@ export class RemotePlanner { // Paths for exit groups for (const group of exitGroups) { - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin: new RoomPosition(group[0].x, group[0].y, this.room.name), goals: [{ pos: anchor, range: 3 }], weightCoordMaps: [this.weightedDiagonalCoords, this.gridCoords], @@ -913,7 +913,7 @@ export class RemotePlanner { sortBy( sources, ({ pos }) => - customPathFinder.findPath({ + CustomPathFinder.findPath({ origin: pos, goals: [ { @@ -975,7 +975,7 @@ export class RemotePlanner { sortBy( sourceHarvestPositions[i], origin => - customPathFinder.findPath({ + CustomPathFinder.findPath({ origin, goals: [ { @@ -1003,7 +1003,7 @@ export class RemotePlanner { for (const i in this.communeSources) { const origin = sourceHarvestPositions[i][0] - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin: origin, goals: [ { @@ -1040,7 +1040,7 @@ export class RemotePlanner { sortBy( this.mineralHarvestPositions, origin => - customPathFinder.findPath({ + CustomPathFinder.findPath({ origin, goals: [ { @@ -1053,7 +1053,7 @@ export class RemotePlanner { }).length, ) - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin: this.mineralHarvestPositions[0], goals: [{ pos: goal, range: 1 }], weightCoordMaps: [this.diagonalCoords, this.roadCoords], @@ -1102,7 +1102,7 @@ export class RemotePlanner { for (let i = 0; i < this.sourceHarvestPositions.length; i++) { const closestHarvestPos = this.sourceHarvestPositions[i][0] - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin: closestHarvestPos, goals: [ { @@ -1775,7 +1775,7 @@ export class RemotePlanner { let shortestPath: RoomPosition[] for (const source of sources) { - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin: source.pos, goals: [{ pos: this.room.controller.pos, range: 1 }], plainCost: defaultRoadPlanningPlainCost, @@ -1791,7 +1791,7 @@ export class RemotePlanner { // Avg path between sources, if more than 1 if (sources.length > 1) { - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin: sources[0].pos, goals: [{ pos: sources[1].pos, range: 1 }], plainCost: defaultRoadPlanningPlainCost, @@ -1845,7 +1845,7 @@ export class RemotePlanner { sortBy( sources, ({ pos }) => - customPathFinder.findPath({ + CustomPathFinder.findPath({ origin: pos, goals: [ { @@ -1862,7 +1862,7 @@ export class RemotePlanner { sortBy( fastFillerCoords, ({ x, y }) => - customPathFinder.findPath({ + CustomPathFinder.findPath({ origin: new RoomPosition( x + stampAnchor.x - stampOffset, y + stampAnchor.y - stampOffset, @@ -1959,7 +1959,7 @@ export class RemotePlanner { let closestSourceDistance = Infinity for (const source of this.room.find(FIND_SOURCES)) { - const range = customPathFinder.findPath({ + const range = CustomPathFinder.findPath({ origin: source.pos, goals: [ { @@ -1982,7 +1982,7 @@ export class RemotePlanner { pathOrigin = closestSource.pos } - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin: pathOrigin, goals: [{ pos: fastFillerPos, range: 3 }], weightCoordMaps: [this.roadCoords], @@ -2063,7 +2063,7 @@ export class RemotePlanner { this.baseCoords[packAsNum(coord)] = 255 this.roadCoords[packAsNum(coord)] = 255 - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin: new RoomPosition(stampAnchor.x, stampAnchor.y, this.room.name), goals: [{ pos: fastFillerPos, range: 3 }], weightCoordMaps: [this.diagonalCoords, this.gridCoords, this.roadCoords], @@ -2175,7 +2175,7 @@ export class RemotePlanner { sortBy( this.outputLabCoords, ({ x, y }) => - customPathFinder.findPath({ + CustomPathFinder.findPath({ origin: new RoomPosition(x, y, this.room.name), goals: [ { @@ -2236,7 +2236,7 @@ export class RemotePlanner { for (let i = this.stampAnchors.gridExtension.length - 1; i >= 0; i -= 5) { const coord = this.stampAnchors.gridExtension[i] - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin: new RoomPosition(coord.x, coord.y, this.room.name), goals: [{ pos: hubAnchorPos, range: 2 }], weightCoordMaps: [this.diagonalCoords, this.gridCoords, this.roadCoords], @@ -2262,7 +2262,7 @@ export class RemotePlanner { for (let i = this.communeSources.length - 1; i >= 0; i -= 1) { const origin = this.sourceHarvestPositions[i][0] - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin: origin, goals: [ { @@ -2283,7 +2283,7 @@ export class RemotePlanner { sourcePaths.push(path) } - const upgradePath = customPathFinder.findPath({ + const upgradePath = CustomPathFinder.findPath({ origin: this.centerUpgradePos, goals: [ { @@ -2427,7 +2427,7 @@ export class RemotePlanner { this.room.name, ) - let path = customPathFinder.findPath({ + let path = CustomPathFinder.findPath({ origin: hubAnchor, goals: [ { @@ -2760,7 +2760,7 @@ export class RemotePlanner { // Path from the hubAnchor to the cloestPosToAnchor - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin: new RoomPosition(closestCoord.x, closestCoord.y, this.room.name), goals: [{ pos: hubAnchorPos, range: 2 }], weightCoordMaps: [this.diagonalCoords, this.roadCoords, this.unprotectedCoords], @@ -2987,7 +2987,7 @@ export class RemotePlanner { for (const coord of this.bestTowerCoords) { const minRCL = this.basePlans.getXY(coord.x, coord.y)[0].minRCL - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin: new RoomPosition(coord.x, coord.y, this.room.name), goals: [ { diff --git a/src/room/room.ts b/src/room/room.ts index a5dc4820a..3da418501 100644 --- a/src/room/room.ts +++ b/src/room/room.ts @@ -59,7 +59,7 @@ import { } from 'other/codec' import { BasePlans } from './construction/basePlans' import { RampartPlans } from './construction/rampartPlans' -import { PathGoal, customPathFinder } from 'international/customPathFinder' +import { PathGoal, CustomPathFinder } from 'international/customPathFinder' import { roomNameUtils } from './roomNameUtils' import { CollectiveManager } from 'international/collective' import { customLog } from 'utils/logging' @@ -318,7 +318,7 @@ export class RoomManager { sortBy( sources, ({ pos }) => - customPathFinder.findPath({ + CustomPathFinder.findPath({ origin: pos, goals: [{ pos: anchor, range: 3 }], }).length, @@ -353,7 +353,7 @@ export class RoomManager { sortBy( positions, origin => - customPathFinder.findPath({ + CustomPathFinder.findPath({ origin, goals: [{ pos: anchor, range: 3 }], }).length, @@ -378,7 +378,7 @@ export class RoomManager { for (const positions of packedRemoteSourceHarvestPositions) { const origin = unpackPosAt(positions, 0) - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin, goals: [{ pos: anchor, range: 3 }], typeWeights: remoteTypeWeights, @@ -442,7 +442,7 @@ export class RoomManager { for (const positions of packedRemoteSourceHarvestPositions) { const origin = unpackPosAt(positions, 0) - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin, goals: [{ pos: goalPos, range: 1 }], typeWeights: remoteTypeWeights, @@ -497,7 +497,7 @@ export class RoomManager { sortBy( positions, origin => - customPathFinder.findPath({ + CustomPathFinder.findPath({ origin, goals: [{ pos: anchor, range: 3 }], }).length, @@ -516,7 +516,7 @@ export class RoomManager { if (!anchor) throw Error('No anchor for remote controller path' + this.room.name) const origin = unpackPosAt(packedRemoteControllerPositions, 0) - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin, goals: [{ pos: anchor, range: 3 }], typeWeights: remoteTypeWeights, @@ -769,7 +769,7 @@ export class RoomManager { sortBy( positions, origin => - customPathFinder.findPath({ + CustomPathFinder.findPath({ origin, goals: [{ pos: anchor, range: 4 }], }).length, diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index 0bf89b879..d6089190d 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -218,7 +218,7 @@ Room.prototype.scoutMyRemote = function (scoutingRoom) { // loop through sourceNames for (const source of this.find(FIND_SOURCES)) { - const path = customPathFinder.findPath({ + const path = CustomPathFinder.findPath({ origin: source.pos, goals: [{ pos: anchor, range: 4 }], typeWeights: { @@ -252,7 +252,7 @@ Room.prototype.scoutMyRemote = function (scoutingRoom) { newSourceEfficaciesTotal += newSourceEfficacy } - const newReservationEfficacy = customPathFinder.findPath({ + const newReservationEfficacy = CustomPathFinder.findPath({ origin: this.controller.pos, goals: [{ pos: anchor, range: 4 }], typeWeights: { diff --git a/src/utils/sleepable.ts b/src/utils/sleepable.ts index 8e0ea9cea..19687abfe 100644 --- a/src/utils/sleepable.ts +++ b/src/utils/sleepable.ts @@ -37,3 +37,41 @@ export class Sleepable { return false } } + +/** + * Persistent instances of this class and its inhereters are able to sleep + */ +export class StaticSleepable { + /** + * The tick we need to be asleep until + */ + static sleepUntil: number + /** + * How long we sleep for each time + */ + static sleepFor = randomIntRange(10, 20) + + /** + * Simply checks if the program is alseep or not + */ + static isSleeping() { + return StaticSleepable.sleepUntil > Game.time + } + + /** + * Begin sleeping when whatever process being run is completed + */ + static sleepWhenDone() { + StaticSleepable.sleepUntil = Game.time + StaticSleepable.sleepFor + } + + /** + * Puts the program to sleep for future tick(s) if it is not + */ + static isSleepingResponsive() { + if (StaticSleepable.sleepUntil > Game.time) return true + + StaticSleepable.sleepWhenDone() + return false + } +} From b66a3a447a7f29ff52c5376a601d872e62758763 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Mon, 22 Jan 2024 23:57:29 -0800 Subject: [PATCH 093/190] more static conversions, scheduler additions --- src/international/collective.ts | 149 +- src/international/constants.ts | 1 + ...ionSiteManager.ts => constructionSites.ts} | 6 +- src/international/creepOrganizer.ts | 10 +- src/international/featureFlags.spec.ts | 8 +- src/international/featureFlags.ts | 8 +- src/international/init.ts | 19 +- src/international/interShardPlanner.ts | 5 - src/international/mapVisuals.ts | 11 +- src/international/market/marketOrders.ts | 44 +- src/international/players.ts | 18 +- src/international/powerCreepOrganizer.ts | 10 +- src/international/requests.ts | 24 +- src/international/schedule/schedule.ts | 35 + src/international/schedule/schedule.types.ts | 6 +- .../{statsManager.ts => stats.ts} | 24 +- src/international/tickInit.ts | 6 +- src/international/transactions.ts | 61 +- src/main.ts | 52 +- src/other/profilerRegister.ts | 6 +- src/room/commune/combatRequest.ts | 2 +- src/room/commune/communeData.ts | 10 +- src/room/commune/communeProcs.ts | 36 +- src/room/commune/communeUtils.ts | 12 +- src/room/commune/defence.ts | 599 +++--- src/room/commune/powerSpawnProcs.ts | 4 +- src/room/commune/spawning/spawnRequests.ts | 2 +- .../spawning/spawningStructureProcs.ts | 4 +- src/room/commune/terminal/terminalProcs.ts | 4 +- src/room/commune/terminal/tradingUtils.ts | 28 +- src/room/commune/towerProcs.ts | 29 +- src/room/commune/towerUtils.ts | 4 +- src/room/commune/workRequest.ts | 2 +- src/room/creeps/creepProcs.ts | 16 +- .../creeps/creepPrototypes/creepFunctions.ts | 6 +- src/room/creeps/creepRoleManager.ts | 2 +- src/room/creeps/creepUtils.ts | 4 +- src/room/creeps/endTickCreepManager.ts | 2 +- src/room/creeps/powerCreepRoleManager.ts | 2 +- .../commune/defenders/meleeDefender.ts | 2 +- .../creeps/roleManagers/commune/hauler.ts | 1690 +++++++++-------- .../creeps/roleManagers/commune/maintainer.ts | 2 +- .../roleManagers/commune/mineralHarvester.ts | 135 +- .../roleManagers/commune/sourceHarvester.ts | 493 +++-- src/room/room.ts | 4 +- src/room/roomData.ts | 22 +- src/room/roomFunctions.ts | 4 +- src/room/roomUtils.ts | 10 +- src/room/roomVisuals.ts | 6 +- src/room/rooms.ts | 80 +- src/types/stats.ts | 2 +- 51 files changed, 1868 insertions(+), 1853 deletions(-) rename src/international/{constructionSiteManager.ts => constructionSites.ts} (93%) delete mode 100644 src/international/interShardPlanner.ts rename src/international/{statsManager.ts => stats.ts} (95%) diff --git a/src/international/collective.ts b/src/international/collective.ts index c67472e6b..fedcc7354 100644 --- a/src/international/collective.ts +++ b/src/international/collective.ts @@ -1,4 +1,3 @@ -import { Sleepable } from 'utils/sleepable' import { packXYAsNum, randomIntRange, roundTo, utils } from '../utils/utils' import { @@ -16,7 +15,7 @@ const periodicUpdateInterval = randomIntRange(100, 200) /** * Handles inter room and non-room matters */ -export class CollectiveManager extends Sleepable { +export class CollectiveManager { /** * Antifa creeps by combat request name, then by role with an array of creep names */ @@ -74,49 +73,49 @@ export class CollectiveManager extends Sleepable { static update() { // initalize or re-initialize - CollectiveManager.creepsByCombatRequest = {} - CollectiveManager.creepsByHaulRequest = {} - CollectiveManager.unspawnedPowerCreepNames = [] - CollectiveManager.terminalRequests = {} - CollectiveManager.terminalCommunes = [] + this.creepsByCombatRequest = {} + this.creepsByHaulRequest = {} + this.unspawnedPowerCreepNames = [] + this.terminalRequests = {} + this.terminalCommunes = [] - CollectiveManager.tickID = 0 - CollectiveManager.customCreepIDs = [] - CollectiveManager.customCreepIDIndex = 0 - CollectiveManager.mineralNodes = {} + this.tickID = 0 + this.customCreepIDs = [] + this.customCreepIDIndex = 0 + this.mineralNodes = {} for (const mineralType of minerals) { - CollectiveManager.mineralNodes[mineralType] = 0 + this.mineralNodes[mineralType] = 0 } - CollectiveManager.myCommands = [] - CollectiveManager.logs = '' - CollectiveManager.creepCount = 0 - CollectiveManager.powerCreepCount = 0 - CollectiveManager.communes = new Set() - CollectiveManager.communesForWorkRequests = new Set() - CollectiveManager.communesForCombatRequests = new Set() - CollectiveManager.communesForHaulRequests = new Set() + this.myCommands = [] + this.logs = '' + this.creepCount = 0 + this.powerCreepCount = 0 + this.communes = new Set() + this.communesForWorkRequests = new Set() + this.communesForCombatRequests = new Set() + this.communesForHaulRequests = new Set() // delete - CollectiveManager.safemodedCommuneName = undefined - CollectiveManager._workRequestsByScore = undefined - CollectiveManager._defaultMinCacheAmount = undefined - CollectiveManager.internationalDataVisuals = undefined + this.safemodedCommuneName = undefined + this._workRequestsByScore = undefined + this._defaultMinCacheAmount = undefined + this.internationalDataVisuals = undefined // - CollectiveManager.updateMinHaulerCost() + this.updateMinHaulerCost() // Run CollectiveManager stuff every so often if (utils.isTickInterval(periodicUpdateInterval)) { // delete - CollectiveManager._funnelOrder = undefined - CollectiveManager._funnelingRoomNames = undefined - CollectiveManager._minCredits = undefined - CollectiveManager._resourcesInStoringStructures = undefined - CollectiveManager._maxCSitesPerRoom = undefined + this._funnelOrder = undefined + this._funnelingRoomNames = undefined + this._minCredits = undefined + this._resourcesInStoringStructures = undefined + this._maxCSitesPerRoom = undefined } // @@ -125,19 +124,19 @@ export class CollectiveManager extends Sleepable { static newCustomCreepID() { // Try to use an existing unused ID index - for (; CollectiveManager.customCreepIDIndex < CollectiveManager.customCreepIDs.length; CollectiveManager.customCreepIDIndex++) { - if (CollectiveManager.customCreepIDs[CollectiveManager.customCreepIDIndex]) continue + for (; this.customCreepIDIndex < this.customCreepIDs.length; this.customCreepIDIndex++) { + if (this.customCreepIDs[this.customCreepIDIndex]) continue - CollectiveManager.customCreepIDs[CollectiveManager.customCreepIDIndex] = true - CollectiveManager.customCreepIDIndex += 1 - return CollectiveManager.customCreepIDIndex - 1 + this.customCreepIDs[this.customCreepIDIndex] = true + this.customCreepIDIndex += 1 + return this.customCreepIDIndex - 1 } // All previous indexes are being used, add a new index - CollectiveManager.customCreepIDs.push(true) - CollectiveManager.customCreepIDIndex += 1 - return CollectiveManager.customCreepIDIndex - 1 + this.customCreepIDs.push(true) + this.customCreepIDIndex += 1 + return this.customCreepIDIndex - 1 } static advancedGeneratePixel() { @@ -180,38 +179,38 @@ export class CollectiveManager extends Sleepable { * Provides a cached binary of wall or not wall terrain */ static getTerrainBinary(roomName: string) { - if (CollectiveManager.terrainBinaries[roomName]) return CollectiveManager.terrainBinaries[roomName] + if (this.terrainBinaries[roomName]) return this.terrainBinaries[roomName] - CollectiveManager.terrainBinaries[roomName] = new Uint8Array(2500) + this.terrainBinaries[roomName] = new Uint8Array(2500) const terrain = Game.map.getRoomTerrain(roomName) for (let x = 0; x < roomDimensions; x += 1) { for (let y = 0; y < roomDimensions; y += 1) { - CollectiveManager.terrainBinaries[roomName][packXYAsNum(x, y)] = + this.terrainBinaries[roomName][packXYAsNum(x, y)] = terrain.get(x, y) === TERRAIN_MASK_WALL ? 255 : 0 } } - return CollectiveManager.terrainBinaries[roomName] + return this.terrainBinaries[roomName] } static newTickID() { - return (CollectiveManager.tickID += 1).toString() + return (this.tickID += 1).toString() } static _minCredits: number static get minCredits() { - if (CollectiveManager._minCredits !== undefined) return CollectiveManager._minCredits + if (this._minCredits !== undefined) return this._minCredits - return (CollectiveManager._minCredits = CollectiveManager.communes.size * 10000) + return (this._minCredits = this.communes.size * 10000) } static _workRequestsByScore: (string | undefined)[] static get workRequestsByScore(): (string | undefined)[] { - if (CollectiveManager._workRequestsByScore) return CollectiveManager._workRequestsByScore + if (this._workRequestsByScore) return this._workRequestsByScore - return (CollectiveManager._workRequestsByScore = Object.keys(Memory.workRequests).sort( + return (this._workRequestsByScore = Object.keys(Memory.workRequests).sort( (a, b) => (Memory.workRequests[a][WorkRequestKeys.priority] ?? Memory.rooms[a][RoomMemoryKeys.score] + Memory.rooms[a][RoomMemoryKeys.dynamicScore]) - @@ -222,37 +221,37 @@ export class CollectiveManager extends Sleepable { static _defaultMinCacheAmount: number static get defaultMinPathCacheTime() { - if (CollectiveManager._defaultMinCacheAmount !== undefined) return CollectiveManager._defaultMinCacheAmount + if (this._defaultMinCacheAmount !== undefined) return this._defaultMinCacheAmount const avgCPUUsagePercent = Memory.stats.cpu.usage / Game.cpu.limit - return (CollectiveManager._defaultMinCacheAmount = Math.floor(Math.pow(avgCPUUsagePercent * 10, 2.2)) + 1) + return (this._defaultMinCacheAmount = Math.floor(Math.pow(avgCPUUsagePercent * 10, 2.2)) + 1) } static _maxCommunes: number static get maxCommunes() { - return (CollectiveManager._maxCommunes = Math.round(Game.cpu.limit / 10)) + return (this._maxCommunes = Math.round(Game.cpu.limit / 10)) } static _avgCommunesPerMineral: number static get avgCommunesPerMineral() { let sum = 0 - for (const mineralType in CollectiveManager.mineralNodes) { - sum += CollectiveManager.mineralNodes[mineralType as MineralConstant] + for (const mineralType in this.mineralNodes) { + sum += this.mineralNodes[mineralType as MineralConstant] } const avg = roundTo(sum / minerals.length, 2) - return (CollectiveManager._avgCommunesPerMineral = avg) + return (this._avgCommunesPerMineral = avg) } static _compoundPriority: Partial<{ [key in MineralCompoundConstant]: number }> static get compoundPriority() { - if (CollectiveManager._compoundPriority) return CollectiveManager._compoundPriority + if (this._compoundPriority) return this._compoundPriority - CollectiveManager._compoundPriority = {} + this._compoundPriority = {} - return CollectiveManager._compoundPriority + return this._compoundPriority } static _funnelOrder: string[] @@ -260,7 +259,7 @@ export class CollectiveManager extends Sleepable { * Commune names sorted by funnel priority */ static getFunnelOrder() { - if (CollectiveManager._funnelOrder) return CollectiveManager._funnelOrder + if (this._funnelOrder) return this._funnelOrder let funnelOrder: string[] = [] @@ -269,7 +268,7 @@ export class CollectiveManager extends Sleepable { const communesByLevel: { [level: string]: [string, number][] } = {} for (let i = 6; i < 8; i++) communesByLevel[i] = [] - for (const roomName of CollectiveManager.communes) { + for (const roomName of this.communes) { const room = Game.rooms[roomName] if (!room.terminal) continue @@ -292,7 +291,7 @@ export class CollectiveManager extends Sleepable { funnelOrder = funnelOrder.concat(communesByLevel[level].map(tuple => tuple[0])) } - return (CollectiveManager._funnelOrder = funnelOrder) + return (this._funnelOrder = funnelOrder) } static _funnelingRoomNames: Set @@ -304,11 +303,11 @@ export class CollectiveManager extends Sleepable { * The last room wants to be funneled, however, only the first 3 rooms will be, excluding the last 2: {y, y, y, x, x}. */ static getFunnelingRoomNames() { - if (CollectiveManager._funnelingRoomNames) return CollectiveManager._funnelingRoomNames - /* if (CollectiveManager._funnelingRoomNames) return CollectiveManager._funnelingRoomNames + if (this._funnelingRoomNames) return this._funnelingRoomNames + /* if (this._funnelingRoomNames) return this._funnelingRoomNames const funnelingRoomNames = new Set() - const funnelTargets = CollectiveManager.funnelOrder + const funnelTargets = this.funnelOrder for (const roomName of funnelTargets) { const room = Game.rooms[roomName] @@ -322,12 +321,12 @@ export class CollectiveManager extends Sleepable { funnelingRoomNames.add(roomName) } - CollectiveManager._funnelingRoomNames = funnelingRoomNames + this._funnelingRoomNames = funnelingRoomNames return funnelingRoomNames */ - const funnelOrder = CollectiveManager.getFunnelOrder() + const funnelOrder = this.getFunnelOrder() // Rooms that want to get funneled might not get to be if they aren't in line for funneling - const funnelWanters = CollectiveManager.getFunnelWanters(funnelOrder) + const funnelWanters = this.getFunnelWanters(funnelOrder) const funnelingRoomNames = new Set() @@ -341,7 +340,7 @@ export class CollectiveManager extends Sleepable { funnelingRoomNames.add(roomName) } - CollectiveManager._funnelingRoomNames = funnelingRoomNames + this._funnelingRoomNames = funnelingRoomNames return funnelingRoomNames } @@ -377,27 +376,27 @@ export class CollectiveManager extends Sleepable { static _resourcesInStoringStructures: Partial<{ [key in ResourceConstant]: number }> static get resourcesInStoringStructures() { - if (CollectiveManager._resourcesInStoringStructures) return CollectiveManager._resourcesInStoringStructures + if (this._resourcesInStoringStructures) return this._resourcesInStoringStructures - CollectiveManager._resourcesInStoringStructures = {} + this._resourcesInStoringStructures = {} - for (const roomName of CollectiveManager.communes) { + for (const roomName of this.communes) { const room = Game.rooms[roomName] const resources = room.roomManager.resourcesInStoringStructures for (const key in resources) { const resource = key as unknown as ResourceConstant - if (!CollectiveManager._resourcesInStoringStructures[resource]) { - CollectiveManager._resourcesInStoringStructures[resource] = resources[resource] + if (!this._resourcesInStoringStructures[resource]) { + this._resourcesInStoringStructures[resource] = resources[resource] continue } - CollectiveManager._resourcesInStoringStructures[resource] += resources[resource] + this._resourcesInStoringStructures[resource] += resources[resource] } } - return CollectiveManager._resourcesInStoringStructures + return this._resourcesInStoringStructures } static _maxCSitesPerRoom: number @@ -405,8 +404,8 @@ export class CollectiveManager extends Sleepable { * The largest amount of construction sites we can try to have in a room */ static get maxCSitesPerRoom() { - if (CollectiveManager._maxCSitesPerRoom) return CollectiveManager._maxCSitesPerRoom + if (this._maxCSitesPerRoom) return this._maxCSitesPerRoom - return Math.max(Math.min(MAX_CONSTRUCTION_SITES / CollectiveManager.communes.size, 20), 3) + return Math.max(Math.min(MAX_CONSTRUCTION_SITES / this.communes.size, 20), 3) } } diff --git a/src/international/constants.ts b/src/international/constants.ts index 9ade5bee9..54445b5e9 100644 --- a/src/international/constants.ts +++ b/src/international/constants.ts @@ -1471,6 +1471,7 @@ export enum FlagNames { debugRoomLogistics = 'debugRoomLogistics', debugCreepLogistics = 'debugCreepLogistics', debugSpawning = 'debugSpawning', + mapVisuals = 'mapVisuals', } export const IDUpdateInterval = randomIntRange(50, 100) diff --git a/src/international/constructionSiteManager.ts b/src/international/constructionSites.ts similarity index 93% rename from src/international/constructionSiteManager.ts rename to src/international/constructionSites.ts index 21123f4b6..14e6ba67a 100644 --- a/src/international/constructionSiteManager.ts +++ b/src/international/constructionSites.ts @@ -8,7 +8,7 @@ import { SegmentsManager } from './segments' * Tracks and records constructionSites and thier age, deleting old sites */ export class ConstructionSiteManager { - run() { + static run() { if (!utils.isTickInterval(IDUpdateInterval)) return const recordedIDs = SegmentsManager.IDs.constructionSites @@ -55,9 +55,7 @@ export class ConstructionSiteManager { } } - getMaxCSiteAge(cSite: ConstructionSite) { + static getMaxCSiteAge(cSite: ConstructionSite) { return 20000 + cSite.progress * 5 } } - -export const constructionSiteManager = new ConstructionSiteManager() diff --git a/src/international/creepOrganizer.ts b/src/international/creepOrganizer.ts index fea89646f..48cb1ada6 100644 --- a/src/international/creepOrganizer.ts +++ b/src/international/creepOrganizer.ts @@ -3,15 +3,13 @@ import { CreepMemoryKeys, customColors, remoteRoles, roomLogisticsRoles } from ' import { customLog } from 'utils/logging' import { CollectiveManager } from './collective' import { packCoord } from 'other/codec' -import { statsManager } from './statsManager' +import { StatsManager } from './stats' import { creepUtils } from 'room/creeps/creepUtils' import { creepDataManager } from 'room/creeps/creepData' import { creepProcs } from 'room/creeps/creepProcs' export class CreepOrganizer { - constructor() {} - - public run() { + public static run() { // Loop through all of my creeps for (const creepName in Memory.creeps) { @@ -24,7 +22,7 @@ export class CreepOrganizer { } } - private organizeCreep(creepName: string) { + private static organizeCreep(creepName: string) { let creep = Game.creeps[creepName] // If creep doesn't exist @@ -90,5 +88,3 @@ export class CreepOrganizer { commune.creepsFromRoomAmount += 1 } } - -export const creepOrganizer = new CreepOrganizer() diff --git a/src/international/featureFlags.spec.ts b/src/international/featureFlags.spec.ts index e77a676cf..e2196a39e 100644 --- a/src/international/featureFlags.spec.ts +++ b/src/international/featureFlags.spec.ts @@ -1,13 +1,13 @@ -import { Feature, FeatureFlagManager, featureFlagManager } from './featureFlags' +import { Feature, FeatureFlagManager } from './featureFlags' describe('Feature Flags', () => { - featureFlagManager + FeatureFlagManager it('should return false when checking if a feature flag is turned on', () => { - expect(featureFlagManager.flags[Feature.testFeatureDisabled]).toBe(false) + expect(FeatureFlagManager.flags[Feature.testFeatureDisabled]).toBe(false) }) it('should return true when checking if a feature flag is turned on', () => { - expect(featureFlagManager.flags[Feature.testFeatureEnabled]).toBe(true) + expect(FeatureFlagManager.flags[Feature.testFeatureEnabled]).toBe(true) }) }) diff --git a/src/international/featureFlags.ts b/src/international/featureFlags.ts index 3fdefcdc9..a31944acd 100644 --- a/src/international/featureFlags.ts +++ b/src/international/featureFlags.ts @@ -10,17 +10,13 @@ interface FeatureFlagConfig { export class FeatureFlagManager { // An object to hold the flag configuration - flags: FeatureFlagConfig = { + static flags: FeatureFlagConfig = { [Feature.testFeatureEnabled]: false, [Feature.testFeatureDisabled]: false, } - constructor() {} - // Method to check if a combination of feature flags are turned on - areFlagsOn(flags: Feature[]): boolean { + static areFlagsOn(flags: Feature[]): boolean { return flags.every(flag => !!flag) // Check if every flag in the array is turned on } } - -export const featureFlagManager = new FeatureFlagManager() diff --git a/src/international/init.ts b/src/international/init.ts index c80202382..c3c061920 100644 --- a/src/international/init.ts +++ b/src/international/init.ts @@ -1,6 +1,6 @@ import { getMe } from 'utils/utils' -import { playerManager } from './players' -import { statsManager } from './statsManager' +import { PlayerManager } from './players' +import { StatsManager } from './stats' import { PlayerMemoryKeys, SegmentIDs } from './constants' import { PlayerRelationships } from './constants' @@ -40,7 +40,7 @@ export class InitManager { Memory.combatRequests = {} Memory.haulRequests = {} Memory.nukeRequests = {} - statsManager.internationalConfig() + StatsManager.internationalConfig() } /** * Construct global if it isn't constructed yet @@ -60,7 +60,7 @@ export class InitManager { for (const playerName of global.settings.allies) { const playerMemory = Memory.players[playerName] if (!playerMemory) { - playerManager.initPlayer(playerName) + PlayerManager.initPlayer(playerName) } playerMemory[PlayerMemoryKeys.relationship] = PlayerRelationships.ally @@ -68,16 +68,11 @@ export class InitManager { } private static initSegments() { - - RawMemory.segments[SegmentIDs.basePlans] = JSON.stringify({ - - } as BasePlansSegment) + RawMemory.segments[SegmentIDs.basePlans] = JSON.stringify({} as BasePlansSegment) RawMemory.segments[SegmentIDs.IDs] = JSON.stringify({ - constructionSites: {}, - recordedTransactionIDs: {}, + constructionSites: {}, + recordedTransactionIDs: {}, } as IDsSegment) - - } } diff --git a/src/international/interShardPlanner.ts b/src/international/interShardPlanner.ts deleted file mode 100644 index 9ff95ac1b..000000000 --- a/src/international/interShardPlanner.ts +++ /dev/null @@ -1,5 +0,0 @@ -class InterShardPlanner { - -} - -export const interShardPlanner = new InterShardPlanner() diff --git a/src/international/mapVisuals.ts b/src/international/mapVisuals.ts index b6cede11e..09fd71719 100644 --- a/src/international/mapVisuals.ts +++ b/src/international/mapVisuals.ts @@ -6,14 +6,15 @@ import { RoomTypes, roomDimensions, packedPosLength, + FlagNames, } from './constants' /** * Adds colours and annotations to the map if mapVisuals are enabled */ export class MapVisualsManager { - run() { - if (!global.settings.mapVisuals) return + static run() { + if (!global.settings.mapVisuals && !Game.flags[FlagNames.mapVisuals]) return for (const roomName in Memory.rooms) { const roomMemory = Memory.rooms[roomName] @@ -194,7 +195,7 @@ export class MapVisualsManager { this.workRequests() } - private workRequests() { + private static workRequests() { for (const roomName in Memory.workRequests) { const priority = Memory.workRequests[roomName][WorkRequestKeys.priority] const preference = @@ -221,7 +222,7 @@ export class MapVisualsManager { } } } - private test(roomName: string, roomMemory: RoomMemory) { + private static test(roomName: string, roomMemory: RoomMemory) { /* Game.map.visual.text((Game.time - roomMemory[RoomMemoryKeys.lastScout]).toString(), new RoomPosition(2, 40, roomName), { align: 'left', @@ -237,5 +238,3 @@ export class MapVisualsManager { */ } } - -export const mapVisualsManager = new MapVisualsManager() diff --git a/src/international/market/marketOrders.ts b/src/international/market/marketOrders.ts index dceb34acf..4d01046bd 100644 --- a/src/international/market/marketOrders.ts +++ b/src/international/market/marketOrders.ts @@ -6,7 +6,7 @@ import { customLog } from 'utils/logging' const optimizeOrdersInterval = randomIntRange(900, 1000) export class MarketManager { - run() { + static run() { this._myOrders = undefined this.cachedOrders = {} this._myOrdersCount = undefined @@ -22,7 +22,7 @@ export class MarketManager { this.pruneMyOrders() } - private pruneMyOrders() { + private static pruneMyOrders() { // If there is sufficiently few orders if (this.myOrdersCount < MARKET_MAX_ORDERS * 0.8) return @@ -34,7 +34,7 @@ export class MarketManager { } } - private optimizeMyOrders(): void { + private static optimizeMyOrders(): void { const myOrders = Game.market.orders for (const ID in myOrders) { // If the order is inactive (it likely has no remaining resources), delete it @@ -49,7 +49,7 @@ export class MarketManager { const orders = this.getOrders(order.resourceType, ORDER_BUY) if (!orders) continue - const newPrice = Math.min(marketManager.getAvgPrice(order.resourceType) * 1.2) + const newPrice = Math.min(this.getAvgPrice(order.resourceType) * 1.2) if (order.price === newPrice) continue const absDiff = Math.abs(order.price - newPrice) @@ -65,7 +65,7 @@ export class MarketManager { const orders = this.getOrders(order.resourceType, ORDER_SELL) if (!orders) continue - const newPrice = Math.min(marketManager.getAvgPrice(order.resourceType) * 0.8) + const newPrice = Math.min(this.getAvgPrice(order.resourceType) * 0.8) if (order.price === newPrice) continue const absDiff = Math.abs(order.price - newPrice) @@ -79,7 +79,7 @@ export class MarketManager { /** * Finds the cheapest sell order */ - getShardSellOrder( + static getShardSellOrder( roomName: string, resourceType: MarketResourceConstant, amount: number, @@ -108,7 +108,7 @@ export class MarketManager { /** * Finds the most expensive buy order */ - getShardBuyOrder( + static getShardBuyOrder( roomName: string, resourceType: MarketResourceConstant, amount: number, @@ -138,7 +138,7 @@ export class MarketManager { /** * Finds the cheapest sell order */ - getGlobalSellOrder( + static getGlobalSellOrder( resourceType: MarketResourceConstant, maxPrice = this.getAvgPrice(resourceType) * 1.2, ) { @@ -166,7 +166,7 @@ export class MarketManager { /** * Finds the most expensive buy order */ - getGlobalBuyOrder( + static getGlobalBuyOrder( resourceType: MarketResourceConstant, minPrice = this.getAvgPrice(resourceType) * 0.8, ) { @@ -194,7 +194,7 @@ export class MarketManager { /** * Find the highest order and sell pixels to it */ - advancedSellPixels() { + static advancedSellPixels() { if (!global.settings.pixelSelling) return if (Game.resources[PIXEL] === 0) return @@ -257,14 +257,14 @@ export class MarketManager { /** * intra-tick cached orders sorted by resourceType and trade type */ - cachedOrders: CachedMarketOrders + static cachedOrders: CachedMarketOrders /** * orders created by other players that we are on acceptable terms with, for a specified resource and trade type * See engine: https://github.com/screeps/engine/blob/7ee5b8e24b16b6b31727a83db15f676f5061a114/src/game/market.js#L13 * It seems that there is caching for each resource, but nothing else. So we will use that cache while also organizing by order type (BUY or SELL) */ - getOrders(resourceType: MarketResourceConstant, orderType: MarketOrderTypes) { + static getOrders(resourceType: MarketResourceConstant, orderType: MarketOrderTypes) { if (this.cachedOrders[resourceType]) { return this.cachedOrders[resourceType][orderType] } @@ -299,14 +299,14 @@ export class MarketManager { /** * My outgoing orders organized by room, order type and resourceType */ - _myOrders: { + static _myOrders: { [roomName: string]: Partial>>> } /** * Gets my outgoing orders organized by room, order type and resourceType */ - get myOrders() { + static get myOrders() { // If _myOrders are already defined, inform them if (this._myOrders) return this._myOrders @@ -349,32 +349,32 @@ export class MarketManager { /** * The number of orders owned by me */ - _myOrdersCount: number + static _myOrdersCount: number /** * Gets the number of orders owned by me */ - get myOrdersCount() { + static get myOrdersCount() { if (this._myOrdersCount !== undefined) return this._myOrdersCount return (this._myOrdersCount = Object.keys(Game.market.orders).length) } - _isMarketFunctional: boolean + static _isMarketFunctional: boolean /** * Determines if it is functional based on the existence of orders */ - get isMarketFunctional() { + static get isMarketFunctional() { if (this._isMarketFunctional !== undefined) return this._isMarketFunctional return (this._isMarketFunctional = !!Game.market.getAllOrders().length) } - private resourceHistory: Partial<{ [key in MarketResourceConstant]: { [days: string]: number } }> + private static resourceHistory: Partial<{ [key in MarketResourceConstant]: { [days: string]: number } }> /** * Finds the average trading price of a resourceType over a set amount of days */ - getAvgPrice(resourceType: MarketResourceConstant, days = 2) { + static getAvgPrice(resourceType: MarketResourceConstant, days = 2) { if (this.resourceHistory[resourceType] && this.resourceHistory[resourceType][days]) { return this.resourceHistory[resourceType][days] } @@ -401,11 +401,9 @@ export class MarketManager { return avgPrice } - decidePrice(resourceType: ResourceConstant, priority: number, startTick: number = Game.time) {} + static decidePrice(resourceType: ResourceConstant, priority: number, startTick: number = Game.time) {} } -export const marketManager = new MarketManager() - export type MarketOrderTypes = ORDER_BUY | ORDER_SELL export type CachedMarketOrders = Partial<{ diff --git a/src/international/players.ts b/src/international/players.ts index ab3c08c83..d8e7a2f76 100644 --- a/src/international/players.ts +++ b/src/international/players.ts @@ -1,16 +1,16 @@ import { isNumber } from 'lodash' import { PlayerMemoryKeys, defaultDataDecay, playerDecayKeys } from './constants' import { randomTick } from '../utils/utils' -import { Sleepable } from '../utils/sleepable' +import { Sleepable, StaticSleepable } from '../utils/sleepable' import { PlayerRelationships } from './constants' -export class PlayerManager extends Sleepable { +export class PlayerManager extends StaticSleepable { /** * The highest offensive threat of known players */ - highestThreat: number = 0 + static highestThreat: number = 0 - run() { + static run() { if (this.isSleepingResponsive()) return this.highestThreat = 0 @@ -42,7 +42,7 @@ export class PlayerManager extends Sleepable { } } - initPlayer(playerName: string) { + static initPlayer(playerName: string) { return (Memory.players[playerName] = { [PlayerMemoryKeys.offensiveThreat]: 0, @@ -53,7 +53,7 @@ export class PlayerManager extends Sleepable { }) } - private findInitialRelationship(playerName: string) { + private static findInitialRelationship(playerName: string) { const isAlly = global.settings.allies.includes(playerName) if (isAlly) return PlayerRelationships.ally @@ -64,8 +64,8 @@ export class PlayerManager extends Sleepable { /** * Player names sorted from most hated to least */ - _playersByHate: string[] - get playerByHate() { + static _playersByHate: string[] + static get playerByHate() { if (this._playersByHate) return this._playersByHate this._playersByHate = Object.keys(Memory.players).sort((a, b) => { @@ -84,5 +84,3 @@ export class PlayerManager extends Sleepable { } */ } - -export const playerManager = new PlayerManager() diff --git a/src/international/powerCreepOrganizer.ts b/src/international/powerCreepOrganizer.ts index 4b9568f74..0cf8e84a6 100644 --- a/src/international/powerCreepOrganizer.ts +++ b/src/international/powerCreepOrganizer.ts @@ -4,12 +4,10 @@ import { customLog } from 'utils/logging' import { CollectiveManager } from './collective' import { packCoord } from 'other/codec' import { powerCreepClasses } from 'room/creeps/powerCreepClasses' -import { statsManager } from './statsManager' +import { StatsManager } from './stats' export class PowerCreepOrganizer { - constructor() {} - - public run() { + public static run() { // Clear non-existent creeps from memory for (const creepName in Memory.powerCreeps) { @@ -25,7 +23,7 @@ export class PowerCreepOrganizer { } } - private processCreep(creepName: string) { + private static processCreep(creepName: string) { let creep = Game.powerCreeps[creepName] // If the creep isn't spawned @@ -63,5 +61,3 @@ export class PowerCreepOrganizer { creep.initRun() } } - -export const powerCreepOrganizer = new PowerCreepOrganizer() diff --git a/src/international/requests.ts b/src/international/requests.ts index 04aeb3036..42ad8d282 100644 --- a/src/international/requests.ts +++ b/src/international/requests.ts @@ -14,7 +14,7 @@ import { maxWorkRequestDistance, } from './constants' import { indexOf } from 'lodash' -import { Sleepable } from 'utils/sleepable' +import { Sleepable, StaticSleepable } from 'utils/sleepable' import { util } from 'chai' import { WorkRequest } from 'types/internationalRequests' import { communeUtils } from 'room/commune/communeUtils' @@ -22,10 +22,10 @@ import { communeUtils } from 'room/commune/communeUtils' const runRequestInverval = randomIntRange(100, 200) // Should adsorb the request content of tickInit -export class RequestsManager extends Sleepable { - sleepFor = randomIntRange(100, 200) +export class RequestsManager extends StaticSleepable { + static sleepFor = randomIntRange(100, 200) - run() { + public static run() { this.updateWorkRequests() this.updateCombatRequests() this.updateHaulRequests() @@ -39,7 +39,7 @@ export class RequestsManager extends Sleepable { // update requests - private updateWorkRequests() { + private static updateWorkRequests() { const runThreshold = randomIntRange(19000, 20000) for (const roomName in Memory.workRequests) { @@ -67,7 +67,7 @@ export class RequestsManager extends Sleepable { } } - private updateCombatRequests() { + private static updateCombatRequests() { for (const requestName in Memory.combatRequests) { const request = Memory.combatRequests[requestName] @@ -88,7 +88,7 @@ export class RequestsManager extends Sleepable { } } - private updateHaulRequests() { + private static updateHaulRequests() { for (const requestName in Memory.haulRequests) { const request = Memory.haulRequests[requestName] @@ -108,7 +108,7 @@ export class RequestsManager extends Sleepable { // run requests - private runWorkRequests() { + private static runWorkRequests() { if (!global.settings.autoClaim) return /* if (CollectiveManager.communes.size >= CollectiveManager.maxCommunes) return */ @@ -200,7 +200,7 @@ export class RequestsManager extends Sleepable { } } - private shouldWorkRequestGetResponse( + private static shouldWorkRequestGetResponse( request: WorkRequest, roomName: string, reservedGCL: number, @@ -224,7 +224,7 @@ export class RequestsManager extends Sleepable { return true } - private runCombatRequests() { + private static runCombatRequests() { for (const requestName in Memory.combatRequests) { const request = Memory.combatRequests[requestName] @@ -328,7 +328,7 @@ export class RequestsManager extends Sleepable { } } - private runHaulRequests() { + private static runHaulRequests() { for (const requestName in Memory.haulRequests) { const request = Memory.haulRequests[requestName] @@ -401,5 +401,3 @@ export class RequestsManager extends Sleepable { } } } - -export const requestsManager = new RequestsManager() diff --git a/src/international/schedule/schedule.ts b/src/international/schedule/schedule.ts index 0f4987188..6dbcf34a5 100644 --- a/src/international/schedule/schedule.ts +++ b/src/international/schedule/schedule.ts @@ -3,6 +3,41 @@ import { Schedule, ScheduleIntervalTask, ScheduleTask } from "./schedule.types"; export const schedule: Schedule = [] export class ScheduleProcs { + static runSchedule() { + + for (const task of schedule) { + + if (ScheduleProcs.isIntervalTask(task)) { + this.tryRunIntervalTask(task) + continue + } + + task.opperation() + } + } + + static tryRunIntervalTask(task: ScheduleIntervalTask) { + + // If the task hasn't been ran yet, run it + if (task.sleepUntil === undefined) { + + task.opperation() + task.sleepUntil = Game.time + task.interval + return + } + + if (task.sleepUntil > Game.time) return + + // Otherwise we are ready to be ran + + task.opperation() + task.sleepUntil = Game.time + task.interval + } + + static isIntervalTask(task: ScheduleTask): task is ScheduleIntervalTask { + return (task).interval !== undefined + } + static addTask(task: ScheduleTask) { schedule.push(task) diff --git a/src/international/schedule/schedule.types.ts b/src/international/schedule/schedule.types.ts index 99ec117a1..72e76e50f 100644 --- a/src/international/schedule/schedule.types.ts +++ b/src/international/schedule/schedule.types.ts @@ -1,4 +1,4 @@ -export type Schedule = ScheduleTask[] +export type Schedule = (ScheduleTask | ScheduleIntervalTask)[] /** * Union type. If it has one property of a cronTask, it must have the rest @@ -12,9 +12,9 @@ export interface ScheduleTask { export interface ScheduleIntervalTask extends ScheduleTask { /** - * When the task was last ran; or never + * How long to sleep the task for before running it again */ - lastRan: number | undefined + sleepUntil: number | undefined /** * How often the run the task * Its existence determines wether or not a task is a cronjob diff --git a/src/international/statsManager.ts b/src/international/stats.ts similarity index 95% rename from src/international/statsManager.ts rename to src/international/stats.ts index 87c212a91..a2e8ca8ad 100644 --- a/src/international/statsManager.ts +++ b/src/international/stats.ts @@ -145,13 +145,13 @@ const averageStatNames: Set = new Set([ ]) export class StatsManager { - stats: { + static stats: { [roomType in RoomTypes.commune | RoomTypes.remote]: { [roomName: string]: Partial } } - private roomConfig(roomName: string, roomType: number) { + private static roomConfig(roomName: string, roomType: number) { if (roomType === RoomTypes.commune) { const roomStats = (this.stats[RoomTypes.commune][roomName] = { [RoomStatsKeys.SpawnUsagePercentage]: 0, @@ -199,11 +199,11 @@ export class StatsManager { } } - roomInitialRun(roomName: string, roomType: number) { + static roomInitialRun(roomName: string, roomType: number) { this.roomConfig(roomName, roomType) } - private roomCommuneEndRun(roomName: string, forceUpdate: boolean = false) { + private static roomCommuneEndRun(roomName: string, forceUpdate: boolean = false) { const room = Game.rooms[roomName] const roomMemory = Memory.rooms[roomName] const interTickRoomStats = Memory.stats.rooms[roomName] @@ -291,7 +291,7 @@ export class StatsManager { interTickRoomStats[statName] = roomStats[statName] } } - internationalConfig() { + static internationalConfig() { Memory.stats = { lastReset: global.lastReset, tickLength: 0, @@ -333,11 +333,11 @@ export class StatsManager { this.internationalEndRun() } - tickInit() { + static tickInit() { this.stats = { [RoomTypes.commune]: {}, [RoomTypes.remote]: {} } } - internationalEndRun() { + static internationalEndRun() { // Run communes one last time to update stats for (const roomName in Memory.stats.rooms) { @@ -408,7 +408,7 @@ export class StatsManager { this.stats = undefined } - private average( + private static average( avg: number, dataPoint: number, averagedOverTickCount: number = 1000, @@ -429,7 +429,7 @@ export class StatsManager { /** * average but don't account for time skips */ - private averageMarginalTimeStep( + private static averageMarginalTimeStep( avg: number, dataPoint: number, averagedOverTickCount: number = 1000, @@ -444,7 +444,7 @@ export class StatsManager { return roundTo(avg, precision) } - updateStat(roomName: string, statName: keyof RoomStats | keyof CommuneStats, value: number) { + static updateStat(roomName: string, statName: keyof RoomStats | keyof CommuneStats, value: number) { if (this.stats[RoomTypes.commune][roomName]) { this.updateCommuneStat(roomName, statName as keyof CommuneStats, value) return @@ -459,11 +459,11 @@ export class StatsManager { } } - updateCommuneStat(roomName: string, statName: keyof CommuneStats, value: number) { + static updateCommuneStat(roomName: string, statName: keyof CommuneStats, value: number) { this.stats[RoomTypes.commune][roomName][statName] += value } - updateRemoteStat( + static updateRemoteStat( roomName: string, statName: keyof RoomStats | keyof CommuneStats, value: number, diff --git a/src/international/tickInit.ts b/src/international/tickInit.ts index 0c543c466..05560087c 100644 --- a/src/international/tickInit.ts +++ b/src/international/tickInit.ts @@ -1,6 +1,6 @@ -class TickInit { - configGeneral() { +export class TickInit { + static configGeneral() { // Chant logic @@ -10,5 +10,3 @@ class TickInit { } } } - -export const tickInit = new TickInit() diff --git a/src/international/transactions.ts b/src/international/transactions.ts index 9a7e2facb..ad325f858 100644 --- a/src/international/transactions.ts +++ b/src/international/transactions.ts @@ -3,11 +3,10 @@ import { IDUpdateInterval, RoomStatsKeys } from "./constants" import { randomIntRange, utils } from "utils/utils" import { CollectiveManager } from './collective' import { SegmentsManager } from './segments' -import { statsManager } from "./statsManager" +import { StatsManager } from './stats' export class TransactionsManager { - - run() { + static run() { if (!utils.isTickInterval(IDUpdateInterval)) return const recordedTransactionIDs = SegmentsManager.IDs.recordedTransactionIDs @@ -16,18 +15,15 @@ export class TransactionsManager { this.pruneRecordedTransactions(recordedTransactionIDs, currentTransactionIDs) } - private registerCurrentTransactions(recordedTransactionIDs: RecordedTransactionIDs) { - + private static registerCurrentTransactions(recordedTransactionIDs: RecordedTransactionIDs) { const currentTransactionIDs = new Set() for (const transaction of Game.market.outgoingTransactions) { - currentTransactionIDs.add(transaction.transactionId) this.registerTransaction(recordedTransactionIDs, transaction) } for (const transaction of Game.market.incomingTransactions) { - currentTransactionIDs.add(transaction.transactionId) this.registerTransaction(recordedTransactionIDs, transaction) } @@ -38,8 +34,10 @@ export class TransactionsManager { /** * Remove recorded transaction IDs that are no longer present in current data */ - private pruneRecordedTransactions(recordedTransactionIDs: RecordedTransactionIDs, currentTransactionIDs: Set) { - + private static pruneRecordedTransactions( + recordedTransactionIDs: RecordedTransactionIDs, + currentTransactionIDs: Set, + ) { for (const transactionID in recordedTransactionIDs) { // only delete if it isn't in current data if (currentTransactionIDs.has(transactionID)) continue @@ -48,8 +46,10 @@ export class TransactionsManager { } } - private registerTransaction(recordedTransactionIDs: RecordedTransactionIDs, transaction: Transaction) { - + private static registerTransaction( + recordedTransactionIDs: RecordedTransactionIDs, + transaction: Transaction, + ) { // don't register already registered orders if (recordedTransactionIDs[transaction.transactionId]) return @@ -58,46 +58,56 @@ export class TransactionsManager { this.processTransaction(transaction) } - private processTransaction(transaction: Transaction) { - + private static processTransaction(transaction: Transaction) { if (transaction.resourceType !== RESOURCE_ENERGY) return if (transaction.sender.username === Memory.me) { - this.processTransactionMySend(transaction) } if (transaction.recipient.username === Memory.me) { - this.processTransactionMyReceive(transaction) } } - private processTransactionMySend(transaction: Transaction) { + private static processTransactionMySend(transaction: Transaction) { if (!CollectiveManager.communes.has(transaction.from)) return if (transaction.order) { - - statsManager.updateCommuneStat(transaction.from, RoomStatsKeys.EnergyOutputSold, transaction.amount) + StatsManager.updateCommuneStat( + transaction.from, + RoomStatsKeys.EnergyOutputSold, + transaction.amount, + ) return } const isDomestic = this.isDomestic(transaction.from, transaction.to) if (isDomestic) { - - statsManager.updateCommuneStat(transaction.from, RoomStatsKeys.EnergyTerminalSentDomestic, transaction.amount) + StatsManager.updateCommuneStat( + transaction.from, + RoomStatsKeys.EnergyTerminalSentDomestic, + transaction.amount, + ) } // Not a domestic trade else { - statsManager.updateCommuneStat(transaction.from, RoomStatsKeys.EnergyTerminalSentOther, transaction.amount) + StatsManager.updateCommuneStat( + transaction.from, + RoomStatsKeys.EnergyTerminalSentOther, + transaction.amount, + ) } } - private processTransactionMyReceive(transaction: Transaction) { + private static processTransactionMyReceive(transaction: Transaction) { if (!CollectiveManager.communes.has(transaction.to)) return if (transaction.order) { - - statsManager.updateCommuneStat(transaction.to, RoomStatsKeys.EnergyInputBought, transaction.amount) + StatsManager.updateCommuneStat( + transaction.to, + RoomStatsKeys.EnergyInputBought, + transaction.amount, + ) return } } @@ -105,8 +115,7 @@ export class TransactionsManager { /** * Wether or not the transfer was domestic */ - private isDomestic(from: string, to: string) { - + private static isDomestic(from: string, to: string) { return CollectiveManager.communes.has(from) && CollectiveManager.communes.has(to) } } diff --git a/src/main.ts b/src/main.ts index 0e7fae393..3ec2af43c 100644 --- a/src/main.ts +++ b/src/main.ts @@ -14,30 +14,30 @@ import { CPUMaxPerTick, Result } from 'international/constants' import { InitManager } from './international/init' import { MigrationManager } from 'international/migration' import { RespawnManager } from './international/respawn' -import { tickInit } from './international/tickInit' +import { TickInit } from './international/tickInit' import { simpleAllies } from 'international/simpleAllies/simpleAllies' -import { creepOrganizer } from './international/creepOrganizer' -import { powerCreepOrganizer } from 'international/powerCreepOrganizer' +import { CreepOrganizer } from './international/creepOrganizer' +import { PowerCreepOrganizer } from 'international/powerCreepOrganizer' import { ErrorMapper } from 'other/ErrorMapper' -import { statsManager } from 'international/statsManager' -import { playerManager } from 'international/players' +import { StatsManager } from 'international/stats' +import { PlayerManager } from 'international/players' import { profiler } from 'other/profiler' import { flagManager } from 'international/flags' import { RoomPruningManager } from 'international/roomPruning' import './room/construction/minCut' -import { constructionSiteManager } from './international/constructionSiteManager' -import { mapVisualsManager } from './international/mapVisuals' +import { ConstructionSiteManager } from './international/constructionSites' +import { MapVisualsManager } from './international/mapVisuals' import { EndTickManager } from './international/endTick' import { wasm } from 'other/wasmInit' -import { requestsManager } from 'international/requests' -import { marketManager } from 'international/market/marketOrders' -import { transactionsManager } from 'international/transactions' +import { RequestsManager } from 'international/requests' +import { MarketManager } from 'international/market/marketOrders' +import { TransactionsManager } from 'international/transactions' import { SegmentsManager } from 'international/segments' import { creepDataManager } from 'room/creeps/creepData' -import { roomDataManager } from 'room/roomData' +import { RoomDataManager } from 'room/roomData' import { utils } from 'utils/utils' import { procs } from 'utils/procs' -import { communeDataManager } from 'room/commune/communeData' +import { CommuneDataManager } from 'room/commune/communeData' import { GarbageCollector } from 'international/garbageCollector' export function originalLoop() { @@ -56,39 +56,39 @@ export function originalLoop() { RespawnManager.tryRegisterRespawn() InitManager.tryInit() - tickInit.configGeneral() - statsManager.tickInit() + TickInit.configGeneral() + StatsManager.tickInit() CollectiveManager.update() GarbageCollector.tryRun() simpleAllies.initRun() wasm.collaborator() - roomDataManager.initRooms() - roomDataManager.updateRooms() + RoomDataManager.initRooms() + RoomDataManager.updateRooms() RoomsManager.updateRun() - transactionsManager.run() - requestsManager.run() + TransactionsManager.run() + RequestsManager.run() if (global.collectivizer) global.collectivizer.run() if (global.userScript) global.userScript.run() - playerManager.run() + PlayerManager.run() RoomsManager.initRun() creepDataManager.updateCreeps() - creepOrganizer.run() - powerCreepOrganizer.run() + CreepOrganizer.run() + PowerCreepOrganizer.run() RoomPruningManager.run() flagManager.run() - constructionSiteManager.run() - marketManager.run() + ConstructionSiteManager.run() + MarketManager.run() RoomsManager.run() - mapVisualsManager.run() + MapVisualsManager.run() simpleAllies.endRun() - marketManager.advancedSellPixels() + MarketManager.advancedSellPixels() if (global.userScript) global.userScript.endRun() - statsManager.internationalEndRun() + StatsManager.internationalEndRun() CollectiveManager.advancedGeneratePixel() diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index 311a555f3..0e4da1280 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -4,7 +4,7 @@ import { RoomManager } from 'room/room' import { SpawnRequestsManager } from 'room/commune/spawning/spawnRequests' import { LabManager } from 'room/commune/labs' import { FactoryManager } from 'room/commune/factory' -import { StatsManager } from 'international/statsManager' +import { StatsManager } from 'international/stats' import { ConstructionManager } from 'room/construction/construction' import { RemotesManager } from 'room/commune/remotesManager' import { HaulRequestManager } from 'room/commune/haulRequestManager' @@ -44,7 +44,7 @@ import { RampartPlans } from 'room/construction/rampartPlans' import { Operator } from 'room/creeps/powerCreeps/operator' import { minCutToExit } from 'room/construction/minCut' import { FeatureFlagManager } from 'international/featureFlags' -import { ConstructionSiteManager } from 'international/constructionSiteManager' +import { ConstructionSiteManager } from 'international/constructionSites' import { TransactionsManager } from 'international/transactions' import { CommunePlanner } from 'room/construction/communePlanner' import { @@ -110,11 +110,13 @@ import { SegmentsManager } from 'international/segments' import { wasm } from './wasmInit' import { initSync } from '../wasm/pkg/commiebot_wasm.js' import { InitManager } from 'international/init' +import { TickInit } from 'international/tickInit' export function profilerRegister() { // Classes profiler.registerClass(InitManager, 'InitManager') + profiler.registerClass(TickInit, 'TickInit') profiler.registerClass(CollectiveManager, 'CollectiveManager') profiler.registerClass(StatsManager, 'StatsManager') profiler.registerClass(PlayerManager, 'PlayerManager') diff --git a/src/room/commune/combatRequest.ts b/src/room/commune/combatRequest.ts index a89f103ef..c65f46a61 100644 --- a/src/room/commune/combatRequest.ts +++ b/src/room/commune/combatRequest.ts @@ -1,6 +1,6 @@ import { CombatRequestKeys, RoomMemoryKeys, customColors } from 'international/constants' import { CommuneManager } from './commune' -import { statsManager } from 'international/statsManager' +import { StatsManager } from 'international/stats' import { randomIntRange, utils } from 'utils/utils' import { CombatRequest } from 'types/internationalRequests' diff --git a/src/room/commune/communeData.ts b/src/room/commune/communeData.ts index c380498a4..063131482 100644 --- a/src/room/commune/communeData.ts +++ b/src/room/commune/communeData.ts @@ -21,22 +21,22 @@ interface CommuneData { * Handles cached data for communes */ export class CommuneDataManager { - data: { [roomName: string]: Partial } = {} + static data: { [roomName: string]: Partial } = {} /** * Called by the room's RoomManager */ - initCommune(room: Room) { + static initCommune(room: Room) { this.data[room.name] ??= {} } - updateCommunes() { + static updateCommunes() { for (const roomName in this.data) { this.updateCommune(roomName) } } - private updateCommune(roomName: string) { + private static updateCommune(roomName: string) { const data = this.data[roomName] if (utils.isTickInterval(10)) { @@ -45,5 +45,3 @@ export class CommuneDataManager { } } } - -export const communeDataManager = new CommuneDataManager() diff --git a/src/room/commune/communeProcs.ts b/src/room/commune/communeProcs.ts index fe9434232..4f2fb84b3 100644 --- a/src/room/commune/communeProcs.ts +++ b/src/room/commune/communeProcs.ts @@ -1,16 +1,19 @@ import { roomUtils } from 'room/roomUtils' -import { communeDataManager } from './communeData' +import { CommuneDataManager } from './communeData' import { communeUtils } from './communeUtils' -import { RoomLogisticsRequestTypes, RoomMemoryKeys, haulerUpdateDefault } from 'international/constants' +import { + RoomLogisticsRequestTypes, + RoomMemoryKeys, + haulerUpdateDefault, +} from 'international/constants' import { randomIntRange } from 'utils/utils' /** * Minor processes for communes */ export class CommuneProcs { - getRCLUpdate(room: Room) { - const data = communeDataManager.data[room.name] + const data = CommuneDataManager.data[room.name] // If the registered RCL is the actual RCL, we're good. No need to update anything if (data.registeredRCL === room.controller.level) { return @@ -25,8 +28,8 @@ export class CommuneProcs { } private updateRegisteredRCL(room: Room) { - const communeData = communeDataManager.data[room.name] - /* const roomData = roomDataManager.data[room.name] */ + const communeData = CommuneDataManager.data[room.name] + /* const roomData = RoomDataManager.data[room.name] */ delete communeData.generalRepairStructureCoords @@ -39,36 +42,37 @@ export class CommuneProcs { // If there is no min hauler size if (roomMemory[RoomMemoryKeys.minHaulerCost] === undefined) { - - roomMemory[RoomMemoryKeys.minHaulerCost] = Math.max(Memory.minHaulerCost, 200 * room.roomManager.structures.spawn.length) - roomMemory[RoomMemoryKeys.minHaulerCostUpdate] = Game.time + randomIntRange(1500, 3000) - return + roomMemory[RoomMemoryKeys.minHaulerCost] = Math.max( + Memory.minHaulerCost, + 200 * room.roomManager.structures.spawn.length, + ) + roomMemory[RoomMemoryKeys.minHaulerCostUpdate] = Game.time + randomIntRange(1500, 3000) + return } if (Game.time - roomMemory[RoomMemoryKeys.minHaulerCostUpdate] < haulerUpdateDefault) return // update the min hauler cost - roomMemory[RoomMemoryKeys.minHaulerCost] = Math.max(Memory.minHaulerCost, 100 * room.roomManager.structures.spawn.length) + roomMemory[RoomMemoryKeys.minHaulerCost] = Math.max( + Memory.minHaulerCost, + 100 * room.roomManager.structures.spawn.length, + ) roomMemory[RoomMemoryKeys.minHaulerCostUpdate] = Game.time + randomIntRange(0, 10) } registerRampartDamage(room: Room) { if (!room.roomManager.enemyAttackers.length) return - const data = communeDataManager.data[room.name] + const data = CommuneDataManager.data[room.name] if (data.rampartDamageCoords === undefined || room.roomManager.structureUpdate) { - this.initRampartDamageCoords(room) } } private initRampartDamageCoords(room: Room) { - const ramparts = room.communeManager.defensiveRamparts for (const rampart of ramparts) { - - } } } diff --git a/src/room/commune/communeUtils.ts b/src/room/commune/communeUtils.ts index 1204e267c..8d6143777 100644 --- a/src/room/commune/communeUtils.ts +++ b/src/room/commune/communeUtils.ts @@ -1,6 +1,6 @@ import { packCoord, unpackCoord } from "other/codec" -import { communeDataManager } from "./communeData" -import { roomDataManager } from "room/roomData" +import { CommuneDataManager } from './communeData' +import { RoomDataManager } from 'room/roomData' import { findLinkThroughput, getRange, packAsNum, unpackNumAsCoord } from 'utils/utils' import { Result, @@ -52,7 +52,7 @@ export class CommuneUtils { } } - communeDataManager.data[room.name].generalRepairStructureCoords = structureCoords + CommuneDataManager.data[room.name].generalRepairStructureCoords = structureCoords room.generalRepairStructures = repairTargets return repairTargets @@ -60,7 +60,7 @@ export class CommuneUtils { private getGeneralRepairStructuresFromCoords(room: Room) { const repairTargets: (StructureContainer | StructureRoad)[] = [] - const structureCoords = communeDataManager.data[room.name].generalRepairStructureCoords + const structureCoords = CommuneDataManager.data[room.name].generalRepairStructureCoords if (!structureCoords) return repairTargets for (const packedCoord of structureCoords) { @@ -133,7 +133,7 @@ export class CommuneUtils { } getMaxUpgradeStrength(room: Room) { - const data = communeDataManager.data[room.name] + const data = CommuneDataManager.data[room.name] if (data.maxUpgradeStrength !== undefined && !room.roomManager.structureUpdate) return data.maxUpgradeStrength @@ -188,7 +188,7 @@ export class CommuneUtils { } getEstimatedSourceIncome(room: Room) { - const data = communeDataManager.data[room.name] + const data = CommuneDataManager.data[room.name] if (data.estimatedCommuneSourceIncome !== undefined) return data.estimatedCommuneSourceIncome const sources = roomUtils.getSources(room) diff --git a/src/room/commune/defence.ts b/src/room/commune/defence.ts index 7f843331e..09876a95f 100644 --- a/src/room/commune/defence.ts +++ b/src/room/commune/defence.ts @@ -11,9 +11,9 @@ import { RoomMemoryKeys, safemodeTargets, } from 'international/constants' -import { playerManager } from 'international/players' +import { PlayerManager } from 'international/players' import { simpleAllies } from 'international/simpleAllies/simpleAllies' -import { statsManager } from 'international/statsManager' +import { StatsManager } from 'international/stats' import { findObjectWithID, findWeightedRangeFromExit, @@ -32,389 +32,392 @@ import { RampartPlans } from 'room/construction/rampartPlans' import { customLog, LogTypes } from 'utils/logging' export class DefenceManager { - communeManager: CommuneManager + communeManager: CommuneManager - constructor(communeManager: CommuneManager) { - this.communeManager = communeManager + constructor(communeManager: CommuneManager) { + this.communeManager = communeManager + } + + run() { + if (!this.communeManager.room.roomManager.notMyCreeps.enemy.length) { + this.considerRampartsPublic() + return } - run() { - if (!this.communeManager.room.roomManager.notMyCreeps.enemy.length) { - this.considerRampartsPublic() - return - } + // There are at least enemy creeps - // There are at least enemy creeps + this.makeRampartsPrivate() + this.advancedActivateSafeMode() - this.makeRampartsPrivate() - this.advancedActivateSafeMode() + if (!this.communeManager.room.roomManager.enemyAttackers.length) return - if (!this.communeManager.room.roomManager.enemyAttackers.length) return + // There are at least enemyAttackers - // There are at least enemyAttackers + this.assignDefenceTargets() + } - this.assignDefenceTargets() - } + private shouldSafeMode() { + const { room } = this.communeManager + const { controller } = room - private shouldSafeMode() { - const { room } = this.communeManager - const { controller } = room + // Conditions check - // Conditions check + if (controller.safeModeCooldown) return false + if (!controller.safeModeAvailable) return false + if (controller.upgradeBlocked) return false + // We can't use safemode when the downgrade timer is too low + if (controller.ticksToDowngrade <= CONTROLLER_DOWNGRADE_SAFEMODE_THRESHOLD) return false + // If another room is safemoded, make sure that we are a higher level + if ( + CollectiveManager.safemodedCommuneName && + Game.rooms[CollectiveManager.safemodedCommuneName].controller.level >= + this.communeManager.room.controller.level + ) + return false - if (controller.safeModeCooldown) return false - if (!controller.safeModeAvailable) return false - if (controller.upgradeBlocked) return false - // We can't use safemode when the downgrade timer is too low - if (controller.ticksToDowngrade <= CONTROLLER_DOWNGRADE_SAFEMODE_THRESHOLD) return false - // If another room is safemoded, make sure that we are a higher level - if ( - CollectiveManager.safemodedCommuneName && - Game.rooms[CollectiveManager.safemodedCommuneName].controller.level >= - this.communeManager.room.controller.level - ) - return false + // Filter attackers that are not invaders. If there are none, stop - // Filter attackers that are not invaders. If there are none, stop + const nonInvaderAttackers = room.roomManager.enemyAttackers.filter( + enemyCreep => !enemyCreep.isOnExit && enemyCreep.owner.username !== 'Invader', + ) + if (!nonInvaderAttackers.length) return false - const nonInvaderAttackers = room.roomManager.enemyAttackers.filter( - enemyCreep => !enemyCreep.isOnExit && enemyCreep.owner.username !== 'Invader', - ) - if (!nonInvaderAttackers.length) return false + if (!this.isControllerSafe()) return true + if (!this.isBaseSafe()) return true - if (!this.isControllerSafe()) return true - if (!this.isBaseSafe()) return true + return false + } - return false - } + private isSafe() {} - private isSafe() {} - - private isBaseSafe() { - const { room } = this.communeManager - - const anchor = room.roomManager.anchor - if (!anchor) { - throw Error('no anchor') - } - - const terrain = Game.map.getRoomTerrain(room.name) - const rampartPlans = this.communeManager.room.roomManager.rampartPlans - const enemyCoord = roomNameUtils.floodFillFor(room.name, [anchor], coord => { - // Ignore terrain that protects us - if (terrain.get(coord.x, coord.y) === TERRAIN_MASK_WALL) return false - - const planData = rampartPlans.getXY(coord.x, coord.y) - if (planData) { - // Filter out non-mincut ramparts - if (planData.buildForNuke || planData.coversStructure || planData.buildForThreat) return true - // Don't flood past mincut ramparts - return false - } - - // See if there is an enemy creep - const enemyCreepID = room.roomManager.enemyCreepPositions[packCoord(coord)] - if (!enemyCreepID) return true - - const enemyCreep = findObjectWithID(enemyCreepID) - if (isAlly(enemyCreep.owner.username)) return true - // If it can deal damage, safemode - if ( - enemyCreep.combatStrength.ranged > 0 || - enemyCreep.combatStrength.melee > 0 || - enemyCreep.combatStrength.dismantle > 0 - ) - return Result.stop - - return true - }) - - // If there is an enemy inside our base, we want to safemode - return !enemyCoord - } + private isBaseSafe() { + const { room } = this.communeManager - /** - * Identify claim creeps trying to downgrade the controller, safemode just before - */ - private isControllerSafe() { - const { room } = this.communeManager - const terrain = Game.map.getRoomTerrain(room.name) - const enemyCoord = roomNameUtils.floodFillFor( - room.name, - [room.controller.pos], - (coord, packedCoord, depth) => { - // See if we should even consider the coord - - // Ignore terrain that protects us - if (terrain.get(coord.x, coord.y) === TERRAIN_MASK_WALL) return false - - // Don't go out of range 2 from controller - if (depth > 2) return false - - // Ignore structures that protect us - if (room.coordHasStructureTypes(coord, ourImpassibleStructuresSet)) return false - - // Past this point we should always add this coord to the next generation - - // See if there is an enemy creep - const enemyCreepID = room.roomManager.enemyCreepPositions[packCoord(coord)] - if (!enemyCreepID) return true - - const enemyCreep = findObjectWithID(enemyCreepID) - if (isAlly(enemyCreep.owner.username)) return true - // We only need to protect our controller from claim creeps - if (!enemyCreep.parts.claim) return true - - // We identified an enemy claimed near our controller! - return Result.stop - }, - ) - - // If there is an enemy claimer, we want to safemode - return !enemyCoord + const anchor = room.roomManager.anchor + if (!anchor) { + throw Error('no anchor') } - private advancedActivateSafeMode() { - if (!this.shouldSafeMode()) return - - // If another room is safemoded and we determined it to be okay: unclaim it so we can safemode - if (CollectiveManager.safemodedCommuneName) { - const safemodedRoom = Game.rooms[CollectiveManager.safemodedCommuneName] - safemodedRoom.controller.unclaim() - // Add a return if we can't unclaim and safemode on the same tick - } + const terrain = Game.map.getRoomTerrain(room.name) + const rampartPlans = this.communeManager.room.roomManager.rampartPlans + const enemyCoord = roomNameUtils.floodFillFor(room.name, [anchor], coord => { + // Ignore terrain that protects us + if (terrain.get(coord.x, coord.y) === TERRAIN_MASK_WALL) return false + + const planData = rampartPlans.getXY(coord.x, coord.y) + if (planData) { + // Filter out non-mincut ramparts + if (planData.buildForNuke || planData.coversStructure || planData.buildForThreat) + return true + // Don't flood past mincut ramparts + return false + } + + // See if there is an enemy creep + const enemyCreepID = room.roomManager.enemyCreepPositions[packCoord(coord)] + if (!enemyCreepID) return true + + const enemyCreep = findObjectWithID(enemyCreepID) + if (isAlly(enemyCreep.owner.username)) return true + // If it can deal damage, safemode + if ( + enemyCreep.combatStrength.ranged > 0 || + enemyCreep.combatStrength.melee > 0 || + enemyCreep.combatStrength.dismantle > 0 + ) + return Result.stop + + return true + }) + + // If there is an enemy inside our base, we want to safemode + return !enemyCoord + } + + /** + * Identify claim creeps trying to downgrade the controller, safemode just before + */ + private isControllerSafe() { + const { room } = this.communeManager + const terrain = Game.map.getRoomTerrain(room.name) + const enemyCoord = roomNameUtils.floodFillFor( + room.name, + [room.controller.pos], + (coord, packedCoord, depth) => { + // See if we should even consider the coord + + // Ignore terrain that protects us + if (terrain.get(coord.x, coord.y) === TERRAIN_MASK_WALL) return false + + // Don't go out of range 2 from controller + if (depth > 2) return false + + // Ignore structures that protect us + if (room.coordHasStructureTypes(coord, ourImpassibleStructuresSet)) return false + + // Past this point we should always add this coord to the next generation + + // See if there is an enemy creep + const enemyCreepID = room.roomManager.enemyCreepPositions[packCoord(coord)] + if (!enemyCreepID) return true + + const enemyCreep = findObjectWithID(enemyCreepID) + if (isAlly(enemyCreep.owner.username)) return true + // We only need to protect our controller from claim creeps + if (!enemyCreep.parts.claim) return true + + // We identified an enemy claimed near our controller! + return Result.stop + }, + ) + + // If there is an enemy claimer, we want to safemode + return !enemyCoord + } + + private advancedActivateSafeMode() { + if (!this.shouldSafeMode()) return + + // If another room is safemoded and we determined it to be okay: unclaim it so we can safemode + if (CollectiveManager.safemodedCommuneName) { + const safemodedRoom = Game.rooms[CollectiveManager.safemodedCommuneName] + safemodedRoom.controller.unclaim() + // Add a return if we can't unclaim and safemode on the same tick + } - if (this.communeManager.room.controller.activateSafeMode() !== OK) return + if (this.communeManager.room.controller.activateSafeMode() !== OK) return - // Safemode was probably activated + // Safemode was probably activated - // Record that we safemoded so other communes know - CollectiveManager.safemodedCommuneName = this.communeManager.room.name - } + // Record that we safemoded so other communes know + CollectiveManager.safemodedCommuneName = this.communeManager.room.name + } - private considerRampartsPublic() { - if (!global.settings.publicRamparts) return + private considerRampartsPublic() { + if (!global.settings.publicRamparts) return - const { room } = this.communeManager - const roomMemory = Memory.rooms[room.name] + const { room } = this.communeManager + const roomMemory = Memory.rooms[room.name] - // Wait some pseudo-random time before publicizing ramparts - if (roomMemory[RoomMemoryKeys.lastAttackedBy] !== undefined && roomMemory[RoomMemoryKeys.lastAttackedBy] < randomIntRange(100, 150)) return + // Wait some pseudo-random time before publicizing ramparts + if ( + roomMemory[RoomMemoryKeys.lastAttackedBy] !== undefined && + roomMemory[RoomMemoryKeys.lastAttackedBy] < randomIntRange(100, 150) + ) + return - // Publicize at most 10 ramparts per tick, to avoid too many intents + // Publicize at most 10 ramparts per tick, to avoid too many intents - let intents = 0 + let intents = 0 - for (const rampart of room.roomManager.structures.rampart) { - if (intents >= 10) return + for (const rampart of room.roomManager.structures.rampart) { + if (intents >= 10) return - // If the rampart is public + // If the rampart is public - if (rampart.isPublic) continue + if (rampart.isPublic) continue - // Otherwise set the rampart to public, increase increment + // Otherwise set the rampart to public, increase increment - rampart.setPublic(true) - intents += 1 - } + rampart.setPublic(true) + intents += 1 } + } - private makeRampartsPrivate() { - for (const rampart of this.communeManager.room.roomManager.structures.rampart) { - if (rampart.isPublic) rampart.setPublic(false) - } + private makeRampartsPrivate() { + for (const rampart of this.communeManager.room.roomManager.structures.rampart) { + if (rampart.isPublic) rampart.setPublic(false) } + } - private assignDefenceTargets() { - const { room } = this.communeManager + private assignDefenceTargets() { + const { room } = this.communeManager - // Sort by estimated percent health change + // Sort by estimated percent health change - const defenderEnemyTargetsByDamage = Array.from( - room.defenderEnemyTargetsWithDefender.keys(), - ).sort((a, b) => { - const creepA = findObjectWithID(a) - const creepB = findObjectWithID(b) + const defenderEnemyTargetsByDamage = Array.from( + room.defenderEnemyTargetsWithDefender.keys(), + ).sort((a, b) => { + const creepA = findObjectWithID(a) + const creepB = findObjectWithID(b) - return ( - creepA.hits / creepA.hitsMax - - (creepA.hits + room.defenderEnemyTargetsWithDamage.get(a)) / creepA.hitsMax - - (creepB.hits / creepB.hitsMax - - (creepB.hits + room.defenderEnemyTargetsWithDamage.get(b)) / creepB.hitsMax) - ) - }) + return ( + creepA.hits / creepA.hitsMax - + (creepA.hits + room.defenderEnemyTargetsWithDamage.get(a)) / creepA.hitsMax - + (creepB.hits / creepB.hitsMax - + (creepB.hits + room.defenderEnemyTargetsWithDamage.get(b)) / creepB.hitsMax) + ) + }) - customLog('ENEMY TARGETS BY DAMAGE', defenderEnemyTargetsByDamage, { - type: LogTypes.warning, - }) + customLog('ENEMY TARGETS BY DAMAGE', defenderEnemyTargetsByDamage, { + type: LogTypes.warning, + }) - // Attack enemies in order of most net damage members can heal + // Attack enemies in order of most net damage members can heal - for (const enemyCreepID of defenderEnemyTargetsByDamage) { - if (!room.attackingDefenderIDs.size) break + for (const enemyCreepID of defenderEnemyTargetsByDamage) { + if (!room.attackingDefenderIDs.size) break - const enemyCreep = findObjectWithID(enemyCreepID) + const enemyCreep = findObjectWithID(enemyCreepID) - for (const memberID of room.defenderEnemyTargetsWithDefender.get(enemyCreepID)) { - if (!room.attackingDefenderIDs.has(memberID)) continue + for (const memberID of room.defenderEnemyTargetsWithDefender.get(enemyCreepID)) { + if (!room.attackingDefenderIDs.has(memberID)) continue - const member = Game.getObjectById(memberID) + const member = Game.getObjectById(memberID) - Game.creeps[member.name].combatTarget = enemyCreep + Game.creeps[member.name].combatTarget = enemyCreep - room.attackingDefenderIDs.delete(memberID) - } + room.attackingDefenderIDs.delete(memberID) + } - if (this.communeManager.towerAttackTarget) continue + if (this.communeManager.towerAttackTarget) continue - const damage = room.defenderEnemyTargetsWithDamage.get(enemyCreep.id) - room.visual.text(damage.toString(), enemyCreep.pos.x, enemyCreep.pos.y - 0.25, { - font: 0.3, - }) + const damage = room.defenderEnemyTargetsWithDamage.get(enemyCreep.id) + room.visual.text(damage.toString(), enemyCreep.pos.x, enemyCreep.pos.y - 0.25, { + font: 0.3, + }) - if (enemyCreep.owner.username === 'Invader') { - if (damage <= 0) continue - } else { - const playerMemory = - Memory.players[enemyCreep.owner.username] || - playerManager.initPlayer(enemyCreep.owner.username) - const weight = playerMemory[PlayerMemoryKeys.rangeFromExitWeight] + if (enemyCreep.owner.username === 'Invader') { + if (damage <= 0) continue + } else { + const playerMemory = + Memory.players[enemyCreep.owner.username] || + PlayerManager.initPlayer(enemyCreep.owner.username) + const weight = playerMemory[PlayerMemoryKeys.rangeFromExitWeight] - if (/* findWeightedRangeFromExit(enemyCreep.pos, weight) * */damage < enemyCreep.hits) - continue - } + if (/* findWeightedRangeFromExit(enemyCreep.pos, weight) * */ damage < enemyCreep.hits) + continue + } - this.communeManager.towerAttackTarget = enemyCreep - } + this.communeManager.towerAttackTarget = enemyCreep } + } - manageDefenceRequests() { - const { room } = this.communeManager + manageDefenceRequests() { + const { room } = this.communeManager - if (!room.towerInferiority) return + if (!room.towerInferiority) return - const hasTowers = !!room.roomManager.structures.tower.length + const hasTowers = !!room.roomManager.structures.tower.length - let onlyInvader = true - let minDamage = 0 - let minMeleeHeal = 0 - let minRangedHeal = 0 + let onlyInvader = true + let minDamage = 0 + let minMeleeHeal = 0 + let minRangedHeal = 0 - for (const enemyCreep of room.roomManager.enemyAttackers) { + for (const enemyCreep of room.roomManager.enemyAttackers) { + if (enemyCreep.owner.username === 'Invader') { + // If we have towers, don't care about the invader + if (hasTowers) continue + } else onlyInvader = false - if (enemyCreep.owner.username === 'Invader') { - // If we have towers, don't care about the invader - if (hasTowers) continue - } - else onlyInvader = false - - minDamage += Math.max(enemyCreep.combatStrength.heal * 1.2, Math.ceil(enemyCreep.hits / 50)) - minMeleeHeal += enemyCreep.combatStrength.melee + enemyCreep.combatStrength.ranged - minRangedHeal += enemyCreep.combatStrength.ranged - } - - // If we have towers and it's only invaders, we don't need a defence request - if (onlyInvader && hasTowers) return - - // There is tower inferiority, make a defend request + minDamage += Math.max(enemyCreep.combatStrength.heal * 1.2, Math.ceil(enemyCreep.hits / 50)) + minMeleeHeal += enemyCreep.combatStrength.melee + enemyCreep.combatStrength.ranged + minRangedHeal += enemyCreep.combatStrength.ranged + } - room.createDefendCombatRequest({ - [CombatRequestKeys.minDamage]: minDamage, - [CombatRequestKeys.minMeleeHeal]: minMeleeHeal, - [CombatRequestKeys.minRangedHeal]: minRangedHeal, - [CombatRequestKeys.quadQuota]: 1, - [CombatRequestKeys.inactionTimerMax]: onlyInvader ? 1 : randomIntRange(2000, 3000), - }) + // If we have towers and it's only invaders, we don't need a defence request + if (onlyInvader && hasTowers) return - if (!global.settings.allyCommunication) return + // There is tower inferiority, make a defend request - simpleAllies.requestDefense({ - roomName: room.name, - priority: 1, - }) - } + room.createDefendCombatRequest({ + [CombatRequestKeys.minDamage]: minDamage, + [CombatRequestKeys.minMeleeHeal]: minMeleeHeal, + [CombatRequestKeys.minRangedHeal]: minRangedHeal, + [CombatRequestKeys.quadQuota]: 1, + [CombatRequestKeys.inactionTimerMax]: onlyInvader ? 1 : randomIntRange(2000, 3000), + }) - private findPresentThreat() { + if (!global.settings.allyCommunication) return - const { room } = this.communeManager + simpleAllies.requestDefense({ + roomName: room.name, + priority: 1, + }) + } - if (!room.towerInferiority) return false + private findPresentThreat() { + const { room } = this.communeManager - const presentThreat: PresentThreat = { - total: 0, - byPlayers: {} - } + if (!room.towerInferiority) return false - for (const enemyCreep of room.roomManager.enemyAttackers) { - let creepThreat = 0 + const presentThreat: PresentThreat = { + total: 0, + byPlayers: {}, + } - creepThreat += enemyCreep.combatStrength.dismantle - creepThreat += enemyCreep.combatStrength.melee * 1.2 - creepThreat += enemyCreep.combatStrength.ranged * 3.5 + for (const enemyCreep of room.roomManager.enemyAttackers) { + let creepThreat = 0 - creepThreat += enemyCreep.combatStrength.heal / enemyCreep.defenceStrength + creepThreat += enemyCreep.combatStrength.dismantle + creepThreat += enemyCreep.combatStrength.melee * 1.2 + creepThreat += enemyCreep.combatStrength.ranged * 3.5 - creepThreat = Math.floor(creepThreat) + creepThreat += enemyCreep.combatStrength.heal / enemyCreep.defenceStrength - presentThreat.total += creepThreat + creepThreat = Math.floor(creepThreat) - const playerName = enemyCreep.owner.username - if (playerName === 'Invader') continue + presentThreat.total += creepThreat - const playerThreat = presentThreat.byPlayers[enemyCreep.owner.username] - if (playerThreat) { - presentThreat.byPlayers[playerName] = playerThreat + creepThreat - continue - } + const playerName = enemyCreep.owner.username + if (playerName === 'Invader') continue - presentThreat.byPlayers[playerName] = creepThreat - } + const playerThreat = presentThreat.byPlayers[enemyCreep.owner.username] + if (playerThreat) { + presentThreat.byPlayers[playerName] = playerThreat + creepThreat + continue + } - return presentThreat + presentThreat.byPlayers[playerName] = creepThreat } - manageThreat() { - const { room } = this.communeManager + return presentThreat + } - const presentThreat = this.findPresentThreat() - const roomMemory = Memory.rooms[room.name] + manageThreat() { + const { room } = this.communeManager - if (!presentThreat) { - // Reduce attack threat over time - if (roomMemory[RoomMemoryKeys.threatened] > 0) - roomMemory[RoomMemoryKeys.threatened] *= defaultDataDecay + const presentThreat = this.findPresentThreat() + const roomMemory = Memory.rooms[room.name] - if (roomMemory[RoomMemoryKeys.lastAttackedBy] !== undefined) roomMemory[RoomMemoryKeys.lastAttackedBy] += 1 - return - } + if (!presentThreat) { + // Reduce attack threat over time + if (roomMemory[RoomMemoryKeys.threatened] > 0) + roomMemory[RoomMemoryKeys.threatened] *= defaultDataDecay - // There is a present threat + if (roomMemory[RoomMemoryKeys.lastAttackedBy] !== undefined) + roomMemory[RoomMemoryKeys.lastAttackedBy] += 1 + return + } - roomMemory[RoomMemoryKeys.threatened] = Math.max( - roomMemory[RoomMemoryKeys.threatened], - presentThreat.total, - playerManager.highestThreat / 3, - ) + // There is a present threat - for (const playerName in presentThreat.byPlayers) { - const threat = presentThreat.byPlayers[playerName] + roomMemory[RoomMemoryKeys.threatened] = Math.max( + roomMemory[RoomMemoryKeys.threatened], + presentThreat.total, + PlayerManager.highestThreat / 3, + ) - const player = Memory.players[playerName] - if (!player) { - playerManager.initPlayer(playerName) - } + for (const playerName in presentThreat.byPlayers) { + const threat = presentThreat.byPlayers[playerName] - player[PlayerMemoryKeys.offensiveThreat] = Math.max( - threat, - player[PlayerMemoryKeys.offensiveThreat], - ) - player[PlayerMemoryKeys.hate] = Math.max(threat, player[PlayerMemoryKeys.hate]) - player[PlayerMemoryKeys.lastAttackedBy] = 0 - } + const player = Memory.players[playerName] + if (!player) { + PlayerManager.initPlayer(playerName) + } - roomMemory[RoomMemoryKeys.lastAttackedBy] = 0 - return + player[PlayerMemoryKeys.offensiveThreat] = Math.max( + threat, + player[PlayerMemoryKeys.offensiveThreat], + ) + player[PlayerMemoryKeys.hate] = Math.max(threat, player[PlayerMemoryKeys.hate]) + player[PlayerMemoryKeys.lastAttackedBy] = 0 } + + roomMemory[RoomMemoryKeys.lastAttackedBy] = 0 + return + } } interface PresentThreat { diff --git a/src/room/commune/powerSpawnProcs.ts b/src/room/commune/powerSpawnProcs.ts index 963ea7312..80a069ab3 100644 --- a/src/room/commune/powerSpawnProcs.ts +++ b/src/room/commune/powerSpawnProcs.ts @@ -1,6 +1,6 @@ import { CollectiveManager } from 'international/collective' import { RoomLogisticsRequestTypes } from 'international/constants' -import { statsManager } from 'international/statsManager' +import { StatsManager } from 'international/stats' import { scalePriority } from 'utils/utils' export class PowerSpawnProcs { @@ -22,7 +22,7 @@ export class PowerSpawnProcs { const result = powerSpawn.processPower() if (result === OK) - statsManager.updateStat(powerSpawn.room.name, 'eop', POWER_SPAWN_ENERGY_RATIO) + StatsManager.updateStat(powerSpawn.room.name, 'eop', POWER_SPAWN_ENERGY_RATIO) } /** diff --git a/src/room/commune/spawning/spawnRequests.ts b/src/room/commune/spawning/spawnRequests.ts index 00eb293de..500bc083b 100644 --- a/src/room/commune/spawning/spawnRequests.ts +++ b/src/room/commune/spawning/spawnRequests.ts @@ -21,7 +21,7 @@ import { } from 'utils/utils' import { CollectiveManager } from 'international/collective' import { packPos, unpackPosList } from 'other/codec' -import { statsManager } from 'international/statsManager' +import { StatsManager } from 'international/stats' import { CommuneManager } from '../commune' import { customLog } from 'utils/logging' import { SpawnRequest, SpawnRequestArgs, SpawnRequestTypes } from 'types/spawnRequest' diff --git a/src/room/commune/spawning/spawningStructureProcs.ts b/src/room/commune/spawning/spawningStructureProcs.ts index 688dbf26a..2929f609f 100644 --- a/src/room/commune/spawning/spawningStructureProcs.ts +++ b/src/room/commune/spawning/spawningStructureProcs.ts @@ -10,7 +10,7 @@ import { customColors, MovedTypes, } from 'international/constants' -import { statsManager } from 'international/statsManager' +import { StatsManager } from 'international/stats' import { unpackPosAt, packCoord, unpackCoord } from 'other/codec' import { creepProcs } from 'room/creeps/creepProcs' import { structureUtils } from 'room/structureUtils' @@ -169,7 +169,7 @@ export class SpawningStructureProcs { // Record in stats the costs room.communeManager.nextSpawnEnergyAvailable -= request.cost - statsManager.updateStat(room.name, 'eosp', request.cost) + StatsManager.updateStat(room.name, 'eosp', request.cost) // The spawn we intented to spawn should no longer be considered inactive inactiveSpawns.splice(spawnIndex, 1) diff --git a/src/room/commune/terminal/terminalProcs.ts b/src/room/commune/terminal/terminalProcs.ts index 7caeb9adf..80413020f 100644 --- a/src/room/commune/terminal/terminalProcs.ts +++ b/src/room/commune/terminal/terminalProcs.ts @@ -1,6 +1,6 @@ import { CollectiveManager } from 'international/collective' import { Result } from 'international/constants' -import { marketManager } from 'international/market/marketOrders' +import { MarketManager } from 'international/market/marketOrders' import { simpleAllies } from 'international/simpleAllies/simpleAllies' import { structureUtils } from 'room/structureUtils' import { customLog } from 'utils/logging' @@ -35,7 +35,7 @@ export class TerminalProcs { if (!global.settings.marketUsage) return // only run every terminal cooldown interval, to have every terminal share the same required data (reduces CPU costs) if (utils.isTickInterval(TERMINAL_COOLDOWN)) return - if (!marketManager.isMarketFunctional) return + if (!MarketManager.isMarketFunctional) return if (this.manageResources(room, resourceTargets) === Result.action) return } diff --git a/src/room/commune/terminal/tradingUtils.ts b/src/room/commune/terminal/tradingUtils.ts index c075e2cc2..072effe60 100644 --- a/src/room/commune/terminal/tradingUtils.ts +++ b/src/room/commune/terminal/tradingUtils.ts @@ -1,19 +1,19 @@ import { customLog } from 'utils/logging' import { findLowestScore, roundTo } from 'utils/utils' import { CollectiveManager } from 'international/collective' -import { statsManager } from 'international/statsManager' -import { marketManager } from 'international/market/marketOrders' +import { StatsManager } from 'international/stats' +import { MarketManager } from 'international/market/marketOrders' import { Result, RoomStatsKeys } from 'international/constants' export class TradingUtils { advancedSell(room: Room, resourceType: ResourceConstant, amount: number) { - const mySpecificOrders = marketManager.myOrders[room.name]?.[ORDER_SELL][resourceType] || [] + const mySpecificOrders = MarketManager.myOrders[room.name]?.[ORDER_SELL][resourceType] || [] for (const order of mySpecificOrders) amount -= order.remainingAmount if (amount <= 0) return false - const order = marketManager.getShardBuyOrder(room.name, resourceType, amount) + const order = MarketManager.getShardBuyOrder(room.name, resourceType, amount) if (order !== Result.fail) { const dealAmount = this.findLargestTransactionAmount( @@ -34,7 +34,7 @@ export class TradingUtils { order.roomName, ) - statsManager.updateCommuneStat( + StatsManager.updateCommuneStat( room.name, RoomStatsKeys.EnergyOutputTransactionCosts, transactionCost, @@ -44,14 +44,14 @@ export class TradingUtils { if (mySpecificOrders.length) return false if (Game.market.credits < CollectiveManager.minCredits) return false - if (marketManager.myOrdersCount === MARKET_MAX_ORDERS) return false + if (MarketManager.myOrdersCount === MARKET_MAX_ORDERS) return false - const orders = marketManager.getOrders(resourceType, ORDER_SELL) + const orders = MarketManager.getOrders(resourceType, ORDER_SELL) if (!orders) return false const price = Math.max( Math.min(...orders.map(o => o.price)) * 0.99, - marketManager.getAvgPrice(resourceType) * 0.8, + MarketManager.getAvgPrice(resourceType) * 0.8, ) const result = Game.market.createOrder({ @@ -68,13 +68,13 @@ export class TradingUtils { return Result.success } advancedBuy(room: Room, resourceType: ResourceConstant, amount: number) { - const mySpecificOrders = marketManager.myOrders[room.name]?.[ORDER_BUY][resourceType] || [] + const mySpecificOrders = MarketManager.myOrders[room.name]?.[ORDER_BUY][resourceType] || [] for (const order of mySpecificOrders) amount -= order.remainingAmount if (amount <= 0) return false - const order = marketManager.getShardSellOrder(room.name, resourceType, amount) + const order = MarketManager.getShardSellOrder(room.name, resourceType, amount) if (order !== Result.fail) { const dealAmount = this.findLargestTransactionAmount( @@ -94,7 +94,7 @@ export class TradingUtils { // Success const transactionCost = Game.market.calcTransactionCost(dealAmount, room.name, order.roomName) - statsManager.updateCommuneStat( + StatsManager.updateCommuneStat( room.name, RoomStatsKeys.EnergyOutputTransactionCosts, transactionCost, @@ -104,14 +104,14 @@ export class TradingUtils { } if (mySpecificOrders.length) return false - if (marketManager.myOrdersCount === MARKET_MAX_ORDERS) return false + if (MarketManager.myOrdersCount === MARKET_MAX_ORDERS) return false - const orders = marketManager.getOrders(resourceType, ORDER_BUY) + const orders = MarketManager.getOrders(resourceType, ORDER_BUY) if (!orders) return false const price = Math.min( Math.max(...orders.map(o => o.price)) * 1.01, - marketManager.getAvgPrice(resourceType) * 1.2, + MarketManager.getAvgPrice(resourceType) * 1.2, ) const result = Game.market.createOrder({ diff --git a/src/room/commune/towerProcs.ts b/src/room/commune/towerProcs.ts index d8821da8f..9bd049277 100644 --- a/src/room/commune/towerProcs.ts +++ b/src/room/commune/towerProcs.ts @@ -1,15 +1,21 @@ import { PlayerMemoryKeys, RoomLogisticsRequestTypes } from "international/constants" -import { playerManager } from "international/players" -import { statsManager } from "international/statsManager" -import { packCoord } from "other/codec" -import { structureUtils } from "room/structureUtils" -import { findWithHighestScore, findObjectWithID, randomTick, findWithLowestScore, scalePriority, utils } from "utils/utils" -import { communeUtils } from "./communeUtils" -import { towerUtils } from "./towerUtils" +import { PlayerManager } from 'international/players' +import { StatsManager } from 'international/stats' +import { packCoord } from 'other/codec' +import { structureUtils } from 'room/structureUtils' +import { + findWithHighestScore, + findObjectWithID, + randomTick, + findWithLowestScore, + scalePriority, + utils, +} from 'utils/utils' +import { communeUtils } from './communeUtils' +import { towerUtils } from './towerUtils' export class TowerProcs { run(room: Room) { - const towers = room.roomManager.structures.tower.filter(tower => structureUtils.isRCLActionable(tower), ) @@ -56,7 +62,7 @@ export class TowerProcs { } else { const playerMemory = Memory.players[enemyCreep.owner.username] || - playerManager.initPlayer(enemyCreep.owner.username) + PlayerManager.initPlayer(enemyCreep.owner.username) const weight = playerMemory[PlayerMemoryKeys.rangeFromExitWeight] if (/* findWeightedRangeFromExit(enemyCreep.pos, weight) * */ damage < enemyCreep.hits) { @@ -86,8 +92,7 @@ export class TowerProcs { private attackEnemyCreeps(room: Room, actionableTowerIDs: Id[]) { if (Game.flags.disableTowerAttacks) { - room.towerInferiority = - room.roomManager.enemyAttackers.length > 0 + room.towerInferiority = room.roomManager.enemyAttackers.length > 0 return false } if (!actionableTowerIDs.length) return false @@ -172,7 +177,7 @@ export class TowerProcs { const tower = findObjectWithID(actionableTowerIDs[i]) if (tower.repair(repairTarget) !== OK) continue - statsManager.updateStat(room.name, 'eorwr', TOWER_ENERGY_COST) + StatsManager.updateStat(room.name, 'eorwr', TOWER_ENERGY_COST) actionableTowerIDs.splice(i, 1) } diff --git a/src/room/commune/towerUtils.ts b/src/room/commune/towerUtils.ts index 8ec3ad428..0cfc9688f 100644 --- a/src/room/commune/towerUtils.ts +++ b/src/room/commune/towerUtils.ts @@ -1,6 +1,6 @@ import { towerPowers } from "international/constants" import { findWithLowestScore, getRange } from "utils/utils" -import { communeDataManager } from "./communeData" +import { CommuneDataManager } from './communeData' import { communeUtils } from "./communeUtils" import { packCoord } from "other/codec" @@ -48,7 +48,7 @@ export class TowerUtils { } getRampartRepairTreshold(room: Room) { - const data = communeDataManager.data[room.name] + const data = CommuneDataManager.data[room.name] if (data.towerRampartRepairTreshold !== undefined) return data.towerRampartRepairTreshold let rampartRepairTreshold = minTowerRampartRepairTreshold diff --git a/src/room/commune/workRequest.ts b/src/room/commune/workRequest.ts index d175874e0..164191043 100644 --- a/src/room/commune/workRequest.ts +++ b/src/room/commune/workRequest.ts @@ -8,7 +8,7 @@ import { import { randomIntRange, randomTick, utils } from 'utils/utils' import { CollectiveManager } from 'international/collective' import { CommuneManager } from './commune' -import { statsManager } from 'international/statsManager' +import { StatsManager } from 'international/stats' import { WorkRequest } from 'types/internationalRequests' const checkRoomStatusInverval = randomIntRange(200, 500) diff --git a/src/room/creeps/creepProcs.ts b/src/room/creeps/creepProcs.ts index f8d392b82..256a0e424 100644 --- a/src/room/creeps/creepProcs.ts +++ b/src/room/creeps/creepProcs.ts @@ -1,7 +1,7 @@ import { RoomManager } from 'room/room' import { findClosestObject, findObjectWithID, forAdjacentCoords, getRange, getRangeXY } from 'utils/utils' import { myCreepUtils } from './myCreepUtils' -import { statsManager } from 'international/statsManager' +import { StatsManager } from 'international/stats' import { CreepMemoryKeys, CreepLogisticsRequestKeys, @@ -81,7 +81,7 @@ export class CreepProcs { const controlPoints = workPartCount * UPGRADE_CONTROLLER_POWER - statsManager.updateStat(creep.room.name, 'eou', controlPoints) + StatsManager.updateStat(creep.room.name, 'eou', controlPoints) creep.message += `🔋${controlPoints}` } } @@ -110,7 +110,7 @@ export class CreepProcs { // Add control points to total controlPoints counter and say the success - statsManager.updateStat(creep.room.name, 'eoro', energySpentOnRepairs) + StatsManager.updateStat(creep.room.name, 'eoro', energySpentOnRepairs) creep.message += `🔧${energySpentOnRepairs * REPAIR_POWER}` } } @@ -200,7 +200,7 @@ export class CreepProcs { myCreepUtils.parts(creep).work * UPGRADE_CONTROLLER_POWER, ) - statsManager.updateStat(creep.room.name, 'eou', energySpentOnUpgrades) + StatsManager.updateStat(creep.room.name, 'eou', energySpentOnUpgrades) creep.message = `🔋${energySpentOnUpgrades}` // Inform true @@ -254,10 +254,10 @@ export class CreepProcs { // Record the repair attempt in different places for barricades than other structures if (target.structureType === STRUCTURE_RAMPART || target.structureType === STRUCTURE_WALL) { - statsManager.updateStat(creep.room.name, 'eorwr', energySpentOnRepair) + StatsManager.updateStat(creep.room.name, 'eorwr', energySpentOnRepair) creep.message = `🧱${energySpentOnRepair * REPAIR_POWER}` } else { - statsManager.updateStat(creep.room.name, 'eoro', energySpentOnRepair) + StatsManager.updateStat(creep.room.name, 'eoro', energySpentOnRepair) creep.message = `🔧${energySpentOnRepair * REPAIR_POWER}` } @@ -1089,7 +1089,7 @@ export class CreepProcs { const result = spawn.renewCreep(creep) if (result === OK) { - statsManager.updateStat(creep.room.name, 'eosp', energyCost) + StatsManager.updateStat(creep.room.name, 'eosp', energyCost) spawn.renewed = true } } @@ -1126,7 +1126,7 @@ export class CreepProcs { const result = spawn.renewCreep(creep) if (result === OK) { - statsManager.updateStat(creep.room.name, 'eosp', energyCost) + StatsManager.updateStat(creep.room.name, 'eosp', energyCost) spawn.renewed = true } } diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index 77faa2f13..7f802af33 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -12,7 +12,7 @@ import { import { packCoord, unpackCoordAsPos } from 'other/codec' -import { statsManager } from 'international/statsManager' +import { StatsManager } from 'international/stats' import { creepUtils } from '../creepUtils' import { RoomManager } from 'room/room' import { RoomLogisticsRequest } from 'types/roomRequests' @@ -261,7 +261,7 @@ Creep.prototype.advancedBuildCSite = function (cSite) { // Add control points to total controlPoints counter and say the success - statsManager.updateStat(this.room.name, 'eob', energySpentOnConstruction) + StatsManager.updateStat(this.room.name, 'eob', energySpentOnConstruction) this.message = `🚧 ` + energySpentOnConstruction return Result.success @@ -343,7 +343,7 @@ Creep.prototype.advancedBuildAllyCSite = function () { // Add control points to total controlPoints counter and say the success - statsManager.updateStat(this.room.name, 'eob', energySpentOnConstruction) + StatsManager.updateStat(this.room.name, 'eob', energySpentOnConstruction) this.message = `🚧${energySpentOnConstruction}` // Inform true diff --git a/src/room/creeps/creepRoleManager.ts b/src/room/creeps/creepRoleManager.ts index 2813c3c8d..f50446d07 100644 --- a/src/room/creeps/creepRoleManager.ts +++ b/src/room/creeps/creepRoleManager.ts @@ -4,7 +4,7 @@ import './creepPrototypes/creepMoveFunctions' import { creepRoles, customColors } from 'international/constants' import { LogTypes, customLog } from 'utils/logging' import { RoomManager } from 'room/room' -import { statsManager } from 'international/statsManager' +import { StatsManager } from 'international/stats' import { creepClasses } from './creepClasses' export class CreepRoleManager { diff --git a/src/room/creeps/creepUtils.ts b/src/room/creeps/creepUtils.ts index a6cbf6b45..7c1ef9572 100644 --- a/src/room/creeps/creepUtils.ts +++ b/src/room/creeps/creepUtils.ts @@ -13,7 +13,7 @@ import { roomLogisticsRoles, storingStructureTypesSet, } from 'international/constants' -import { statsManager } from 'international/statsManager' +import { StatsManager } from 'international/stats' import { arePositionsEqual, findObjectWithID, findWithLowestScore, getRange } from 'utils/utils' import { CreepRoleManager } from './creepRoleManager' import { packCoord, unpackCoordAsPos, unpackPosAt } from 'other/codec' @@ -116,7 +116,7 @@ export class CreepUtils { const energyHarvested = Math.min(workParts * HARVEST_POWER, source.energy) creep.nextStore.energy += energyHarvested // Record the harvest in stats - statsManager.updateStat(creep.room.name, RoomStatsKeys.EnergyInputHarvest, energyHarvested) + StatsManager.updateStat(creep.room.name, RoomStatsKeys.EnergyInputHarvest, energyHarvested) return Result.success } diff --git a/src/room/creeps/endTickCreepManager.ts b/src/room/creeps/endTickCreepManager.ts index 7a0920704..f570190f5 100644 --- a/src/room/creeps/endTickCreepManager.ts +++ b/src/room/creeps/endTickCreepManager.ts @@ -7,7 +7,7 @@ import { friendlyDieChants, powerCreepClassNames, } from 'international/constants' -import { statsManager } from 'international/statsManager' +import { StatsManager } from 'international/stats' import { customLog } from 'utils/logging' import { forCoordsInRange, randomOf, randomRange, randomTick } from 'utils/utils' import { RoomManager } from '../room' diff --git a/src/room/creeps/powerCreepRoleManager.ts b/src/room/creeps/powerCreepRoleManager.ts index ca3dd8e2e..d07cfd614 100644 --- a/src/room/creeps/powerCreepRoleManager.ts +++ b/src/room/creeps/powerCreepRoleManager.ts @@ -1,5 +1,5 @@ import { customColors, powerCreepClassNames } from 'international/constants' -import { statsManager } from 'international/statsManager' +import { statsManager } from 'international/stats' import { customLog } from 'utils/logging' import { RoomManager } from 'room/room' import { Operator } from './powerCreeps/operator' diff --git a/src/room/creeps/roleManagers/commune/defenders/meleeDefender.ts b/src/room/creeps/roleManagers/commune/defenders/meleeDefender.ts index 9707fada7..9b0f020d1 100644 --- a/src/room/creeps/roleManagers/commune/defenders/meleeDefender.ts +++ b/src/room/creeps/roleManagers/commune/defenders/meleeDefender.ts @@ -5,7 +5,7 @@ import { PlayerMemoryKeys, ReservedCoordTypes, } from 'international/constants' -import { playerManager } from 'international/players' +import { PlayerManager } from 'international/players' import { areCoordsEqual, findClosestObject, diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index 6bb31d3c4..dbc286974 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -12,278 +12,280 @@ import { packedPosLength, relayOffsets, } from 'international/constants' -import { statsManager } from 'international/statsManager' +import { StatsManager } from 'international/stats' import { packCoord, reversePosList, unpackCoord, unpackPosAt } from 'other/codec' import { creepProcs } from 'room/creeps/creepProcs' import { myCreepUtils } from 'room/creeps/myCreepUtils' import { structureUtils } from 'room/structureUtils' import { - findObjectWithID, - getRange, - getRangeXY, - randomIntRange, - randomTick, - utils, + findObjectWithID, + getRange, + getRangeXY, + randomIntRange, + randomTick, + utils, } from 'utils/utils' export class Hauler extends Creep { - constructor(creepID: Id) { - super(creepID) - } + constructor(creepID: Id) { + super(creepID) + } - public isDying() { - // Stop if creep is spawning + public isDying() { + // Stop if creep is spawning - if (this.spawning) return false - /* + if (this.spawning) return false + /* // If the creep's remaining ticks are more than the estimated spawn time, inform false if (this.ticksToLive > this.body.length * CREEP_SPAWN_TIME) return false */ - const creepMemory = Memory.creeps[this.name] - - if (creepMemory[CreepMemoryKeys.remote]) { - if (creepMemory[CreepMemoryKeys.sourceIndex] === undefined) throw Error('has remote but no sourceIndex') - if ( - this.ticksToLive > - this.body.length * CREEP_SPAWN_TIME + - Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ - this.commune.communeManager.remoteResourcePathType - ][creepMemory[CreepMemoryKeys.sourceIndex]].length / - packedPosLength - ) { - return false - } - } - if (this.ticksToLive > this.body.length * CREEP_SPAWN_TIME) return false + const creepMemory = Memory.creeps[this.name] - return true + if (creepMemory[CreepMemoryKeys.remote]) { + if (creepMemory[CreepMemoryKeys.sourceIndex] === undefined) + throw Error('has remote but no sourceIndex') + if ( + this.ticksToLive > + this.body.length * CREEP_SPAWN_TIME + + Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ + this.commune.communeManager.remoteResourcePathType + ][creepMemory[CreepMemoryKeys.sourceIndex]].length / + packedPosLength + ) { + return false + } } + if (this.ticksToLive > this.body.length * CREEP_SPAWN_TIME) return false - passiveRenew?() { + return true + } - const { room } = this + passiveRenew?() { + const { room } = this - // If there is insufficient CPU to renew, inform false + // If there is insufficient CPU to renew, inform false - if (this.body.length > 10) return - if (!room.myCreepsByRole.fastFiller.length) return - // only renew if we are the same as the desired hauler cost - const creepCost = Memory.creeps[this.name][CreepMemoryKeys.cost] - if (creepCost !== Memory.rooms[room.name][RoomMemoryKeys.minHaulerCost]) return + if (this.body.length > 10) return + if (!room.myCreepsByRole.fastFiller.length) return + // only renew if we are the same as the desired hauler cost + const creepCost = Memory.creeps[this.name][CreepMemoryKeys.cost] + if (creepCost !== Memory.rooms[room.name][RoomMemoryKeys.minHaulerCost]) return - // If the creep's age is less than the benefit from renewing, inform false + // If the creep's age is less than the benefit from renewing, inform false - const energyCost = Math.ceil(creepCost / 2.5 / this.body.length) - if (CREEP_LIFE_TIME - this.ticksToLive < Math.floor(600 / this.body.length)) return + const energyCost = Math.ceil(creepCost / 2.5 / this.body.length) + if (CREEP_LIFE_TIME - this.ticksToLive < Math.floor(600 / this.body.length)) return - // Get the room's spawns, stopping if there are none + // Get the room's spawns, stopping if there are none - const spawns = room.roomManager.structures.spawn + const spawns = room.roomManager.structures.spawn - // Get a spawn in range of 1, informing false if there are none + // Get a spawn in range of 1, informing false if there are none - const spawn = spawns.find( - spawn => - getRangeXY(this.pos.x, spawn.pos.x, this.pos.y, spawn.pos.y) === 1 && - !spawn.renewed && - !spawn.spawning && - structureUtils.isRCLActionable(spawn), - ) - if (!spawn) return + const spawn = spawns.find( + spawn => + getRangeXY(this.pos.x, spawn.pos.x, this.pos.y, spawn.pos.y) === 1 && + !spawn.renewed && + !spawn.spawning && + structureUtils.isRCLActionable(spawn), + ) + if (!spawn) return - const result = spawn.renewCreep(this) - if (result === OK) { - statsManager.updateStat(this.room.name, 'eosp', energyCost) - spawn.renewed = true - } + const result = spawn.renewCreep(this) + if (result === OK) { + StatsManager.updateStat(this.room.name, 'eosp', energyCost) + spawn.renewed = true } + } - initRun() { - if (utils.isTickInterval(10) && this.getActiveBodyparts(CARRY) === 0) { - this.suicide() - return - } - - const creepMemory = Memory.creeps[this.name] - if (creepMemory[CreepMemoryKeys.previousRelayer] && Game.time > creepMemory[CreepMemoryKeys.previousRelayer][1] + 1) { + initRun() { + if (utils.isTickInterval(10) && this.getActiveBodyparts(CARRY) === 0) { + this.suicide() + return + } - creepMemory[CreepMemoryKeys.previousRelayer] = undefined - } + const creepMemory = Memory.creeps[this.name] + if ( + creepMemory[CreepMemoryKeys.previousRelayer] && + Game.time > creepMemory[CreepMemoryKeys.previousRelayer][1] + 1 + ) { + creepMemory[CreepMemoryKeys.previousRelayer] = undefined + } - const carryParts = myCreepUtils.parts(this).carry - this.commune.communeManager.haulerCarryParts += carryParts + const carryParts = myCreepUtils.parts(this).carry + this.commune.communeManager.haulerCarryParts += carryParts - if (this.hasValidRemote()) { - this.applyRemote() - return - } + if (this.hasValidRemote()) { + this.applyRemote() + return + } - // We don't have a valid remote - this.removeRemote() + // We don't have a valid remote + this.removeRemote() - const commune = this.commune - if (creepMemory[CreepMemoryKeys.taskRoom] === commune.name) { - commune.communeManager.communeHaulerCarryParts += carryParts - commune.communeManager.communeHaulers.push(this.name) - } + const commune = this.commune + if (creepMemory[CreepMemoryKeys.taskRoom] === commune.name) { + commune.communeManager.communeHaulerCarryParts += carryParts + commune.communeManager.communeHaulers.push(this.name) } + } - hasValidRemote?() { - const remoteName = Memory.creeps[this.name][CreepMemoryKeys.remote] - if (!remoteName) return false + hasValidRemote?() { + const remoteName = Memory.creeps[this.name][CreepMemoryKeys.remote] + if (!remoteName) return false - const remoteMemory = Memory.rooms[remoteName] + const remoteMemory = Memory.rooms[remoteName] - if (remoteMemory[RoomMemoryKeys.disable]) return false - if (remoteMemory[RoomMemoryKeys.abandonRemote]) return false - if (remoteMemory[RoomMemoryKeys.enemyReserved]) return false - if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) return false - if (remoteMemory[RoomMemoryKeys.commune] !== this.commune.name) return false - - return true - } + if (remoteMemory[RoomMemoryKeys.disable]) return false + if (remoteMemory[RoomMemoryKeys.abandonRemote]) return false + if (remoteMemory[RoomMemoryKeys.enemyReserved]) return false + if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) return false + if (remoteMemory[RoomMemoryKeys.commune] !== this.commune.name) return false - /** - * Finds a remote to harvest in - */ - findRemote?() { - if (this.hasValidRemote()) return true + return true + } - for (const remoteInfo of this.commune.roomManager.remoteSourceIndexesByEfficacy) { - const splitRemoteInfo = remoteInfo.split(' ') - const remoteName = splitRemoteInfo[0] - const remoteMemory = Memory.rooms[remoteName] + /** + * Finds a remote to harvest in + */ + findRemote?() { + if (this.hasValidRemote()) return true - if (remoteMemory[RoomMemoryKeys.disable]) continue - if (remoteMemory[RoomMemoryKeys.abandonRemote]) continue - if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) continue - if (remoteMemory[RoomMemoryKeys.commune] !== this.commune.name) continue + for (const remoteInfo of this.commune.roomManager.remoteSourceIndexesByEfficacy) { + const splitRemoteInfo = remoteInfo.split(' ') + const remoteName = splitRemoteInfo[0] + const remoteMemory = Memory.rooms[remoteName] - const sourceIndex = parseInt(splitRemoteInfo[1]) - if (!this.isRemoteValid(remoteName, sourceIndex)) continue + if (remoteMemory[RoomMemoryKeys.disable]) continue + if (remoteMemory[RoomMemoryKeys.abandonRemote]) continue + if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) continue + if (remoteMemory[RoomMemoryKeys.commune] !== this.commune.name) continue - this.assignRemote(remoteName, sourceIndex) - return true - } + const sourceIndex = parseInt(splitRemoteInfo[1]) + if (!this.isRemoteValid(remoteName, sourceIndex)) continue - return false + this.assignRemote(remoteName, sourceIndex) + return true } - isRemoteValid?(remoteName: string, sourceIndex: number) { - const remoteMemory = Memory.rooms[remoteName] + return false + } - // Ensure the creep and the remote have the same opinions on roads - if ( - !!(remoteMemory[RoomMemoryKeys.roads][sourceIndex]) != - !!Memory.creeps[this.name][CreepMemoryKeys.preferRoads] - ) - return false + isRemoteValid?(remoteName: string, sourceIndex: number) { + const remoteMemory = Memory.rooms[remoteName] - const commune = this.commune + // Ensure the creep and the remote have the same opinions on roads + if ( + !!remoteMemory[RoomMemoryKeys.roads][sourceIndex] != + !!Memory.creeps[this.name][CreepMemoryKeys.preferRoads] + ) + return false - // Make sure we have enough life to get there - /* + const commune = this.commune + + // Make sure we have enough life to get there + /* const pathLength = remoteMemory[commune.communeManager.remoteResourcePathType][sourceIndex].length / packedPosLength if (pathLength >= this.ticksToLive) return false */ - // Make sure we have enough free space to keep reservation below credit - if ( - remoteMemory[RoomMemoryKeys.remoteSourceCredit][sourceIndex] - - remoteMemory[RoomMemoryKeys.remoteSourceCreditReservation][sourceIndex] < - this.freeNextStore - ) { - return false - } + // Make sure we have enough free space to keep reservation below credit + if ( + remoteMemory[RoomMemoryKeys.remoteSourceCredit][sourceIndex] - + remoteMemory[RoomMemoryKeys.remoteSourceCreditReservation][sourceIndex] < + this.freeNextStore + ) { + return false + } - // If we do roads but the remote doesn't - change to be a low-priority search later - if (Memory.creeps[this.name][CreepMemoryKeys.preferRoads]) { - const roadsQuota = - remoteMemory[commune.communeManager.remoteResourcePathType][sourceIndex].length / - packedPosLength + // If we do roads but the remote doesn't - change to be a low-priority search later + if (Memory.creeps[this.name][CreepMemoryKeys.preferRoads]) { + const roadsQuota = + remoteMemory[commune.communeManager.remoteResourcePathType][sourceIndex].length / + packedPosLength - // See if there are roads close enough or more than the quota - if (remoteMemory[RoomMemoryKeys.roads][sourceIndex] < roadsQuota * 0.9) return false - } - - return true + // See if there are roads close enough or more than the quota + if (remoteMemory[RoomMemoryKeys.roads][sourceIndex] < roadsQuota * 0.9) return false } - isCurrentRemoteValid?() { - const creepMemory = Memory.creeps[this.name] - return this.isRemoteValid( - creepMemory[CreepMemoryKeys.remote], - creepMemory[CreepMemoryKeys.sourceIndex], - ) - } + return true + } - assignRemote?(remoteName: string, sourceIndex: number) { - const creepMemory = Memory.creeps[this.name] + isCurrentRemoteValid?() { + const creepMemory = Memory.creeps[this.name] + return this.isRemoteValid( + creepMemory[CreepMemoryKeys.remote], + creepMemory[CreepMemoryKeys.sourceIndex], + ) + } - creepMemory[CreepMemoryKeys.remote] = remoteName - creepMemory[CreepMemoryKeys.sourceIndex] = sourceIndex - creepMemory[CreepMemoryKeys.taskRoom] = undefined - creepMemory[CreepMemoryKeys.roomLogisticsRequests] = [] + assignRemote?(remoteName: string, sourceIndex: number) { + const creepMemory = Memory.creeps[this.name] - this.applyRemote() - } + creepMemory[CreepMemoryKeys.remote] = remoteName + creepMemory[CreepMemoryKeys.sourceIndex] = sourceIndex + creepMemory[CreepMemoryKeys.taskRoom] = undefined + creepMemory[CreepMemoryKeys.roomLogisticsRequests] = [] - applyRemote?() { - if (this.isDying()) return - if (!this.needsResources()) return + this.applyRemote() + } - const creepMemory = Memory.creeps[this.name] + applyRemote?() { + if (this.isDying()) return + if (!this.needsResources()) return - Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ - RoomMemoryKeys.remoteSourceCreditReservation - ][creepMemory[CreepMemoryKeys.sourceIndex]] += this.dataChange = this.freeNextStore - } + const creepMemory = Memory.creeps[this.name] - removeRemote?() { - const creepMemory = Memory.creeps[this.name] + Memory.rooms[creepMemory[CreepMemoryKeys.remote]][RoomMemoryKeys.remoteSourceCreditReservation][ + creepMemory[CreepMemoryKeys.sourceIndex] + ] += this.dataChange = this.freeNextStore + } - if (!this.isDying) { - Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ - RoomMemoryKeys.remoteSourceCreditReservation - ][creepMemory[CreepMemoryKeys.sourceIndex]] -= this.dataChange - } + removeRemote?() { + const creepMemory = Memory.creeps[this.name] - delete creepMemory[CreepMemoryKeys.remote] - delete creepMemory[CreepMemoryKeys.sourceIndex] + if (!this.isDying) { + Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ + RoomMemoryKeys.remoteSourceCreditReservation + ][creepMemory[CreepMemoryKeys.sourceIndex]] -= this.dataChange } - getResources?() { - const creepMemory = Memory.creeps[this.name] - - // Try to find a remote - - if (!this.findRemote()) { - this.message = '❌ Remote' - - if (this.room.name !== this.commune.name) { - const anchor = this.commune.roomManager.anchor - if (!anchor) throw Error('no anchor for hauler') - - if ( - this.createMoveRequest({ - origin: this.pos, - goals: [ - { - pos: anchor, - range: 25, - }, - ], - }) === Result.fail - ) { - creepMemory[CreepMemoryKeys.sleepFor] = SleepFor.any - creepMemory[CreepMemoryKeys.sleepTime] = Game.time + randomIntRange(10, 50) - } - } + delete creepMemory[CreepMemoryKeys.remote] + delete creepMemory[CreepMemoryKeys.sourceIndex] + } + + getResources?() { + const creepMemory = Memory.creeps[this.name] + + // Try to find a remote + + if (!this.findRemote()) { + this.message = '❌ Remote' - // If the room is the creep's commune - /* + if (this.room.name !== this.commune.name) { + const anchor = this.commune.roomManager.anchor + if (!anchor) throw Error('no anchor for hauler') + + if ( + this.createMoveRequest({ + origin: this.pos, + goals: [ + { + pos: anchor, + range: 25, + }, + ], + }) === Result.fail + ) { + creepMemory[CreepMemoryKeys.sleepFor] = SleepFor.any + creepMemory[CreepMemoryKeys.sleepTime] = Game.time + randomIntRange(10, 50) + } + } + + // If the room is the creep's commune + /* if (this.room.name === this.commune.name) { // Advanced recycle and iterate @@ -303,212 +305,264 @@ export class Hauler extends Creep { ], }) */ - return false - } + return false + } - // If the creep is in the remote + // If the creep is in the remote - if (this.room.name === this.memory[CreepMemoryKeys.remote]) { - if (!this.getRemoteSourceResources()) return false + if (this.room.name === this.memory[CreepMemoryKeys.remote]) { + if (!this.getRemoteSourceResources()) return false - // We have enough resources, return home + // We have enough resources, return home - delete this.moved + delete this.moved - this.message += this.commune.name + this.message += this.commune.name - const anchor = this.commune.roomManager.anchor - if (!anchor) throw Error('No anchor for hauler ' + this.room.name) + const anchor = this.commune.roomManager.anchor + if (!anchor) throw Error('No anchor for hauler ' + this.room.name) - this.createMoveRequestByPath( - { - origin: this.pos, - goals: [ - { - pos: anchor, - range: 3, - }, - ], - avoidEnemyRanges: true, - typeWeights: { - [RoomTypes.enemy]: Infinity, - [RoomTypes.ally]: Infinity, - [RoomTypes.sourceKeeper]: Infinity, - [RoomTypes.enemyRemote]: Infinity, - [RoomTypes.allyRemote]: Infinity, - }, - }, - { - packedPath: - Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ - this.commune.communeManager.remoteResourcePathType - ][creepMemory[CreepMemoryKeys.sourceIndex]], - remoteName: creepMemory[CreepMemoryKeys.remote], - }, - ) + this.createMoveRequestByPath( + { + origin: this.pos, + goals: [ + { + pos: anchor, + range: 3, + }, + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + }, + { + packedPath: + Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ + this.commune.communeManager.remoteResourcePathType + ][creepMemory[CreepMemoryKeys.sourceIndex]], + remoteName: creepMemory[CreepMemoryKeys.remote], + }, + ) - return true - } + return true + } + + if (this.room.name !== this.commune.name) { + // Fulfill requests near the hauler - if (this.room.name !== this.commune.name) { - // Fulfill requests near the hauler + creepProcs.runRoomLogisticsRequestsAdvanced(this, { + types: new Set([RoomLogisticsRequestTypes.pickup, RoomLogisticsRequestTypes.withdraw]), + resourceTypes: new Set([RESOURCE_ENERGY]), + conditions: request => { + // If the target is near the creep - creepProcs.runRoomLogisticsRequestsAdvanced(this, { - types: new Set([ - RoomLogisticsRequestTypes.pickup, - RoomLogisticsRequestTypes.withdraw, - ]), - resourceTypes: new Set([RESOURCE_ENERGY]), - conditions: request => { - // If the target is near the creep + const targetPos = findObjectWithID(request.targetID).pos + return getRange(targetPos, this.pos) <= 0 + }, + }) - const targetPos = findObjectWithID(request.targetID).pos - return getRange(targetPos, this.pos) <= 0 + if (!this.needsResources()) { + // We have enough resources, return home + + delete this.moved + + this.message += this.commune.name + + const anchor = this.commune.roomManager.anchor + if (!anchor) throw Error('No anchor for hauler ' + this.room.name) + + this.createMoveRequestByPath( + { + origin: this.pos, + goals: [ + { + pos: anchor, + range: 3, }, - }) + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + }, + { + packedPath: + Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ + this.commune.communeManager.remoteResourcePathType + ][creepMemory[CreepMemoryKeys.sourceIndex]], + remoteName: creepMemory[CreepMemoryKeys.remote], + }, + ) - if (!this.needsResources()) { - // We have enough resources, return home + return true + } + } - delete this.moved + // We aren't in the remote, go to the source + + const sourceHarvestPos = unpackPosAt( + Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ + RoomMemoryKeys.remoteSourceHarvestPositions + ][creepMemory[CreepMemoryKeys.sourceIndex]], + ) + + this.message += creepMemory[CreepMemoryKeys.remote] + console.log(creepMemory[CreepMemoryKeys.remote]) + this.createMoveRequestByPath( + { + origin: this.pos, + goals: [ + { + pos: sourceHarvestPos, + range: 1, + }, + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + avoidDanger: true, + }, + { + packedPath: reversePosList( + Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ + this.commune.communeManager.remoteResourcePathType + ][creepMemory[CreepMemoryKeys.sourceIndex]], + ), + remoteName: creepMemory[CreepMemoryKeys.remote], + }, + ) + + return true + } + + /** + * + * @returns If the creep no longer needs energy + */ + getRemoteSourceResources?() { + const creepMemory = Memory.creeps[this.name] + const sourceHarvestPos = unpackPosAt( + Memory.rooms[this.room.name][RoomMemoryKeys.remoteSourceHarvestPositions][ + creepMemory[CreepMemoryKeys.sourceIndex] + ], + ) + + // If we're ready to take on a request by the source or we already have one, perform it + + const isBySourceHarvestPos = getRange(this.pos, sourceHarvestPos) <= 1 + if (isBySourceHarvestPos || creepMemory[CreepMemoryKeys.roomLogisticsRequests].length > 0) { + const freeNextStoreInitial = this.freeNextStore + + creepProcs.runRoomLogisticsRequestsAdvanced(this, { + types: new Set([RoomLogisticsRequestTypes.pickup, RoomLogisticsRequestTypes.withdraw]), + resourceTypes: new Set([RESOURCE_ENERGY]), + conditions: request => { + // If the target is near the creep or source + + const targetPos = findObjectWithID(request.targetID).pos + return ( + getRange(targetPos, this.pos) <= 1 || + getRange( + targetPos, + this.room.roomManager.remoteSources[creepMemory[CreepMemoryKeys.sourceIndex]].pos, + ) <= 1 + ) + }, + }) + + // remove fulfilled reserved source credit from source credit + + // Should be a negative number, as we should have more used store than before + const freeNextStoreDifference = this.freeNextStore - freeNextStoreInitial + if (freeNextStoreDifference !== 0) { + Memory.rooms[this.room.name][RoomMemoryKeys.remoteSourceCredit][ + creepMemory[CreepMemoryKeys.sourceIndex] + ] += freeNextStoreDifference + Memory.rooms[this.room.name][RoomMemoryKeys.remoteSourceCreditReservation][ + creepMemory[CreepMemoryKeys.sourceIndex] + ] += freeNextStoreDifference + } - this.message += this.commune.name + return !this.needsResources() + } - const anchor = this.commune.roomManager.anchor - if (!anchor) throw Error('No anchor for hauler ' + this.room.name) + // Fulfill requests near the hauler - this.createMoveRequestByPath( - { - origin: this.pos, - goals: [ - { - pos: anchor, - range: 3, - }, - ], - avoidEnemyRanges: true, - typeWeights: { - [RoomTypes.enemy]: Infinity, - [RoomTypes.ally]: Infinity, - [RoomTypes.sourceKeeper]: Infinity, - [RoomTypes.enemyRemote]: Infinity, - [RoomTypes.allyRemote]: Infinity, - }, - }, - { - packedPath: - Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ - this.commune.communeManager.remoteResourcePathType - ][creepMemory[CreepMemoryKeys.sourceIndex]], - remoteName: creepMemory[CreepMemoryKeys.remote], - }, - ) + creepProcs.runRoomLogisticsRequestsAdvanced(this, { + types: new Set([ + RoomLogisticsRequestTypes.pickup, + RoomLogisticsRequestTypes.withdraw, + ]), + resourceTypes: new Set([RESOURCE_ENERGY]), + conditions: request => { + // If the target is near the creep - return true - } - } + const targetPos = findObjectWithID(request.targetID).pos + return getRange(targetPos, this.pos) <= 1 + }, + }) - // We aren't in the remote, go to the source + if (!this.needsResources()) return true - const sourceHarvestPos = unpackPosAt( - Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ - RoomMemoryKeys.remoteSourceHarvestPositions - ][creepMemory[CreepMemoryKeys.sourceIndex]], - ) + // We aren't by the sourceHarvestPos, get adjacent to it - this.message += creepMemory[CreepMemoryKeys.remote] - console.log(creepMemory[CreepMemoryKeys.remote]) - this.createMoveRequestByPath( + if (!isBySourceHarvestPos) { + this.createMoveRequestByPath( + { + origin: this.pos, + goals: [ { - origin: this.pos, - goals: [ - { - pos: sourceHarvestPos, - range: 1, - }, - ], - avoidEnemyRanges: true, - typeWeights: { - [RoomTypes.enemy]: Infinity, - [RoomTypes.ally]: Infinity, - [RoomTypes.sourceKeeper]: Infinity, - [RoomTypes.enemyRemote]: Infinity, - [RoomTypes.allyRemote]: Infinity, - }, - avoidDanger: true, - }, - { - packedPath: reversePosList( - Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ - this.commune.communeManager.remoteResourcePathType - ][creepMemory[CreepMemoryKeys.sourceIndex]], - ), - remoteName: creepMemory[CreepMemoryKeys.remote], + pos: sourceHarvestPos, + range: 1, }, - ) + ], + avoidEnemyRanges: true, + }, + { + packedPath: reversePosList( + Memory.rooms[this.room.name][this.commune.communeManager.remoteResourcePathType][ + creepMemory[CreepMemoryKeys.sourceIndex] + ], + ), + remoteName: this.room.name, + }, + ) - return true + return false } - /** - * - * @returns If the creep no longer needs energy - */ - getRemoteSourceResources?() { - const creepMemory = Memory.creeps[this.name] - const sourceHarvestPos = unpackPosAt( - Memory.rooms[this.room.name][RoomMemoryKeys.remoteSourceHarvestPositions][ - creepMemory[CreepMemoryKeys.sourceIndex] - ], - ) + // We are next to the source - // If we're ready to take on a request by the source or we already have one, perform it - - const isBySourceHarvestPos = getRange(this.pos, sourceHarvestPos) <= 1 - if (isBySourceHarvestPos || creepMemory[CreepMemoryKeys.roomLogisticsRequests].length > 0) { - const freeNextStoreInitial = this.freeNextStore - - creepProcs.runRoomLogisticsRequestsAdvanced(this, { - types: new Set([RoomLogisticsRequestTypes.pickup, RoomLogisticsRequestTypes.withdraw]), - resourceTypes: new Set([RESOURCE_ENERGY]), - conditions: request => { - // If the target is near the creep or source - - const targetPos = findObjectWithID(request.targetID).pos - return ( - getRange(targetPos, this.pos) <= 1 || - getRange( - targetPos, - this.room.roomManager.remoteSources[creepMemory[CreepMemoryKeys.sourceIndex]].pos, - ) <= 1 - ) - }, - }) + this.moved = MovedTypes.wait - // remove fulfilled reserved source credit from source credit + return !this.needsResources() + } - // Should be a negative number, as we should have more used store than before - const freeNextStoreDifference = this.freeNextStore - freeNextStoreInitial - if (freeNextStoreDifference !== 0) { - Memory.rooms[this.room.name][RoomMemoryKeys.remoteSourceCredit][ - creepMemory[CreepMemoryKeys.sourceIndex] - ] += freeNextStoreDifference - Memory.rooms[this.room.name][RoomMemoryKeys.remoteSourceCreditReservation][ - creepMemory[CreepMemoryKeys.sourceIndex] - ] += freeNextStoreDifference - } + deliverResources?() { + const commune = this.commune - return !this.needsResources() - } - - // Fulfill requests near the hauler + if (commune.communeManager.remoteResourcePathType === RoomMemoryKeys.remoteSourceHubPaths) { + if (this.room.name === commune.name) { + creepProcs.passiveRenew(this) creepProcs.runRoomLogisticsRequestsAdvanced(this, { - types: new Set([ - RoomLogisticsRequestTypes.pickup, - RoomLogisticsRequestTypes.withdraw, - ]), + types: new Set([RoomLogisticsRequestTypes.transfer]), resourceTypes: new Set([RESOURCE_ENERGY]), + noDelivery: true, conditions: request => { // If the target is near the creep @@ -517,575 +571,525 @@ export class Hauler extends Creep { }, }) - if (!this.needsResources()) return true + // If we tried to respond but weren't able to do so in a single tick, then we should wait to try again next tick + if (Memory.creeps[this.name][CreepMemoryKeys.roomLogisticsRequests].length) return true - // We aren't by the sourceHarvestPos, get adjacent to it + // We haven't emptied ourselves yet + if (!this.needsResources()) { + if (getRange(this.pos, commune.storage.pos) <= 1) return true - if (!isBySourceHarvestPos) { - this.createMoveRequestByPath( - { - origin: this.pos, - goals: [ - { - pos: sourceHarvestPos, - range: 1, - }, - ], - avoidEnemyRanges: true, - }, + this.createMoveRequestByPath( + { + origin: this.pos, + goals: [ { - packedPath: reversePosList( - Memory.rooms[this.room.name][ - this.commune.communeManager.remoteResourcePathType - ][creepMemory[CreepMemoryKeys.sourceIndex]], - ), - remoteName: this.room.name, + pos: commune.storage.pos, + range: 1, }, - ) - - return false + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + }, + { + packedPath: + Memory.rooms[this.memory[CreepMemoryKeys.remote]][ + commune.communeManager.remoteResourcePathType + ][this.memory[CreepMemoryKeys.sourceIndex]], + }, + ) + return true } + this.removeRemote() + if (!this.findRemote()) return false - // We are next to the source - - this.moved = MovedTypes.wait - - return !this.needsResources() - } - - deliverResources?() { - const commune = this.commune - - if (commune.communeManager.remoteResourcePathType === RoomMemoryKeys.remoteSourceHubPaths) { - if (this.room.name === commune.name) { - creepProcs.passiveRenew(this) - - creepProcs.runRoomLogisticsRequestsAdvanced(this, { - types: new Set([RoomLogisticsRequestTypes.transfer]), - resourceTypes: new Set([RESOURCE_ENERGY]), - noDelivery: true, - conditions: request => { - // If the target is near the creep - - const targetPos = findObjectWithID(request.targetID).pos - return getRange(targetPos, this.pos) <= 1 - }, - }) - - // If we tried to respond but weren't able to do so in a single tick, then we should wait to try again next tick - if (Memory.creeps[this.name][CreepMemoryKeys.roomLogisticsRequests].length) return true - - // We haven't emptied ourselves yet - if (!this.needsResources()) { - - if (getRange(this.pos, commune.storage.pos) <= 1) return true - - this.createMoveRequestByPath( - { - origin: this.pos, - goals: [ - { - pos: commune.storage.pos, - range: 1, - }, - ], - avoidEnemyRanges: true, - typeWeights: { - [RoomTypes.enemy]: Infinity, - [RoomTypes.ally]: Infinity, - [RoomTypes.sourceKeeper]: Infinity, - [RoomTypes.enemyRemote]: Infinity, - [RoomTypes.allyRemote]: Infinity, - }, - }, - { - packedPath: - Memory.rooms[this.memory[CreepMemoryKeys.remote]][ - commune.communeManager.remoteResourcePathType - ][this.memory[CreepMemoryKeys.sourceIndex]], - }, - ) - return true - } - this.removeRemote() - if (!this.findRemote()) return false - - this.message += this.memory[CreepMemoryKeys.remote] - - const sourceHarvestPos = unpackPosAt( - Memory.rooms[this.memory[CreepMemoryKeys.remote]][ - RoomMemoryKeys.remoteSourceHarvestPositions - ][this.memory[CreepMemoryKeys.sourceIndex]], - ) - - this.createMoveRequestByPath( - { - origin: this.pos, - goals: [ - { - pos: sourceHarvestPos, - range: 1, - }, - ], - avoidEnemyRanges: true, - typeWeights: { - [RoomTypes.enemy]: Infinity, - [RoomTypes.ally]: Infinity, - [RoomTypes.sourceKeeper]: Infinity, - [RoomTypes.enemyRemote]: Infinity, - [RoomTypes.allyRemote]: Infinity, - }, - }, - { - packedPath: reversePosList( - Memory.rooms[this.memory[CreepMemoryKeys.remote]][ - commune.communeManager.remoteResourcePathType - ][this.memory[CreepMemoryKeys.sourceIndex]], - ), - remoteName: this.memory[CreepMemoryKeys.remote], - }, - ) - - return false - } - - this.message += commune.name + this.message += this.memory[CreepMemoryKeys.remote] - this.createMoveRequestByPath( - { - origin: this.pos, - goals: [ - { - pos: commune.storage.pos, - range: 1, - }, - ], - avoidEnemyRanges: true, - typeWeights: { - [RoomTypes.enemy]: Infinity, - [RoomTypes.ally]: Infinity, - [RoomTypes.sourceKeeper]: Infinity, - [RoomTypes.enemyRemote]: Infinity, - [RoomTypes.allyRemote]: Infinity, - }, - }, - { - packedPath: - Memory.rooms[this.memory[CreepMemoryKeys.remote]][ - commune.communeManager.remoteResourcePathType - ][this.memory[CreepMemoryKeys.sourceIndex]], - }, - ) - return true - } + const sourceHarvestPos = unpackPosAt( + Memory.rooms[this.memory[CreepMemoryKeys.remote]][ + RoomMemoryKeys.remoteSourceHarvestPositions + ][this.memory[CreepMemoryKeys.sourceIndex]], + ) - if (this.room.name === commune.name) { - creepProcs.passiveRenew(this) + this.createMoveRequestByPath( + { + origin: this.pos, + goals: [ + { + pos: sourceHarvestPos, + range: 1, + }, + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + }, + { + packedPath: reversePosList( + Memory.rooms[this.memory[CreepMemoryKeys.remote]][ + commune.communeManager.remoteResourcePathType + ][this.memory[CreepMemoryKeys.sourceIndex]], + ), + remoteName: this.memory[CreepMemoryKeys.remote], + }, + ) - creepProcs.runRoomLogisticsRequestAdvanced(this, { - types: new Set([RoomLogisticsRequestTypes.transfer]), - resourceTypes: new Set([RESOURCE_ENERGY]), - }) + return false + } - // We haven't emptied ourselves yet - if (!this.needsResources()) return true - this.removeRemote() - if (!this.findRemote()) return false + this.message += commune.name - this.message += this.memory[CreepMemoryKeys.remote] + this.createMoveRequestByPath( + { + origin: this.pos, + goals: [ + { + pos: commune.storage.pos, + range: 1, + }, + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + }, + { + packedPath: + Memory.rooms[this.memory[CreepMemoryKeys.remote]][ + commune.communeManager.remoteResourcePathType + ][this.memory[CreepMemoryKeys.sourceIndex]], + }, + ) + return true + } - const sourceHarvestPos = unpackPosAt( - Memory.rooms[this.memory[CreepMemoryKeys.remote]][ - RoomMemoryKeys.remoteSourceHarvestPositions - ][this.memory[CreepMemoryKeys.sourceIndex]], - ) + if (this.room.name === commune.name) { + creepProcs.passiveRenew(this) - this.createMoveRequestByPath( - { - origin: this.pos, - goals: [ - { - pos: sourceHarvestPos, - range: 1, - }, - ], - avoidEnemyRanges: true, - typeWeights: { - [RoomTypes.enemy]: Infinity, - [RoomTypes.ally]: Infinity, - [RoomTypes.sourceKeeper]: Infinity, - [RoomTypes.enemyRemote]: Infinity, - [RoomTypes.allyRemote]: Infinity, - }, - }, - { - packedPath: reversePosList( - Memory.rooms[this.memory[CreepMemoryKeys.remote]][ - commune.communeManager.remoteResourcePathType - ][this.memory[CreepMemoryKeys.sourceIndex]], - ), - remoteName: this.memory[CreepMemoryKeys.remote], - }, - ) + creepProcs.runRoomLogisticsRequestAdvanced(this, { + types: new Set([RoomLogisticsRequestTypes.transfer]), + resourceTypes: new Set([RESOURCE_ENERGY]), + }) - return false - } + // We haven't emptied ourselves yet + if (!this.needsResources()) return true + this.removeRemote() + if (!this.findRemote()) return false - this.message += commune.name + this.message += this.memory[CreepMemoryKeys.remote] - const anchor = commune.roomManager.anchor - if (!anchor) throw Error('No anchor for hauler ' + this.room.name) + const sourceHarvestPos = unpackPosAt( + Memory.rooms[this.memory[CreepMemoryKeys.remote]][ + RoomMemoryKeys.remoteSourceHarvestPositions + ][this.memory[CreepMemoryKeys.sourceIndex]], + ) - this.createMoveRequestByPath( + this.createMoveRequestByPath( + { + origin: this.pos, + goals: [ { - origin: this.pos, - goals: [ - { - pos: anchor, - range: 3, - }, - ], - avoidEnemyRanges: true, - typeWeights: { - [RoomTypes.enemy]: Infinity, - [RoomTypes.ally]: Infinity, - [RoomTypes.sourceKeeper]: Infinity, - [RoomTypes.enemyRemote]: Infinity, - [RoomTypes.allyRemote]: Infinity, - }, - }, - { - packedPath: - Memory.rooms[this.memory[CreepMemoryKeys.remote]][ - commune.communeManager.remoteResourcePathType - ][this.memory[CreepMemoryKeys.sourceIndex]], - loose: true, + pos: sourceHarvestPos, + range: 1, }, - ) + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + }, + { + packedPath: reversePosList( + Memory.rooms[this.memory[CreepMemoryKeys.remote]][ + commune.communeManager.remoteResourcePathType + ][this.memory[CreepMemoryKeys.sourceIndex]], + ), + remoteName: this.memory[CreepMemoryKeys.remote], + }, + ) - return true + return false } - relayCoord?(coord: Coord) { - if (global.settings.roomVisuals) { - this.room.visual.circle(coord.x, coord.y, { fill: customColors.lightBlue }) - } + this.message += commune.name - const creepAtPosName = this.room.creepPositions[packCoord(coord)] - if (!creepAtPosName) return false + const anchor = commune.roomManager.anchor + if (!anchor) throw Error('No anchor for hauler ' + this.room.name) - const creepAtPos = Game.creeps[creepAtPosName] + this.createMoveRequestByPath( + { + origin: this.pos, + goals: [ + { + pos: anchor, + range: 3, + }, + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + }, + { + packedPath: + Memory.rooms[this.memory[CreepMemoryKeys.remote]][ + commune.communeManager.remoteResourcePathType + ][this.memory[CreepMemoryKeys.sourceIndex]], + loose: true, + }, + ) + + return true + } + + relayCoord?(coord: Coord) { + if (global.settings.roomVisuals) { + this.room.visual.circle(coord.x, coord.y, { fill: customColors.lightBlue }) + } + + const creepAtPosName = this.room.creepPositions[packCoord(coord)] + if (!creepAtPosName) return false - if (creepAtPos.role !== 'hauler') return false - if (creepAtPos.movedResource) return false + const creepAtPos = Game.creeps[creepAtPosName] - const creepMemory = Memory.creeps[this.name] - // ensure we aren't relaying with the same creep as last tick - if (creepMemory[CreepMemoryKeys.previousRelayer] && creepMemory[CreepMemoryKeys.previousRelayer][0] === creepAtPos.name) return false + if (creepAtPos.role !== 'hauler') return false + if (creepAtPos.movedResource) return false - // ensure the creep receiving creep is empty - /* if (creepAtPos.store.getUsedCapacity() > 0) return false */ - if (creepAtPos.store.getUsedCapacity() > 0) return false + const creepMemory = Memory.creeps[this.name] + // ensure we aren't relaying with the same creep as last tick + if ( + creepMemory[CreepMemoryKeys.previousRelayer] && + creepMemory[CreepMemoryKeys.previousRelayer][0] === creepAtPos.name + ) + return false - // Ensure that they have the same opinions on roads - if (creepMemory[CreepMemoryKeys.preferRoads] !== creepMemory[CreepMemoryKeys.preferRoads]) return false + // ensure the creep receiving creep is empty + /* if (creepAtPos.store.getUsedCapacity() > 0) return false */ + if (creepAtPos.store.getUsedCapacity() > 0) return false - /* const logisticsRequest = Memory.creeps[this.name][CreepMemoryKeys.roomLogisticsRequests][0] + // Ensure that they have the same opinions on roads + if (creepMemory[CreepMemoryKeys.preferRoads] !== creepMemory[CreepMemoryKeys.preferRoads]) + return false + + /* const logisticsRequest = Memory.creeps[this.name][CreepMemoryKeys.roomLogisticsRequests][0] if (logisticsRequest) { const target = findObjectWithID(logisticsRequest[CreepRoomLogisticsRequestKeys.target]) // Don't relay if they are close to our logistics target if (getRange(target.pos, creepAtPos.pos) <= 1) return false } */ - if (creepAtPos.store.getFreeCapacity() !== this.store.getUsedCapacity(RESOURCE_ENERGY)) return false + if (creepAtPos.store.getFreeCapacity() !== this.store.getUsedCapacity(RESOURCE_ENERGY)) + return false - this.transfer(creepAtPos, RESOURCE_ENERGY) + this.transfer(creepAtPos, RESOURCE_ENERGY) - this.movedResource = true - creepAtPos.movedResource = true - /* + this.movedResource = true + creepAtPos.movedResource = true + /* const nextEnergy = Math.min(this.nextStore.energy, creepAtPos.freeNextStore) this.nextStore.energy -= nextEnergy creepAtPos.nextStore.energy += nextEnergy */ - /* + /* log('thisEnergy', this.store.energy) log('creepAtPos Energy', creepAtPos.freeNextStore) log('nextEnergy', Math.min(this.store.energy, creepAtPos.freeNextStore)) */ - const transferAmount = Math.min(this.store.getUsedCapacity(RESOURCE_ENERGY), creepAtPos.store.getFreeCapacity()) - this.reserveStore.energy -= transferAmount - this.nextStore.energy -= transferAmount - creepAtPos.reserveStore.energy += transferAmount - creepAtPos.nextStore.energy += transferAmount - /* + const transferAmount = Math.min( + this.store.getUsedCapacity(RESOURCE_ENERGY), + creepAtPos.store.getFreeCapacity(), + ) + this.reserveStore.energy -= transferAmount + this.nextStore.energy -= transferAmount + creepAtPos.reserveStore.energy += transferAmount + creepAtPos.nextStore.energy += transferAmount + /* log('this needs res', this.needsResources()) log('creepAtPos need res', creepAtPos.needsResources()) */ - // Stop previously attempted moveRequests as they do not account for a relay + // Stop previously attempted moveRequests as they do not account for a relay - delete this.moveRequest - delete creepAtPos.moveRequest + delete this.moveRequest + delete creepAtPos.moveRequest - delete this.moved - delete creepAtPos.moved + delete this.moved + delete creepAtPos.moved - const creepAtPosMemory = Memory.creeps[creepAtPos.name] + const creepAtPosMemory = Memory.creeps[creepAtPos.name] - // Trade paths so they might reuse them + // Trade paths so they might reuse them - const path = creepMemory[CreepMemoryKeys.path] - creepMemory[CreepMemoryKeys.path] = creepAtPosMemory[CreepMemoryKeys.path] - creepAtPosMemory[CreepMemoryKeys.path] = path + const path = creepMemory[CreepMemoryKeys.path] + creepMemory[CreepMemoryKeys.path] = creepAtPosMemory[CreepMemoryKeys.path] + creepAtPosMemory[CreepMemoryKeys.path] = path - // record relaying information to avoid swapping + // record relaying information to avoid swapping - creepMemory[CreepMemoryKeys.previousRelayer] = [creepAtPos.name, Game.time] - creepAtPosMemory[CreepMemoryKeys.previousRelayer] = [this.name, Game.time] + creepMemory[CreepMemoryKeys.previousRelayer] = [creepAtPos.name, Game.time] + creepAtPosMemory[CreepMemoryKeys.previousRelayer] = [this.name, Game.time] - // Trade room logistics requests + // Trade room logistics requests - const creepAtPosRequests = [...(creepAtPosMemory[CreepMemoryKeys.roomLogisticsRequests])] - creepAtPosMemory[CreepMemoryKeys.roomLogisticsRequests] = [...creepMemory[CreepMemoryKeys.roomLogisticsRequests]] - creepMemory[CreepMemoryKeys.roomLogisticsRequests] = creepAtPosRequests + const creepAtPosRequests = [...creepAtPosMemory[CreepMemoryKeys.roomLogisticsRequests]] + creepAtPosMemory[CreepMemoryKeys.roomLogisticsRequests] = [ + ...creepMemory[CreepMemoryKeys.roomLogisticsRequests], + ] + creepMemory[CreepMemoryKeys.roomLogisticsRequests] = creepAtPosRequests - // Trade remotes and sourceIndexes - // Delete from creepAtPos because it is returning home, not responding to a remote + // Trade remotes and sourceIndexes + // Delete from creepAtPos because it is returning home, not responding to a remote - const remote = creepMemory[CreepMemoryKeys.remote] - creepMemory[CreepMemoryKeys.remote] = creepAtPosMemory[CreepMemoryKeys.remote] - creepAtPosMemory[CreepMemoryKeys.remote] = remote + const remote = creepMemory[CreepMemoryKeys.remote] + creepMemory[CreepMemoryKeys.remote] = creepAtPosMemory[CreepMemoryKeys.remote] + creepAtPosMemory[CreepMemoryKeys.remote] = remote - const sourceIndex = creepMemory[CreepMemoryKeys.sourceIndex] - creepMemory[CreepMemoryKeys.sourceIndex] = creepAtPosMemory[CreepMemoryKeys.sourceIndex] - creepAtPosMemory[CreepMemoryKeys.sourceIndex] = sourceIndex + const sourceIndex = creepMemory[CreepMemoryKeys.sourceIndex] + creepMemory[CreepMemoryKeys.sourceIndex] = creepAtPosMemory[CreepMemoryKeys.sourceIndex] + creepAtPosMemory[CreepMemoryKeys.sourceIndex] = sourceIndex - const taskRoom = creepMemory[CreepMemoryKeys.taskRoom] - creepMemory[CreepMemoryKeys.taskRoom] = creepAtPosMemory[CreepMemoryKeys.taskRoom] - creepAtPosMemory[CreepMemoryKeys.taskRoom] = taskRoom + const taskRoom = creepMemory[CreepMemoryKeys.taskRoom] + creepMemory[CreepMemoryKeys.taskRoom] = creepAtPosMemory[CreepMemoryKeys.taskRoom] + creepAtPosMemory[CreepMemoryKeys.taskRoom] = taskRoom - // + // - if (creepMemory[CreepMemoryKeys.taskRoom]) { + if (creepMemory[CreepMemoryKeys.taskRoom]) { + this.runCommuneLogistics() + } else this.getResources() - this.runCommuneLogistics() - } - else this.getResources() - - const hauler = creepAtPos as Hauler - if (creepAtPosMemory[CreepMemoryKeys.taskRoom]) hauler.runCommuneLogistics() - else if (creepAtPosMemory[CreepMemoryKeys.remote]) hauler.deliverResources() - - if (Game.flags[FlagNames.debugRelay]) { - - if (this.moveRequest) this.room.targetVisual(this.pos, unpackCoord(this.moveRequest), true) - if (creepAtPos.moveRequest) { - creepAtPos.room.targetVisual(creepAtPos.pos, unpackCoord(creepAtPos.moveRequest), true) - } - } + const hauler = creepAtPos as Hauler + if (creepAtPosMemory[CreepMemoryKeys.taskRoom]) hauler.runCommuneLogistics() + else if (creepAtPosMemory[CreepMemoryKeys.remote]) hauler.deliverResources() - return true + if (Game.flags[FlagNames.debugRelay]) { + if (this.moveRequest) this.room.targetVisual(this.pos, unpackCoord(this.moveRequest), true) + if (creepAtPos.moveRequest) { + creepAtPos.room.targetVisual(creepAtPos.pos, unpackCoord(creepAtPos.moveRequest), true) + } } - relayCardinal?(moveCoord: Coord) { - let offsets = relayOffsets.horizontal - if (this.pos.y === moveCoord.y) offsets = relayOffsets.vertical + return true + } - for (const offset of offsets) { - const coord = { - x: moveCoord.x + offset.x, - y: moveCoord.y + offset.y, - } + relayCardinal?(moveCoord: Coord) { + let offsets = relayOffsets.horizontal + if (this.pos.y === moveCoord.y) offsets = relayOffsets.vertical - if (this.relayCoord(coord)) return Result.action - } + for (const offset of offsets) { + const coord = { + x: moveCoord.x + offset.x, + y: moveCoord.y + offset.y, + } - return Result.noAction + if (this.relayCoord(coord)) return Result.action } - relayDiagonal?(moveCoord: Coord) { - let offsets + return Result.noAction + } - if (this.pos.y > moveCoord.y) { - offsets = relayOffsets.topLeft - if (this.pos.x < moveCoord.x) offsets = relayOffsets.topRight - } else { - offsets = relayOffsets.bottomLeft - if (this.pos.x < moveCoord.x) offsets = relayOffsets.bottomRight - } + relayDiagonal?(moveCoord: Coord) { + let offsets - for (const offset of offsets) { - const coord = { - x: moveCoord.x + offset.x, - y: moveCoord.y + offset.y, - } - /* + if (this.pos.y > moveCoord.y) { + offsets = relayOffsets.topLeft + if (this.pos.x < moveCoord.x) offsets = relayOffsets.topRight + } else { + offsets = relayOffsets.bottomLeft + if (this.pos.x < moveCoord.x) offsets = relayOffsets.bottomRight + } + + for (const offset of offsets) { + const coord = { + x: moveCoord.x + offset.x, + y: moveCoord.y + offset.y, + } + /* // If the x and y are dissimilar if (coord.x !== moveCoord.x && coord.y !== moveCoord.y) continue */ - if (this.relayCoord(coord)) return Result.action - } - - return Result.noAction + if (this.relayCoord(coord)) return Result.action } - relay?() { - - // If there is no easy way to know what coord the creep is trying to go to next - - const creepMemory = Memory.creeps[this.name] - if ( - !this.moveRequest && - (!creepMemory[CreepMemoryKeys.path] || - creepMemory[CreepMemoryKeys.path].length / packedPosLength < 2) - ) - return Result.noAction - if (this.movedResource) return Result.noAction - - const creepEnergy = this.store.getUsedCapacity(RESOURCE_ENERGY) - // ensure we have energy - if (creepEnergy <= 0) return Result.noAction - // ensure energy is our only resource - if (creepEnergy !== this.store.getUsedCapacity()) return Result.noAction - - // Don't relay too close to the source position unless we are fatigued - - if ( - creepMemory[CreepMemoryKeys.taskRoom] !== this.room.name && - (!this.fatigue && - creepMemory[CreepMemoryKeys.remote] === this.room.name && - getRange( - this.room.roomManager.remoteSourceHarvestPositions[ - creepMemory[CreepMemoryKeys.sourceIndex] - ][0], - this.pos, - ) <= 1) - ) - return Result.noAction - - const moveCoord = this.moveRequest - ? unpackCoord(this.moveRequest) - : unpackPosAt(creepMemory[CreepMemoryKeys.path], 1) - - if (this.pos.x === moveCoord.x || this.pos.y === moveCoord.y) { - return this.relayCardinal(moveCoord) - } - - return this.relayDiagonal(moveCoord) + return Result.noAction + } + + relay?() { + // If there is no easy way to know what coord the creep is trying to go to next + + const creepMemory = Memory.creeps[this.name] + if ( + !this.moveRequest && + (!creepMemory[CreepMemoryKeys.path] || + creepMemory[CreepMemoryKeys.path].length / packedPosLength < 2) + ) + return Result.noAction + if (this.movedResource) return Result.noAction + + const creepEnergy = this.store.getUsedCapacity(RESOURCE_ENERGY) + // ensure we have energy + if (creepEnergy <= 0) return Result.noAction + // ensure energy is our only resource + if (creepEnergy !== this.store.getUsedCapacity()) return Result.noAction + + // Don't relay too close to the source position unless we are fatigued + + if ( + creepMemory[CreepMemoryKeys.taskRoom] !== this.room.name && + !this.fatigue && + creepMemory[CreepMemoryKeys.remote] === this.room.name && + getRange( + this.room.roomManager.remoteSourceHarvestPositions[ + creepMemory[CreepMemoryKeys.sourceIndex] + ][0], + this.pos, + ) <= 1 + ) + return Result.noAction + + const moveCoord = this.moveRequest + ? unpackCoord(this.moveRequest) + : unpackPosAt(creepMemory[CreepMemoryKeys.path], 1) + + if (this.pos.x === moveCoord.x || this.pos.y === moveCoord.y) { + return this.relayCardinal(moveCoord) } - travelToCommune?() { - if (this.room.name === this.commune.name && !this.isOnExit) { - return Result.success - } - - const anchor = this.commune.roomManager.anchor - if (!anchor) throw Error('no anchor for hauler') - - this.createMoveRequest({ - origin: this.pos, - goals: [ - { - pos: anchor, - range: 3, - }, - ], - avoidEnemyRanges: true, - typeWeights: { - [RoomTypes.enemy]: Infinity, - [RoomTypes.ally]: Infinity, - [RoomTypes.sourceKeeper]: Infinity, - [RoomTypes.enemyRemote]: Infinity, - [RoomTypes.allyRemote]: Infinity, - }, - }) + return this.relayDiagonal(moveCoord) + } - return Result.action + travelToCommune?() { + if (this.room.name === this.commune.name && !this.isOnExit) { + return Result.success } - /** - * Run commune logistics, but only for creeps intended for commune logistics - */ - runRestrictedCommuneLogistics?() { - const creepMemory = Memory.creeps[this.name] - // let it respond to its remote - if (Memory.creeps[this.name][CreepMemoryKeys.remote]) return false - // We aren't in the commune - if (this.room.name !== this.commune.name) return false - - if (this.commune.communeManager.hasSufficientRoads) { - // If we have a body not optimized for roads, try to respond to a remote instead - if (!creepMemory[CreepMemoryKeys.preferRoads]) return false - } - - // If there is no need for more commune haulers - if ( - this.commune.communeManager.communeHaulerNeed < - this.commune.communeManager.communeHaulerCarryParts - ) { - return false - } + const anchor = this.commune.roomManager.anchor + if (!anchor) throw Error('no anchor for hauler') + + this.createMoveRequest({ + origin: this.pos, + goals: [ + { + pos: anchor, + range: 3, + }, + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + }) + + return Result.action + } + + /** + * Run commune logistics, but only for creeps intended for commune logistics + */ + runRestrictedCommuneLogistics?() { + const creepMemory = Memory.creeps[this.name] + // let it respond to its remote + if (Memory.creeps[this.name][CreepMemoryKeys.remote]) return false + // We aren't in the commune + if (this.room.name !== this.commune.name) return false + + if (this.commune.communeManager.hasSufficientRoads) { + // If we have a body not optimized for roads, try to respond to a remote instead + if (!creepMemory[CreepMemoryKeys.preferRoads]) return false + } - // success, we are working for the commune now + // If there is no need for more commune haulers + if ( + this.commune.communeManager.communeHaulerNeed < + this.commune.communeManager.communeHaulerCarryParts + ) { + return false + } - if (!creepMemory[CreepMemoryKeys.taskRoom]) { - creepMemory[CreepMemoryKeys.taskRoom] = this.room.name - this.commune.communeManager.communeHaulerCarryParts += myCreepUtils.parts(this).carry - } + // success, we are working for the commune now - this.runCommuneLogistics() - return true + if (!creepMemory[CreepMemoryKeys.taskRoom]) { + creepMemory[CreepMemoryKeys.taskRoom] = this.room.name + this.commune.communeManager.communeHaulerCarryParts += myCreepUtils.parts(this).carry } - runCommuneLogistics?() { - creepProcs.passiveRenew(this) + this.runCommuneLogistics() + return true + } - if (creepProcs.runRoomLogisticsRequestsAdvanced(this) === Result.action) { - this.relay() - return Result.action - } + runCommuneLogistics?() { + creepProcs.passiveRenew(this) - return Result.success + if (creepProcs.runRoomLogisticsRequestsAdvanced(this) === Result.action) { + this.relay() + return Result.action } - run?() { - if (this.runRestrictedCommuneLogistics() === true) { - return - } + return Result.success + } - if (!this.findRemote()) { - if (this.travelToCommune() !== Result.success) return - this.runCommuneLogistics() - return - } + run?() { + if (this.runRestrictedCommuneLogistics() === true) { + return + } - const creepMemory = Memory.creeps[this.name] + if (!this.findRemote()) { + if (this.travelToCommune() !== Result.success) return + this.runCommuneLogistics() + return + } - if ( - creepMemory[CreepMemoryKeys.sleepFor] === SleepFor.any && - creepMemory[CreepMemoryKeys.sleepTime] > Game.time - ) { - this.message = '😴' - return - } + const creepMemory = Memory.creeps[this.name] - if (this.needsResources() /* && this.ticksToLive > returnTripTime */) { - this.getResources() - return - } + if ( + creepMemory[CreepMemoryKeys.sleepFor] === SleepFor.any && + creepMemory[CreepMemoryKeys.sleepTime] > Game.time + ) { + this.message = '😴' + return + } - // Otherwise if the creep doesn't need resources + if (this.needsResources() /* && this.ticksToLive > returnTripTime */) { + this.getResources() + return + } - if (this.deliverResources()) { + // Otherwise if the creep doesn't need resources - this.relay() - } + if (this.deliverResources()) { + this.relay() } + } - static roleManager(room: Room, creepsOfRole: string[]) { - for (const creepName of creepsOfRole) { - const creep: Hauler = Game.creeps[creepName] - creep.run() - } + static roleManager(room: Room, creepsOfRole: string[]) { + for (const creepName of creepsOfRole) { + const creep: Hauler = Game.creeps[creepName] + creep.run() } + } } diff --git a/src/room/creeps/roleManagers/commune/maintainer.ts b/src/room/creeps/roleManagers/commune/maintainer.ts index 7ff9e644a..7ab5a9a1a 100644 --- a/src/room/creeps/roleManagers/commune/maintainer.ts +++ b/src/room/creeps/roleManagers/commune/maintainer.ts @@ -4,7 +4,7 @@ import { Result, roomDimensions, } from 'international/constants' -import { statsManager } from 'international/statsManager' +import { StatsManager } from 'international/stats' import { findCoordsInsideRect, findObjectWithID, getRange } from 'utils/utils' import { packCoord } from 'other/codec' import { creepUtils } from 'room/creeps/creepUtils' diff --git a/src/room/creeps/roleManagers/commune/mineralHarvester.ts b/src/room/creeps/roleManagers/commune/mineralHarvester.ts index 5c1997a7e..ec182bff2 100644 --- a/src/room/creeps/roleManagers/commune/mineralHarvester.ts +++ b/src/room/creeps/roleManagers/commune/mineralHarvester.ts @@ -4,100 +4,101 @@ import { Result, RoomMemoryKeys, } from 'international/constants' -import { statsManager } from 'international/statsManager' +import { StatsManager } from 'international/stats' import { getRangeXY, getRange, areCoordsEqual } from 'utils/utils' import { reversePosList, unpackPos } from 'other/codec' import { myCreepUtils } from 'room/creeps/myCreepUtils' export class MineralHarvester extends Creep { - update() { - const packedCoord = Memory.creeps[this.name][CreepMemoryKeys.packedCoord] - if (packedCoord) { - this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.important) - } + update() { + const packedCoord = Memory.creeps[this.name][CreepMemoryKeys.packedCoord] + if (packedCoord) { + this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.important) } + } - initRun() { - this.room.communeManager.mineralHarvestStrength += myCreepUtils.parts(this).work * HARVEST_MINERAL_POWER - } + initRun() { + this.room.communeManager.mineralHarvestStrength += + myCreepUtils.parts(this).work * HARVEST_MINERAL_POWER + } - advancedHarvestMineral?(mineral: Mineral) { - this.message = '🚬' + advancedHarvestMineral?(mineral: Mineral) { + this.message = '🚬' - // Unpack the creep's packedHarvestPos + // Unpack the creep's packedHarvestPos - const harvestPos = this.findMineralHarvestPos() - if (!harvestPos) return Result.fail + const harvestPos = this.findMineralHarvestPos() + if (!harvestPos) return Result.fail - this.actionCoord = this.room.roomManager.mineral.pos + this.actionCoord = this.room.roomManager.mineral.pos - // If the creep is not standing on the harvestPos + // If the creep is not standing on the harvestPos - if (getRange(this.pos, harvestPos) > 0) { - this.message = '⏩M' + if (getRange(this.pos, harvestPos) > 0) { + this.message = '⏩M' - // Make a move request to it + // Make a move request to it - this.createMoveRequestByPath( - { - origin: this.pos, - goals: [{ pos: harvestPos, range: 0 }], - avoidEnemyRanges: true, - }, - { - packedPath: reversePosList(this.room.memory[RoomMemoryKeys.mineralPath]), - loose: true, - }, - ) + this.createMoveRequestByPath( + { + origin: this.pos, + goals: [{ pos: harvestPos, range: 0 }], + avoidEnemyRanges: true, + }, + { + packedPath: reversePosList(this.room.memory[RoomMemoryKeys.mineralPath]), + loose: true, + }, + ) - return Result.action - } + return Result.action + } - // Harvest the mineral, informing the result if it didn't succeed + // Harvest the mineral, informing the result if it didn't succeed - if (this.harvest(mineral) !== OK) return Result.fail + if (this.harvest(mineral) !== OK) return Result.fail - // Find amount of minerals harvested and record it in data + // Find amount of minerals harvested and record it in data - const mineralsHarvested = Math.min( - myCreepUtils.parts(this).work * HARVEST_MINERAL_POWER, - mineral.mineralAmount, - ) - this.reserveStore[mineral.mineralType] += mineralsHarvested - statsManager.updateStat(this.room.name, 'mh', mineralsHarvested) + const mineralsHarvested = Math.min( + myCreepUtils.parts(this).work * HARVEST_MINERAL_POWER, + mineral.mineralAmount, + ) + this.reserveStore[mineral.mineralType] += mineralsHarvested + StatsManager.updateStat(this.room.name, 'mh', mineralsHarvested) - this.message = `⛏️${mineralsHarvested}` - return Result.success - } + this.message = `⛏️${mineralsHarvested}` + return Result.success + } - constructor(creepID: Id) { - super(creepID) - } + constructor(creepID: Id) { + super(creepID) + } - static roleManager(room: Room, creepsOfRole: string[]) { - for (const creepName of creepsOfRole) { - const creep: MineralHarvester = Game.creeps[creepName] + static roleManager(room: Room, creepsOfRole: string[]) { + for (const creepName of creepsOfRole) { + const creep: MineralHarvester = Game.creeps[creepName] - // Get the mineral + // Get the mineral - const mineral = room.roomManager.mineral + const mineral = room.roomManager.mineral - if (mineral.mineralAmount === 0) { - creep.advancedRecycle() - continue - } + if (mineral.mineralAmount === 0) { + creep.advancedRecycle() + continue + } - if (creep.advancedHarvestMineral(mineral) !== Result.success) continue + if (creep.advancedHarvestMineral(mineral) !== Result.success) continue - const mineralContainer = room.roomManager.mineralContainer - if ( - mineralContainer && - // No need to transfer if we're on top of the container - !areCoordsEqual(mineralContainer.pos, creep.pos) && - creep.reserveStore[mineral.mineralType] >= creep.store.getCapacity() - ) { - creep.transfer(mineralContainer, mineral.mineralType) - } - } + const mineralContainer = room.roomManager.mineralContainer + if ( + mineralContainer && + // No need to transfer if we're on top of the container + !areCoordsEqual(mineralContainer.pos, creep.pos) && + creep.reserveStore[mineral.mineralType] >= creep.store.getCapacity() + ) { + creep.transfer(mineralContainer, mineral.mineralType) + } } + } } diff --git a/src/room/creeps/roleManagers/commune/sourceHarvester.ts b/src/room/creeps/roleManagers/commune/sourceHarvester.ts index ca79f206a..3e0dca790 100644 --- a/src/room/creeps/roleManagers/commune/sourceHarvester.ts +++ b/src/room/creeps/roleManagers/commune/sourceHarvester.ts @@ -8,13 +8,13 @@ import { RoomStatsKeys, WorkTypes, } from 'international/constants' -import { statsManager } from 'international/statsManager' +import { StatsManager } from 'international/stats' import { - findCoordsInsideRect, - findObjectWithID, - getRangeXY, - getRange, - scalePriority, + findCoordsInsideRect, + findObjectWithID, + getRangeXY, + getRange, + scalePriority, } from 'utils/utils' import { packCoord, packPos, reversePosList, unpackPos } from 'other/codec' import { Hauler } from './hauler' @@ -24,296 +24,295 @@ import { structureUtils } from 'room/structureUtils' import { creepProcs } from 'room/creeps/creepProcs' export class SourceHarvester extends Creep { - constructor(creepID: Id) { - super(creepID) + constructor(creepID: Id) { + super(creepID) + } + + public isDying() { + // Stop if creep is spawning + + if (this.spawning) return false + + // If the creep's remaining ticks are more than the estimated spawn time plus travel time, inform false + + if ( + this.ticksToLive > + this.body.length * CREEP_SPAWN_TIME + + this.room.memory[RoomMemoryKeys.communeSourcePaths][ + this.memory[CreepMemoryKeys.sourceIndex] + ].length / + packedPosLength + ) + return false + + return true + } + + update() { + const packedCoord = Memory.creeps[this.name][CreepMemoryKeys.packedCoord] + if (packedCoord) { + if (this.isDying()) { + this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.dying) + } else { + this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.important) + } } + } - public isDying() { - // Stop if creep is spawning + initRun() { + const { room } = this - if (this.spawning) return false + if (this.memory[CreepMemoryKeys.sourceIndex] !== undefined && !this.isDying()) + room.creepsOfSource[this.memory[CreepMemoryKeys.sourceIndex]].push(this.name) - // If the creep's remaining ticks are more than the estimated spawn time plus travel time, inform false + const source = this.room.roomManager.communeSources[this.memory[CreepMemoryKeys.sourceIndex]] - if ( - this.ticksToLive > - this.body.length * CREEP_SPAWN_TIME + - this.room.memory[RoomMemoryKeys.communeSourcePaths][ - this.memory[CreepMemoryKeys.sourceIndex] - ].length / - packedPosLength - ) - return false - - return true - } - - update() { - const packedCoord = Memory.creeps[this.name][CreepMemoryKeys.packedCoord] - if (packedCoord) { - if (this.isDying()) { - this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.dying) - } else { - this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.important) - } - } + if (getRange(this.pos, source.pos) <= 1) { + creepUtils.harvestSource(this, source) } + } - initRun() { - const { room } = this + buildContainer?() {} - if (this.memory[CreepMemoryKeys.sourceIndex] !== undefined && !this.isDying()) - room.creepsOfSource[this.memory[CreepMemoryKeys.sourceIndex]].push(this.name) + travelToSource?(): number { + this.message = '🚬' - const source = - this.room.roomManager.communeSources[this.memory[CreepMemoryKeys.sourceIndex]] - - if (getRange(this.pos, source.pos) <= 1) { - creepUtils.harvestSource(this, source) - } - } + // Unpack the harvestPos - buildContainer?() {} + const harvestPos = this.findCommuneSourceHarvestPos(this.memory[CreepMemoryKeys.sourceIndex]) + if (!harvestPos) return Result.fail - travelToSource?(): number { - this.message = '🚬' + this.actionCoord = + this.room.roomManager.communeSources[this.memory[CreepMemoryKeys.sourceIndex]].pos - // Unpack the harvestPos + // If the creep is at the creep's packedHarvestPos, inform false - const harvestPos = this.findCommuneSourceHarvestPos( - this.memory[CreepMemoryKeys.sourceIndex], - ) - if (!harvestPos) return Result.fail + if (getRange(this.pos, harvestPos) === 0) return Result.success - this.actionCoord = - this.room.roomManager.communeSources[this.memory[CreepMemoryKeys.sourceIndex]].pos + // If the creep's movement type is pull - // If the creep is at the creep's packedHarvestPos, inform false + if (this.memory[CreepMemoryKeys.getPulled]) return Result.noAction - if (getRange(this.pos, harvestPos) === 0) return Result.success + // Otherwise say the intention and create a moveRequest to the creep's harvestPos, and inform the attempt - // If the creep's movement type is pull + this.message = `⏩${this.memory[CreepMemoryKeys.sourceIndex]}` - if (this.memory[CreepMemoryKeys.getPulled]) return Result.noAction - - // Otherwise say the intention and create a moveRequest to the creep's harvestPos, and inform the attempt - - this.message = `⏩${this.memory[CreepMemoryKeys.sourceIndex]}` + if ( + !this.room.memory[RoomMemoryKeys.communeSourcePaths][this.memory[CreepMemoryKeys.sourceIndex]] + ) { + throw Error('no path for sourceHarvester ' + this.room.name) + } - if ( - !this.room.memory[RoomMemoryKeys.communeSourcePaths][ - this.memory[CreepMemoryKeys.sourceIndex] - ] - ) { - throw Error('no path for sourceHarvester ' + this.room.name) - } + this.createMoveRequestByPath( + { + origin: this.pos, + goals: [ + { + pos: harvestPos, + range: 0, + }, + ], + avoidEnemyRanges: true, + }, + { + packedPath: reversePosList( + this.room.memory[RoomMemoryKeys.communeSourcePaths][ + this.memory[CreepMemoryKeys.sourceIndex] + ], + ), + }, + ) + + return Result.action + } + + transferToSourceStructures?(): boolean { + // If the creep is not nearly full, stop + + if (this.store.getCapacity() - this.nextStore.energy > 0) return false + + if (this.transferToSourceExtensions()) return true + if (this.transferToSourceLink()) return true + return false + } + + transferToSourceExtensions?(): boolean { + const { room } = this + + // If all spawningStructures are filled, inform false + + if (room.energyAvailable === room.energyCapacityAvailable) return false + + const structure = room.findStructureInRange(this.pos, 1, structure => { + return ( + structure.structureType === STRUCTURE_EXTENSION && + (structure as AnyStoreStructure).store.getCapacity(RESOURCE_ENERGY) - + structure.nextStore.energy > + 0 + ) + }) + if (!structure) return false + + const result = this.transfer(structure, RESOURCE_ENERGY) + + if (result !== OK) return false + return true + } + + transferToSourceLink?(): boolean { + const { room } = this + + // Find the sourceLink for the creep's source, Inform false if the link doesn't exist + + const sourceLink = room.communeManager.sourceLinks[this.memory[CreepMemoryKeys.sourceIndex]] + if (!sourceLink) return false + + // Try to transfer to the sourceLink and inform true + + const result = this.transfer(sourceLink, RESOURCE_ENERGY) + + if (result !== OK) return false + return true + } + + maintainContainer?(sourceContainer: StructureContainer): boolean { + if (this.worked) return false + const source = this.room.roomManager.communeSources[this.memory[CreepMemoryKeys.sourceIndex]] + if ( + source.energy * ENERGY_REGEN_TIME > + source.ticksToRegeneration * source.energyCapacity * 0.9 + ) + return false + + if (!sourceContainer) { + if (this.nextStore.energy < myCreepUtils.parts(this).work) { + if (this.movedResource) return false + + const result = creepProcs.runRoomLogisticsRequestAdvanced(this, { + resourceTypes: new Set([RESOURCE_ENERGY]), + types: new Set([ + RoomLogisticsRequestTypes.withdraw, + RoomLogisticsRequestTypes.pickup, + RoomLogisticsRequestTypes.offer, + ]), + conditions: request => { + getRange(findObjectWithID(request.targetID).pos, this.pos) <= 1 + }, + }) + if (result !== Result.success) return false + } - this.createMoveRequestByPath( - { - origin: this.pos, - goals: [ - { - pos: harvestPos, - range: 0, - }, - ], - avoidEnemyRanges: true, - }, - { - packedPath: reversePosList( - this.room.memory[RoomMemoryKeys.communeSourcePaths][ - this.memory[CreepMemoryKeys.sourceIndex] - ], - ), - }, - ) + const cSite = this.room.findCSiteAtCoord( + this.pos, + cSite => cSite.structureType === STRUCTURE_CONTAINER, + ) + if (!cSite) return false - return Result.action + this.build(cSite) + return true } - transferToSourceStructures?(): boolean { - // If the creep is not nearly full, stop + const workPartCount = myCreepUtils.parts(this).work - if (this.store.getCapacity() - this.nextStore.energy > 0) return false + // If the sourceContainer doesn't need repairing, inform false + if (sourceContainer.hitsMax - sourceContainer.hits < workPartCount * REPAIR_POWER) return false - if (this.transferToSourceExtensions()) return true - if (this.transferToSourceLink()) return true - return false - } + // If the creep doesn't have enough energy and it hasn't yet moved resources, withdraw from the sourceContainer - transferToSourceExtensions?(): boolean { - const { room } = this + if (this.nextStore.energy < workPartCount) { + if (this.movedResource) return false - // If all spawningStructures are filled, inform false + const result = creepProcs.runRoomLogisticsRequestAdvanced(this, { + resourceTypes: new Set([RESOURCE_ENERGY]), + types: new Set([ + RoomLogisticsRequestTypes.withdraw, + RoomLogisticsRequestTypes.pickup, + RoomLogisticsRequestTypes.offer, + ]), + conditions: request => { + getRange(findObjectWithID(request.targetID).pos, this.pos) <= 1 + }, + }) + if (result !== Result.success) return false + } - if (room.energyAvailable === room.energyCapacityAvailable) return false + // Try to repair the target - const structure = room.findStructureInRange(this.pos, 1, structure => { - return ( - structure.structureType === STRUCTURE_EXTENSION && - (structure as AnyStoreStructure).store.getCapacity(RESOURCE_ENERGY) - - structure.nextStore.energy > - 0 - ) - }) - if (!structure) return false + const repairResult = this.repair(sourceContainer) - const result = this.transfer(structure, RESOURCE_ENERGY) + // If the repair worked - if (result !== OK) return false - return true - } + if (repairResult === OK) { + // Record that the creep has worked - transferToSourceLink?(): boolean { - const { room } = this + this.worked = WorkTypes.repair - // Find the sourceLink for the creep's source, Inform false if the link doesn't exist + // Find the repair amount by finding the smaller of the creep's work and the progress left for the cSite divided by repair power - const sourceLink = room.communeManager.sourceLinks[this.memory[CreepMemoryKeys.sourceIndex]] - if (!sourceLink) return false + const energySpentOnRepairs = Math.min( + workPartCount, + (sourceContainer.hitsMax - sourceContainer.hits) / REPAIR_POWER, + this.store.energy, + ) - // Try to transfer to the sourceLink and inform true + // Add repair points to total repairPoints counter and say the success + StatsManager.updateStat( + this.room.name, + RoomStatsKeys.EnergyOutputRepairOther, + energySpentOnRepairs, + ) + this.message = `🔧${energySpentOnRepairs * REPAIR_POWER}` - const result = this.transfer(sourceLink, RESOURCE_ENERGY) + // Inform success - if (result !== OK) return false - return true + return true } - maintainContainer?(sourceContainer: StructureContainer): boolean { - if (this.worked) return false - const source = this.room.roomManager.communeSources[this.memory[CreepMemoryKeys.sourceIndex]] - if ( - source.energy * ENERGY_REGEN_TIME > - source.ticksToRegeneration * source.energyCapacity * 0.9 - ) return false - - if (!sourceContainer) { - if (this.nextStore.energy < myCreepUtils.parts(this).work) { - if (this.movedResource) return false - - const result = creepProcs.runRoomLogisticsRequestAdvanced(this, { - resourceTypes: new Set([RESOURCE_ENERGY]), - types: new Set([ - RoomLogisticsRequestTypes.withdraw, - RoomLogisticsRequestTypes.pickup, - RoomLogisticsRequestTypes.offer, - ]), - conditions: request => { - getRange(findObjectWithID(request.targetID).pos, this.pos) <= 1 - }, - }) - if (result !== Result.success) return false - } - - const cSite = this.room.findCSiteAtCoord( - this.pos, - cSite => cSite.structureType === STRUCTURE_CONTAINER, - ) - if (!cSite) return false - - this.build(cSite) - return true - } - - const workPartCount = myCreepUtils.parts(this).work - - // If the sourceContainer doesn't need repairing, inform false - if (sourceContainer.hitsMax - sourceContainer.hits < workPartCount * REPAIR_POWER) - return false - - // If the creep doesn't have enough energy and it hasn't yet moved resources, withdraw from the sourceContainer - - if (this.nextStore.energy < workPartCount) { - if (this.movedResource) return false - - const result = creepProcs.runRoomLogisticsRequestAdvanced(this, { - resourceTypes: new Set([RESOURCE_ENERGY]), - types: new Set([ - RoomLogisticsRequestTypes.withdraw, - RoomLogisticsRequestTypes.pickup, - RoomLogisticsRequestTypes.offer, - ]), - conditions: request => { - getRange(findObjectWithID(request.targetID).pos, this.pos) <= 1 - }, - }) - if (result !== Result.success) return false - } - - // Try to repair the target - - const repairResult = this.repair(sourceContainer) - - // If the repair worked - - if (repairResult === OK) { - // Record that the creep has worked - - this.worked = WorkTypes.repair - - // Find the repair amount by finding the smaller of the creep's work and the progress left for the cSite divided by repair power - - const energySpentOnRepairs = Math.min( - workPartCount, - (sourceContainer.hitsMax - sourceContainer.hits) / REPAIR_POWER, - this.store.energy, - ) - - // Add repair points to total repairPoints counter and say the success - statsManager.updateStat(this.room.name, RoomStatsKeys.EnergyOutputRepairOther, energySpentOnRepairs) - this.message = `🔧${energySpentOnRepairs * REPAIR_POWER}` - - // Inform success - - return true - } - - // Inform failure - - return false - } + // Inform failure - transferToNearbyCreep?(): boolean { - const sourceContainer = - this.room.roomManager.sourceContainers[this.memory[CreepMemoryKeys.sourceIndex]] - if (sourceContainer) return false + return false + } - const sourceLink = - this.room.communeManager.sourceLinks[this.memory[CreepMemoryKeys.sourceIndex]] - if (sourceLink && structureUtils.isRCLActionable(sourceLink)) return false + transferToNearbyCreep?(): boolean { + const sourceContainer = + this.room.roomManager.sourceContainers[this.memory[CreepMemoryKeys.sourceIndex]] + if (sourceContainer) return false - // If the creep isn't full enough to justify a request + const sourceLink = + this.room.communeManager.sourceLinks[this.memory[CreepMemoryKeys.sourceIndex]] + if (sourceLink && structureUtils.isRCLActionable(sourceLink)) return false - if (this.nextStore.energy < this.store.getCapacity() * 0.5) return false + // If the creep isn't full enough to justify a request - this.room.createRoomLogisticsRequest({ - target: this, - type: RoomLogisticsRequestTypes.withdraw, - priority: 100, - }) - return true - } + if (this.nextStore.energy < this.store.getCapacity() * 0.5) return false - run?() { - if (this.travelToSource() !== Result.success) return - if (this.transferToSourceStructures()) return + this.room.createRoomLogisticsRequest({ + target: this, + type: RoomLogisticsRequestTypes.withdraw, + priority: 100, + }) + return true + } - // Try to repair the sourceContainer + run?() { + if (this.travelToSource() !== Result.success) return + if (this.transferToSourceStructures()) return - this.maintainContainer( - this.room.roomManager.sourceContainers[this.memory[CreepMemoryKeys.sourceIndex]], - ) + // Try to repair the sourceContainer - if (this.transferToNearbyCreep()) return - } + this.maintainContainer( + this.room.roomManager.sourceContainers[this.memory[CreepMemoryKeys.sourceIndex]], + ) + + if (this.transferToNearbyCreep()) return + } - static roleManager(room: Room, creepsOfRole: string[]): void | boolean { - // Loop through the names of the creeps of the role + static roleManager(room: Room, creepsOfRole: string[]): void | boolean { + // Loop through the names of the creeps of the role - for (const creepName of creepsOfRole) { - const creep: SourceHarvester = Game.creeps[creepName] - creep.run() - } + for (const creepName of creepsOfRole) { + const creep: SourceHarvester = Game.creeps[creepName] + creep.run() } + } } diff --git a/src/room/room.ts b/src/room/room.ts index 3da418501..7d59f377a 100644 --- a/src/room/room.ts +++ b/src/room/room.ts @@ -45,7 +45,7 @@ import { CreepRoleManager } from './creeps/creepRoleManager' import { EndTickCreepManager } from './creeps/endTickCreepManager' import { PowerCreepRoleManager } from './creeps/powerCreepRoleManager' import { RoomVisualsManager } from './roomVisuals' -import { statsManager } from 'international/statsManager' +import { StatsManager } from 'international/stats' import { CommunePlanner } from './construction/communePlanner' import { packCoord, @@ -193,7 +193,7 @@ export class RoomManager { const roomType = roomMemory[RoomMemoryKeys.type] if (roomTypesUsedForStats.includes(roomType)) { - statsManager.roomInitialRun(room.name, roomType) + StatsManager.roomInitialRun(room.name, roomType) } room.moveRequests = {} diff --git a/src/room/roomData.ts b/src/room/roomData.ts index 7189c3e1f..fd952a674 100644 --- a/src/room/roomData.ts +++ b/src/room/roomData.ts @@ -1,5 +1,5 @@ import { utils } from "utils/utils" -import { communeDataManager } from "./commune/communeData" +import { CommuneDataManager } from './commune/communeData' interface RoomData { sourceIDs: Id[] @@ -12,9 +12,9 @@ interface RoomData { * Handles cached data for rooms, including some overlapping data for communes and remotes */ export class RoomDataManager { - data: {[roomName: string]: Partial} = {} + static data: { [roomName: string]: Partial } = {} - initRooms() { + static initRooms() { for (const roomName in Game.rooms) { const room = Game.rooms[roomName] @@ -22,29 +22,21 @@ export class RoomDataManager { } } - private initRoom(room: Room) { + private static initRoom(room: Room) { this.data[room.name] ??= {} if (room.controller && room.controller.my) { - - communeDataManager.initCommune(room) + CommuneDataManager.initCommune(room) } } - updateRooms() { + static updateRooms() { for (const roomName in this.data) { - - this.updateRoom(roomName) } } - private updateRoom(roomName: string) { - + private static updateRoom(roomName: string) { const data = this.data[roomName] - - } } - -export const roomDataManager = new RoomDataManager() diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index d6089190d..279a48544 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -31,7 +31,7 @@ import { } from 'utils/utils' import { CollectiveManager } from 'international/collective' import { packCoord, packCoordList, packXYAsCoord, unpackPosList } from 'other/codec' -import { playerManager } from 'international/players' +import { PlayerManager } from 'international/players' import { roomNameUtils } from './roomNameUtils' import { customLog } from 'utils/logging' import { roomObjectUtils } from './roomObjectUtils' @@ -549,7 +549,7 @@ Room.prototype.scoutEnemyRoom = function () { let player = Memory.players[playerName] if (!player) { - player = playerManager.initPlayer(playerName) + player = PlayerManager.initPlayer(playerName) } // General diff --git a/src/room/roomUtils.ts b/src/room/roomUtils.ts index 41bebdb0c..a6ff284b7 100644 --- a/src/room/roomUtils.ts +++ b/src/room/roomUtils.ts @@ -1,6 +1,6 @@ import { RoomMemoryKeys, RoomTypes, roomDimensions } from 'international/constants' import { packCoord, packXYAsCoord, unpackCoord } from 'other/codec' -import { roomDataManager } from './roomData' +import { RoomDataManager } from './roomData' import { findObjectWithID, forAdjacentCoords, utils } from 'utils/utils' import { structureUtils } from './structureUtils' import { StructureCoords } from './room' @@ -12,7 +12,7 @@ export class RoomUtils { } getSources(room: Room): Source[] { - const data = roomDataManager.data[room.name] + const data = RoomDataManager.data[room.name] if (data.sourceIDs !== undefined) { return data.sourceIDs.map(ID => findObjectWithID(ID)) } @@ -28,7 +28,7 @@ export class RoomUtils { * returns a container if exists and is RCL actionable */ getFastFillerContainerLeft(room: Room) { - const data = roomDataManager.data[room.name] + const data = RoomDataManager.data[room.name] if (data.fastFillerContainerLeftId !== undefined && !room.roomManager.structureUpdate) { return data.fastFillerContainerLeftId } @@ -54,7 +54,7 @@ export class RoomUtils { * returns a container if exists and is RCL actionable */ getFastFillerContainerRight(room: Room) { - const data = roomDataManager.data[room.name] + const data = RoomDataManager.data[room.name] if (data.fastFillerContainerRightId !== undefined && !room.roomManager.structureUpdate) { return data.fastFillerContainerRightId } @@ -77,7 +77,7 @@ export class RoomUtils { } getFastFillerCoords(room: Room) { - const data = roomDataManager.data[room.name] + const data = RoomDataManager.data[room.name] if (data.fastFillerCoords !== undefined && !room.roomManager.structureUpdate) { const fastFillerCoords = data.fastFillerCoords.map(packedCoord => unpackCoord(packedCoord)) return fastFillerCoords diff --git a/src/room/roomVisuals.ts b/src/room/roomVisuals.ts index ec71860cc..1d711297d 100644 --- a/src/room/roomVisuals.ts +++ b/src/room/roomVisuals.ts @@ -9,14 +9,14 @@ import { RoomMemoryKeys, RoomTypes, } from 'international/constants' -import { statsManager } from 'international/statsManager' +import { StatsManager } from 'international/stats' import { customLog } from 'utils/logging' import { findObjectWithID, unpackNumAsCoord } from 'utils/utils' import { RoomManager } from './room' import { Rectangle, Table, Dial, Grid, Bar, Dashboard, LineChart, Label } from 'screeps-viz' import { simpleAllies } from 'international/simpleAllies/simpleAllies' import { CollectiveManager } from 'international/collective' -import { playerManager } from 'international/players' +import { PlayerManager } from 'international/players' import { unpackCoord } from 'other/codec' export class RoomVisualsManager { @@ -213,7 +213,7 @@ export class RoomVisualsManager { data[0].push( funnelOrder.slice(0, 3), - playerManager.highestThreat, + PlayerManager.highestThreat, CollectiveManager.minCredits, Game.time - Memory.lastConfig, ) diff --git a/src/room/rooms.ts b/src/room/rooms.ts index f73ed903a..1b98c9f20 100644 --- a/src/room/rooms.ts +++ b/src/room/rooms.ts @@ -15,66 +15,62 @@ import { CreepRoleManager } from './creeps/creepRoleManager' import { PowerCreepRoleManager } from './creeps/powerCreepRoleManager' import './roomVisuals' import { createPosMap, findCPUOf } from 'utils/utils' -import { statsManager } from 'international/statsManager' +import { StatsManager } from 'international/stats' import './creeps/endTickCreepManager' import { CommuneManager } from './commune/commune' import { RoomManager } from './room' import { LogTypes, customLog } from 'utils/logging' export class RoomsManager { + static updateRun() { + for (const roomName in Game.rooms) { + const room = Game.rooms[roomName] - static updateRun() { - for (const roomName in Game.rooms) { - const room = Game.rooms[roomName] + room.roomManager = RoomManager.roomManagers[room.name] - room.roomManager = RoomManager.roomManagers[room.name] + if (!room.roomManager) { + room.roomManager = new RoomManager() + RoomManager.roomManagers[room.name] = room.roomManager + } - if (!room.roomManager) { - room.roomManager = new RoomManager() - RoomManager.roomManagers[room.name] = room.roomManager - } - - room.roomManager.update(room) - } + room.roomManager.update(room) } + } - static initRun() { - for (const roomName in Game.rooms) { - const room = Game.rooms[roomName] - room.roomManager.initRun() - } + static initRun() { + for (const roomName in Game.rooms) { + const room = Game.rooms[roomName] + room.roomManager.initRun() } + } - static run() { - - for (const roomName in Game.rooms) { - - this.runRoom(roomName) - } + static run() { + for (const roomName in Game.rooms) { + this.runRoom(roomName) } + } - private static runRoom(roomName: string) { + private static runRoom(roomName: string) { + const startCPU = Game.cpu.generatePixel() - const startCPU = Game.cpu.generatePixel() + const room = Game.rooms[roomName] + room.roomManager.run() - const room = Game.rooms[roomName] - room.roomManager.run() + // Log room stats - // Log room stats + const roomMemory = Memory.rooms[room.name] + const roomType = roomMemory[RoomMemoryKeys.type] - const roomMemory = Memory.rooms[room.name] - const roomType = roomMemory[RoomMemoryKeys.type] + customLog( + `${room.name}`, + `Type: ${RoomTypes[roomType]} Creeps: ${room.myCreeps.length}`, + { + type: LogTypes.info, + position: 2, + }, + ) - customLog( - `${room.name}`, - `Type: ${RoomTypes[roomType]} Creeps: ${room.myCreeps.length}`, - { - type: LogTypes.info, - position: 2, - }, - ) - - const usedCPU = Game.cpu.getUsed() - startCPU - statsManager.updateCommuneStat(roomName, RoomStatsKeys.CpuUsed, usedCPU) - } + const usedCPU = Game.cpu.getUsed() - startCPU + StatsManager.updateCommuneStat(roomName, RoomStatsKeys.CpuUsed, usedCPU) + } } diff --git a/src/types/stats.ts b/src/types/stats.ts index 1de744d55..f4a70a752 100644 --- a/src/types/stats.ts +++ b/src/types/stats.ts @@ -1,4 +1,4 @@ -import { CommuneStats } from "international/statsManager" +import { CommuneStats } from "international/stats" export interface StatsMemory { lastReset: number From 651cd0d240c5f96419fafab0e7692febd31fc6e4 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 23 Jan 2024 13:03:10 -0800 Subject: [PATCH 094/190] organization and static util conversion --- design.md | 10 ++++++++- src/international/creepOrganizer.ts | 6 +++--- .../{ => flags}/featureFlags.spec.ts | 0 src/international/{ => flags}/featureFlags.ts | 0 src/international/flags/flagProcs.ts | 5 +++++ src/international/{ => flags}/flags.ts | 6 +++--- src/main.ts | 6 +++--- src/other/profilerRegister.ts | 4 ++-- src/room/commune/communeProcs.ts | 2 +- src/room/commune/communeUtils.ts | 7 +++---- src/room/creeps/creepData.ts | 11 ++++------ src/room/creeps/myCreepUtils.ts | 21 +++++++++---------- src/room/roomUtils.ts | 16 +++++++------- src/room/sourceProcs.ts | 4 ++-- 14 files changed, 52 insertions(+), 46 deletions(-) rename src/international/{ => flags}/featureFlags.spec.ts (100%) rename src/international/{ => flags}/featureFlags.ts (100%) create mode 100644 src/international/flags/flagProcs.ts rename src/international/{ => flags}/flags.ts (99%) diff --git a/design.md b/design.md index 9e08ccac6..983249b89 100644 --- a/design.md +++ b/design.md @@ -7,6 +7,7 @@ The bot intends to implement a primarily data-oriented style, with some aspects # Data/functional structures ## Utils +- a static class - does not contain any state - contains functions/methods @@ -17,6 +18,7 @@ Utils stands for utilities. These are functions that will generally take inputs CommuneUtils contains utility functions that provide often cached information on call that helps with processing ## Procs +- a static class - does not contain any state - contains functions/methods @@ -27,11 +29,17 @@ Procs stands for processors. These are functions that will generally run logic f CommuneProc runs logic for the commune to update data, make intents, and run sub processes like towers, spawning, creeps, etc. ## Manager -- contains its own data +- a static class +- can contain state - contains functions/methods +- should generally be avoided given its combination of data and functions, which breaks data-oriented design ideals Managers can be a combination of utilities, processors and data. ### Example The MarketManager handles caching market related data, updating / deleting it as needed, while pruning and optimizing existing orders that the bot controls. + +## Use of classes + +Classes should be static. If a class needs to be instantiated, there is probably a better way to do it diff --git a/src/international/creepOrganizer.ts b/src/international/creepOrganizer.ts index 48cb1ada6..4881b130e 100644 --- a/src/international/creepOrganizer.ts +++ b/src/international/creepOrganizer.ts @@ -5,7 +5,7 @@ import { CollectiveManager } from './collective' import { packCoord } from 'other/codec' import { StatsManager } from './stats' import { creepUtils } from 'room/creeps/creepUtils' -import { creepDataManager } from 'room/creeps/creepData' +import { CreepDataManager } from 'room/creeps/creepData' import { creepProcs } from 'room/creeps/creepProcs' export class CreepOrganizer { @@ -46,7 +46,7 @@ export class CreepOrganizer { CollectiveManager.creepCount += 1 - creepDataManager.initCreep(creepName) + CreepDataManager.initCreep(creepName) // Get the creep's role @@ -78,7 +78,7 @@ export class CreepOrganizer { creepProcs.registerInterTickRepairTarget(creep) // initialize inter-tick data for the creep if it isn't already - creepDataManager.data[creep.name] ??= {} + CreepDataManager.data[creep.name] ??= {} creep.update() diff --git a/src/international/featureFlags.spec.ts b/src/international/flags/featureFlags.spec.ts similarity index 100% rename from src/international/featureFlags.spec.ts rename to src/international/flags/featureFlags.spec.ts diff --git a/src/international/featureFlags.ts b/src/international/flags/featureFlags.ts similarity index 100% rename from src/international/featureFlags.ts rename to src/international/flags/featureFlags.ts diff --git a/src/international/flags/flagProcs.ts b/src/international/flags/flagProcs.ts new file mode 100644 index 000000000..0cf39eaba --- /dev/null +++ b/src/international/flags/flagProcs.ts @@ -0,0 +1,5 @@ +type FlagProcNames = '' + +export const flagProcs = { + +} diff --git a/src/international/flags.ts b/src/international/flags/flags.ts similarity index 99% rename from src/international/flags.ts rename to src/international/flags/flags.ts index 69a7fad33..839bbecf6 100644 --- a/src/international/flags.ts +++ b/src/international/flags/flags.ts @@ -10,14 +10,14 @@ import { customColors, ourImpassibleStructuresSet, packedPosLength, -} from './constants' -import { CollectiveManager } from './collective' +} from '../constants' +import { CollectiveManager } from '../collective' import { CombatRequestTypes } from 'types/internationalRequests' import { roomNameUtils } from 'room/roomNameUtils' import { packCoord } from 'other/codec' import { findObjectWithID, isAlly } from 'utils/utils' import { customLog } from 'utils/logging' -import { roomUtils } from 'room/roomUtils' +import { RoomUtils } from 'room/roomUtils' import { spawnRequestConstructorsByType } from 'room/commune/spawning/spawningStructureProcs' import { roomProcs } from 'room/roomProcs' diff --git a/src/main.ts b/src/main.ts index 3ec2af43c..773392314 100644 --- a/src/main.ts +++ b/src/main.ts @@ -22,7 +22,7 @@ import { ErrorMapper } from 'other/ErrorMapper' import { StatsManager } from 'international/stats' import { PlayerManager } from 'international/players' import { profiler } from 'other/profiler' -import { flagManager } from 'international/flags' +import { flagManager } from 'international/flags/flags' import { RoomPruningManager } from 'international/roomPruning' import './room/construction/minCut' import { ConstructionSiteManager } from './international/constructionSites' @@ -33,7 +33,7 @@ import { RequestsManager } from 'international/requests' import { MarketManager } from 'international/market/marketOrders' import { TransactionsManager } from 'international/transactions' import { SegmentsManager } from 'international/segments' -import { creepDataManager } from 'room/creeps/creepData' +import { CreepDataManager } from 'room/creeps/creepData' import { RoomDataManager } from 'room/roomData' import { utils } from 'utils/utils' import { procs } from 'utils/procs' @@ -73,7 +73,7 @@ export function originalLoop() { if (global.userScript) global.userScript.run() PlayerManager.run() RoomsManager.initRun() - creepDataManager.updateCreeps() + CreepDataManager.updateCreeps() CreepOrganizer.run() PowerCreepOrganizer.run() diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index 0e4da1280..a9b6dabdd 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -19,7 +19,7 @@ import { CreepOrganizer } from 'international/creepOrganizer' import { RequestsManager } from 'international/requests' import { SimpleAllies } from 'international/simpleAllies/simpleAllies' import { PlayerManager } from 'international/players' -import { FlagManager } from 'international/flags' +import { FlagManager } from 'international/flags/flags' import { RoomNameUtils } from 'room/roomNameUtils' import { CreepUtils } from 'room/creeps/creepUtils' import { TradingUtils } from 'room/commune/terminal/tradingUtils' @@ -43,7 +43,7 @@ import { BasePlans } from 'room/construction/basePlans' import { RampartPlans } from 'room/construction/rampartPlans' import { Operator } from 'room/creeps/powerCreeps/operator' import { minCutToExit } from 'room/construction/minCut' -import { FeatureFlagManager } from 'international/featureFlags' +import { FeatureFlagManager } from 'international/flags/featureFlags' import { ConstructionSiteManager } from 'international/constructionSites' import { TransactionsManager } from 'international/transactions' import { CommunePlanner } from 'room/construction/communePlanner' diff --git a/src/room/commune/communeProcs.ts b/src/room/commune/communeProcs.ts index 4f2fb84b3..89e68243e 100644 --- a/src/room/commune/communeProcs.ts +++ b/src/room/commune/communeProcs.ts @@ -1,4 +1,4 @@ -import { roomUtils } from 'room/roomUtils' +import { RoomUtils } from 'room/roomUtils' import { CommuneDataManager } from './communeData' import { communeUtils } from './communeUtils' import { diff --git a/src/room/commune/communeUtils.ts b/src/room/commune/communeUtils.ts index 8d6143777..73d5db43f 100644 --- a/src/room/commune/communeUtils.ts +++ b/src/room/commune/communeUtils.ts @@ -10,8 +10,8 @@ import { structureTypesToProtectSet, } from 'international/constants' import { CollectiveManager } from 'international/collective' -import { roomUtils } from "room/roomUtils" -import { structureUtils } from "room/structureUtils" +import { RoomUtils } from 'room/roomUtils' +import { structureUtils } from 'room/structureUtils' import { OrganizedSpawns } from './spawning/spawningStructureProcs' export class CommuneUtils { @@ -191,7 +191,7 @@ export class CommuneUtils { const data = CommuneDataManager.data[room.name] if (data.estimatedCommuneSourceIncome !== undefined) return data.estimatedCommuneSourceIncome - const sources = roomUtils.getSources(room) + const sources = RoomUtils.getSources(room) const estimatedIncome: number[] = [] for (let i = 0; i < sources.length; i += 1) { @@ -263,7 +263,6 @@ export class CommuneUtils { * Assumes the room already meats the requirements to be a funnel target */ wantsToBeFunneledIndependent(room: Room) { - const desiredStrength = communeUtils.getDesiredUpgraderStrength(room) const maxStrength = communeUtils.getMaxUpgradeStrength(room) // We do not have enough desire diff --git a/src/room/creeps/creepData.ts b/src/room/creeps/creepData.ts index ce14ede53..ab2b2c427 100644 --- a/src/room/creeps/creepData.ts +++ b/src/room/creeps/creepData.ts @@ -22,20 +22,19 @@ export interface CreepData { * Handles cached data for creeps we own */ export class CreepDataManager { - data: { [creepName: string]: Partial } = {} + static data: { [creepName: string]: Partial } = {} - initCreep(creepName: string) { + static initCreep(creepName: string) { this.data[creepName] ??= {} } - updateCreeps() { + static updateCreeps() { for (const creepName in this.data) { this.updateCreep(creepName) } } - private updateCreep(creepName: string) { - + private static updateCreep(creepName: string) { if (!Game.creeps[creepName]) { delete this.data[creepName] return @@ -49,5 +48,3 @@ export class CreepDataManager { } } } - -export const creepDataManager = new CreepDataManager() diff --git a/src/room/creeps/myCreepUtils.ts b/src/room/creeps/myCreepUtils.ts index f05411797..58786a79e 100644 --- a/src/room/creeps/myCreepUtils.ts +++ b/src/room/creeps/myCreepUtils.ts @@ -1,4 +1,4 @@ -import { Boosts, creepDataManager } from "./creepData" +import { Boosts, CreepDataManager } from './creepData' /** * Utilities only creeps the bot owns should use @@ -8,7 +8,7 @@ export class MyCreepUtils { * provides a cached number of parts for creeps we own */ parts(creep: Creep) { - const data = creepDataManager.data[creep.name].parts + const data = CreepDataManager.data[creep.name].parts if (data) return data const parts: typeof data = {} @@ -18,12 +18,12 @@ export class MyCreepUtils { // +1 for every part to its type category for (const part of creep.body) parts[part.type] += 1 - creepDataManager.data[creep.name].parts = parts + CreepDataManager.data[creep.name].parts = parts return parts } boosts(creep: Creep) { - const data = creepDataManager.data[creep.name].boosts + const data = CreepDataManager.data[creep.name].boosts if (data) return data const boosts: typeof data = {} @@ -40,32 +40,31 @@ export class MyCreepUtils { boosts[boost] += 1 } - creepDataManager.data[creep.name].boosts = boosts + CreepDataManager.data[creep.name].boosts = boosts return boosts } upgradeStrength(creep: Creep) { - const data = creepDataManager.data[creep.name].upgradeStrength + const data = CreepDataManager.data[creep.name].upgradeStrength if (data) return data const upgradeStrength = this.findUpgradeStrength(this.parts(creep).work, this.boosts(creep)) - creepDataManager.data[creep.name].upgradeStrength = upgradeStrength + CreepDataManager.data[creep.name].upgradeStrength = upgradeStrength return data } findUpgradeStrength(workParts: number, boosts: Boosts) { - if (boosts.XGH2O > 0) { - return (workParts * BOOSTS.work.XGH2O.upgradeController) + return workParts * BOOSTS.work.XGH2O.upgradeController } if (boosts.GH2O > 0) { - return (workParts * BOOSTS.upgrade.GH2O.upgradeController) + return workParts * BOOSTS.upgrade.GH2O.upgradeController } if (boosts.GH > 0) { - return (workParts * BOOSTS.upgrade.GH.upgradeController) + return workParts * BOOSTS.upgrade.GH.upgradeController } return workParts diff --git a/src/room/roomUtils.ts b/src/room/roomUtils.ts index a6ff284b7..3f86861ed 100644 --- a/src/room/roomUtils.ts +++ b/src/room/roomUtils.ts @@ -7,11 +7,11 @@ import { StructureCoords } from './room' import { Dashboard, Rectangle, Table } from 'screeps-viz' export class RoomUtils { - getRemoteRepairStructures(room: Room) { + static getRemoteRepairStructures(room: Room) { const repairStructures: (StructureContainer | StructureRoad)[] = [] } - getSources(room: Room): Source[] { + static getSources(room: Room): Source[] { const data = RoomDataManager.data[room.name] if (data.sourceIDs !== undefined) { return data.sourceIDs.map(ID => findObjectWithID(ID)) @@ -27,7 +27,7 @@ export class RoomUtils { /** * returns a container if exists and is RCL actionable */ - getFastFillerContainerLeft(room: Room) { + static getFastFillerContainerLeft(room: Room) { const data = RoomDataManager.data[room.name] if (data.fastFillerContainerLeftId !== undefined && !room.roomManager.structureUpdate) { return data.fastFillerContainerLeftId @@ -53,7 +53,7 @@ export class RoomUtils { /** * returns a container if exists and is RCL actionable */ - getFastFillerContainerRight(room: Room) { + static getFastFillerContainerRight(room: Room) { const data = RoomDataManager.data[room.name] if (data.fastFillerContainerRightId !== undefined && !room.roomManager.structureUpdate) { return data.fastFillerContainerRightId @@ -76,7 +76,7 @@ export class RoomUtils { return container } - getFastFillerCoords(room: Room) { + static getFastFillerCoords(room: Room) { const data = RoomDataManager.data[room.name] if (data.fastFillerCoords !== undefined && !room.roomManager.structureUpdate) { const fastFillerCoords = data.fastFillerCoords.map(packedCoord => unpackCoord(packedCoord)) @@ -124,7 +124,7 @@ export class RoomUtils { /** * fastFiller coords that have a source, but not necessarily a sink */ - private getSourcedFastFillerCoords(room: Room) { + private static getSourcedFastFillerCoords(room: Room) { const anchor = room.roomManager.anchor if (!anchor) throw Error('no anchor') @@ -163,7 +163,7 @@ export class RoomUtils { return sourcedFastFillerCoords } - findStructureStructureAroundCoord( + static findStructureStructureAroundCoord( room: Room, startCoord: Coord, range: number, @@ -196,5 +196,3 @@ export class RoomUtils { return false } } - -export const roomUtils = new RoomUtils() diff --git a/src/room/sourceProcs.ts b/src/room/sourceProcs.ts index 6407773bd..2f851c266 100644 --- a/src/room/sourceProcs.ts +++ b/src/room/sourceProcs.ts @@ -1,10 +1,10 @@ -import { roomUtils } from 'room/roomUtils' +import { RoomUtils } from 'room/roomUtils' export class SourceProcs { createPowerTasks(room: Room) { if (!room.myPowerCreeps.length) return - const sources = roomUtils.getSources(room) + const sources = RoomUtils.getSources(room) for (const source of sources) { room.createPowerTask(source, PWR_REGEN_SOURCE, 10) } From 63786fd8ef192918671635811544ac47084dd401 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 23 Jan 2024 13:25:08 -0800 Subject: [PATCH 095/190] data managers -> procs, .data -> seperate data obj --- design.md | 12 +++++++++++- src/international/creepOrganizer.ts | 6 +++--- src/main.ts | 12 ++++++------ src/other/profilerRegister.ts | 8 ++++---- src/room/commune/communeData.ts | 14 +++++++++----- src/room/commune/communeProcs.ts | 14 +++++++------- src/room/commune/communeUtils.ts | 12 ++++++------ src/room/commune/towerUtils.ts | 25 ++++++++++++------------- src/room/creeps/creepData.ts | 17 +++++++++++------ src/room/creeps/myCreepUtils.ts | 14 +++++++------- src/room/roomData.ts | 21 ++++++++++++--------- src/room/roomUtils.ts | 10 +++++----- 12 files changed, 93 insertions(+), 72 deletions(-) diff --git a/design.md b/design.md index 983249b89..f3bcbe3f6 100644 --- a/design.md +++ b/design.md @@ -36,10 +36,20 @@ CommuneProc runs logic for the commune to update data, make intents, and run sub Managers can be a combination of utilities, processors and data. +## Data + +A state or set of states generally contained in an object. Should not include functions + +should probably be opperated on by Procs. + ### Example The MarketManager handles caching market related data, updating / deleting it as needed, while pruning and optimizing existing orders that the bot controls. ## Use of classes -Classes should be static. If a class needs to be instantiated, there is probably a better way to do it +Classes should be static. If a class needs to be instantiated, there is probably a better way to do it. + +Inherence of classes should be avoided. + +Mixing state and state modifiers (functions) in classes should be avoided. diff --git a/src/international/creepOrganizer.ts b/src/international/creepOrganizer.ts index 4881b130e..ac1befced 100644 --- a/src/international/creepOrganizer.ts +++ b/src/international/creepOrganizer.ts @@ -5,7 +5,7 @@ import { CollectiveManager } from './collective' import { packCoord } from 'other/codec' import { StatsManager } from './stats' import { creepUtils } from 'room/creeps/creepUtils' -import { CreepDataManager } from 'room/creeps/creepData' +import { CreepDataProcs, creepData } from 'room/creeps/creepData' import { creepProcs } from 'room/creeps/creepProcs' export class CreepOrganizer { @@ -46,7 +46,7 @@ export class CreepOrganizer { CollectiveManager.creepCount += 1 - CreepDataManager.initCreep(creepName) + CreepDataProcs.initCreep(creepName) // Get the creep's role @@ -78,7 +78,7 @@ export class CreepOrganizer { creepProcs.registerInterTickRepairTarget(creep) // initialize inter-tick data for the creep if it isn't already - CreepDataManager.data[creep.name] ??= {} + CreepDataProcs.initCreep(creep.name) creep.update() diff --git a/src/main.ts b/src/main.ts index 773392314..c9de67005 100644 --- a/src/main.ts +++ b/src/main.ts @@ -33,11 +33,11 @@ import { RequestsManager } from 'international/requests' import { MarketManager } from 'international/market/marketOrders' import { TransactionsManager } from 'international/transactions' import { SegmentsManager } from 'international/segments' -import { CreepDataManager } from 'room/creeps/creepData' -import { RoomDataManager } from 'room/roomData' +import { CreepDataProcs } from 'room/creeps/creepData' +import { RoomDataProcs } from 'room/roomData' import { utils } from 'utils/utils' import { procs } from 'utils/procs' -import { CommuneDataManager } from 'room/commune/communeData' +import { CommuneDataProcs } from 'room/commune/communeData' import { GarbageCollector } from 'international/garbageCollector' export function originalLoop() { @@ -63,8 +63,8 @@ export function originalLoop() { simpleAllies.initRun() wasm.collaborator() - RoomDataManager.initRooms() - RoomDataManager.updateRooms() + RoomDataProcs.initRooms() + RoomDataProcs.updateRooms() RoomsManager.updateRun() TransactionsManager.run() RequestsManager.run() @@ -73,7 +73,7 @@ export function originalLoop() { if (global.userScript) global.userScript.run() PlayerManager.run() RoomsManager.initRun() - CreepDataManager.updateCreeps() + CreepDataProcs.updateCreeps() CreepOrganizer.run() PowerCreepOrganizer.run() diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index a9b6dabdd..3d7f344d8 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -78,8 +78,8 @@ import { import { CustomPathFinder } from 'international/customPathFinder' import { RoomUtils } from 'room/roomUtils' import { CommuneUtils } from 'room/commune/communeUtils' -import { RoomDataManager } from 'room/roomData' -import { CommuneDataManager } from 'room/commune/communeData' +import { RoomDataProcs } from 'room/roomData' +import { CommuneDataProcs } from 'room/commune/communeData' import { MyCreepUtils } from 'room/creeps/myCreepUtils' import { CreepMoveProcs } from 'room/creeps/creepMoveProcs' import { CommuneProcs } from 'room/commune/communeProcs' @@ -169,8 +169,8 @@ export function profilerRegister() { profiler.registerClass(RoomUtils, 'RoomUtils') profiler.registerClass(RoomProcs, 'RoomProcs') profiler.registerClass(CommuneUtils, 'CommuneUtils') - profiler.registerClass(RoomDataManager, 'RoomDataManager') - profiler.registerClass(CommuneDataManager, 'CommuneDataManager') + profiler.registerClass(RoomDataProcs, 'RoomDataProcs') + profiler.registerClass(CommuneDataProcs, 'CommuneDataProcs') profiler.registerClass(CommuneProcs, 'CommuneProc') profiler.registerClass(RoomObjectUtils, 'RoomObjectUtils') profiler.registerClass(StructureUtils, 'StructureUtils') diff --git a/src/room/commune/communeData.ts b/src/room/commune/communeData.ts index 063131482..dcc22f777 100644 --- a/src/room/commune/communeData.ts +++ b/src/room/commune/communeData.ts @@ -17,27 +17,31 @@ interface CommuneData { previousRampartHits: number } +/** + * Inter-tick data for communes + */ +export const communeData: { [roomName: string]: Partial} = {} + /** * Handles cached data for communes */ -export class CommuneDataManager { - static data: { [roomName: string]: Partial } = {} +export class CommuneDataProcs { /** * Called by the room's RoomManager */ static initCommune(room: Room) { - this.data[room.name] ??= {} + communeData[room.name] ??= {} } static updateCommunes() { - for (const roomName in this.data) { + for (const roomName in communeData) { this.updateCommune(roomName) } } private static updateCommune(roomName: string) { - const data = this.data[roomName] + const data = communeData[roomName] if (utils.isTickInterval(10)) { delete data.estimatedCommuneSourceIncome diff --git a/src/room/commune/communeProcs.ts b/src/room/commune/communeProcs.ts index 89e68243e..5b4b7cfd5 100644 --- a/src/room/commune/communeProcs.ts +++ b/src/room/commune/communeProcs.ts @@ -1,5 +1,5 @@ import { RoomUtils } from 'room/roomUtils' -import { CommuneDataManager } from './communeData' +import { CommuneDataProcs, communeData } from './communeData' import { communeUtils } from './communeUtils' import { RoomLogisticsRequestTypes, @@ -13,7 +13,7 @@ import { randomIntRange } from 'utils/utils' */ export class CommuneProcs { getRCLUpdate(room: Room) { - const data = CommuneDataManager.data[room.name] + const data = communeData[room.name] // If the registered RCL is the actual RCL, we're good. No need to update anything if (data.registeredRCL === room.controller.level) { return @@ -28,12 +28,12 @@ export class CommuneProcs { } private updateRegisteredRCL(room: Room) { - const communeData = CommuneDataManager.data[room.name] - /* const roomData = RoomDataManager.data[room.name] */ + const data = communeData[room.name] + /* const roomData = roomData[room.name] */ - delete communeData.generalRepairStructureCoords + delete data.generalRepairStructureCoords - communeData.registeredRCL = room.controller.level + data.registeredRCL = room.controller.level } tryUpdateMinHaulerCost(room: Room) { @@ -64,7 +64,7 @@ export class CommuneProcs { registerRampartDamage(room: Room) { if (!room.roomManager.enemyAttackers.length) return - const data = CommuneDataManager.data[room.name] + const data = communeData[room.name] if (data.rampartDamageCoords === undefined || room.roomManager.structureUpdate) { this.initRampartDamageCoords(room) } diff --git a/src/room/commune/communeUtils.ts b/src/room/commune/communeUtils.ts index 73d5db43f..c8c192a85 100644 --- a/src/room/commune/communeUtils.ts +++ b/src/room/commune/communeUtils.ts @@ -1,6 +1,6 @@ import { packCoord, unpackCoord } from "other/codec" -import { CommuneDataManager } from './communeData' -import { RoomDataManager } from 'room/roomData' +import { CommuneDataProcs, communeData } from './communeData' +import { RoomDataProcs } from 'room/roomData' import { findLinkThroughput, getRange, packAsNum, unpackNumAsCoord } from 'utils/utils' import { Result, @@ -52,7 +52,7 @@ export class CommuneUtils { } } - CommuneDataManager.data[room.name].generalRepairStructureCoords = structureCoords + communeData[room.name].generalRepairStructureCoords = structureCoords room.generalRepairStructures = repairTargets return repairTargets @@ -60,7 +60,7 @@ export class CommuneUtils { private getGeneralRepairStructuresFromCoords(room: Room) { const repairTargets: (StructureContainer | StructureRoad)[] = [] - const structureCoords = CommuneDataManager.data[room.name].generalRepairStructureCoords + const structureCoords = communeData[room.name].generalRepairStructureCoords if (!structureCoords) return repairTargets for (const packedCoord of structureCoords) { @@ -133,7 +133,7 @@ export class CommuneUtils { } getMaxUpgradeStrength(room: Room) { - const data = CommuneDataManager.data[room.name] + const data = communeData[room.name] if (data.maxUpgradeStrength !== undefined && !room.roomManager.structureUpdate) return data.maxUpgradeStrength @@ -188,7 +188,7 @@ export class CommuneUtils { } getEstimatedSourceIncome(room: Room) { - const data = CommuneDataManager.data[room.name] + const data = communeData[room.name] if (data.estimatedCommuneSourceIncome !== undefined) return data.estimatedCommuneSourceIncome const sources = RoomUtils.getSources(room) diff --git a/src/room/commune/towerUtils.ts b/src/room/commune/towerUtils.ts index 0cfc9688f..217f98f66 100644 --- a/src/room/commune/towerUtils.ts +++ b/src/room/commune/towerUtils.ts @@ -1,8 +1,8 @@ import { towerPowers } from "international/constants" import { findWithLowestScore, getRange } from "utils/utils" -import { CommuneDataManager } from './communeData' -import { communeUtils } from "./communeUtils" -import { packCoord } from "other/codec" +import { CommuneDataProcs, communeData } from './communeData' +import { communeUtils } from './communeUtils' +import { packCoord } from 'other/codec' const minTowerRampartRepairTreshold = RAMPART_DECAY_AMOUNT * 1.5 @@ -48,22 +48,21 @@ export class TowerUtils { } getRampartRepairTreshold(room: Room) { - const data = CommuneDataManager.data[room.name] - if (data.towerRampartRepairTreshold !== undefined) return data.towerRampartRepairTreshold + const data = communeData[room.name] + if (data.towerRampartRepairTreshold !== undefined) return data.towerRampartRepairTreshold - let rampartRepairTreshold = minTowerRampartRepairTreshold + let rampartRepairTreshold = minTowerRampartRepairTreshold - const enemySquadData = room.roomManager.enemySquadData - rampartRepairTreshold += enemySquadData.highestDismantle - // Melee damage includes ranged - rampartRepairTreshold += enemySquadData.highestMeleeDamage + const enemySquadData = room.roomManager.enemySquadData + rampartRepairTreshold += enemySquadData.highestDismantle + // Melee damage includes ranged + rampartRepairTreshold += enemySquadData.highestMeleeDamage - data.towerRampartRepairTreshold = rampartRepairTreshold - return rampartRepairTreshold + data.towerRampartRepairTreshold = rampartRepairTreshold + return rampartRepairTreshold } findHealTarget(room: Room) { - if (room.roomManager.enemyAttackers.length) { return room.roomManager.myDamagedCreeps.find(creep => { return !creep.isOnExit && !room.roomManager.enemyThreatCoords.has(packCoord(creep.pos)) diff --git a/src/room/creeps/creepData.ts b/src/room/creeps/creepData.ts index ab2b2c427..411e143c2 100644 --- a/src/room/creeps/creepData.ts +++ b/src/room/creeps/creepData.ts @@ -18,29 +18,34 @@ export interface CreepData { */ defenceStrength: number } + +/** + * Inter-tick creep data + */ +export const creepData: { [creepName: string]: Partial } = {} + /** * Handles cached data for creeps we own */ -export class CreepDataManager { - static data: { [creepName: string]: Partial } = {} +export class CreepDataProcs { static initCreep(creepName: string) { - this.data[creepName] ??= {} + creepData[creepName] ??= {} } static updateCreeps() { - for (const creepName in this.data) { + for (const creepName in creepData) { this.updateCreep(creepName) } } private static updateCreep(creepName: string) { if (!Game.creeps[creepName]) { - delete this.data[creepName] + delete creepData[creepName] return } - const data = this.data[creepName] + const data = creepData[creepName] /* .delete */ diff --git a/src/room/creeps/myCreepUtils.ts b/src/room/creeps/myCreepUtils.ts index 58786a79e..ada0e15ea 100644 --- a/src/room/creeps/myCreepUtils.ts +++ b/src/room/creeps/myCreepUtils.ts @@ -1,4 +1,4 @@ -import { Boosts, CreepDataManager } from './creepData' +import { Boosts, CreepDataProcs, creepData } from './creepData' /** * Utilities only creeps the bot owns should use @@ -8,7 +8,7 @@ export class MyCreepUtils { * provides a cached number of parts for creeps we own */ parts(creep: Creep) { - const data = CreepDataManager.data[creep.name].parts + const data = creepData[creep.name].parts if (data) return data const parts: typeof data = {} @@ -18,12 +18,12 @@ export class MyCreepUtils { // +1 for every part to its type category for (const part of creep.body) parts[part.type] += 1 - CreepDataManager.data[creep.name].parts = parts + creepData[creep.name].parts = parts return parts } boosts(creep: Creep) { - const data = CreepDataManager.data[creep.name].boosts + const data = creepData[creep.name].boosts if (data) return data const boosts: typeof data = {} @@ -40,17 +40,17 @@ export class MyCreepUtils { boosts[boost] += 1 } - CreepDataManager.data[creep.name].boosts = boosts + creepData[creep.name].boosts = boosts return boosts } upgradeStrength(creep: Creep) { - const data = CreepDataManager.data[creep.name].upgradeStrength + const data = creepData[creep.name].upgradeStrength if (data) return data const upgradeStrength = this.findUpgradeStrength(this.parts(creep).work, this.boosts(creep)) - CreepDataManager.data[creep.name].upgradeStrength = upgradeStrength + creepData[creep.name].upgradeStrength = upgradeStrength return data } diff --git a/src/room/roomData.ts b/src/room/roomData.ts index fd952a674..f86faa94c 100644 --- a/src/room/roomData.ts +++ b/src/room/roomData.ts @@ -1,7 +1,7 @@ import { utils } from "utils/utils" -import { CommuneDataManager } from './commune/communeData' +import { CommuneDataProcs } from './commune/communeData' -interface RoomData { +export interface RoomData { sourceIDs: Id[] fastFillerContainerLeftId: Id | false fastFillerContainerRightId: Id | false @@ -9,11 +9,14 @@ interface RoomData { } /** - * Handles cached data for rooms, including some overlapping data for communes and remotes + * Inter-tick room data */ -export class RoomDataManager { - static data: { [roomName: string]: Partial } = {} +export const roomData: { [roomName: string]: Partial } = {} +/** + * Handles cached data for rooms, including some overlapping data for communes and remotes + */ +export class RoomDataProcs { static initRooms() { for (const roomName in Game.rooms) { const room = Game.rooms[roomName] @@ -23,20 +26,20 @@ export class RoomDataManager { } private static initRoom(room: Room) { - this.data[room.name] ??= {} + roomData[room.name] ??= {} if (room.controller && room.controller.my) { - CommuneDataManager.initCommune(room) + CommuneDataProcs.initCommune(room) } } static updateRooms() { - for (const roomName in this.data) { + for (const roomName in roomData) { this.updateRoom(roomName) } } private static updateRoom(roomName: string) { - const data = this.data[roomName] + const data = roomData[roomName] } } diff --git a/src/room/roomUtils.ts b/src/room/roomUtils.ts index 3f86861ed..ab85c241f 100644 --- a/src/room/roomUtils.ts +++ b/src/room/roomUtils.ts @@ -1,6 +1,6 @@ import { RoomMemoryKeys, RoomTypes, roomDimensions } from 'international/constants' import { packCoord, packXYAsCoord, unpackCoord } from 'other/codec' -import { RoomDataManager } from './roomData' +import { RoomDataProcs, roomData } from './roomData' import { findObjectWithID, forAdjacentCoords, utils } from 'utils/utils' import { structureUtils } from './structureUtils' import { StructureCoords } from './room' @@ -12,7 +12,7 @@ export class RoomUtils { } static getSources(room: Room): Source[] { - const data = RoomDataManager.data[room.name] + const data = roomData[room.name] if (data.sourceIDs !== undefined) { return data.sourceIDs.map(ID => findObjectWithID(ID)) } @@ -28,7 +28,7 @@ export class RoomUtils { * returns a container if exists and is RCL actionable */ static getFastFillerContainerLeft(room: Room) { - const data = RoomDataManager.data[room.name] + const data = roomData[room.name] if (data.fastFillerContainerLeftId !== undefined && !room.roomManager.structureUpdate) { return data.fastFillerContainerLeftId } @@ -54,7 +54,7 @@ export class RoomUtils { * returns a container if exists and is RCL actionable */ static getFastFillerContainerRight(room: Room) { - const data = RoomDataManager.data[room.name] + const data = roomData[room.name] if (data.fastFillerContainerRightId !== undefined && !room.roomManager.structureUpdate) { return data.fastFillerContainerRightId } @@ -77,7 +77,7 @@ export class RoomUtils { } static getFastFillerCoords(room: Room) { - const data = RoomDataManager.data[room.name] + const data = roomData[room.name] if (data.fastFillerCoords !== undefined && !room.roomManager.structureUpdate) { const fastFillerCoords = data.fastFillerCoords.map(packedCoord => unpackCoord(packedCoord)) return fastFillerCoords From ba272a80245bb88e6ee6a2cc25e43546821187f4 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 23 Jan 2024 13:40:47 -0800 Subject: [PATCH 096/190] static creepMoveProcs --- src/room/creeps/creepMoveProcs.ts | 20 +++++++++---------- .../creepPrototypes/creepMoveFunctions.ts | 8 ++++---- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/src/room/creeps/creepMoveProcs.ts b/src/room/creeps/creepMoveProcs.ts index d791661fc..e35eceaa7 100644 --- a/src/room/creeps/creepMoveProcs.ts +++ b/src/room/creeps/creepMoveProcs.ts @@ -20,7 +20,7 @@ export class CreepMoveProcs { /** * work in progress */ - createMoveRequest(creep: Creep, goals: PathGoal[], args: any, opts: any) { + static createMoveRequest(creep: Creep, goals: PathGoal[], args: any, opts: any) { // Stop if the we know the creep won't move if (creep.moveRequest) return Result.noAction @@ -43,18 +43,18 @@ export class CreepMoveProcs { opts.cacheAmount ??= CollectiveManager.defaultMinPathCacheTime - if (creepMoveProcs.useExistingPath(creep, args, opts) === Result.success) { + if (this.useExistingPath(creep, args, opts) === Result.success) { return Result.success } - const path = creepMoveProcs.findNewPath(creep, args, opts) + const path = this.findNewPath(creep, args, opts) if (path === Result.fail) return Result.fail - creepMoveProcs.useNewPath(creep, args, opts, path) + this.useNewPath(creep, args, opts, path) return Result.success } - useExistingPath(creep: Creep, args: CustomPathFinderArgs, opts: MoveRequestOpts) { + static useExistingPath(creep: Creep, args: CustomPathFinderArgs, opts: MoveRequestOpts) { if (creep.spawning) return Result.noAction const creepMemory = Memory.creeps[creep.name] || Memory.powerCreeps[creep.name] @@ -94,7 +94,7 @@ export class CreepMoveProcs { * Similar to the game's moveByPath * We need to also check if the next position is an opposite exit coord */ - private findMoveTarget( + private static findMoveTarget( creep: Creep, creepMemory: CreepMemory | PowerCreepMemory, ): Result.fail | RoomPosition { @@ -128,7 +128,7 @@ export class CreepMoveProcs { return Result.fail } - findNewPath(creep: Creep, args: CustomPathFinderArgs, opts: MoveRequestOpts) { + static findNewPath(creep: Creep, args: CustomPathFinderArgs, opts: MoveRequestOpts) { // Assign the creep to the args args.creep = creep @@ -166,7 +166,7 @@ export class CreepMoveProcs { return path } - useNewPath( + static useNewPath( creep: Creep, args: CustomPathFinderArgs, opts: MoveRequestOpts, @@ -201,7 +201,7 @@ export class CreepMoveProcs { return Result.success } - private registerSpawnDirections(creep: Creep, path: RoomPosition[]) { + private static registerSpawnDirections(creep: Creep, path: RoomPosition[]) { if (!creep.spawnID) return const spawn = findObjectWithID(creep.spawnID) @@ -243,5 +243,3 @@ export class CreepMoveProcs { return } } - -export const creepMoveProcs = new CreepMoveProcs() diff --git a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts index 7776fdd69..b032e37a4 100644 --- a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts @@ -25,7 +25,7 @@ import { unpackPosAt, unpackPosList, } from 'other/codec' -import { creepMoveProcs } from '../creepMoveProcs' +import { CreepMoveProcs } from '../creepMoveProcs' PowerCreep.prototype.createMoveRequestByPath = Creep.prototype.createMoveRequestByPath = function ( args, @@ -146,14 +146,14 @@ PowerCreep.prototype.createMoveRequest = Creep.prototype.createMoveRequest = fun args.origin ??= this.pos opts.cacheAmount ??= CollectiveManager.defaultMinPathCacheTime - if (creepMoveProcs.useExistingPath(this, args, opts) === Result.success) { + if (CreepMoveProcs.useExistingPath(this, args, opts) === Result.success) { return Result.success } - const path = creepMoveProcs.findNewPath(this, args, opts) + const path = CreepMoveProcs.findNewPath(this, args, opts) if (path === Result.fail) return Result.fail - creepMoveProcs.useNewPath(this, args, opts, path) + CreepMoveProcs.useNewPath(this, args, opts, path) return Result.success } From 69038cde5ada73b037fb99357f7b3efa278bdb8f Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 23 Jan 2024 13:44:25 -0800 Subject: [PATCH 097/190] static CreepProcs --- src/international/creepOrganizer.ts | 6 +- .../spawning/spawningStructureProcs.ts | 4 +- .../spawning/spawningStructureUtils.ts | 2 +- src/room/creeps/creepProcs.ts | 54 +- .../creeps/creepPrototypes/creepFunctions.ts | 6 +- .../commune/controllerUpgrader.ts | 61 +- .../creeps/roleManager.new/commune/hauler.ts | 16 +- .../commune/controllerUpgrader.ts | 79 +- .../creeps/roleManagers/commune/fastFiller.ts | 295 +++-- .../creeps/roleManagers/commune/hauler.ts | 20 +- .../creeps/roleManagers/commune/hubHauler.ts | 1143 ++++++++--------- .../creeps/roleManagers/commune/maintainer.ts | 54 +- .../roleManagers/commune/sourceHarvester.ts | 6 +- .../international/allyVanguard.ts | 375 +++--- .../remote/remoteSourceHarvester.ts | 4 +- 15 files changed, 1047 insertions(+), 1078 deletions(-) diff --git a/src/international/creepOrganizer.ts b/src/international/creepOrganizer.ts index ac1befced..88535a993 100644 --- a/src/international/creepOrganizer.ts +++ b/src/international/creepOrganizer.ts @@ -6,7 +6,7 @@ import { packCoord } from 'other/codec' import { StatsManager } from './stats' import { creepUtils } from 'room/creeps/creepUtils' import { CreepDataProcs, creepData } from 'room/creeps/creepData' -import { creepProcs } from 'room/creeps/creepProcs' +import { CreepProcs } from 'room/creeps/creepProcs' export class CreepOrganizer { public static run() { @@ -73,9 +73,9 @@ export class CreepOrganizer { if (!creep.spawning) creep.room.creepPositions[packCoord(creep.pos)] = creep.name if (roomLogisticsRoles.has(role)) { - creepProcs.updateLogisticsRequests(creep) + CreepProcs.updateLogisticsRequests(creep) } - creepProcs.registerInterTickRepairTarget(creep) + CreepProcs.registerInterTickRepairTarget(creep) // initialize inter-tick data for the creep if it isn't already CreepDataProcs.initCreep(creep.name) diff --git a/src/room/commune/spawning/spawningStructureProcs.ts b/src/room/commune/spawning/spawningStructureProcs.ts index 2929f609f..0caea1fe8 100644 --- a/src/room/commune/spawning/spawningStructureProcs.ts +++ b/src/room/commune/spawning/spawningStructureProcs.ts @@ -12,7 +12,7 @@ import { } from 'international/constants' import { StatsManager } from 'international/stats' import { unpackPosAt, packCoord, unpackCoord } from 'other/codec' -import { creepProcs } from 'room/creeps/creepProcs' +import { CreepProcs } from 'room/creeps/creepProcs' import { structureUtils } from 'room/structureUtils' import { SpawnRequest, BodyPartCounts, SpawnRequestTypes } from 'types/spawnRequest' import { customLog, LogTypes } from 'utils/logging' @@ -59,7 +59,7 @@ export class SpawningStructureProcs { private registerSpawningCreeps(room: Room, activeSpawns: StructureSpawn[]) { for (const spawn of activeSpawns) { const creep = Game.creeps[spawn.spawning.name] - creepProcs.registerSpawning(creep, spawn) + CreepProcs.registerSpawning(creep, spawn) creep.spawnID = spawn.id if ( diff --git a/src/room/commune/spawning/spawningStructureUtils.ts b/src/room/commune/spawning/spawningStructureUtils.ts index ce8e54df5..bac8b3555 100644 --- a/src/room/commune/spawning/spawningStructureUtils.ts +++ b/src/room/commune/spawning/spawningStructureUtils.ts @@ -1,6 +1,6 @@ import { structureUtils } from 'room/structureUtils' import { OrganizedSpawns } from './spawningStructureProcs' -import { creepProcs } from 'room/creeps/creepProcs' +import { CreepProcs } from 'room/creeps/creepProcs' import { CreepMemoryKeys } from 'international/constants' export class SpawningStructureUtils { diff --git a/src/room/creeps/creepProcs.ts b/src/room/creeps/creepProcs.ts index 256a0e424..374d58f21 100644 --- a/src/room/creeps/creepProcs.ts +++ b/src/room/creeps/creepProcs.ts @@ -24,7 +24,7 @@ import { structureUtils } from 'room/structureUtils' import { packCoord } from 'other/codec' export class CreepProcs { - advancedUpgradeController(creep: Creep) { + static advancedUpgradeController(creep: Creep) { const creepMemory = Memory.creeps[creep.name] const controller = creep.room.controller creepMemory[CreepMemoryKeys.targetID] = controller.id @@ -137,7 +137,7 @@ export class CreepProcs { // If the creep needs resources if (creep.needsResources()) { - creepProcs.runRoomLogisticsRequestsAdvanced(creep, { + this.runRoomLogisticsRequestsAdvanced(creep, { types: new Set([ RoomLogisticsRequestTypes.withdraw, RoomLogisticsRequestTypes.pickup, @@ -216,12 +216,12 @@ export class CreepProcs { /** * Overhead logic ran for dead creeps */ - runDead(creepName: string) { + static runDead(creepName: string) { const creepMemory = Memory.creeps[creepName] const role = creepUtils.roleName(creepName) } - registerInterTickRepairTarget(creep: Creep) { + static registerInterTickRepairTarget(creep: Creep) { const creepMemory = Memory.creeps[creep.name] if (!creepMemory[CreepMemoryKeys.structureTarget]) return @@ -234,11 +234,11 @@ export class CreepProcs { this.registerRepairReservation(creep, target) } - private registerRepairReservation(creep: Creep, target: Structure) { + private static registerRepairReservation(creep: Creep, target: Structure) { target.reserveHits += creep.store.getUsedCapacity(RESOURCE_ENERGY) * REPAIR_POWER } - runRepair(creep: Creep, target: Structure) { + static runRepair(creep: Creep, target: Structure) { // If we've already schedhuled a work intent, don't try to do another if (creep.worked) return Result.noAction if (creep.repair(target) !== OK) return Result.fail @@ -266,7 +266,7 @@ export class CreepProcs { return Result.success } - repairCommune(creep: Creep) { + static repairCommune(creep: Creep) { if (creep.needsResources()) { if ( creep.room.communeManager.storingStructures.length && @@ -277,7 +277,7 @@ export class CreepProcs { // Reset target so when we are full we search again delete Memory.creeps[creep.name][CreepMemoryKeys.structureTarget] - creepProcs.runRoomLogisticsRequestsAdvanced(creep, { + this.runRoomLogisticsRequestsAdvanced(creep, { types: new Set([ RoomLogisticsRequestTypes.withdraw, RoomLogisticsRequestTypes.offer, @@ -370,8 +370,8 @@ export class CreepProcs { return true } - repairCommuneStationary(creep: Creep) {} - repairNearby(creep: Creep) { + static repairCommuneStationary(creep: Creep) {} + static repairNearby(creep: Creep) { // If the this has no energy, inform false if (creep.nextStore.energy <= 0) return Result.noAction @@ -394,7 +394,7 @@ export class CreepProcs { return Result.success } - updateLogisticsRequests(creep: Creep) { + static updateLogisticsRequests(creep: Creep) { const creepMemory = Memory.creeps[creep.name] if (!creepMemory[CreepMemoryKeys.roomLogisticsRequests]) { creepMemory[CreepMemoryKeys.roomLogisticsRequests] = [] @@ -460,7 +460,7 @@ export class CreepProcs { * * @returns false if the request was deleted */ - private updateTransferLogisticsRequest( + private static updateTransferLogisticsRequest( creep: Creep, request: CreepLogisticsRequest, target: RoomObject & { store: StoreDefinition }, @@ -539,7 +539,7 @@ export class CreepProcs { * * @returns false if the request was deleted */ - private updatePickupLogisticsRequest( + private static updatePickupLogisticsRequest( creep: Creep, request: CreepLogisticsRequest, target: Resource, @@ -572,7 +572,7 @@ export class CreepProcs { * * @returns false if the request was deleted */ - private updateWithdrawLogisticsRequest( + private static updateWithdrawLogisticsRequest( creep: Creep, request: CreepLogisticsRequest, target: RoomLogisticsTargets, @@ -618,7 +618,7 @@ export class CreepProcs { * @param request pickup, withdraw or offer to get sufficient resources * @param deliverToRequest transfer to delivery target */ - private updateDeliverLogisticsRequest( + private static updateDeliverLogisticsRequest( creep: Creep, request: CreepLogisticsRequest, deliverToRequest: CreepLogisticsRequest, @@ -713,7 +713,7 @@ export class CreepProcs { return true } - registerSpawning(creep: Creep, spawn: StructureSpawn) { + static registerSpawning(creep: Creep, spawn: StructureSpawn) { if (spawn.spawning.remainingTime > 1 || spawn.spawning.name.includes('shard')) return const offset = offsetsByDirection[spawn.spawning.directions[0]] @@ -725,7 +725,7 @@ export class CreepProcs { creep.assignMoveRequest(coord) } - runRoomLogisticsRequestAdvanced(creep: Creep, args?: FindNewRoomLogisticsRequestArgs) { + static runRoomLogisticsRequestAdvanced(creep: Creep, args?: FindNewRoomLogisticsRequestArgs) { const request = creepUtils.findRoomLogisticsRequest(creep, args) if (!request) return Result.noAction @@ -854,17 +854,17 @@ export class CreepProcs { return Result.success } - runRoomLogisticsRequestsAdvanced(creep: Creep, args?: FindNewRoomLogisticsRequestArgs) { + static runRoomLogisticsRequestsAdvanced(creep: Creep, args?: FindNewRoomLogisticsRequestArgs) { if (creep.spawning) return Result.noAction - const result = creepProcs.runRoomLogisticsRequestAdvanced(creep, args) + const result = this.runRoomLogisticsRequestAdvanced(creep, args) if (result === Result.action) return result - creepProcs.runRoomLogisticsRequestAdvanced(creep, args) + this.runRoomLogisticsRequestAdvanced(creep, args) return Result.success } - runRoomLogisticsRequest(creep: Creep) { + static runRoomLogisticsRequest(creep: Creep) { const creepMemory = Memory.creeps[creep.name] const request = creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] if (!request) return Result.fail @@ -975,7 +975,7 @@ export class CreepProcs { return Result.success } - runRoomLogisticsRequests(creep: Creep) { + static runRoomLogisticsRequests(creep: Creep) { if (creep.spawning) return false if (this.runRoomLogisticsRequest(creep) !== Result.success) return false @@ -984,7 +984,7 @@ export class CreepProcs { return true } - findCreepRoomLogisticsRequestAmount( + static findCreepRoomLogisticsRequestAmount( creep: Creep, type: RoomLogisticsRequestTypes, targetID: Id, @@ -1031,7 +1031,7 @@ export class CreepProcs { return amount } - createCreepRoomLogisticsRequest( + static createCreepRoomLogisticsRequest( creep: Creep, type: RoomLogisticsRequestTypes, targetID: Id, @@ -1057,7 +1057,7 @@ export class CreepProcs { return Result.success } - activeRenew(creep: Creep) { + static activeRenew(creep: Creep) { const { room } = creep // If there is insufficient CPU to renew, inform false @@ -1094,7 +1094,7 @@ export class CreepProcs { } } - passiveRenew(creep: Creep) { + static passiveRenew(creep: Creep) { const { room } = creep // If there is insufficient CPU to renew, inform false @@ -1131,5 +1131,3 @@ export class CreepProcs { } } } - -export const creepProcs = new CreepProcs() diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index 7f802af33..c7122909e 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -20,7 +20,7 @@ import { CustomPathFinder } from 'international/customPathFinder' import { communeUtils } from 'room/commune/communeUtils' import { myCreepUtils } from '../myCreepUtils' import { structureUtils } from 'room/structureUtils' -import { creepProcs } from '../creepProcs' +import { CreepProcs } from '../creepProcs' Creep.prototype.update = function () {} @@ -177,7 +177,7 @@ Creep.prototype.builderGetEnergy = function () { return Result.noAction } - creepProcs.runRoomLogisticsRequestAdvanced(this, { + CreepProcs.runRoomLogisticsRequestAdvanced(this, { types: new Set([ RoomLogisticsRequestTypes.withdraw, RoomLogisticsRequestTypes.pickup, @@ -194,7 +194,7 @@ Creep.prototype.builderGetEnergy = function () { // We don't have a storage or terminal, don't allow use of sourceContainers - creepProcs.runRoomLogisticsRequestAdvanced(this, { + CreepProcs.runRoomLogisticsRequestAdvanced(this, { types: new Set([ RoomLogisticsRequestTypes.withdraw, RoomLogisticsRequestTypes.pickup, diff --git a/src/room/creeps/roleManager.new/commune/controllerUpgrader.ts b/src/room/creeps/roleManager.new/commune/controllerUpgrader.ts index 51085506c..679b3dd14 100644 --- a/src/room/creeps/roleManager.new/commune/controllerUpgrader.ts +++ b/src/room/creeps/roleManager.new/commune/controllerUpgrader.ts @@ -1,59 +1,54 @@ import { RoomMemoryKeys, creepRoles, packedPosLength } from 'international/constants' -import { creepProcs } from 'room/creeps/creepProcs' +import { CreepProcs } from 'room/creeps/creepProcs' import { creepUtils } from 'room/creeps/creepUtils' import { DefaultRoleManager } from 'room/creeps/defaultRoleManager' class ControllerUpgraderManager extends DefaultRoleManager { - role: CreepRoles = 'controllerUpgrader' + role: CreepRoles = 'controllerUpgrader' - isDying(creep: Creep) { - // Stop if creep is spawning + isDying(creep: Creep) { + // Stop if creep is spawning - if (creep.spawning) return false + if (creep.spawning) return false - // If the creep's remaining ticks are more than the estimated spawn time plus travel time, inform false + // If the creep's remaining ticks are more than the estimated spawn time plus travel time, inform false - if ( - creep.ticksToLive > - creep.body.length * CREEP_SPAWN_TIME + - creep.room.memory[RoomMemoryKeys.upgradePath].length / packedPosLength - ) - return false + if ( + creep.ticksToLive > + creep.body.length * CREEP_SPAWN_TIME + + creep.room.memory[RoomMemoryKeys.upgradePath].length / packedPosLength + ) + return false - // Record creep as isDying + // Record creep as isDying - return true - } - /* + return true + } + /* // Not good enough, we need to account for downgrading; state machine shouldBuild(creep: Creep) { return !!creep.room.roomManager.cSiteTarget; } */ - /** - * Runs when the creep is spawning - */ - runSpawning(creep: Creep) { - - - } - - runUpdate(creep: Creep) { - creep.room.communeManager.upgradeStrength += creep.room.communeManager.upgradeStrength - } + /** + * Runs when the creep is spawning + */ + runSpawning(creep: Creep) {} - initialRun(creep: Creep) { + runUpdate(creep: Creep) { + creep.room.communeManager.upgradeStrength += creep.room.communeManager.upgradeStrength + } - } + initialRun(creep: Creep) {} - run(creep: Creep) { - /* if (this.shouldBuild(creep)) { + run(creep: Creep) { + /* if (this.shouldBuild(creep)) { creep.advancedBuild(); return; } */ - creepProcs.advancedUpgradeController(creep) - } + CreepProcs.advancedUpgradeController(creep) + } } export const controllerUpgraderManager = new ControllerUpgraderManager() diff --git a/src/room/creeps/roleManager.new/commune/hauler.ts b/src/room/creeps/roleManager.new/commune/hauler.ts index 8b7e830a8..c0edaabf8 100644 --- a/src/room/creeps/roleManager.new/commune/hauler.ts +++ b/src/room/creeps/roleManager.new/commune/hauler.ts @@ -1,15 +1,13 @@ -import { creepProcs } from "room/creeps/creepProcs" -import { DefaultRoleManager } from "room/creeps/defaultRoleManager" +import { CreepProcs } from 'room/creeps/creepProcs' +import { DefaultRoleManager } from 'room/creeps/defaultRoleManager' class HaulerManager extends DefaultRoleManager { + role: CreepRoles = 'hauler' - role: CreepRoles = 'hauler' - - run(creep: Creep) { - - creepProcs.passiveRenew(creep) - creepProcs.runRoomLogisticsRequestsAdvanced(creep) - } + run(creep: Creep) { + CreepProcs.passiveRenew(creep) + CreepProcs.runRoomLogisticsRequestsAdvanced(creep) + } } export const haulerManager = new HaulerManager() diff --git a/src/room/creeps/roleManagers/commune/controllerUpgrader.ts b/src/room/creeps/roleManagers/commune/controllerUpgrader.ts index 47cea9033..20cb30b56 100644 --- a/src/room/creeps/roleManagers/commune/controllerUpgrader.ts +++ b/src/room/creeps/roleManagers/commune/controllerUpgrader.ts @@ -1,59 +1,56 @@ import { CreepMemoryKeys, ReservedCoordTypes, RoomMemoryKeys, packedPosLength } from 'international/constants' -import { creepProcs } from 'room/creeps/creepProcs' +import { CreepProcs } from 'room/creeps/creepProcs' import { creepUtils } from 'room/creeps/creepUtils' import { myCreepUtils } from 'room/creeps/myCreepUtils' export class ControllerUpgrader extends Creep { - constructor(creepID: Id) { - super(creepID) - } - - public isDying() { - // Stop if creep is spawning + constructor(creepID: Id) { + super(creepID) + } - if (this.spawning) return false + public isDying() { + // Stop if creep is spawning - // If the creep's remaining ticks are more than the estimated spawn time plus travel time, inform false + if (this.spawning) return false - if ( - this.ticksToLive > - this.body.length * CREEP_SPAWN_TIME + - this.room.memory[RoomMemoryKeys.upgradePath].length / packedPosLength - ) - return false + // If the creep's remaining ticks are more than the estimated spawn time plus travel time, inform false - // Record creep as isDying - - return true - } + if ( + this.ticksToLive > + this.body.length * CREEP_SPAWN_TIME + + this.room.memory[RoomMemoryKeys.upgradePath].length / packedPosLength + ) + return false - update() { + // Record creep as isDying - const packedCoord = Memory.creeps[this.name][CreepMemoryKeys.packedCoord] - if (packedCoord) { + return true + } - if (this.isDying()) { - this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.dying) - } - else { - this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.important) - } - } + update() { + const packedCoord = Memory.creeps[this.name][CreepMemoryKeys.packedCoord] + if (packedCoord) { + if (this.isDying()) { + this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.dying) + } else { + this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.important) + } } + } - initRun() { - this.room.communeManager.upgradeStrength += myCreepUtils.upgradeStrength(this) - } + initRun() { + this.room.communeManager.upgradeStrength += myCreepUtils.upgradeStrength(this) + } - public static roleManager(room: Room, creepsOfRole: string[]) { - // Loop through creepNames + public static roleManager(room: Room, creepsOfRole: string[]) { + // Loop through creepNames - for (const creepName of creepsOfRole) { - // Get the creep using its creepName + for (const creepName of creepsOfRole) { + // Get the creep using its creepName - const creep: ControllerUpgrader = Game.creeps[creepName] - const creepMemory = Memory.creeps[creep.name] -/* + const creep: ControllerUpgrader = Game.creeps[creepName] + const creepMemory = Memory.creeps[creep.name] + /* if ( creepMemory[CreepMemoryKeys.targetID] === room.controller.id || room.controller.ticksToDowngrade < @@ -72,7 +69,7 @@ export class ControllerUpgrader extends Creep { } } */ - creepProcs.advancedUpgradeController(creep) - } + CreepProcs.advancedUpgradeController(creep) } + } } diff --git a/src/room/creeps/roleManagers/commune/fastFiller.ts b/src/room/creeps/roleManagers/commune/fastFiller.ts index 7d24bd39b..b1a5af802 100644 --- a/src/room/creeps/roleManagers/commune/fastFiller.ts +++ b/src/room/creeps/roleManagers/commune/fastFiller.ts @@ -2,204 +2,201 @@ import { CreepMemoryKeys, ReservedCoordTypes } from 'international/constants' import { findClosestPos, getRangeXY, getRange } from 'utils/utils' import { packCoord, packPos, unpackCoord, unpackCoordAsPos, unpackPos } from 'other/codec' import { structureUtils } from 'room/structureUtils' -import { creepProcs } from 'room/creeps/creepProcs' +import { CreepProcs } from 'room/creeps/creepProcs' export class FastFiller extends Creep { - update() { - const packedCoord = Memory.creeps[this.name][CreepMemoryKeys.packedCoord] - if (packedCoord) { - if (this.isDying()) { - this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.dying) - } else { - this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.important) - } - } + update() { + const packedCoord = Memory.creeps[this.name][CreepMemoryKeys.packedCoord] + if (packedCoord) { + if (this.isDying()) { + this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.dying) + } else { + this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.important) + } } + } - travelToFastFiller?(): boolean { - const fastFillerPos = this.findFastFillerPos() - if (!fastFillerPos) return true + travelToFastFiller?(): boolean { + const fastFillerPos = this.findFastFillerPos() + if (!fastFillerPos) return true - // If the this is standing on the fastFillerPos, we didn't travel - if (getRange(this.pos, fastFillerPos) === 0) return false + // If the this is standing on the fastFillerPos, we didn't travel + if (getRange(this.pos, fastFillerPos) === 0) return false - // Otherwise, make a move request to it + // Otherwise, make a move request to it - this.message = '⏩F' + this.message = '⏩F' - this.createMoveRequest({ - origin: this.pos, - goals: [{ pos: fastFillerPos, range: 0 }], - }) + this.createMoveRequest({ + origin: this.pos, + goals: [{ pos: fastFillerPos, range: 0 }], + }) - // And inform true + // And inform true - return true - } + return true + } - findFastFillerPos?() { - const { room } = this + findFastFillerPos?() { + const { room } = this - this.message = 'FFP' + this.message = 'FFP' - const creepMemory = Memory.creeps[this.name] + const creepMemory = Memory.creeps[this.name] - // Stop if the creep already has a packedFastFillerPos - if (creepMemory[CreepMemoryKeys.packedCoord]) { - return unpackCoordAsPos(creepMemory[CreepMemoryKeys.packedCoord], room.name) - } + // Stop if the creep already has a packedFastFillerPos + if (creepMemory[CreepMemoryKeys.packedCoord]) { + return unpackCoordAsPos(creepMemory[CreepMemoryKeys.packedCoord], room.name) + } - // Get usedFastFillerPositions + // Get usedFastFillerPositions - const reservedCoords = room.roomManager.reservedCoords + const reservedCoords = room.roomManager.reservedCoords - const openFastFillerPositions = room.roomManager.fastFillerPositions.filter(pos => { - return reservedCoords.get(packCoord(pos)) !== ReservedCoordTypes.important - }) - if (!openFastFillerPositions.length) return false + const openFastFillerPositions = room.roomManager.fastFillerPositions.filter(pos => { + return reservedCoords.get(packCoord(pos)) !== ReservedCoordTypes.important + }) + if (!openFastFillerPositions.length) return false - const fastFillerPos = findClosestPos(this.pos, openFastFillerPositions) - const packedCoord = packCoord(fastFillerPos) + const fastFillerPos = findClosestPos(this.pos, openFastFillerPositions) + const packedCoord = packCoord(fastFillerPos) - creepMemory[CreepMemoryKeys.packedCoord] = packedCoord - reservedCoords.set(packedCoord, ReservedCoordTypes.important) + creepMemory[CreepMemoryKeys.packedCoord] = packedCoord + reservedCoords.set(packedCoord, ReservedCoordTypes.important) - return fastFillerPos - } + return fastFillerPos + } - fillFastFiller?(): boolean { - const { room } = this + fillFastFiller?(): boolean { + const { room } = this - this.message = '🚬' + this.message = '🚬' - // If the creep has a non-energy resource + // If the creep has a non-energy resource - if (this.store.getUsedCapacity() > this.store.energy) { - for (const resourceType in this.store) { - if (resourceType == RESOURCE_ENERGY) continue + if (this.store.getUsedCapacity() > this.store.energy) { + for (const resourceType in this.store) { + if (resourceType == RESOURCE_ENERGY) continue - this.message = 'WR' + this.message = 'WR' - this.drop(resourceType as ResourceConstant) - return true - } - } + this.drop(resourceType as ResourceConstant) + return true + } + } - const fastFillerContainers = this.room.roomManager.fastFillerContainers + const fastFillerContainers = this.room.roomManager.fastFillerContainers - // If all spawningStructures are filled, inform false + // If all spawningStructures are filled, inform false - if (room.energyAvailable === room.energyCapacityAvailable) return false + if (room.energyAvailable === room.energyCapacityAvailable) return false - // If the this needs resources + // If the this needs resources - if (this.needsResources()) { - for (let i = fastFillerContainers.length - 1; i >= 0; i--) { - const structure = fastFillerContainers[i] + if (this.needsResources()) { + for (let i = fastFillerContainers.length - 1; i >= 0; i--) { + const structure = fastFillerContainers[i] - // Otherwise, if the structure is not in range 1 to the this + // Otherwise, if the structure is not in range 1 to the this - if (getRange(this.pos, structure.pos) > 1) { - fastFillerContainers.splice(i, 1) - continue - } + if (getRange(this.pos, structure.pos) > 1) { + fastFillerContainers.splice(i, 1) + continue + } - // If there is a non-energy resource in a container + // If there is a non-energy resource in a container - if (structure.store.getUsedCapacity() > structure.store.energy) { - for (const key in structure.store) { - const resourceType = key as ResourceConstant + if (structure.store.getUsedCapacity() > structure.store.energy) { + for (const key in structure.store) { + const resourceType = key as ResourceConstant - if (resourceType === RESOURCE_ENERGY) continue + if (resourceType === RESOURCE_ENERGY) continue - this.message = 'WCR' - this.withdraw(structure, resourceType as ResourceConstant) - return true - } - } + this.message = 'WCR' + this.withdraw(structure, resourceType as ResourceConstant) + return true + } + } - // Otherwise, if there is insufficient energy in the structure, iterate + // Otherwise, if there is insufficient energy in the structure, iterate - if ( - structure.store.getUsedCapacity(RESOURCE_ENERGY) < - structure.store.getCapacity() * 0.5 - ) - continue + if (structure.store.getUsedCapacity(RESOURCE_ENERGY) < structure.store.getCapacity() * 0.5) + continue - this.withdraw(structure, RESOURCE_ENERGY) - return true - } + this.withdraw(structure, RESOURCE_ENERGY) + return true + } - let fastFillerStoringStructures: (StructureContainer | StructureLink)[] = [] + let fastFillerStoringStructures: (StructureContainer | StructureLink)[] = [] - const fastFillerLink = room.roomManager.fastFillerLink - if (fastFillerLink && structureUtils.isRCLActionable(fastFillerLink)) - fastFillerStoringStructures.push(fastFillerLink) - fastFillerStoringStructures = fastFillerStoringStructures.concat(fastFillerContainers) + const fastFillerLink = room.roomManager.fastFillerLink + if (fastFillerLink && structureUtils.isRCLActionable(fastFillerLink)) + fastFillerStoringStructures.push(fastFillerLink) + fastFillerStoringStructures = fastFillerStoringStructures.concat(fastFillerContainers) - // Find a storing structure to get energy from + // Find a storing structure to get energy from - for (const structure of fastFillerStoringStructures) { - // Otherwise, if the structure is not in range 1 to the this - if (getRange(this.pos, structure.pos) > 1) continue + for (const structure of fastFillerStoringStructures) { + // Otherwise, if the structure is not in range 1 to the this + if (getRange(this.pos, structure.pos) > 1) continue - // If there is a non-energy resource in the structure - if (structure.nextStore.energy <= 0) continue + // If there is a non-energy resource in the structure + if (structure.nextStore.energy <= 0) continue - // Otherwise, withdraw from the structure and inform true + // Otherwise, withdraw from the structure and inform true - this.message = 'W' + this.message = 'W' - this.withdraw(structure, RESOURCE_ENERGY) - return true - } + this.withdraw(structure, RESOURCE_ENERGY) + return true + } - // Inform false + // Inform false - return false - } + return false + } - // Otherwise if the this doesn't need energy, get adjacent extensions and spawns to the this + // Otherwise if the this doesn't need energy, get adjacent extensions and spawns to the this - const adjacentStructures = room.lookForAtArea( - LOOK_STRUCTURES, - this.pos.y - 1, - this.pos.x - 1, - this.pos.y + 1, - this.pos.x + 1, - true, - ) + const adjacentStructures = room.lookForAtArea( + LOOK_STRUCTURES, + this.pos.y - 1, + this.pos.x - 1, + this.pos.y + 1, + this.pos.x + 1, + true, + ) - // For each structure of adjacentStructures + // For each structure of adjacentStructures - for (const adjacentPosData of adjacentStructures) { - // Get the structure at the adjacentPos + for (const adjacentPosData of adjacentStructures) { + // Get the structure at the adjacentPos - const structure = adjacentPosData.structure as StructureSpawn | StructureExtension + const structure = adjacentPosData.structure as StructureSpawn | StructureExtension - // If the structure has no store property, iterate + // If the structure has no store property, iterate - if (!structure.nextStore) continue + if (!structure.nextStore) continue - // If the structureType is an extension or spawn, iterate + // If the structureType is an extension or spawn, iterate - if ( - structure.structureType !== STRUCTURE_SPAWN && - structure.structureType !== STRUCTURE_EXTENSION - ) - continue + if ( + structure.structureType !== STRUCTURE_SPAWN && + structure.structureType !== STRUCTURE_EXTENSION + ) + continue - if (structure.nextStore.energy >= structure.store.getCapacity(RESOURCE_ENERGY)) continue + if (structure.nextStore.energy >= structure.store.getCapacity(RESOURCE_ENERGY)) continue - // Otherwise, transfer to the structure record the action and inform true + // Otherwise, transfer to the structure record the action and inform true - this.message = 'T' + this.message = 'T' - this.transfer(structure, RESOURCE_ENERGY) - structure.nextStore.energy += this.store.energy - return true - } - /* + this.transfer(structure, RESOURCE_ENERGY) + structure.nextStore.energy += this.store.energy + return true + } + /* if (this.store.energy === 0) return false for (const container of fastFillerContainers) { @@ -213,26 +210,26 @@ export class FastFiller extends Creep { return true } */ - // Otherwise inform false + // Otherwise inform false - return false - } + return false + } - constructor(creepID: Id) { - super(creepID) - } + constructor(creepID: Id) { + super(creepID) + } - static roleManager(room: Room, creepsOfRole: string[]) { - for (const creepName of creepsOfRole) { - const creep: FastFiller = Game.creeps[creepName] + static roleManager(room: Room, creepsOfRole: string[]) { + for (const creepName of creepsOfRole) { + const creep: FastFiller = Game.creeps[creepName] - if (creep.travelToFastFiller()) continue + if (creep.travelToFastFiller()) continue - if (creep.fillFastFiller()) continue + if (creep.fillFastFiller()) continue - creepProcs.passiveRenew(creep) + CreepProcs.passiveRenew(creep) - /* creep.message = ('🚬') */ - } + /* creep.message = ('🚬') */ } + } } diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index dbc286974..d70f1f4c0 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -14,7 +14,7 @@ import { } from 'international/constants' import { StatsManager } from 'international/stats' import { packCoord, reversePosList, unpackCoord, unpackPosAt } from 'other/codec' -import { creepProcs } from 'room/creeps/creepProcs' +import { CreepProcs } from 'room/creeps/creepProcs' import { myCreepUtils } from 'room/creeps/myCreepUtils' import { structureUtils } from 'room/structureUtils' import { @@ -355,7 +355,7 @@ export class Hauler extends Creep { if (this.room.name !== this.commune.name) { // Fulfill requests near the hauler - creepProcs.runRoomLogisticsRequestsAdvanced(this, { + CreepProcs.runRoomLogisticsRequestsAdvanced(this, { types: new Set([RoomLogisticsRequestTypes.pickup, RoomLogisticsRequestTypes.withdraw]), resourceTypes: new Set([RESOURCE_ENERGY]), conditions: request => { @@ -467,7 +467,7 @@ export class Hauler extends Creep { if (isBySourceHarvestPos || creepMemory[CreepMemoryKeys.roomLogisticsRequests].length > 0) { const freeNextStoreInitial = this.freeNextStore - creepProcs.runRoomLogisticsRequestsAdvanced(this, { + CreepProcs.runRoomLogisticsRequestsAdvanced(this, { types: new Set([RoomLogisticsRequestTypes.pickup, RoomLogisticsRequestTypes.withdraw]), resourceTypes: new Set([RESOURCE_ENERGY]), conditions: request => { @@ -502,7 +502,7 @@ export class Hauler extends Creep { // Fulfill requests near the hauler - creepProcs.runRoomLogisticsRequestsAdvanced(this, { + CreepProcs.runRoomLogisticsRequestsAdvanced(this, { types: new Set([ RoomLogisticsRequestTypes.pickup, RoomLogisticsRequestTypes.withdraw, @@ -557,9 +557,9 @@ export class Hauler extends Creep { if (commune.communeManager.remoteResourcePathType === RoomMemoryKeys.remoteSourceHubPaths) { if (this.room.name === commune.name) { - creepProcs.passiveRenew(this) + CreepProcs.passiveRenew(this) - creepProcs.runRoomLogisticsRequestsAdvanced(this, { + CreepProcs.runRoomLogisticsRequestsAdvanced(this, { types: new Set([RoomLogisticsRequestTypes.transfer]), resourceTypes: new Set([RESOURCE_ENERGY]), noDelivery: true, @@ -678,9 +678,9 @@ export class Hauler extends Creep { } if (this.room.name === commune.name) { - creepProcs.passiveRenew(this) + CreepProcs.passiveRenew(this) - creepProcs.runRoomLogisticsRequestAdvanced(this, { + CreepProcs.runRoomLogisticsRequestAdvanced(this, { types: new Set([RoomLogisticsRequestTypes.transfer]), resourceTypes: new Set([RESOURCE_ENERGY]), }) @@ -1043,9 +1043,9 @@ export class Hauler extends Creep { } runCommuneLogistics?() { - creepProcs.passiveRenew(this) + CreepProcs.passiveRenew(this) - if (creepProcs.runRoomLogisticsRequestsAdvanced(this) === Result.action) { + if (CreepProcs.runRoomLogisticsRequestsAdvanced(this) === Result.action) { this.relay() return Result.action } diff --git a/src/room/creeps/roleManagers/commune/hubHauler.ts b/src/room/creeps/roleManagers/commune/hubHauler.ts index 7d5eab918..c5f7b88ba 100644 --- a/src/room/creeps/roleManagers/commune/hubHauler.ts +++ b/src/room/creeps/roleManagers/commune/hubHauler.ts @@ -9,530 +9,521 @@ import { powerSpawnRefillThreshold, } from 'international/constants' import { packCoord, unpackCoord } from 'other/codec' -import { creepProcs } from 'room/creeps/creepProcs' +import { CreepProcs } from 'room/creeps/creepProcs' import { findObjectWithID, getRange, unpackNumAsPos } from 'utils/utils' //import { HubHauler } from '../../creepClasses' export class HubHauler extends Creep { - update() { - const packedCoord = Memory.creeps[this.name][CreepMemoryKeys.packedCoord] - if (packedCoord) { - this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.important) - } + update() { + const packedCoord = Memory.creeps[this.name][CreepMemoryKeys.packedCoord] + if (packedCoord) { + this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.important) } + } - findReservedCoord?() { - - const creepMemory = Memory.creeps[this.name] - if (creepMemory[CreepMemoryKeys.packedCoord]) { - - return unpackCoord(creepMemory[CreepMemoryKeys.packedCoord]) - } - - const stampAnchors = this.room.roomManager.stampAnchors - if (!stampAnchors) throw Error('No stampAnchors for hubHauler ' + this.room.name) - - creepMemory[CreepMemoryKeys.packedCoord] = packCoord(stampAnchors.hub[0]) - return stampAnchors.hub[0] + findReservedCoord?() { + const creepMemory = Memory.creeps[this.name] + if (creepMemory[CreepMemoryKeys.packedCoord]) { + return unpackCoord(creepMemory[CreepMemoryKeys.packedCoord]) } - travelToHub?(): Result { + const stampAnchors = this.room.roomManager.stampAnchors + if (!stampAnchors) throw Error('No stampAnchors for hubHauler ' + this.room.name) - const reservedCoord = this.findReservedCoord() + creepMemory[CreepMemoryKeys.packedCoord] = packCoord(stampAnchors.hub[0]) + return stampAnchors.hub[0] + } - // If we are at the reservedCoord - if (getRange(this.pos, reservedCoord) === 0) return Result.success + travelToHub?(): Result { + const reservedCoord = this.findReservedCoord() - // Otherwise move to the reserved coord + // If we are at the reservedCoord + if (getRange(this.pos, reservedCoord) === 0) return Result.success - this.message = '⏩H' + // Otherwise move to the reserved coord - this.createMoveRequest({ - origin: this.pos, - goals: [ - { - pos: new RoomPosition(reservedCoord.x, reservedCoord.y, this.room.name), - range: 0, - }, - ], - }) + this.message = '⏩H' - return Result.action - } + this.createMoveRequest({ + origin: this.pos, + goals: [ + { + pos: new RoomPosition(reservedCoord.x, reservedCoord.y, this.room.name), + range: 0, + }, + ], + }) - /** - * @returns If a reservation was made or not - */ - createCreepRoomLogisticsRequests?(): void { - if (this.memory[CreepMemoryKeys.roomLogisticsRequests].length) return + return Result.action + } - const { room } = this - const { storage } = room - const { terminal } = room + /** + * @returns If a reservation was made or not + */ + createCreepRoomLogisticsRequests?(): void { + if (this.memory[CreepMemoryKeys.roomLogisticsRequests].length) return - if (!storage && !terminal) return + const { room } = this + const { storage } = room + const { terminal } = room - // Whenever we have a reservation, we should have a matching withdraw and transfer, so we should never - // get here with anything. If we do, it'll never be gotten rid of, so just transfer anything we have to the store - /* + if (!storage && !terminal) return + + // Whenever we have a reservation, we should have a matching withdraw and transfer, so we should never + // get here with anything. If we do, it'll never be gotten rid of, so just transfer anything we have to the store + /* if (this.store.getFreeCapacity() === 0) { const resource = Object.keys(this.store)[0] as ResourceConstant - creepProcs.createCreepRoomLogisticsRequest(this, 'transfer', (storage || terminal).id, this.store[resource], resource) + CreepProcs.createCreepRoomLogisticsRequest(this, 'transfer', (storage || terminal).id, this.store[resource], resource) return } */ - //Factory-overfill is at the top of this list because it can be feeding energy to the rest of the base - // by breaking down batteries... this is the only case it should have more then 10k energy in the factory. - if (this.factoryEnergyOverfillTransfer()) return + //Factory-overfill is at the top of this list because it can be feeding energy to the rest of the base + // by breaking down batteries... this is the only case it should have more then 10k energy in the factory. + if (this.factoryEnergyOverfillTransfer()) return - //Fill the Link before the storage/terminal because the storage transfers can take a long time, - // the link transfers are just 2 or 4 ticks long. + //Fill the Link before the storage/terminal because the storage transfers can take a long time, + // the link transfers are just 2 or 4 ticks long. - if (this.reserveHubLinkTransfer()) return - if (this.reserveHubLinkWithdraw()) return + if (this.reserveHubLinkTransfer()) return + if (this.reserveHubLinkWithdraw()) return - if (this.reserveStorageTransfer()) return - if (this.reserveTerminalTransfer()) return + if (this.reserveStorageTransfer()) return + if (this.reserveTerminalTransfer()) return - if (this.reserveFactoryWithdraw()) return - if (this.reserveFactoryTransfer()) return + if (this.reserveFactoryWithdraw()) return + if (this.reserveFactoryTransfer()) return - /* if (this.reservePowerSpawnTransferPower()) return + /* if (this.reservePowerSpawnTransferPower()) return if (this.reservePowerSpawnTransferEnergy()) return */ + } + + factoryEnergyOverfillTransfer?(): boolean { + const { room } = this + const { storage } = room + const factory = room.roomManager.structures.factory[0] + + if (!storage || !factory) return false + + if (factory.store.energy > 3000 && storage.store.getFreeCapacity() > 3000) { + CreepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.withdraw, + factory.id, + 3000, + RESOURCE_ENERGY, + ) + CreepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.transfer, + storage.id, + 3000, + RESOURCE_ENERGY, + ) + return true } - factoryEnergyOverfillTransfer?(): boolean { - const { room } = this - const { storage } = room - const factory = room.roomManager.structures.factory[0] - - if (!storage || !factory) return false - - if (factory.store.energy > 3000 && storage.store.getFreeCapacity() > 3000) { - creepProcs.createCreepRoomLogisticsRequest( - this, - RoomLogisticsRequestTypes.withdraw, - factory.id, - 3000, - RESOURCE_ENERGY, - ) - creepProcs.createCreepRoomLogisticsRequest( - this, - RoomLogisticsRequestTypes.transfer, - storage.id, - 3000, - RESOURCE_ENERGY, - ) - return true - } - - return false + return false + } + + /** + * @returns If a reservation was made or not + */ + reserveStorageTransfer?(): boolean { + const { room } = this + const { storage } = room + const { terminal } = room + + if (!storage) return false + if (!terminal) return false + + // If the storage is sufficiently full + if (storage.store.getFreeCapacity() < this.store.getCapacity()) return false + + // If the terminal exists and isn't power disabled + if (terminal.effectsData.get(PWR_DISRUPT_TERMINAL)) return false + + for (const key in terminal.store) { + const resourceType = key as ResourceConstant + + // If there is not sufficient resources to justify moving + if (terminal.store[resourceType] < this.store.getCapacity()) continue + + // If the weighted storage store is more than the terminal's, stop + if ( + storage.store[resourceType] / 3 + this.store.getCapacity() * 2 > + terminal.store[resourceType] + ) + continue + + this.message += 'RST ' + resourceType + + let amount = this.store.getFreeCapacity() + + CreepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.withdraw, + terminal.id, + amount, + resourceType, + ) + CreepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.transfer, + storage.id, + amount + this.store[resourceType], + resourceType, + ) + return true } - /** - * @returns If a reservation was made or not - */ - reserveStorageTransfer?(): boolean { - const { room } = this - const { storage } = room - const { terminal } = room - - if (!storage) return false - if (!terminal) return false - - // If the storage is sufficiently full - if (storage.store.getFreeCapacity() < this.store.getCapacity()) return false - - // If the terminal exists and isn't power disabled - if (terminal.effectsData.get(PWR_DISRUPT_TERMINAL)) return false - - for (const key in terminal.store) { - const resourceType = key as ResourceConstant - - // If there is not sufficient resources to justify moving - if (terminal.store[resourceType] < this.store.getCapacity()) continue - - // If the weighted storage store is more than the terminal's, stop - if ( - storage.store[resourceType] / 3 + this.store.getCapacity() * 2 > - terminal.store[resourceType] - ) - continue - - this.message += 'RST ' + resourceType - - let amount = this.store.getFreeCapacity() - - creepProcs.createCreepRoomLogisticsRequest( - this, - RoomLogisticsRequestTypes.withdraw, - terminal.id, - amount, - resourceType, - ) - creepProcs.createCreepRoomLogisticsRequest( - this, - RoomLogisticsRequestTypes.transfer, - storage.id, - amount + this.store[resourceType], - resourceType, - ) - return true - } - - return false + return false + } + + /** + * storage -> terminal + * @returns If a reservation was made or not + */ + reserveTerminalTransfer?(): boolean { + const { room } = this + const { storage } = room + const { terminal } = room + + if (!storage) return false + if (!terminal) return false + + // If the terminal is sufficiently full + if (terminal.store.getFreeCapacity() < this.store.getCapacity()) return false + + for (const key in storage.store) { + const resourceType = key as ResourceConstant + + // If there is not sufficient resources to justify moving + if (storage.store[resourceType] < this.store.getCapacity()) continue + + // If the weighted storage store is less than the terminal's, stop + if ( + storage.store[resourceType] / 3 < + terminal.store[resourceType] + this.store.getCapacity() * 2 + ) + continue + + this.message += 'RTT ' + resourceType + + let amount = this.store.getFreeCapacity() + + CreepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.withdraw, + storage.id, + amount, + resourceType, + ) + CreepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.transfer, + terminal.id, + amount + this.store[resourceType], + resourceType, + ) + return true } - /** - * storage -> terminal - * @returns If a reservation was made or not - */ - reserveTerminalTransfer?(): boolean { - const { room } = this - const { storage } = room - const { terminal } = room - - if (!storage) return false - if (!terminal) return false - - // If the terminal is sufficiently full - if (terminal.store.getFreeCapacity() < this.store.getCapacity()) return false - - for (const key in storage.store) { - const resourceType = key as ResourceConstant - - // If there is not sufficient resources to justify moving - if (storage.store[resourceType] < this.store.getCapacity()) continue - - // If the weighted storage store is less than the terminal's, stop - if ( - storage.store[resourceType] / 3 < - terminal.store[resourceType] + this.store.getCapacity() * 2 - ) - continue - - this.message += 'RTT ' + resourceType - - let amount = this.store.getFreeCapacity() - - creepProcs.createCreepRoomLogisticsRequest( - this, - RoomLogisticsRequestTypes.withdraw, - storage.id, - amount, - resourceType, - ) - creepProcs.createCreepRoomLogisticsRequest( - this, - RoomLogisticsRequestTypes.transfer, - terminal.id, - amount + this.store[resourceType], - resourceType, - ) - return true - } - - return false + return false + } + + /** + * @returns If a reservation was made or not + */ + reserveHubLinkWithdraw?(): boolean { + const { room } = this + const { storage } = room + const { terminal } = room + const hubLink = this.room.roomManager.hubLink + + if (!hubLink) return false + + // If there is unsufficient space to justify a fill + + if (hubLink.store.getCapacity(RESOURCE_ENERGY) * linkReceiveTreshold > hubLink.store.energy) + return false + + // If the controllerLink is less than x% full + + const { controllerLink } = room.communeManager + if ( + controllerLink && + controllerLink.store.getCapacity(RESOURCE_ENERGY) * + (linkReceiveTreshold * (room.myCreepsByRole.controllerUpgrader.length ? 2 : 1)) > + controllerLink.store.energy + ) + return false + + // If the fastFillerLink is less than x% full + + const fastFillerLink = this.room.roomManager.fastFillerLink + if ( + fastFillerLink && + fastFillerLink.store.getCapacity(RESOURCE_ENERGY) * linkReceiveTreshold > + fastFillerLink.store.energy + ) + return false + + // FInd a target + + let target + if (terminal && terminal.freeNextStore > this.store.getCapacity()) target = terminal + else if (storage && storage.freeNextStore > this.store.getCapacity()) target = storage + + if (!target) return false + + this.message += 'RHLW' + + let amount = Math.min(this.freeNextStore, hubLink.store.getUsedCapacity(RESOURCE_ENERGY)) + + CreepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.withdraw, + hubLink.id, + amount, + ) + CreepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.transfer, + target.id, + amount + this.store.energy, + ) + return true + } + + /** + * @returns If a reservation was made or not + */ + reserveHubLinkTransfer?(): boolean { + const { room } = this + + const hubLink = this.room.roomManager.hubLink + if (!hubLink) return false + + // If there is a sufficient cooldown (there is no point filling a link that can do nothing) + if (hubLink.cooldown >= 6) return false + + // If there is unsufficient space to justify a fill + if ( + hubLink.store.getCapacity(RESOURCE_ENERGY) * linkSendThreshold < + hubLink.store.getUsedCapacity(RESOURCE_ENERGY) + ) { + return false } - /** - * @returns If a reservation was made or not - */ - reserveHubLinkWithdraw?(): boolean { - const { room } = this - const { storage } = room - const { terminal } = room - const hubLink = this.room.roomManager.hubLink - - if (!hubLink) return false - - // If there is unsufficient space to justify a fill - - if (hubLink.store.getCapacity(RESOURCE_ENERGY) * linkReceiveTreshold > hubLink.store.energy) - return false - - // If the controllerLink is less than x% full - - const { controllerLink } = room.communeManager - if ( - controllerLink && - controllerLink.store.getCapacity(RESOURCE_ENERGY) * - (linkReceiveTreshold * (room.myCreepsByRole.controllerUpgrader.length ? 2 : 1)) > - controllerLink.store.energy + const { controllerLink } = room.communeManager + const fastFillerLink = this.room.roomManager.fastFillerLink + + // If a link is less than x% full + + if ( + (!fastFillerLink || + fastFillerLink.store.getCapacity(RESOURCE_ENERGY) * linkReceiveTreshold < + fastFillerLink.store.energy) && + (!controllerLink || + controllerLink.store.getCapacity(RESOURCE_ENERGY) * linkReceiveTreshold + + this.room.communeManager.upgradeStrength * 2 < + controllerLink.store.energy) + ) + return false + + const amount = Math.min( + this.store.getFreeCapacity(), + hubLink.store.getFreeCapacity(RESOURCE_ENERGY), + ) + + // Find a provider + + const provider = room.highestWeightedStoringStructures(RESOURCE_ENERGY) + if (!provider) return false + + this.message += 'RHLT' + + CreepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.withdraw, + provider.id, + amount, + ) + CreepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.transfer, + hubLink.id, + Math.min( + this.freeNextStore + this.store.getUsedCapacity(RESOURCE_ENERGY), + hubLink.store.getFreeCapacity(RESOURCE_ENERGY), + ), + ) + return true + } + /** + * @returns If a reservation was made or not + */ + reserveFactoryWithdraw?(): boolean { + const { room } = this + const { storage } = room + const { terminal } = room + + const factory = room.roomManager.structures.factory[0] + if (!factory) return false + + for (let resource in factory.store) { + //if it's needed for production, we need it. + if ( + room.memory[RoomMemoryKeys.factoryUsableResources].includes( + resource as CommodityConstant | MineralConstant | RESOURCE_GHODIUM | RESOURCE_ENERGY, ) - return false + ) + continue + + //Batteries are handled elsewhere in the code. + if (resource == RESOURCE_BATTERY) continue + + //We don't want to remove the output if there's less then a full creep's worth. + if ( + resource == room.memory[RoomMemoryKeys.factoryProduct] && + factory.store[resource] < this.freeNextStore + ) + continue + + //I'm favoring the terminal here because it's likely going to get sold, or shipped out in late game. + let target + if (terminal && terminal.freeNextStore > this.store.getCapacity()) target = terminal + else if (storage && storage.freeNextStore > this.store.getCapacity()) target = storage + if (!target) return false + + let amount = Math.min( + this.freeNextStore, + target.freeNextStore, + factory.store[ + resource as CommodityConstant | MineralConstant | RESOURCE_GHODIUM | RESOURCE_ENERGY + ], + ) + + CreepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.withdraw, + factory.id, + amount, + resource as CommodityConstant | MineralConstant | RESOURCE_GHODIUM | RESOURCE_ENERGY, + ) + CreepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.transfer, + target.id, + amount + + this.store[ + resource as CommodityConstant | MineralConstant | RESOURCE_GHODIUM | RESOURCE_ENERGY + ], + resource as CommodityConstant | MineralConstant | RESOURCE_GHODIUM | RESOURCE_ENERGY, + ) + return true + } - // If the fastFillerLink is less than x% full + // If there are not enough batteries to justify a withdrawl + if (factory.store.battery < this.store.getCapacity()) return false - const fastFillerLink = this.room.roomManager.fastFillerLink - if ( - fastFillerLink && - fastFillerLink.store.getCapacity(RESOURCE_ENERGY) * linkReceiveTreshold > - fastFillerLink.store.energy - ) - return false + // Find a target - // FInd a target + let target + if (terminal && terminal.freeNextStore > this.store.getCapacity()) target = terminal + else if (storage && storage.freeNextStore > this.store.getCapacity()) target = storage - let target - if (terminal && terminal.freeNextStore > this.store.getCapacity()) target = terminal - else if (storage && storage.freeNextStore > this.store.getCapacity()) target = storage + if (!target) return false - if (!target) return false + this.message += 'RFW' - this.message += 'RHLW' + let amount = this.freeNextStore - let amount = Math.min(this.freeNextStore, hubLink.store.getUsedCapacity(RESOURCE_ENERGY)) + CreepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.withdraw, + factory.id, + amount, + RESOURCE_BATTERY, + ) + CreepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.transfer, + target.id, + amount + this.store.battery, + RESOURCE_BATTERY, + ) + return true + } - creepProcs.createCreepRoomLogisticsRequest( - this, - RoomLogisticsRequestTypes.withdraw, - hubLink.id, - amount, - ) - creepProcs.createCreepRoomLogisticsRequest( - this, - RoomLogisticsRequestTypes.transfer, - target.id, - amount + this.store.energy, - ) - return true - } + /** + * @returns If a reservation was made or not + */ + reserveFactoryTransfer?(): boolean { + const { room } = this + const { storage } = room + const { terminal } = room - /** - * @returns If a reservation was made or not - */ - reserveHubLinkTransfer?(): boolean { - const { room } = this + if (!storage && !terminal) return false - const hubLink = this.room.roomManager.hubLink - if (!hubLink) return false + const factory = room.roomManager.structures.factory[0] + if (!factory) return false - // If there is a sufficient cooldown (there is no point filling a link that can do nothing) - if (hubLink.cooldown >= 6) return false + // If there is not enough free store in the factory - // If there is unsufficient space to justify a fill - if (hubLink.store.getCapacity(RESOURCE_ENERGY) * linkSendThreshold < hubLink.store.getUsedCapacity(RESOURCE_ENERGY)) { - return false - } + if (factory.freeNextStore < this.store.getCapacity()) return false - const { controllerLink } = room.communeManager - const fastFillerLink = this.room.roomManager.fastFillerLink + if ( + room.memory[RoomMemoryKeys.factoryProduct] && + room.memory[RoomMemoryKeys.factoryUsableResources] + ) { + for (let resource of room.memory[RoomMemoryKeys.factoryUsableResources]) { + //If there's enough of the component, for now it's just checking for 1000, but 1000 of a T3 resource is a lot, 1000 of a mineral isn't much... - // If a link is less than x% full + if (factory.store[resource] >= 1000) continue - if ( - (!fastFillerLink || - fastFillerLink.store.getCapacity(RESOURCE_ENERGY) * linkReceiveTreshold < - fastFillerLink.store.energy) && - (!controllerLink || - controllerLink.store.getCapacity(RESOURCE_ENERGY) * linkReceiveTreshold + - this.room.communeManager.upgradeStrength * 2 < - controllerLink.store.energy) + let provider + if (terminal && terminal.store[resource] > 0) provider = terminal + else if (storage && storage.store[resource] > 0) provider = storage + if (!provider) continue + + const amount = Math.min( + this.freeNextStore, + provider.store[resource], + 2000 - factory.store[resource], ) - return false + if (amount <= 0) continue - const amount = Math.min(this.store.getFreeCapacity(), hubLink.store.getFreeCapacity(RESOURCE_ENERGY)) + // Make sure we aren't using vital energy - // Find a provider - - const provider = room.highestWeightedStoringStructures(RESOURCE_ENERGY) - if (!provider) return false - - this.message += 'RHLT' + if ( + resource === RESOURCE_ENERGY && + room.roomManager.resourcesInStoringStructures.energy < room.communeManager.minStoredEnergy + ) + continue - creepProcs.createCreepRoomLogisticsRequest( + CreepProcs.createCreepRoomLogisticsRequest( this, RoomLogisticsRequestTypes.withdraw, provider.id, amount, + resource, ) - creepProcs.createCreepRoomLogisticsRequest( + CreepProcs.createCreepRoomLogisticsRequest( this, RoomLogisticsRequestTypes.transfer, - hubLink.id, - Math.min( - this.freeNextStore + this.store.getUsedCapacity(RESOURCE_ENERGY), - hubLink.store.getFreeCapacity(RESOURCE_ENERGY), - ), - ) - return true - } - /** - * @returns If a reservation was made or not - */ - reserveFactoryWithdraw?(): boolean { - const { room } = this - const { storage } = room - const { terminal } = room - - const factory = room.roomManager.structures.factory[0] - if (!factory) return false - - for (let resource in factory.store) { - //if it's needed for production, we need it. - if ( - room.memory[RoomMemoryKeys.factoryUsableResources].includes( - resource as - | CommodityConstant - | MineralConstant - | RESOURCE_GHODIUM - | RESOURCE_ENERGY, - ) - ) - continue - - //Batteries are handled elsewhere in the code. - if (resource == RESOURCE_BATTERY) continue - - //We don't want to remove the output if there's less then a full creep's worth. - if ( - resource == room.memory[RoomMemoryKeys.factoryProduct] && - factory.store[resource] < this.freeNextStore - ) - continue - - //I'm favoring the terminal here because it's likely going to get sold, or shipped out in late game. - let target - if (terminal && terminal.freeNextStore > this.store.getCapacity()) target = terminal - else if (storage && storage.freeNextStore > this.store.getCapacity()) target = storage - if (!target) return false - - let amount = Math.min( - this.freeNextStore, - target.freeNextStore, - factory.store[ - resource as - | CommodityConstant - | MineralConstant - | RESOURCE_GHODIUM - | RESOURCE_ENERGY - ], - ) - - creepProcs.createCreepRoomLogisticsRequest( - this, - RoomLogisticsRequestTypes.withdraw, - factory.id, - amount, - resource as CommodityConstant | MineralConstant | RESOURCE_GHODIUM | RESOURCE_ENERGY, - ) - creepProcs.createCreepRoomLogisticsRequest( - this, - RoomLogisticsRequestTypes.transfer, - target.id, - amount + - this.store[ - resource as - | CommodityConstant - | MineralConstant - | RESOURCE_GHODIUM - | RESOURCE_ENERGY - ], - resource as CommodityConstant | MineralConstant | RESOURCE_GHODIUM | RESOURCE_ENERGY, - ) - return true - } - - // If there are not enough batteries to justify a withdrawl - if (factory.store.battery < this.store.getCapacity()) return false - - // Find a target - - let target - if (terminal && terminal.freeNextStore > this.store.getCapacity()) target = terminal - else if (storage && storage.freeNextStore > this.store.getCapacity()) target = storage - - if (!target) return false - - this.message += 'RFW' - - let amount = this.freeNextStore - - creepProcs.createCreepRoomLogisticsRequest( - this, - RoomLogisticsRequestTypes.withdraw, factory.id, - amount, - RESOURCE_BATTERY, - ) - creepProcs.createCreepRoomLogisticsRequest( - this, - RoomLogisticsRequestTypes.transfer, - target.id, - amount + this.store.battery, - RESOURCE_BATTERY, + amount + this.store[resource], + resource, ) return true + } } - /** - * @returns If a reservation was made or not - */ - reserveFactoryTransfer?(): boolean { - const { room } = this - const { storage } = room - const { terminal } = room - - if (!storage && !terminal) return false - - const factory = room.roomManager.structures.factory[0] - if (!factory) return false - - // If there is not enough free store in the factory - - if (factory.freeNextStore < this.store.getCapacity()) return false - - if ( - room.memory[RoomMemoryKeys.factoryProduct] && - room.memory[RoomMemoryKeys.factoryUsableResources] - ) { - for (let resource of room.memory[RoomMemoryKeys.factoryUsableResources]) { - //If there's enough of the component, for now it's just checking for 1000, but 1000 of a T3 resource is a lot, 1000 of a mineral isn't much... - - if (factory.store[resource] >= 1000) continue - - let provider - if (terminal && terminal.store[resource] > 0) provider = terminal - else if (storage && storage.store[resource] > 0) provider = storage - if (!provider) continue - - const amount = Math.min( - this.freeNextStore, - provider.store[resource], - 2000 - factory.store[resource], - ) - if (amount <= 0) continue - - // Make sure we aren't using vital energy - - if ( - resource === RESOURCE_ENERGY && - room.roomManager.resourcesInStoringStructures.energy < - room.communeManager.minStoredEnergy - ) - continue - - creepProcs.createCreepRoomLogisticsRequest(this, - RoomLogisticsRequestTypes.withdraw, - provider.id, - amount, - resource, - ) - creepProcs.createCreepRoomLogisticsRequest( - this, - RoomLogisticsRequestTypes.transfer, - factory.id, - amount + this.store[resource], - resource, - ) - return true - } - } - - return false - /* + return false + /* // If the ratio of stored batteries to energy is sufficiently high // 100 : 1 if (room.roomManager.resourcesInStoringStructures.battery * 100 > room.roomManager.resourcesInStoringStructures.energy) return false @@ -549,131 +540,125 @@ export class HubHauler extends Creep { let amount = this.freeNextStore - creepProcs.createCreepRoomLogisticsRequest(this, 'withdraw', provider.id, amount) - creepProcs.createCreepRoomLogisticsRequest(this, 'transfer', factory.id, amount + this.store.energy) + CreepProcs.createCreepRoomLogisticsRequest(this, 'withdraw', provider.id, amount) + CreepProcs.createCreepRoomLogisticsRequest(this, 'transfer', factory.id, amount + this.store.energy) return true */ - } - - /** - * @returns If a reservation was made or not - */ - reservePowerSpawnTransferPower?(): boolean { - const { room } = this - const powerSpawn = room.roomManager.structures.powerSpawn[0] - const resource = RESOURCE_POWER - - if (!powerSpawn) return false - - const { storage } = room - const { terminal } = room - - if (!storage && !terminal) return false - - // If there is unsufficient space to justify a fill - - if ( - powerSpawn.store.getCapacity(resource) * powerSpawnRefillThreshold < - powerSpawn.store.getUsedCapacity(resource) - ) - return false - - const amount = Math.min(this.freeNextStore, powerSpawn.freeSpecificStore(resource)) - - // Find a provider - - const provider = room.highestWeightedStoringStructures(RESOURCE_ENERGY) - if (!provider) return false - - this.message += 'RPSTP' - - creepProcs.createCreepRoomLogisticsRequest( - this, - RoomLogisticsRequestTypes.withdraw, - provider.id, - amount, - resource, - ) - creepProcs.createCreepRoomLogisticsRequest( - this, - RoomLogisticsRequestTypes.transfer, - powerSpawn.id, - Math.min( - this.freeNextStore + this.store[resource], - powerSpawn.freeSpecificStore(resource), - ), - resource, - ) - return true - } - - /** - * @returns If a reservation was made or not - */ - reservePowerSpawnTransferEnergy?(): boolean { - const { room } = this - const powerSpawn = room.roomManager.structures.powerSpawn[0] - const resource = RESOURCE_ENERGY - - if (!powerSpawn) return false - if (!powerSpawn.store.getCapacity(RESOURCE_POWER)) return false - - const { storage } = room - const { terminal } = room - - if (!storage && !terminal) return false - - // If there is unsufficient space to justify a fill - - if ( - powerSpawn.store.getCapacity(resource) * powerSpawnRefillThreshold < - powerSpawn.store.getUsedCapacity(resource) - ) - return false - - const amount = Math.min(this.freeNextStore, powerSpawn.freeSpecificStore(resource)) - - // Find a provider - - const provider = room.highestWeightedStoringStructures(RESOURCE_ENERGY) - if (!provider) return false - - this.message += 'RPSTE' - - creepProcs.createCreepRoomLogisticsRequest( - this, - RoomLogisticsRequestTypes.withdraw, - provider.id, - amount, - resource, - ) - creepProcs.createCreepRoomLogisticsRequest( - this, - RoomLogisticsRequestTypes.transfer, - powerSpawn.id, - Math.min( - this.freeNextStore + this.store[resource], - powerSpawn.freeSpecificStore(resource), - ), - resource, - ) - return true - } - - constructor(creepID: Id) { - super(creepID) - } - - public static roleManager(room: Room, creepsOfRole: string[]) { - for (const creepName of creepsOfRole) { - const creep: HubHauler = Game.creeps[creepName] + } + + /** + * @returns If a reservation was made or not + */ + reservePowerSpawnTransferPower?(): boolean { + const { room } = this + const powerSpawn = room.roomManager.structures.powerSpawn[0] + const resource = RESOURCE_POWER + + if (!powerSpawn) return false + + const { storage } = room + const { terminal } = room + + if (!storage && !terminal) return false + + // If there is unsufficient space to justify a fill + + if ( + powerSpawn.store.getCapacity(resource) * powerSpawnRefillThreshold < + powerSpawn.store.getUsedCapacity(resource) + ) + return false + + const amount = Math.min(this.freeNextStore, powerSpawn.freeSpecificStore(resource)) + + // Find a provider + + const provider = room.highestWeightedStoringStructures(RESOURCE_ENERGY) + if (!provider) return false + + this.message += 'RPSTP' + + CreepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.withdraw, + provider.id, + amount, + resource, + ) + CreepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.transfer, + powerSpawn.id, + Math.min(this.freeNextStore + this.store[resource], powerSpawn.freeSpecificStore(resource)), + resource, + ) + return true + } + + /** + * @returns If a reservation was made or not + */ + reservePowerSpawnTransferEnergy?(): boolean { + const { room } = this + const powerSpawn = room.roomManager.structures.powerSpawn[0] + const resource = RESOURCE_ENERGY + + if (!powerSpawn) return false + if (!powerSpawn.store.getCapacity(RESOURCE_POWER)) return false + + const { storage } = room + const { terminal } = room + + if (!storage && !terminal) return false + + // If there is unsufficient space to justify a fill + + if ( + powerSpawn.store.getCapacity(resource) * powerSpawnRefillThreshold < + powerSpawn.store.getUsedCapacity(resource) + ) + return false + + const amount = Math.min(this.freeNextStore, powerSpawn.freeSpecificStore(resource)) + + // Find a provider + + const provider = room.highestWeightedStoringStructures(RESOURCE_ENERGY) + if (!provider) return false + + this.message += 'RPSTE' + + CreepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.withdraw, + provider.id, + amount, + resource, + ) + CreepProcs.createCreepRoomLogisticsRequest( + this, + RoomLogisticsRequestTypes.transfer, + powerSpawn.id, + Math.min(this.freeNextStore + this.store[resource], powerSpawn.freeSpecificStore(resource)), + resource, + ) + return true + } + + constructor(creepID: Id) { + super(creepID) + } + + public static roleManager(room: Room, creepsOfRole: string[]) { + for (const creepName of creepsOfRole) { + const creep: HubHauler = Game.creeps[creepName] - // Try to travel to the hub, iterate if there was movement - - if (creep.travelToHub() !== Result.success) continue - - creep.createCreepRoomLogisticsRequests() - /* + // Try to travel to the hub, iterate if there was movement + + if (creep.travelToHub() !== Result.success) continue + + creep.createCreepRoomLogisticsRequests() + /* // If the creep has no reservations but is full if (!creep.memory[CreepMemoryKeys.roomLogisticsRequests].length && creep.store.getFreeCapacity() === 0) { @@ -688,9 +673,9 @@ export class HubHauler extends Creep { continue } */ - if (!creepProcs.runRoomLogisticsRequests(creep)) continue + if (!CreepProcs.runRoomLogisticsRequests(creep)) continue - creep.message += '🚬' - } + creep.message += '🚬' } + } } diff --git a/src/room/creeps/roleManagers/commune/maintainer.ts b/src/room/creeps/roleManagers/commune/maintainer.ts index 7ab5a9a1a..9fe0a94b8 100644 --- a/src/room/creeps/roleManagers/commune/maintainer.ts +++ b/src/room/creeps/roleManagers/commune/maintainer.ts @@ -8,43 +8,43 @@ import { StatsManager } from 'international/stats' import { findCoordsInsideRect, findObjectWithID, getRange } from 'utils/utils' import { packCoord } from 'other/codec' import { creepUtils } from 'room/creeps/creepUtils' -import { creepProcs } from 'room/creeps/creepProcs' +import { CreepProcs } from 'room/creeps/creepProcs' export class Maintainer extends Creep { - constructor(creepID: Id) { - super(creepID) - } + constructor(creepID: Id) { + super(creepID) + } - update() { - const packedCoord = Memory.creeps[this.name][CreepMemoryKeys.packedCoord] - if (packedCoord) { - this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.normal) - } + update() { + const packedCoord = Memory.creeps[this.name][CreepMemoryKeys.packedCoord] + if (packedCoord) { + this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.normal) } + } - initRun() { - this.avoidEnemyThreatCoords() - } + initRun() { + this.avoidEnemyThreatCoords() + } - run?() { - const cSiteTarget = this.room.roomManager.cSiteTarget - if (cSiteTarget && cSiteTarget.structureType === STRUCTURE_SPAWN) { - this.advancedBuild() + run?() { + const cSiteTarget = this.room.roomManager.cSiteTarget + if (cSiteTarget && cSiteTarget.structureType === STRUCTURE_SPAWN) { + this.advancedBuild() - return - } - /* + return + } + /* const rampartCSite = this.room.find(FIND_MY_CONSTRUCTION_SITES).find(site => site.structureType === STRUCTURE_RAMPART) if (rampartCSite && this.advancedBuildCSite(rampartCSite) !== Result.fail) return */ - if (creepProcs.repairCommune(this)) return - if (creepProcs.repairNearby(this)) return - } + if (CreepProcs.repairCommune(this)) return + if (CreepProcs.repairNearby(this)) return + } - static roleManager(room: Room, creepsOfRole: string[]) { - for (const creepName of creepsOfRole) { - const creep: Maintainer = Game.creeps[creepName] - creep.run() - } + static roleManager(room: Room, creepsOfRole: string[]) { + for (const creepName of creepsOfRole) { + const creep: Maintainer = Game.creeps[creepName] + creep.run() } + } } diff --git a/src/room/creeps/roleManagers/commune/sourceHarvester.ts b/src/room/creeps/roleManagers/commune/sourceHarvester.ts index 3e0dca790..a402f6874 100644 --- a/src/room/creeps/roleManagers/commune/sourceHarvester.ts +++ b/src/room/creeps/roleManagers/commune/sourceHarvester.ts @@ -21,7 +21,7 @@ import { Hauler } from './hauler' import { creepUtils } from 'room/creeps/creepUtils' import { myCreepUtils } from 'room/creeps/myCreepUtils' import { structureUtils } from 'room/structureUtils' -import { creepProcs } from 'room/creeps/creepProcs' +import { CreepProcs } from 'room/creeps/creepProcs' export class SourceHarvester extends Creep { constructor(creepID: Id) { @@ -188,7 +188,7 @@ export class SourceHarvester extends Creep { if (this.nextStore.energy < myCreepUtils.parts(this).work) { if (this.movedResource) return false - const result = creepProcs.runRoomLogisticsRequestAdvanced(this, { + const result = CreepProcs.runRoomLogisticsRequestAdvanced(this, { resourceTypes: new Set([RESOURCE_ENERGY]), types: new Set([ RoomLogisticsRequestTypes.withdraw, @@ -222,7 +222,7 @@ export class SourceHarvester extends Creep { if (this.nextStore.energy < workPartCount) { if (this.movedResource) return false - const result = creepProcs.runRoomLogisticsRequestAdvanced(this, { + const result = CreepProcs.runRoomLogisticsRequestAdvanced(this, { resourceTypes: new Set([RESOURCE_ENERGY]), types: new Set([ RoomLogisticsRequestTypes.withdraw, diff --git a/src/room/creeps/roleManagers/international/allyVanguard.ts b/src/room/creeps/roleManagers/international/allyVanguard.ts index d8188095a..e0156aa8e 100644 --- a/src/room/creeps/roleManagers/international/allyVanguard.ts +++ b/src/room/creeps/roleManagers/international/allyVanguard.ts @@ -10,244 +10,243 @@ import { findObjectWithID, getRangeXY, getRange } from 'utils/utils' import { unpackCoord } from 'other/codec' import { creepUtils } from 'room/creeps/creepUtils' import { myCreepUtils } from 'room/creeps/myCreepUtils' -import { creepProcs } from 'room/creeps/creepProcs' +import { CreepProcs } from 'room/creeps/creepProcs' export class AllyVanguard extends Creep { - update() { - const packedCoord = Memory.creeps[this.name][CreepMemoryKeys.packedCoord] - if (packedCoord) { - if (this.isDying()) { - this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.dying) - } else { - this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.important) - } - } + update() { + const packedCoord = Memory.creeps[this.name][CreepMemoryKeys.packedCoord] + if (packedCoord) { + if (this.isDying()) { + this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.dying) + } else { + this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.important) + } } + } - initRun() { - const request = Memory.workRequests[this.memory[CreepMemoryKeys.workRequest]] + initRun() { + const request = Memory.workRequests[this.memory[CreepMemoryKeys.workRequest]] - if (!request) return + if (!request) return - request[WorkRequestKeys.allyVanguard] -= myCreepUtils.parts(this).work - } + request[WorkRequestKeys.allyVanguard] -= myCreepUtils.parts(this).work + } - findRemote?(): boolean { - if (this.memory[CreepMemoryKeys.remote]) return true + findRemote?(): boolean { + if (this.memory[CreepMemoryKeys.remote]) return true - const { room } = this + const { room } = this - const exitRoomNames = Game.map.describeExits(room.name) + const exitRoomNames = Game.map.describeExits(room.name) - for (const exitKey in exitRoomNames) { - const roomName = exitRoomNames[exitKey as ExitKey] + for (const exitKey in exitRoomNames) { + const roomName = exitRoomNames[exitKey as ExitKey] - const roomMemory = Memory.rooms[roomName] + const roomMemory = Memory.rooms[roomName] - // If the room type is not able to be harvested from + // If the room type is not able to be harvested from - if ( - !roomMemory || - roomMemory[RoomMemoryKeys.type] === RoomTypes.enemy || - roomMemory[RoomMemoryKeys.type] === RoomTypes.enemyRemote || - roomMemory[RoomMemoryKeys.type] === RoomTypes.sourceKeeper || - roomMemory[RoomMemoryKeys.type] === RoomTypes.ally || - roomMemory[RoomMemoryKeys.type] === RoomTypes.allyRemote - ) - continue + if ( + !roomMemory || + roomMemory[RoomMemoryKeys.type] === RoomTypes.enemy || + roomMemory[RoomMemoryKeys.type] === RoomTypes.enemyRemote || + roomMemory[RoomMemoryKeys.type] === RoomTypes.sourceKeeper || + roomMemory[RoomMemoryKeys.type] === RoomTypes.ally || + roomMemory[RoomMemoryKeys.type] === RoomTypes.allyRemote + ) + continue - this.memory[CreepMemoryKeys.remote] = roomName - return true - } + this.memory[CreepMemoryKeys.remote] = roomName + return true + } - // No viable remote was found + // No viable remote was found - return false - } + return false + } - getEnergyFromRemote?(): void { - const { room } = this + getEnergyFromRemote?(): void { + const { room } = this - if (!this.findRemote()) return + if (!this.findRemote()) return - if (room.name !== this.memory[CreepMemoryKeys.remote]) { - this.createMoveRequest({ - origin: this.pos, - goals: [ - { - pos: new RoomPosition(25, 25, this.memory[CreepMemoryKeys.remote]), - range: 25, - }, - ], - avoidEnemyRanges: true, - }) + if (room.name !== this.memory[CreepMemoryKeys.remote]) { + this.createMoveRequest({ + origin: this.pos, + goals: [ + { + pos: new RoomPosition(25, 25, this.memory[CreepMemoryKeys.remote]), + range: 25, + }, + ], + avoidEnemyRanges: true, + }) - return - } + return + } - // Define the creep's sourceName + // Define the creep's sourceName - if (!this.findSourceIndex()) return + if (!this.findSourceIndex()) return - const sourceIndex = this.memory[CreepMemoryKeys.sourceIndex] + const sourceIndex = this.memory[CreepMemoryKeys.sourceIndex] - // Try to move to source. If creep moved then iterate + // Try to move to source. If creep moved then iterate - if (this.travelToSource(sourceIndex)) return + if (this.travelToSource(sourceIndex)) return - // Try to normally harvest. Iterate if creep harvested + // Try to normally harvest. Iterate if creep harvested - const source = room.find(FIND_SOURCES)[sourceIndex] - if (creepUtils.harvestSource(this, source) === Result.fail) return - } + const source = room.find(FIND_SOURCES)[sourceIndex] + if (creepUtils.harvestSource(this, source) === Result.fail) return + } - getEnergyFromRoom?(): boolean { - if (this.room.controller.owner) return false + getEnergyFromRoom?(): boolean { + if (this.room.controller.owner) return false - if ( - creepProcs.runRoomLogisticsRequestsAdvanced(this, { - resourceTypes: new Set([RESOURCE_ENERGY]), - }) === Result.success - ) - return true + if ( + CreepProcs.runRoomLogisticsRequestsAdvanced(this, { + resourceTypes: new Set([RESOURCE_ENERGY]), + }) === Result.success + ) + return true - if (!this.needsResources()) return true + if (!this.needsResources()) return true - // Define the creep's sourceName + // Define the creep's sourceName - if (!this.findSourceIndex()) return true + if (!this.findSourceIndex()) return true - const sourceIndex = this.memory[CreepMemoryKeys.sourceIndex] + const sourceIndex = this.memory[CreepMemoryKeys.sourceIndex] - // Try to move to source. If creep moved then iterate + // Try to move to source. If creep moved then iterate - if (this.travelToSource(sourceIndex)) return true + if (this.travelToSource(sourceIndex)) return true - // Try to normally harvest. Iterate if creep harvested + // Try to normally harvest. Iterate if creep harvested - const source = this.room.roomManager.communeSources[sourceIndex] - if (creepUtils.harvestSource(this, source) === Result.success) { - return true - } - return true + const source = this.room.roomManager.communeSources[sourceIndex] + if (creepUtils.harvestSource(this, source) === Result.success) { + return true } + return true + } - /** - * - */ - travelToSource?(sourceIndex: number): boolean { - this.message = '🚬' + /** + * + */ + travelToSource?(sourceIndex: number): boolean { + this.message = '🚬' - const harvestPos = this.findSourceHarvestPos(this.memory[CreepMemoryKeys.sourceIndex]) - if (!harvestPos) return true + const harvestPos = this.findSourceHarvestPos(this.memory[CreepMemoryKeys.sourceIndex]) + if (!harvestPos) return true - // If the creep is at the creep's packedHarvestPos, inform false + // If the creep is at the creep's packedHarvestPos, inform false - if (getRange(this.pos, harvestPos) === 0) return false + if (getRange(this.pos, harvestPos) === 0) return false - // Otherwise say the intention and create a moveRequest to the creep's harvestPos, and inform the attempt + // Otherwise say the intention and create a moveRequest to the creep's harvestPos, and inform the attempt - this.message = `⏩ ${sourceIndex}` + this.message = `⏩ ${sourceIndex}` - this.createMoveRequest({ - origin: this.pos, - goals: [ - { - pos: harvestPos, - range: 0, - }, - ], - }) + this.createMoveRequest({ + origin: this.pos, + goals: [ + { + pos: harvestPos, + range: 0, + }, + ], + }) - return true - } + return true + } + + /** + * Builds a spawn in the creep's commune workRequest + */ + buildRoom?(): void { + const { room } = this + + if (this.needsResources()) { + if (this.memory[CreepMemoryKeys.remote]) { + this.getEnergyFromRemote() + return + } + + if (!this.getEnergyFromRoom()) { + this.getEnergyFromRemote() + } - /** - * Builds a spawn in the creep's commune workRequest - */ - buildRoom?(): void { - const { room } = this - - if (this.needsResources()) { - if (this.memory[CreepMemoryKeys.remote]) { - this.getEnergyFromRemote() - return - } - - if (!this.getEnergyFromRoom()) { - this.getEnergyFromRemote() - } - - return - } - - if (room.name !== this.memory[CreepMemoryKeys.workRequest]) { - this.createMoveRequest({ - origin: this.pos, - goals: [ - { - pos: new RoomPosition(25, 25, this.memory[CreepMemoryKeys.workRequest]), - range: 25, - }, - ], - avoidEnemyRanges: true, - }) - - return - } - - this.advancedBuildAllyCSite() + return } - constructor(creepID: Id) { - super(creepID) + if (room.name !== this.memory[CreepMemoryKeys.workRequest]) { + this.createMoveRequest({ + origin: this.pos, + goals: [ + { + pos: new RoomPosition(25, 25, this.memory[CreepMemoryKeys.workRequest]), + range: 25, + }, + ], + avoidEnemyRanges: true, + }) + + return } - static roleManager(room: Room, creepsOfRole: string[]) { - // Loop through the names of the creeps of the role - - for (const creepName of creepsOfRole) { - // Get the creep using its name - - const creep: AllyVanguard = Game.creeps[creepName] - - const request = creep.memory[CreepMemoryKeys.workRequest] - - creep.message = request - - if ( - room.name === request || - (creep.memory[CreepMemoryKeys.remote] && - room.name === creep.memory[CreepMemoryKeys.remote]) - ) { - creep.buildRoom() - continue - } - - // Otherwise if the creep is not in the claimTarget - - // Move to it - - if ( - creep.createMoveRequest({ - origin: creep.pos, - goals: [ - { - pos: new RoomPosition(25, 25, creep.memory[CreepMemoryKeys.workRequest]), - range: 25, - }, - ], - avoidEnemyRanges: true, - typeWeights: { - [RoomTypes.enemy]: Infinity, - [RoomTypes.ally]: Infinity, - [RoomTypes.sourceKeeper]: Infinity, - }, - }) === Result.fail - ) { - const request = Memory.workRequests[creep.memory[CreepMemoryKeys.workRequest]] - if (request) request[WorkRequestKeys.abandon] = 20000 - } - } + this.advancedBuildAllyCSite() + } + + constructor(creepID: Id) { + super(creepID) + } + + static roleManager(room: Room, creepsOfRole: string[]) { + // Loop through the names of the creeps of the role + + for (const creepName of creepsOfRole) { + // Get the creep using its name + + const creep: AllyVanguard = Game.creeps[creepName] + + const request = creep.memory[CreepMemoryKeys.workRequest] + + creep.message = request + + if ( + room.name === request || + (creep.memory[CreepMemoryKeys.remote] && room.name === creep.memory[CreepMemoryKeys.remote]) + ) { + creep.buildRoom() + continue + } + + // Otherwise if the creep is not in the claimTarget + + // Move to it + + if ( + creep.createMoveRequest({ + origin: creep.pos, + goals: [ + { + pos: new RoomPosition(25, 25, creep.memory[CreepMemoryKeys.workRequest]), + range: 25, + }, + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + }, + }) === Result.fail + ) { + const request = Memory.workRequests[creep.memory[CreepMemoryKeys.workRequest]] + if (request) request[WorkRequestKeys.abandon] = 20000 + } } + } } diff --git a/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts b/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts index ab8ed4a8d..b339f6e01 100644 --- a/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts +++ b/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts @@ -22,7 +22,7 @@ import { packCoord, reversePosList, unpackPosAt } from 'other/codec' import { indexOf } from 'lodash' import { creepUtils } from 'room/creeps/creepUtils' import { myCreepUtils } from 'room/creeps/myCreepUtils' -import { creepProcs } from 'room/creeps/creepProcs' +import { CreepProcs } from 'room/creeps/creepProcs' export class RemoteHarvester extends Creep { constructor(creepID: Id) { @@ -330,7 +330,7 @@ export class RemoteHarvester extends Creep { if (this.nextStore.energy >= myCreepUtils.parts(this).work) return Result.success if (this.movedResource) return Result.fail - return creepProcs.runRoomLogisticsRequestAdvanced(this, { + return CreepProcs.runRoomLogisticsRequestAdvanced(this, { resourceTypes: new Set([RESOURCE_ENERGY]), types: new Set([ RoomLogisticsRequestTypes.withdraw, From 26a3299c22abd06a47855767f0187aab3e09d9e3 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 23 Jan 2024 13:49:08 -0800 Subject: [PATCH 098/190] static CreepUtils, LogisticsProcs --- src/international/creepOrganizer.ts | 4 +- src/room/commune/commune.ts | 12 +- src/room/creeps/creepAdditions.ts | 346 ++++++++--------- src/room/creeps/creepProcs.ts | 19 +- .../creeps/creepPrototypes/creepFunctions.ts | 6 +- src/room/creeps/creepUtils.ts | 40 +- .../commune/controllerUpgrader.ts | 2 +- .../commune/controllerUpgrader.ts | 2 +- .../creeps/roleManagers/commune/maintainer.ts | 2 +- .../roleManagers/commune/sourceHarvester.ts | 4 +- .../international/allyVanguard.ts | 6 +- .../roleManagers/international/vanguard.ts | 357 +++++++++--------- .../remote/remoteSourceHarvester.ts | 6 +- src/room/logisticsProcs.ts | 28 +- src/room/room.ts | 10 +- 15 files changed, 413 insertions(+), 431 deletions(-) diff --git a/src/international/creepOrganizer.ts b/src/international/creepOrganizer.ts index 88535a993..09d5d537c 100644 --- a/src/international/creepOrganizer.ts +++ b/src/international/creepOrganizer.ts @@ -4,7 +4,7 @@ import { customLog } from 'utils/logging' import { CollectiveManager } from './collective' import { packCoord } from 'other/codec' import { StatsManager } from './stats' -import { creepUtils } from 'room/creeps/creepUtils' +import { CreepUtils } from 'room/creeps/creepUtils' import { CreepDataProcs, creepData } from 'room/creeps/creepData' import { CreepProcs } from 'room/creeps/creepProcs' @@ -65,7 +65,7 @@ export class CreepOrganizer { creep.room.myCreeps.push(creep) creep.room.myCreepsByRole[role].push(creepName) - const customID = creepUtils.customIDCreep(creep) + const customID = CreepUtils.customIDCreep(creep) CollectiveManager.customCreepIDs[customID] = true // Add the creep's name to the position in its room diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index 33561dc9b..74e15630a 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -39,7 +39,7 @@ import { roomNameUtils } from 'room/roomNameUtils' import { LogTypes, customLog } from 'utils/logging' import { communeProcs } from './communeProcs' import { structureUtils } from 'room/structureUtils' -import { logisticsProcs } from 'room/logisticsProcs' +import { LogisticsProcs } from 'room/logisticsProcs' import { towerProcs } from './towerProcs' import { sourceProcs } from 'room/sourceProcs' import { terminalProcs } from './terminal/terminalProcs' @@ -260,12 +260,12 @@ export class CommuneManager { this.haulerNeedManager.run() spawningStructureProcs.createRoomLogisticsRequests(this.room) - logisticsProcs.createCommuneStoringStructureLogisticsRequests(this.room) + LogisticsProcs.createCommuneStoringStructureLogisticsRequests(this.room) this.factoryManager.run() - logisticsProcs.createCommuneContainerLogisticsRequests(this.room) - logisticsProcs.createCommuneDroppedResourceLogisticsRequests(this.room) - logisticsProcs.createCommuneTombstoneLogisticsRequests(this.room) - logisticsProcs.createCommuneRuinLogisticsRequests(this.room) + LogisticsProcs.createCommuneContainerLogisticsRequests(this.room) + LogisticsProcs.createCommuneDroppedResourceLogisticsRequests(this.room) + LogisticsProcs.createCommuneTombstoneLogisticsRequests(this.room) + LogisticsProcs.createCommuneRuinLogisticsRequests(this.room) this.linkManager.run() this.labManager.run() powerSpawnProcs.run(this.room) diff --git a/src/room/creeps/creepAdditions.ts b/src/room/creeps/creepAdditions.ts index 5c2dbf6d4..a0c53ab60 100644 --- a/src/room/creeps/creepAdditions.ts +++ b/src/room/creeps/creepAdditions.ts @@ -9,238 +9,224 @@ import { import { customLog } from 'utils/logging' import { getRangeXY, getRange, isXYExit, isExit } from 'utils/utils' import { profiler } from 'other/profiler' -import { creepUtils } from './creepUtils' +import { CreepUtils } from './creepUtils' import { structureUtils } from 'room/structureUtils' import { towerUtils } from 'room/commune/towerUtils' Object.defineProperties(Creep.prototype, { - nameData: { - get() { - if (this._nameData) return this._nameData + nameData: { + get() { + if (this._nameData) return this._nameData - return (this._nameData = creepUtils.expandName(this.name)) - }, + return (this._nameData = CreepUtils.expandName(this.name)) }, - role: { - get() { - if (this._role) return this._role + }, + role: { + get() { + if (this._role) return this._role - return (this._role = creepRoles[parseInt(this.nameData[0])]) - }, + return (this._role = creepRoles[parseInt(this.nameData[0])]) }, - commune: { - get() { - if (this._commune) return this._commune + }, + commune: { + get() { + if (this._commune) return this._commune - return (this._commune = Game.rooms[this.nameData[1]]) - }, + return (this._commune = Game.rooms[this.nameData[1]]) }, - strength: { - get() { - if (this._strength) return this._strength - - this._strength = 1 - - for (const part of this.body) { - switch (part.type) { - case RANGED_ATTACK: - this._strength += - RANGED_ATTACK_POWER * - (part.boost ? BOOSTS[part.type][part.boost].rangedAttack : 1) - break - case ATTACK: - this._strength += - ATTACK_POWER * (part.boost ? BOOSTS[part.type][part.boost].attack : 1) - break - case HEAL: - this._strength += - HEAL_POWER * (part.boost ? BOOSTS[part.type][part.boost].heal : 1) - break - case TOUGH: - this._strength += - 1 + 5 / (part.boost ? BOOSTS[part.type][part.boost].damage : 1) - break - default: - this._strength += 1 - } - } - - return this._strength - }, + }, + strength: { + get() { + if (this._strength) return this._strength + + this._strength = 1 + + for (const part of this.body) { + switch (part.type) { + case RANGED_ATTACK: + this._strength += + RANGED_ATTACK_POWER * (part.boost ? BOOSTS[part.type][part.boost].rangedAttack : 1) + break + case ATTACK: + this._strength += ATTACK_POWER * (part.boost ? BOOSTS[part.type][part.boost].attack : 1) + break + case HEAL: + this._strength += HEAL_POWER * (part.boost ? BOOSTS[part.type][part.boost].heal : 1) + break + case TOUGH: + this._strength += 1 + 5 / (part.boost ? BOOSTS[part.type][part.boost].damage : 1) + break + default: + this._strength += 1 + } + } + + return this._strength }, - macroHealStrength: { - get() { - if (this._macroHealStrength !== undefined) return this._macroHealStrength + }, + macroHealStrength: { + get() { + if (this._macroHealStrength !== undefined) return this._macroHealStrength - this._macroHealStrength = this.combatStrength.heal + this._macroHealStrength = this.combatStrength.heal - // Find adjacent creeps + // Find adjacent creeps - let top = Math.max(Math.min(this.pos.y - 3, roomDimensions - 1), 0) - let left = Math.max(Math.min(this.pos.x - 3, roomDimensions - 1), 0) - let bottom = Math.max(Math.min(this.pos.y + 3, roomDimensions - 1), 0) - let right = Math.max(Math.min(this.pos.x + 3, roomDimensions - 1), 0) + let top = Math.max(Math.min(this.pos.y - 3, roomDimensions - 1), 0) + let left = Math.max(Math.min(this.pos.x - 3, roomDimensions - 1), 0) + let bottom = Math.max(Math.min(this.pos.y + 3, roomDimensions - 1), 0) + let right = Math.max(Math.min(this.pos.x + 3, roomDimensions - 1), 0) - const adjacentCreeps = this.room.lookForAtArea( - LOOK_CREEPS, - top, - left, - bottom, - right, - true, - ) + const adjacentCreeps = this.room.lookForAtArea(LOOK_CREEPS, top, left, bottom, right, true) - // Calculate combined heal to this creep of adjacent creeps + // Calculate combined heal to this creep of adjacent creeps - for (const posData of adjacentCreeps) { - const { creep } = posData + for (const posData of adjacentCreeps) { + const { creep } = posData - if (this.owner.username === Memory.me) { - if (creep.owner.username !== Memory.me) continue - } else if (this.owner.username !== creep.owner.username) continue + if (this.owner.username === Memory.me) { + if (creep.owner.username !== Memory.me) continue + } else if (this.owner.username !== creep.owner.username) continue - const range = getRange(this.pos, creep.pos) - if (range > 3) continue + const range = getRange(this.pos, creep.pos) + if (range > 3) continue - let healStrength = creep.combatStrength.heal - if (range > 1) healStrength /= HEAL_POWER / RANGED_HEAL_POWER + let healStrength = creep.combatStrength.heal + if (range > 1) healStrength /= HEAL_POWER / RANGED_HEAL_POWER - this._macroHealStrength += Math.floor(healStrength) - } + this._macroHealStrength += Math.floor(healStrength) + } - return this._macroHealStrength - }, + return this._macroHealStrength }, - netTowerDamage: { - get() { - if (this._netTowerDamage !== undefined) return this._netTowerDamage + }, + netTowerDamage: { + get() { + if (this._netTowerDamage !== undefined) return this._netTowerDamage - this._netTowerDamage = this.grossTowerDamage - this._netTowerDamage *= this.defenceStrength + this._netTowerDamage = this.grossTowerDamage + this._netTowerDamage *= this.defenceStrength - // The enemy can't heal when we're in safemode, so don't calculate it + // The enemy can't heal when we're in safemode, so don't calculate it - if (this.room.controller.safeMode) return this._netTowerDamage + if (this.room.controller.safeMode) return this._netTowerDamage - this._netTowerDamage -= this.macroHealStrength + this._netTowerDamage -= this.macroHealStrength - return this._netTowerDamage - }, + return this._netTowerDamage }, - combatStrength: { - get() { - if (this._combatStrength) return this._combatStrength - - this._combatStrength = { - dismantle: 0, - melee: 0, - ranged: 0, - heal: 0, - } - - for (const part of this.body) { - if (part.type === WORK) { - const boost = part.boost as - | RESOURCE_CATALYZED_ZYNTHIUM_ACID - | RESOURCE_ZYNTHIUM_ACID - | RESOURCE_ZYNTHIUM_HYDRIDE - - this._combatStrength.dismantle += - DISMANTLE_POWER * - (part.boost && dismantleBoosts.includes(boost) - ? BOOSTS[part.type][boost].dismantle - : 1) - continue - } - - if (part.type === ATTACK) { - this._combatStrength.melee += - ATTACK_POWER * (part.boost ? BOOSTS[part.type][part.boost].attack : 1) - continue - } - - if (part.type === RANGED_ATTACK) { - this._combatStrength.ranged += - RANGED_ATTACK_POWER * - (part.boost ? BOOSTS[part.type][part.boost].rangedAttack : 1) - continue - } - - if (part.type === HEAL) { - this._combatStrength.heal += - HEAL_POWER * (part.boost ? BOOSTS[part.type][part.boost].heal : 1) - } - } - - return this._combatStrength - }, + }, + combatStrength: { + get() { + if (this._combatStrength) return this._combatStrength + + this._combatStrength = { + dismantle: 0, + melee: 0, + ranged: 0, + heal: 0, + } + + for (const part of this.body) { + if (part.type === WORK) { + const boost = part.boost as + | RESOURCE_CATALYZED_ZYNTHIUM_ACID + | RESOURCE_ZYNTHIUM_ACID + | RESOURCE_ZYNTHIUM_HYDRIDE + + this._combatStrength.dismantle += + DISMANTLE_POWER * + (part.boost && dismantleBoosts.includes(boost) ? BOOSTS[part.type][boost].dismantle : 1) + continue + } + + if (part.type === ATTACK) { + this._combatStrength.melee += + ATTACK_POWER * (part.boost ? BOOSTS[part.type][part.boost].attack : 1) + continue + } + + if (part.type === RANGED_ATTACK) { + this._combatStrength.ranged += + RANGED_ATTACK_POWER * (part.boost ? BOOSTS[part.type][part.boost].rangedAttack : 1) + continue + } + + if (part.type === HEAL) { + this._combatStrength.heal += + HEAL_POWER * (part.boost ? BOOSTS[part.type][part.boost].heal : 1) + } + } + + return this._combatStrength }, - defenceStrength: { - get() { - if (this._defenceStrength) return this._defenceStrength + }, + defenceStrength: { + get() { + if (this._defenceStrength) return this._defenceStrength - const boosts = this.boosts + const boosts = this.boosts - if (boosts.XGHO2 > 0) return (this._defenceStrength = BOOSTS.tough.XGHO2.damage) - if (boosts.GHO2 > 0) return (this._defenceStrength = BOOSTS.tough.GHO2.damage) - if (boosts.GO > 0) return (this._defenceStrength = BOOSTS.tough.GO.damage) + if (boosts.XGHO2 > 0) return (this._defenceStrength = BOOSTS.tough.XGHO2.damage) + if (boosts.GHO2 > 0) return (this._defenceStrength = BOOSTS.tough.GHO2.damage) + if (boosts.GO > 0) return (this._defenceStrength = BOOSTS.tough.GO.damage) - return 1 - }, + return 1 }, - parts: { - get() { - if (this._parts) return this._parts + }, + parts: { + get() { + if (this._parts) return this._parts - this._parts = {} + this._parts = {} - for (const partType of BODYPARTS_ALL) this._parts[partType] = 0 + for (const partType of BODYPARTS_ALL) this._parts[partType] = 0 - for (const part of this.body) this._parts[part.type] += 1 + for (const part of this.body) this._parts[part.type] += 1 - return this._parts - }, + return this._parts }, - boosts: { - get() { - if (this._boosts) return this._boosts + }, + boosts: { + get() { + if (this._boosts) return this._boosts - this._boosts = {} + this._boosts = {} - let boost + let boost - for (const part of this.body) { - boost = part.boost as MineralBoostConstant - if (!boost) continue + for (const part of this.body) { + boost = part.boost as MineralBoostConstant + if (!boost) continue - this._boosts[boost] ? (this._boosts[boost] += 1) : (this._boosts[boost] = 1) - } + this._boosts[boost] ? (this._boosts[boost] += 1) : (this._boosts[boost] = 1) + } - return this._boosts - }, + return this._boosts }, - canMove: { - get() { - if (this._canMove !== undefined) return this._canMove + }, + canMove: { + get() { + if (this._canMove !== undefined) return this._canMove - return (this._canMove = !this.fatigue && !this.spawning && this.getActiveBodyparts(MOVE) > 0) - }, + return (this._canMove = !this.fatigue && !this.spawning && this.getActiveBodyparts(MOVE) > 0) }, - idealSquadMembers: { - get() { - if (this._idealSquadMembers) return this._idealSquadMembers + }, + idealSquadMembers: { + get() { + if (this._idealSquadMembers) return this._idealSquadMembers - if (this.memory[CreepMemoryKeys.squadSize] === 2) { - } + if (this.memory[CreepMemoryKeys.squadSize] === 2) { + } - if (this.memory[CreepMemoryKeys.squadSize] === 4) { - } + if (this.memory[CreepMemoryKeys.squadSize] === 4) { + } - // Dynamic + // Dynamic - return this._idealSquadMembers - }, + return this._idealSquadMembers }, + }, } as PropertyDescriptorMap & ThisType) Object.defineProperties(PowerCreep.prototype, { diff --git a/src/room/creeps/creepProcs.ts b/src/room/creeps/creepProcs.ts index 374d58f21..1a374dc4d 100644 --- a/src/room/creeps/creepProcs.ts +++ b/src/room/creeps/creepProcs.ts @@ -10,7 +10,7 @@ import { RoomLogisticsRequestTypes, offsetsByDirection, } from 'international/constants' -import { creepUtils } from './creepUtils' +import { CreepUtils } from './creepUtils' import { communeUtils } from 'room/commune/communeUtils' import { CreepLogisticsRequest, @@ -43,9 +43,9 @@ export class CreepProcs { if (controllerStructure) { // If we're not on a viable upgrade pos - const upgradePos = creepUtils.findUpgradePosWeak(creep) + const upgradePos = CreepUtils.findUpgradePosWeak(creep) if (!upgradePos) { - const upgradePos = creepUtils.findUpgradePosStrong(creep) + const upgradePos = CreepUtils.findUpgradePosStrong(creep) if (!upgradePos) return false if (getRange(creep.pos, upgradePos) > 0) { @@ -218,7 +218,7 @@ export class CreepProcs { */ static runDead(creepName: string) { const creepMemory = Memory.creeps[creepName] - const role = creepUtils.roleName(creepName) + const role = CreepUtils.roleName(creepName) } static registerInterTickRepairTarget(creep: Creep) { @@ -234,7 +234,10 @@ export class CreepProcs { this.registerRepairReservation(creep, target) } - private static registerRepairReservation(creep: Creep, target: Structure) { + private static registerRepairReservation( + creep: Creep, + target: Structure, + ) { target.reserveHits += creep.store.getUsedCapacity(RESOURCE_ENERGY) * REPAIR_POWER } @@ -292,7 +295,7 @@ export class CreepProcs { // Otherwise if we don't need resources and can maintain const workPartCount = myCreepUtils.parts(creep).work - let repairTarget = creepUtils.findRepairTarget(creep) + let repairTarget = CreepUtils.findRepairTarget(creep) if (!repairTarget) { creep.message = '❌🔧' @@ -344,7 +347,7 @@ export class CreepProcs { // Find repair targets that don't include the current target, informing true if none were found repairTarget = - creepUtils.findNewRepairTarget(creep) || creepUtils.findNewRampartRepairTarget(creep) + CreepUtils.findNewRepairTarget(creep) || CreepUtils.findNewRampartRepairTarget(creep) if (!repairTarget) return true this.registerRepairReservation(creep, repairTarget) @@ -726,7 +729,7 @@ export class CreepProcs { } static runRoomLogisticsRequestAdvanced(creep: Creep, args?: FindNewRoomLogisticsRequestArgs) { - const request = creepUtils.findRoomLogisticsRequest(creep, args) + const request = CreepUtils.findRoomLogisticsRequest(creep, args) if (!request) return Result.noAction /* log('REQUEST RESPONSE', request.T, { position: 1 }) */ diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index c7122909e..13d95e563 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -13,7 +13,7 @@ import { packCoord, unpackCoordAsPos } from 'other/codec' import { StatsManager } from 'international/stats' -import { creepUtils } from '../creepUtils' +import { CreepUtils } from '../creepUtils' import { RoomManager } from 'room/room' import { RoomLogisticsRequest } from 'types/roomRequests' import { CustomPathFinder } from 'international/customPathFinder' @@ -251,7 +251,7 @@ Creep.prototype.advancedBuildCSite = function (cSite) { // Find the build amount by finding the smaller of the creep's work and the progress left for the cSite divided by build power - const energySpentOnConstruction = creepUtils.findEnergySpentOnConstruction( + const energySpentOnConstruction = CreepUtils.findEnergySpentOnConstruction( this, cSite, myCreepUtils.parts(this).work, @@ -333,7 +333,7 @@ Creep.prototype.advancedBuildAllyCSite = function () { if (buildResult === OK) { // Find the build amount by finding the smaller of the creep's work and the progress left for the cSite divided by build power - const energySpentOnConstruction = creepUtils.findEnergySpentOnConstruction( + const energySpentOnConstruction = CreepUtils.findEnergySpentOnConstruction( this, cSiteTarget, myCreepUtils.parts(this).work, diff --git a/src/room/creeps/creepUtils.ts b/src/room/creeps/creepUtils.ts index 7c1ef9572..c509e229f 100644 --- a/src/room/creeps/creepUtils.ts +++ b/src/room/creeps/creepUtils.ts @@ -29,36 +29,36 @@ import { } from 'types/roomRequests' export class CreepUtils { - expandName(creepName: string) { + static expandName(creepName: string) { return creepName.split('_') } - roleName(creepName: string) { + static roleName(creepName: string) { const expandedName = this.expandName(creepName) return creepRoles[parseInt(expandedName[0])] } - roleCreep(creep: Creep) { + static roleCreep(creep: Creep) { if (creep._role !== undefined) return creep._role return (creep._role = this.roleName(creep.name)) } - communeCreep(creep: Creep) { + static communeCreep(creep: Creep) { if (creep._commune !== undefined) return creep._commune const expandedName = this.expandName(creep.name) return (creep._commune = Game.rooms[expandedName[1]]) } - customIDCreep(creep: Creep) { + static customIDCreep(creep: Creep) { if (creep._customID !== undefined) return creep._customID const expandedName = this.expandName(creep.name) return (creep._customID = parseInt(expandedName[2])) } - findEnergySpentOnConstruction( + static findEnergySpentOnConstruction( creep: Creep, cSite: ConstructionSite, workParts: number = myCreepUtils.parts(creep).work, @@ -72,7 +72,7 @@ export class CreepUtils { return energySpent } - findUpgradePosWeak(creep: Creep): RoomPosition | undefined { + static findUpgradePosWeak(creep: Creep): RoomPosition | undefined { const upgradePos = creep.room.roomManager.upgradePositions.find( pos => arePositionsEqual(creep.pos, pos) && @@ -80,7 +80,7 @@ export class CreepUtils { ) return upgradePos } - findUpgradePosStrong(creep: Creep): RoomPosition | undefined { + static findUpgradePosStrong(creep: Creep): RoomPosition | undefined { const creepMemory = Memory.creeps[creep.name] // use our packed coord if we have one if (creepMemory[CreepMemoryKeys.packedCoord]) { @@ -105,7 +105,7 @@ export class CreepUtils { return upgradePos } - harvestSource(creep: Creep, source: Source, workParts: number = myCreepUtils.parts(creep).work) { + static harvestSource(creep: Creep, source: Source, workParts: number = myCreepUtils.parts(creep).work) { if (creep.harvest(source) !== OK) { return Result.fail } @@ -121,7 +121,7 @@ export class CreepUtils { return Result.success } - findRoomLogisticsRequest(creep: Creep, args?: FindNewRoomLogisticsRequestArgs) { + static findRoomLogisticsRequest(creep: Creep, args?: FindNewRoomLogisticsRequestArgs) { const creepMemory = Memory.creeps[creep.name] if (creepMemory[CreepMemoryKeys.roomLogisticsRequests][0]) { return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] @@ -307,7 +307,7 @@ export class CreepUtils { return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] } - findRoomLogisticsRequestTypes(creep: Creep, args: FindNewRoomLogisticsRequestArgs) { + static findRoomLogisticsRequestTypes(creep: Creep, args: FindNewRoomLogisticsRequestArgs) { if (args && args.types) { if (args.types.has(RoomLogisticsRequestTypes.transfer) && creep.hasNonEnergyResource()) { /* if (args && args.noDelivery) return Result.fail */ @@ -344,7 +344,7 @@ export class CreepUtils { ]) } - canAcceptRoomLogisticsRequest( + static canAcceptRoomLogisticsRequest( creep: Creep, requestType: RoomLogisticsRequestTypes, requestID: string, @@ -474,7 +474,7 @@ export class CreepUtils { return true } - createBackupStoringStructuresRoomLogisticsRequest( + static createBackupStoringStructuresRoomLogisticsRequest( creep: Creep, types: Set, resourceTypes: Set, @@ -490,7 +490,7 @@ export class CreepUtils { return this.createBackupStoringStructuresRoomLogisticsRequestWithdraw(creep, resourceTypes) } - createBackupStoringStructuresRoomLogisticsRequestTransfer(creep: Creep) { + static createBackupStoringStructuresRoomLogisticsRequestTransfer(creep: Creep) { const storingStructures = creep.commune.communeManager.storingStructures if (!storingStructures.length) return Result.fail @@ -520,7 +520,7 @@ export class CreepUtils { } } - createBackupStoringStructuresRoomLogisticsRequestWithdraw( + static createBackupStoringStructuresRoomLogisticsRequestWithdraw( creep: Creep, resourceTypes: Set = new Set([RESOURCE_ENERGY]), ) { @@ -548,7 +548,7 @@ export class CreepUtils { } } - findRoomLogisticRequestAmount(creep: Creep, request: RoomLogisticsRequest) { + static findRoomLogisticRequestAmount(creep: Creep, request: RoomLogisticsRequest) { const target = findObjectWithID(request.targetID) // Pickup type @@ -575,7 +575,7 @@ export class CreepUtils { return Math.min(creep.freeNextStore, request.amount) } - findNewRampartRepairTarget(creep: Creep) { + static findNewRampartRepairTarget(creep: Creep) { const ramparts = creep.room.roomManager.enemyAttackers.length ? creep.room.communeManager.defensiveRamparts : communeUtils.getRampartRepairTargets(creep.room) @@ -593,7 +593,7 @@ export class CreepUtils { return bestTarget } - findNewRepairTarget(creep: Creep) { + static findNewRepairTarget(creep: Creep) { const enemyAttackers = !!creep.room.roomManager.enemyAttackers.length let repairThreshold = enemyAttackers ? 0.1 : 0.3 @@ -621,7 +621,7 @@ export class CreepUtils { return bestTarget } - findRepairTarget(creep: Creep) { + static findRepairTarget(creep: Creep) { const creepMemory = Memory.creeps[creep.name] if (creepMemory[CreepMemoryKeys.structureTarget]) { const repairTarget = findObjectWithID(creep.memory[CreepMemoryKeys.structureTarget]) @@ -631,5 +631,3 @@ export class CreepUtils { return this.findNewRepairTarget(creep) || this.findNewRampartRepairTarget(creep) } } - -export const creepUtils = new CreepUtils() diff --git a/src/room/creeps/roleManager.new/commune/controllerUpgrader.ts b/src/room/creeps/roleManager.new/commune/controllerUpgrader.ts index 679b3dd14..71af1313e 100644 --- a/src/room/creeps/roleManager.new/commune/controllerUpgrader.ts +++ b/src/room/creeps/roleManager.new/commune/controllerUpgrader.ts @@ -1,6 +1,6 @@ import { RoomMemoryKeys, creepRoles, packedPosLength } from 'international/constants' import { CreepProcs } from 'room/creeps/creepProcs' -import { creepUtils } from 'room/creeps/creepUtils' +import { CreepUtils } from 'room/creeps/creepUtils' import { DefaultRoleManager } from 'room/creeps/defaultRoleManager' class ControllerUpgraderManager extends DefaultRoleManager { diff --git a/src/room/creeps/roleManagers/commune/controllerUpgrader.ts b/src/room/creeps/roleManagers/commune/controllerUpgrader.ts index 20cb30b56..415404751 100644 --- a/src/room/creeps/roleManagers/commune/controllerUpgrader.ts +++ b/src/room/creeps/roleManagers/commune/controllerUpgrader.ts @@ -1,6 +1,6 @@ import { CreepMemoryKeys, ReservedCoordTypes, RoomMemoryKeys, packedPosLength } from 'international/constants' import { CreepProcs } from 'room/creeps/creepProcs' -import { creepUtils } from 'room/creeps/creepUtils' +import { CreepUtils } from 'room/creeps/creepUtils' import { myCreepUtils } from 'room/creeps/myCreepUtils' export class ControllerUpgrader extends Creep { diff --git a/src/room/creeps/roleManagers/commune/maintainer.ts b/src/room/creeps/roleManagers/commune/maintainer.ts index 9fe0a94b8..1a45da934 100644 --- a/src/room/creeps/roleManagers/commune/maintainer.ts +++ b/src/room/creeps/roleManagers/commune/maintainer.ts @@ -7,7 +7,7 @@ import { import { StatsManager } from 'international/stats' import { findCoordsInsideRect, findObjectWithID, getRange } from 'utils/utils' import { packCoord } from 'other/codec' -import { creepUtils } from 'room/creeps/creepUtils' +import { CreepUtils } from 'room/creeps/creepUtils' import { CreepProcs } from 'room/creeps/creepProcs' export class Maintainer extends Creep { diff --git a/src/room/creeps/roleManagers/commune/sourceHarvester.ts b/src/room/creeps/roleManagers/commune/sourceHarvester.ts index a402f6874..76d864641 100644 --- a/src/room/creeps/roleManagers/commune/sourceHarvester.ts +++ b/src/room/creeps/roleManagers/commune/sourceHarvester.ts @@ -18,7 +18,7 @@ import { } from 'utils/utils' import { packCoord, packPos, reversePosList, unpackPos } from 'other/codec' import { Hauler } from './hauler' -import { creepUtils } from 'room/creeps/creepUtils' +import { CreepUtils } from 'room/creeps/creepUtils' import { myCreepUtils } from 'room/creeps/myCreepUtils' import { structureUtils } from 'room/structureUtils' import { CreepProcs } from 'room/creeps/creepProcs' @@ -68,7 +68,7 @@ export class SourceHarvester extends Creep { const source = this.room.roomManager.communeSources[this.memory[CreepMemoryKeys.sourceIndex]] if (getRange(this.pos, source.pos) <= 1) { - creepUtils.harvestSource(this, source) + CreepUtils.harvestSource(this, source) } } diff --git a/src/room/creeps/roleManagers/international/allyVanguard.ts b/src/room/creeps/roleManagers/international/allyVanguard.ts index e0156aa8e..6c54f12e1 100644 --- a/src/room/creeps/roleManagers/international/allyVanguard.ts +++ b/src/room/creeps/roleManagers/international/allyVanguard.ts @@ -8,7 +8,7 @@ import { } from 'international/constants' import { findObjectWithID, getRangeXY, getRange } from 'utils/utils' import { unpackCoord } from 'other/codec' -import { creepUtils } from 'room/creeps/creepUtils' +import { CreepUtils } from 'room/creeps/creepUtils' import { myCreepUtils } from 'room/creeps/myCreepUtils' import { CreepProcs } from 'room/creeps/creepProcs' @@ -98,7 +98,7 @@ export class AllyVanguard extends Creep { // Try to normally harvest. Iterate if creep harvested const source = room.find(FIND_SOURCES)[sourceIndex] - if (creepUtils.harvestSource(this, source) === Result.fail) return + if (CreepUtils.harvestSource(this, source) === Result.fail) return } getEnergyFromRoom?(): boolean { @@ -126,7 +126,7 @@ export class AllyVanguard extends Creep { // Try to normally harvest. Iterate if creep harvested const source = this.room.roomManager.communeSources[sourceIndex] - if (creepUtils.harvestSource(this, source) === Result.success) { + if (CreepUtils.harvestSource(this, source) === Result.success) { return true } return true diff --git a/src/room/creeps/roleManagers/international/vanguard.ts b/src/room/creeps/roleManagers/international/vanguard.ts index 2b6fa17f0..0fd8d465f 100644 --- a/src/room/creeps/roleManagers/international/vanguard.ts +++ b/src/room/creeps/roleManagers/international/vanguard.ts @@ -7,228 +7,225 @@ import { } from 'international/constants' import { findObjectWithID, getRangeXY, getRange } from 'utils/utils' import { unpackCoord } from 'other/codec' -import { creepUtils } from 'room/creeps/creepUtils' +import { CreepUtils } from 'room/creeps/creepUtils' import { myCreepUtils } from 'room/creeps/myCreepUtils' export class Vanguard extends Creep { - constructor(creepID: Id) { - super(creepID) + constructor(creepID: Id) { + super(creepID) + } + + update() { + const packedCoord = Memory.creeps[this.name][CreepMemoryKeys.packedCoord] + if (packedCoord) { + if (this.isDying()) { + this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.dying) + } else { + this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.important) + } } + } - update() { - const packedCoord = Memory.creeps[this.name][CreepMemoryKeys.packedCoord] - if (packedCoord) { - if (this.isDying()) { - this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.dying) - } else { - this.room.roomManager.reserveCoord(packedCoord, ReservedCoordTypes.important) - } - } - } + initRun() { + if (this.isDying()) return - initRun() { - if (this.isDying()) return + if (this.memory[CreepMemoryKeys.sourceIndex] !== undefined) + this.room.creepsOfSource[this.memory[CreepMemoryKeys.sourceIndex]].push(this.name) - if (this.memory[CreepMemoryKeys.sourceIndex] !== undefined) - this.room.creepsOfSource[this.memory[CreepMemoryKeys.sourceIndex]].push(this.name) + const request = Memory.workRequests[this.memory[CreepMemoryKeys.workRequest]] + if (!request) return - const request = Memory.workRequests[this.memory[CreepMemoryKeys.workRequest]] - if (!request) return + request[WorkRequestKeys.vanguard] -= myCreepUtils.parts(this).work + } - request[WorkRequestKeys.vanguard] -= myCreepUtils.parts(this).work - } + /** + * + */ + travelToSource?(sourceIndex: number): boolean { + const { room } = this - /** - * - */ - travelToSource?(sourceIndex: number): boolean { - const { room } = this + this.message = '🚬' - this.message = '🚬' + const harvestPos = this.findCommuneSourceHarvestPos(this.memory[CreepMemoryKeys.sourceIndex]) + if (!harvestPos) return true - const harvestPos = this.findCommuneSourceHarvestPos( - this.memory[CreepMemoryKeys.sourceIndex], - ) - if (!harvestPos) return true + // If the creep is at the creep's packedHarvestPos, inform false - // If the creep is at the creep's packedHarvestPos, inform false + if (getRange(this.pos, harvestPos) === 0) return false - if (getRange(this.pos, harvestPos) === 0) return false + // Otherwise say the intention and create a moveRequest to the creep's harvestPos, and inform the attempt - // Otherwise say the intention and create a moveRequest to the creep's harvestPos, and inform the attempt + this.message = `⏩ ${sourceIndex}` - this.message = `⏩ ${sourceIndex}` + this.createMoveRequest({ + origin: this.pos, + goals: [ + { + pos: new RoomPosition(harvestPos.x, harvestPos.y, room.name), + range: 0, + }, + ], + avoidEnemyRanges: true, + }) - this.createMoveRequest({ - origin: this.pos, - goals: [ - { - pos: new RoomPosition(harvestPos.x, harvestPos.y, room.name), - range: 0, - }, - ], - avoidEnemyRanges: true, - }) + return true + } - return true - } + upgradeRoom?(conditions?: () => boolean) { + if (conditions && !conditions()) return false - upgradeRoom?(conditions?: () => boolean) { - if (conditions && !conditions()) return false + const { controller } = this.room + Memory.creeps[this.name][CreepMemoryKeys.targetID] = controller.id - const { controller } = this.room - Memory.creeps[this.name][CreepMemoryKeys.targetID] = controller.id + if (getRange(this.pos, controller.pos) > 3) { + this.createMoveRequest({ + origin: this.pos, + goals: [{ pos: controller.pos, range: 3 }], + }) - if (getRange(this.pos, controller.pos) > 3) { - this.createMoveRequest({ - origin: this.pos, - goals: [{ pos: controller.pos, range: 3 }], - }) + return true + } - return true - } + this.upgradeController(controller) - this.upgradeController(controller) + if (this.store.energy - myCreepUtils.parts(this).work * UPGRADE_CONTROLLER_POWER <= 0) { + delete Memory.creeps[this.name][CreepMemoryKeys.targetID] + } - if (this.store.energy - myCreepUtils.parts(this).work * UPGRADE_CONTROLLER_POWER <= 0) { - delete Memory.creeps[this.name][CreepMemoryKeys.targetID] - } + return true + } - return true + findRampartTarget?() { + const creepMemory = Memory.creeps[this.name] + if (creepMemory[CreepMemoryKeys.targetID]) { + const rampartTarget = Game.getObjectById( + creepMemory[CreepMemoryKeys.targetID], + ) as StructureRampart + if (rampartTarget && rampartTarget instanceof StructureRampart) { + return rampartTarget + } } - findRampartTarget?() { - const creepMemory = Memory.creeps[this.name] - if (creepMemory[CreepMemoryKeys.targetID]) { - const rampartTarget = Game.getObjectById( - creepMemory[CreepMemoryKeys.targetID], - ) as StructureRampart - if (rampartTarget && rampartTarget instanceof StructureRampart) { - return rampartTarget - } - } + const rampartTarget = this.room.roomManager.structures.rampart.find( + rampart => rampart.hits < 20000, + ) - const rampartTarget = this.room.roomManager.structures.rampart.find( - rampart => rampart.hits < 20000, - ) + return rampartTarget + } - return rampartTarget + repairRampart?() { + const rampartTarget = this.findRampartTarget() + if (!rampartTarget) return false + + const creepMemory = Memory.creeps[this.name] + creepMemory[CreepMemoryKeys.targetID] = rampartTarget.id + + if (getRange(this.pos, rampartTarget.pos) > 3) { + this.createMoveRequest({ + origin: this.pos, + goals: [{ pos: rampartTarget.pos, range: 3 }], + }) + + return true } - repairRampart?() { - const rampartTarget = this.findRampartTarget() - if (!rampartTarget) return false + this.repair(rampartTarget) - const creepMemory = Memory.creeps[this.name] - creepMemory[CreepMemoryKeys.targetID] = rampartTarget.id + if (this.store.energy - myCreepUtils.parts(this).work * REPAIR_POWER * REPAIR_COST <= 0) { + delete creepMemory[CreepMemoryKeys.targetID] + } + return true + } - if (getRange(this.pos, rampartTarget.pos) > 3) { - this.createMoveRequest({ - origin: this.pos, - goals: [{ pos: rampartTarget.pos, range: 3 }], - }) + run?() { + const creepMemory = Memory.creeps[this.name] + this.message = creepMemory[CreepMemoryKeys.workRequest] - return true - } + if ( + this.room.name === creepMemory[CreepMemoryKeys.workRequest] || + !creepMemory[CreepMemoryKeys.workRequest] + ) { + if (!this.room.communeManager) return - this.repair(rampartTarget) + if (this.needsResources()) { + // Define the creep's sourceName - if (this.store.energy - myCreepUtils.parts(this).work * REPAIR_POWER * REPAIR_COST <= 0) { - delete creepMemory[CreepMemoryKeys.targetID] - } - return true - } + if (!this.findCommuneSourceIndex()) return - run?() { - const creepMemory = Memory.creeps[this.name] - this.message = creepMemory[CreepMemoryKeys.workRequest] - - if ( - this.room.name === creepMemory[CreepMemoryKeys.workRequest] || - !creepMemory[CreepMemoryKeys.workRequest] - ) { - if (!this.room.communeManager) return - - if (this.needsResources()) { - // Define the creep's sourceName - - if (!this.findCommuneSourceIndex()) return - - const sourceIndex = creepMemory[CreepMemoryKeys.sourceIndex] - - // Try to move to source. If creep moved then iterate - - if (this.travelToSource(sourceIndex)) return - - // Try to normally harvest. Iterate if creep harvested - - const source = this.room.roomManager.communeSources[sourceIndex] - if (creepUtils.harvestSource(this, source) === Result.success) { - return - } - return - } - - delete creepMemory[CreepMemoryKeys.sourceIndex] - delete creepMemory[CreepMemoryKeys.packedCoord] - - if ( - this.upgradeRoom(() => { - if (creepMemory[CreepMemoryKeys.targetID] === this.room.controller.id) - return true - if ( - this.room.controller.ticksToDowngrade <= - this.room.communeManager.controllerDowngradeUpgradeThreshold - ) - return true - if (this.room.controller.level < 2) return true - - return false - }) - ) - return - if (this.repairRampart()) return - if ( - this.room.roomManager.cSiteTarget && - this.advancedBuildCSite(this.room.roomManager.cSiteTarget) - ) - return - if (this.upgradeRoom()) return - return - } + const sourceIndex = creepMemory[CreepMemoryKeys.sourceIndex] + + // Try to move to source. If creep moved then iterate + + if (this.travelToSource(sourceIndex)) return - // Otherwise if the creep is not in the claimTarget - - if ( - this.createMoveRequest({ - origin: this.pos, - goals: [ - { - pos: new RoomPosition(25, 25, this.memory[CreepMemoryKeys.workRequest]), - range: 25, - }, - ], - avoidEnemyRanges: true, - typeWeights: { - [RoomTypes.enemy]: Infinity, - [RoomTypes.ally]: Infinity, - [RoomTypes.sourceKeeper]: Infinity, - }, - }) === Result.fail - ) { - const request = Memory.workRequests[this.memory[CreepMemoryKeys.workRequest]] - if (request) request[WorkRequestKeys.abandon] = 20000 + // Try to normally harvest. Iterate if creep harvested + + const source = this.room.roomManager.communeSources[sourceIndex] + if (CreepUtils.harvestSource(this, source) === Result.success) { + return } + return + } + + delete creepMemory[CreepMemoryKeys.sourceIndex] + delete creepMemory[CreepMemoryKeys.packedCoord] + + if ( + this.upgradeRoom(() => { + if (creepMemory[CreepMemoryKeys.targetID] === this.room.controller.id) return true + if ( + this.room.controller.ticksToDowngrade <= + this.room.communeManager.controllerDowngradeUpgradeThreshold + ) + return true + if (this.room.controller.level < 2) return true + + return false + }) + ) + return + if (this.repairRampart()) return + if ( + this.room.roomManager.cSiteTarget && + this.advancedBuildCSite(this.room.roomManager.cSiteTarget) + ) + return + if (this.upgradeRoom()) return + return } - static roleManager(room: Room, creepsOfRole: string[]) { - // Loop through the names of the creeps of the role + // Otherwise if the creep is not in the claimTarget + + if ( + this.createMoveRequest({ + origin: this.pos, + goals: [ + { + pos: new RoomPosition(25, 25, this.memory[CreepMemoryKeys.workRequest]), + range: 25, + }, + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + }, + }) === Result.fail + ) { + const request = Memory.workRequests[this.memory[CreepMemoryKeys.workRequest]] + if (request) request[WorkRequestKeys.abandon] = 20000 + } + } - for (const creepName of creepsOfRole) { - // Get the creep using its name + static roleManager(room: Room, creepsOfRole: string[]) { + // Loop through the names of the creeps of the role - const creep: Vanguard = Game.creeps[creepName] - creep.run() - } + for (const creepName of creepsOfRole) { + // Get the creep using its name + + const creep: Vanguard = Game.creeps[creepName] + creep.run() } + } } diff --git a/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts b/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts index b339f6e01..934476ca0 100644 --- a/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts +++ b/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts @@ -20,7 +20,7 @@ import { } from 'utils/utils' import { packCoord, reversePosList, unpackPosAt } from 'other/codec' import { indexOf } from 'lodash' -import { creepUtils } from 'room/creeps/creepUtils' +import { CreepUtils } from 'room/creeps/creepUtils' import { myCreepUtils } from 'room/creeps/myCreepUtils' import { CreepProcs } from 'room/creeps/creepProcs' @@ -290,7 +290,7 @@ export class RemoteHarvester extends Creep { if (this.maintainContainer(container) === Result.action) return Result.success const source = this.room.roomManager.remoteSources[sourceIndex] - creepUtils.harvestSource(this, source) + CreepUtils.harvestSource(this, source) // Give our energy to the container so it doesn't drop on the ground @@ -309,7 +309,7 @@ export class RemoteHarvester extends Creep { if (this.buildContainer() === Result.action) return Result.success const source = this.room.roomManager.remoteSources[sourceIndex] - creepUtils.harvestSource(this, source) + CreepUtils.harvestSource(this, source) // Stop, we don't have enough energy to justify a request diff --git a/src/room/logisticsProcs.ts b/src/room/logisticsProcs.ts index e1b0df137..051681a40 100644 --- a/src/room/logisticsProcs.ts +++ b/src/room/logisticsProcs.ts @@ -2,18 +2,18 @@ import { RoomLogisticsRequestTypes } from 'international/constants' import { scalePriority } from 'utils/utils' export class LogisticsProcs { - createCommuneContainerLogisticsRequests(room: Room) { + static createCommuneContainerLogisticsRequests(room: Room) { this.createSourceContainerRequests(room) this.createFastFillerContainerRequests(room) this.createControllerContainerRequests(room) this.createMineralContainerRequests(room) } - createRemoteContainerLogisticsRequests(room: Room) { + static createRemoteContainerLogisticsRequests(room: Room) { this.createSourceContainerRequests(room) } - private createFastFillerContainerRequests(room: Room) { + private static createFastFillerContainerRequests(room: Room) { const fastFillerContainers = room.roomManager.fastFillerContainers if (!fastFillerContainers.length) return @@ -43,7 +43,7 @@ export class LogisticsProcs { } } - private createSourceContainerRequests(room: Room) { + private static createSourceContainerRequests(room: Room) { for (const container of room.roomManager.sourceContainers) { if (!container) continue @@ -61,7 +61,7 @@ export class LogisticsProcs { } } - private createControllerContainerRequests(room: Room) { + private static createControllerContainerRequests(room: Room) { const container = room.roomManager.controllerContainer if (!container) return @@ -81,7 +81,7 @@ export class LogisticsProcs { }) } - private createMineralContainerRequests(room: Room) { + private static createMineralContainerRequests(room: Room) { const container = room.roomManager.mineralContainer if (!container) return @@ -103,7 +103,7 @@ export class LogisticsProcs { }) } - createCommuneRuinLogisticsRequests(room: Room) { + static createCommuneRuinLogisticsRequests(room: Room) { for (const ruin of room.find(FIND_RUINS)) { for (const key in ruin.reserveStore) { const resourceType = key as ResourceConstant @@ -120,7 +120,7 @@ export class LogisticsProcs { } } - createCommuneTombstoneLogisticsRequests(room: Room) { + static createCommuneTombstoneLogisticsRequests(room: Room) { for (const tombstone of room.find(FIND_TOMBSTONES)) { for (const key in tombstone.reserveStore) { const resourceType = key as ResourceConstant @@ -137,7 +137,7 @@ export class LogisticsProcs { } } - createCommuneDroppedResourceLogisticsRequests(room: Room) { + static createCommuneDroppedResourceLogisticsRequests(room: Room) { for (const resource of room.roomManager.droppedResources) { if (resource.amount < 50) continue @@ -151,7 +151,7 @@ export class LogisticsProcs { } } - createRemoteRuinLogisticsRequests(room: Room) { + static createRemoteRuinLogisticsRequests(room: Room) { const resourceType = RESOURCE_ENERGY for (const ruin of room.find(FIND_RUINS)) { @@ -167,7 +167,7 @@ export class LogisticsProcs { } } - createRemoteTombstoneLogisticsRequests(room: Room) { + static createRemoteTombstoneLogisticsRequests(room: Room) { const resourceType = RESOURCE_ENERGY for (const tombstone of room.find(FIND_TOMBSTONES)) { @@ -183,7 +183,7 @@ export class LogisticsProcs { } } - createRemoteDroppedResourceLogisticsRequests(room: Room) { + static createRemoteDroppedResourceLogisticsRequests(room: Room) { for (const resource of room.roomManager.droppedResources) { if (resource.resourceType !== RESOURCE_ENERGY) continue if (resource.amount < 50) continue @@ -196,7 +196,7 @@ export class LogisticsProcs { } } - createCommuneStoringStructureLogisticsRequests(room: Room) { + static createCommuneStoringStructureLogisticsRequests(room: Room) { const storingStructures: AnyStoreStructure[] = [] @@ -227,5 +227,3 @@ export class LogisticsProcs { } } } - -export const logisticsProcs = new LogisticsProcs() diff --git a/src/room/room.ts b/src/room/room.ts index 7d59f377a..e4076dcc6 100644 --- a/src/room/room.ts +++ b/src/room/room.ts @@ -65,7 +65,7 @@ import { CollectiveManager } from 'international/collective' import { customLog } from 'utils/logging' import { structureUtils } from './structureUtils' import { remoteProcs } from './remoteProcs' -import { logisticsProcs } from './logisticsProcs' +import { LogisticsProcs } from './logisticsProcs' export interface InterpretedRoomEvent { eventType: EventConstant @@ -284,10 +284,10 @@ export class RoomManager { } if (this.room.memory[RoomMemoryKeys.type] === RoomTypes.remote) { - logisticsProcs.createRemoteContainerLogisticsRequests(this.room) - logisticsProcs.createRemoteDroppedResourceLogisticsRequests(this.room) - logisticsProcs.createRemoteTombstoneLogisticsRequests(this.room) - logisticsProcs.createRemoteRuinLogisticsRequests(this.room) + LogisticsProcs.createRemoteContainerLogisticsRequests(this.room) + LogisticsProcs.createRemoteDroppedResourceLogisticsRequests(this.room) + LogisticsProcs.createRemoteTombstoneLogisticsRequests(this.room) + LogisticsProcs.createRemoteRuinLogisticsRequests(this.room) } this.creepRoleManager.run() From 958643fa8b435a4f45fc651bf7e6dc3ca531b6d8 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 23 Jan 2024 13:51:08 -0800 Subject: [PATCH 099/190] static structureUtils --- src/room/commune/commune.ts | 10 +- src/room/commune/communeUtils.ts | 8 +- src/room/commune/haulerNeed.ts | 173 ++++++------ src/room/commune/links.ts | 261 +++++++++--------- src/room/commune/remotesManager.ts | 4 +- src/room/commune/spawning/spawnRequests.ts | 4 +- .../spawning/spawningStructureProcs.ts | 2 +- .../spawning/spawningStructureUtils.ts | 6 +- src/room/commune/terminal/terminalProcs.ts | 6 +- src/room/commune/towerProcs.ts | 4 +- src/room/creeps/creepAdditions.ts | 209 +++++++------- src/room/creeps/creepProcs.ts | 6 +- .../creeps/creepPrototypes/creepFunctions.ts | 4 +- .../creeps/roleManagers/commune/fastFiller.ts | 4 +- .../creeps/roleManagers/commune/hauler.ts | 4 +- .../roleManagers/commune/sourceHarvester.ts | 4 +- src/room/logisticsUtils.ts | 2 - src/room/remoteProcs.ts | 4 +- src/room/remoteUtils.ts | 2 - src/room/room.ts | 7 +- src/room/roomUtils.ts | 8 +- src/room/structureUtils.ts | 11 +- src/types.d.ts | 2 +- 23 files changed, 363 insertions(+), 382 deletions(-) diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index 74e15630a..bd9b8ba13 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -38,7 +38,7 @@ import { ConstructionManager } from 'room/construction/construction' import { roomNameUtils } from 'room/roomNameUtils' import { LogTypes, customLog } from 'utils/logging' import { communeProcs } from './communeProcs' -import { structureUtils } from 'room/structureUtils' +import { StructureUtils } from 'room/structureUtils' import { LogisticsProcs } from 'room/logisticsProcs' import { towerProcs } from './towerProcs' import { sourceProcs } from 'room/sourceProcs' @@ -585,10 +585,10 @@ export class CommuneManager { // We can use links const controllerLink = this.controllerLink - if (!controllerLink || !structureUtils.isRCLActionable(controllerLink)) return false + if (!controllerLink || !StructureUtils.isRCLActionable(controllerLink)) return false const hubLink = this.room.roomManager.hubLink - if (!hubLink || !structureUtils.isRCLActionable(hubLink)) return false + if (!hubLink || !StructureUtils.isRCLActionable(hubLink)) return false return (this._upgradeStructure = controllerLink) } @@ -761,7 +761,7 @@ export class CommuneManager { let fastFillerSpawnEnergyCapacity = 0 for (const structure of this.actionableSpawningStructures) { - if (!structureUtils.isRCLActionable(structure)) continue + if (!StructureUtils.isRCLActionable(structure)) continue // Outside of the fastFiller if (getRange(structure.pos, anchor) > 2) continue @@ -790,7 +790,7 @@ export class CommuneManager { let actionableSpawningStructures: SpawningStructures = structures.spawn actionableSpawningStructures = actionableSpawningStructures.concat(structures.extension) actionableSpawningStructures = actionableSpawningStructures.filter(structure => - structureUtils.isRCLActionable(structure), + StructureUtils.isRCLActionable(structure), ) this.actionableSpawningStructuresIDs = actionableSpawningStructures.map( diff --git a/src/room/commune/communeUtils.ts b/src/room/commune/communeUtils.ts index c8c192a85..8bed75599 100644 --- a/src/room/commune/communeUtils.ts +++ b/src/room/commune/communeUtils.ts @@ -11,7 +11,7 @@ import { } from 'international/constants' import { CollectiveManager } from 'international/collective' import { RoomUtils } from 'room/roomUtils' -import { structureUtils } from 'room/structureUtils' +import { StructureUtils } from 'room/structureUtils' import { OrganizedSpawns } from './spawning/spawningStructureProcs' export class CommuneUtils { @@ -162,7 +162,7 @@ export class CommuneUtils { maxUpgradeStrength = 0 - if (hubLink && structureUtils.isRCLActionable(hubLink)) { + if (hubLink && StructureUtils.isRCLActionable(hubLink)) { // Add a bit of extra range because of inherent limitations of withdrawing and transferring const range = getRange(upgradeStructure.pos, hubLink.pos) + 3 @@ -174,7 +174,7 @@ export class CommuneUtils { const sourceLink = sourceLinks[i] if (!sourceLink) continue - if (!structureUtils.isRCLActionable(sourceLink)) continue + if (!StructureUtils.isRCLActionable(sourceLink)) continue const range = getRange(sourceLink.pos, upgradeStructure.pos) @@ -241,7 +241,7 @@ export class CommuneUtils { for (const spawn of spawns) { if (spawn.renewed) continue - if (!structureUtils.isRCLActionable(spawn)) continue + if (!StructureUtils.isRCLActionable(spawn)) continue if (spawn.spawning) { activeSpawns.push(spawn) diff --git a/src/room/commune/haulerNeed.ts b/src/room/commune/haulerNeed.ts index ca320606c..41909a132 100644 --- a/src/room/commune/haulerNeed.ts +++ b/src/room/commune/haulerNeed.ts @@ -3,114 +3,113 @@ import { customLog } from 'utils/logging' import { findCarryPartsRequired } from 'utils/utils' import { CommuneManager } from './commune' import { communeUtils } from './communeUtils' -import { structureUtils } from 'room/structureUtils' +import { StructureUtils } from 'room/structureUtils' export class HaulerNeedManager { - communeManager: CommuneManager - constructor(communeManager: CommuneManager) { - this.communeManager = communeManager + communeManager: CommuneManager + constructor(communeManager: CommuneManager) { + this.communeManager = communeManager + } + + run() { + const { room } = this.communeManager + + this.sourceNeed() + this.controllerNeed() + + this.communeManager.communeHaulerNeed += findCarryPartsRequired( + room.memory[RoomMemoryKeys.mineralPath].length / packedPosLength + 3, + (this.communeManager.mineralHarvestStrength / EXTRACTOR_COOLDOWN) * 1.1, + ) + this.communeManager.communeHaulerNeed += room.roomManager.structures.lab.length + + const extensions = + room.roomManager.structures.extension.length - stamps.fastFiller.structures.extension.length + if (extensions > 0) { + room.roomManager.structures.extension.length / (room.towerInferiority ? 1.5 : 4) } - run() { - const { room } = this.communeManager + /* haulerNeed += room.roomManager.structures.extension.length / 10 */ - this.sourceNeed() - this.controllerNeed() - - this.communeManager.communeHaulerNeed += findCarryPartsRequired( - room.memory[RoomMemoryKeys.mineralPath].length / packedPosLength + 3, - (this.communeManager.mineralHarvestStrength / EXTRACTOR_COOLDOWN) * 1.1, - ) - this.communeManager.communeHaulerNeed += room.roomManager.structures.lab.length - - const extensions = - room.roomManager.structures.extension.length - - stamps.fastFiller.structures.extension.length - if (extensions > 0) { - room.roomManager.structures.extension.length / (room.towerInferiority ? 1.5 : 4) - } - - /* haulerNeed += room.roomManager.structures.extension.length / 10 */ - - if ( - (room.controller.level >= 4 && room.storage) || - (room.terminal && room.controller.level >= 6) - ) { - this.communeManager.communeHaulerNeed += Memory.stats.rooms[room.name].eosp / 10 - this.communeManager.communeHaulerNeed += Memory.stats.rooms[room.name].su * 8 - } - - this.communeManager.communeHaulerNeed = Math.round(this.communeManager.communeHaulerNeed) + if ( + (room.controller.level >= 4 && room.storage) || + (room.terminal && room.controller.level >= 6) + ) { + this.communeManager.communeHaulerNeed += Memory.stats.rooms[room.name].eosp / 10 + this.communeManager.communeHaulerNeed += Memory.stats.rooms[room.name].su * 8 } - private sourceNeed() { - const room = this.communeManager.room - const packedSourcePaths = Memory.rooms[room.name][RoomMemoryKeys.communeSourcePaths] - const estimatedSourceIncome = communeUtils.getEstimatedSourceIncome(room) + this.communeManager.communeHaulerNeed = Math.round(this.communeManager.communeHaulerNeed) + } - const hubLink = room.roomManager.hubLink - if (hubLink && structureUtils.isRCLActionable(hubLink)) { - // There is a valid hubLink + private sourceNeed() { + const room = this.communeManager.room + const packedSourcePaths = Memory.rooms[room.name][RoomMemoryKeys.communeSourcePaths] + const estimatedSourceIncome = communeUtils.getEstimatedSourceIncome(room) - for (let index in room.find(FIND_SOURCES)) { - const sourceLink = room.communeManager.sourceLinks[index] - if (sourceLink && structureUtils.isRCLActionable(sourceLink)) continue + const hubLink = room.roomManager.hubLink + if (hubLink && StructureUtils.isRCLActionable(hubLink)) { + // There is a valid hubLink - this.communeManager.communeHaulerNeed += findCarryPartsRequired( - packedSourcePaths[index].length / packedPosLength + 3, - estimatedSourceIncome[index] * 1.1, - ) - } + for (let index in room.find(FIND_SOURCES)) { + const sourceLink = room.communeManager.sourceLinks[index] + if (sourceLink && StructureUtils.isRCLActionable(sourceLink)) continue - return - } - - // There is no valid hubLink + this.communeManager.communeHaulerNeed += findCarryPartsRequired( + packedSourcePaths[index].length / packedPosLength + 3, + estimatedSourceIncome[index] * 1.1, + ) + } - for (let index in room.find(FIND_SOURCES)) { - this.communeManager.communeHaulerNeed += findCarryPartsRequired( - packedSourcePaths[index].length / packedPosLength + 3, - estimatedSourceIncome[index] * 1.1, - ) - } + return } - private controllerNeed() { - const { room } = this.communeManager + // There is no valid hubLink - if (room.controller.level < 2) return + for (let index in room.find(FIND_SOURCES)) { + this.communeManager.communeHaulerNeed += findCarryPartsRequired( + packedSourcePaths[index].length / packedPosLength + 3, + estimatedSourceIncome[index] * 1.1, + ) + } + } + + private controllerNeed() { + const { room } = this.communeManager - // There is a viable controllerContainer + if (room.controller.level < 2) return - if (room.roomManager.controllerContainer) { - this.communeManager.communeHaulerNeed += findCarryPartsRequired( - Memory.rooms[this.communeManager.room.name][RoomMemoryKeys.upgradePath].length / - packedPosLength + - 3, - this.communeManager.upgradeStrength * 1.1, - ) - return - } + // There is a viable controllerContainer - this.controllerNeedLink() + if (room.roomManager.controllerContainer) { + this.communeManager.communeHaulerNeed += findCarryPartsRequired( + Memory.rooms[this.communeManager.room.name][RoomMemoryKeys.upgradePath].length / + packedPosLength + + 3, + this.communeManager.upgradeStrength * 1.1, + ) + return } - private controllerNeedLink() { - const controllerLink = this.communeManager.controllerLink - if (!controllerLink || !structureUtils.isRCLActionable(controllerLink)) return + this.controllerNeedLink() + } - const hubLink = this.communeManager.room.roomManager.hubLink - // No need to haul if there is a valid hubLink - if (hubLink && structureUtils.isRCLActionable(hubLink)) return + private controllerNeedLink() { + const controllerLink = this.communeManager.controllerLink + if (!controllerLink || !StructureUtils.isRCLActionable(controllerLink)) return - // There is a viable controllerLink but we need to haul to it + const hubLink = this.communeManager.room.roomManager.hubLink + // No need to haul if there is a valid hubLink + if (hubLink && StructureUtils.isRCLActionable(hubLink)) return - this.communeManager.communeHaulerNeed += findCarryPartsRequired( - Memory.rooms[this.communeManager.room.name][RoomMemoryKeys.upgradePath].length / - packedPosLength + - 3, - this.communeManager.upgradeStrength * 1.1, - ) - return - } + // There is a viable controllerLink but we need to haul to it + + this.communeManager.communeHaulerNeed += findCarryPartsRequired( + Memory.rooms[this.communeManager.room.name][RoomMemoryKeys.upgradePath].length / + packedPosLength + + 3, + this.communeManager.upgradeStrength * 1.1, + ) + return + } } diff --git a/src/room/commune/links.ts b/src/room/commune/links.ts index aad9a8d36..84dd16412 100644 --- a/src/room/commune/links.ts +++ b/src/room/commune/links.ts @@ -5,185 +5,182 @@ import { } from 'international/constants' import { customLog } from 'utils/logging' import { CommuneManager } from './commune' -import { structureUtils } from 'room/structureUtils' +import { StructureUtils } from 'room/structureUtils' export class LinkManager { - communeManager: CommuneManager + communeManager: CommuneManager - constructor(communeManager: CommuneManager) { - this.communeManager = communeManager - } - - run() { - - this.sourcesToReceivers() + constructor(communeManager: CommuneManager) { + this.communeManager = communeManager + } - if (!this.communeManager.room.storage && !this.communeManager.room.terminal) { + run() { + this.sourcesToReceivers() - const controllerLink = this.communeManager.controllerLink - if (!controllerLink || !structureUtils.isRCLActionable(controllerLink)) return + if (!this.communeManager.room.storage && !this.communeManager.room.terminal) { + const controllerLink = this.communeManager.controllerLink + if (!controllerLink || !StructureUtils.isRCLActionable(controllerLink)) return - this.createControllerLinkRoomLogisticsRequest(controllerLink) - return - } - - this.hubToFastFiller() - this.hubToController() + this.createControllerLinkRoomLogisticsRequest(controllerLink) + return } - private sourcesToReceivers() { - const sourceLinks = this.communeManager.room.communeManager.sourceLinks.filter(link => link && structureUtils.isRCLActionable(link)) - if (!sourceLinks.length) return + this.hubToFastFiller() + this.hubToController() + } + + private sourcesToReceivers() { + const sourceLinks = this.communeManager.room.communeManager.sourceLinks.filter( + link => link && StructureUtils.isRCLActionable(link), + ) + if (!sourceLinks.length) return - let receiverLinks = [ - this.communeManager.room.roomManager.fastFillerLink, - this.communeManager.room.roomManager.hubLink, - this.communeManager.controllerLink, - ].filter(link => link && structureUtils.isRCLActionable(link)) + let receiverLinks = [ + this.communeManager.room.roomManager.fastFillerLink, + this.communeManager.room.roomManager.hubLink, + this.communeManager.controllerLink, + ].filter(link => link && StructureUtils.isRCLActionable(link)) - if (!receiverLinks.length) return + if (!receiverLinks.length) return - // Loop through each sourceLink + // Loop through each sourceLink - for (const sourceLink of sourceLinks) { - if (!sourceLink) continue - // If the link is not nearly full, iterate + for (const sourceLink of sourceLinks) { + if (!sourceLink) continue + // If the link is not nearly full, iterate - if ( - sourceLink.store.getCapacity(RESOURCE_ENERGY) * linkSendThreshold > - sourceLink.store.energy - ) - continue + if ( + sourceLink.store.getCapacity(RESOURCE_ENERGY) * linkSendThreshold > + sourceLink.store.energy + ) + continue - // Otherwise, loop through each receiverLink + // Otherwise, loop through each receiverLink - for (const receiverLink of receiverLinks as StructureLink[]) { - // If the link is more than x% full, iterate + for (const receiverLink of receiverLinks as StructureLink[]) { + // If the link is more than x% full, iterate - if ( - receiverLink.store.energy > - receiverLink.store.getCapacity(RESOURCE_ENERGY) * linkReceiveTreshold - ) - continue + if ( + receiverLink.store.energy > + receiverLink.store.getCapacity(RESOURCE_ENERGY) * linkReceiveTreshold + ) + continue - // Otherwise, have the sourceLink transfer to the receiverLink + // Otherwise, have the sourceLink transfer to the receiverLink - sourceLink.transferEnergy(receiverLink) + sourceLink.transferEnergy(receiverLink) - receiverLink.store.energy += sourceLink.store.energy - sourceLink.store.energy -= - receiverLink.store.getCapacity(RESOURCE_ENERGY) - receiverLink.store.energy + receiverLink.store.energy += sourceLink.store.energy + sourceLink.store.energy -= + receiverLink.store.getCapacity(RESOURCE_ENERGY) - receiverLink.store.energy - // And stop the loop + // And stop the loop - break - } - } + break + } } + } - private hubToFastFiller() { - const fastFillerLink = this.communeManager.room.roomManager.fastFillerLink - if (!fastFillerLink || !structureUtils.isRCLActionable(fastFillerLink)) return + private hubToFastFiller() { + const fastFillerLink = this.communeManager.room.roomManager.fastFillerLink + if (!fastFillerLink || !StructureUtils.isRCLActionable(fastFillerLink)) return - const hubLink = this.communeManager.room.roomManager.hubLink - if (!hubLink || !structureUtils.isRCLActionable(hubLink)) { + const hubLink = this.communeManager.room.roomManager.hubLink + if (!hubLink || !StructureUtils.isRCLActionable(hubLink)) { + this.createFastFillerLinkRoomLogisticsRequest(fastFillerLink) + return + } - this.createFastFillerLinkRoomLogisticsRequest(fastFillerLink) - return - } + // If the hubLink is not sufficiently full, stop - // If the hubLink is not sufficiently full, stop + if (hubLink.store.getCapacity(RESOURCE_ENERGY) * linkSendThreshold > hubLink.store.energy) + return - if (hubLink.store.getCapacity(RESOURCE_ENERGY) * linkSendThreshold > hubLink.store.energy) - return + // If the fastFillerLink is more than x% full, stop - // If the fastFillerLink is more than x% full, stop + if ( + fastFillerLink.store.energy > + fastFillerLink.store.getCapacity(RESOURCE_ENERGY) * linkReceiveTreshold + ) + return - if ( - fastFillerLink.store.energy > - fastFillerLink.store.getCapacity(RESOURCE_ENERGY) * linkReceiveTreshold - ) - return + // Otherwise, have the sourceLink transfer to the recieverLink - // Otherwise, have the sourceLink transfer to the recieverLink + hubLink.transferEnergy(fastFillerLink) - hubLink.transferEnergy(fastFillerLink) + fastFillerLink.store.energy += hubLink.store.energy + hubLink.store.energy -= fastFillerLink.store.getFreeCapacity(RESOURCE_ENERGY) + } - fastFillerLink.store.energy += hubLink.store.energy - hubLink.store.energy -= fastFillerLink.store.getFreeCapacity(RESOURCE_ENERGY) - } + private createFastFillerLinkRoomLogisticsRequest(fastFillerLink: StructureLink) { + // If we have suffient energy - private createFastFillerLinkRoomLogisticsRequest(fastFillerLink: StructureLink) { + if ( + fastFillerLink.reserveStore.energy > + fastFillerLink.store.getCapacity(RESOURCE_ENERGY) * 0.5 + ) + return - // If we have suffient energy + this.communeManager.room.createRoomLogisticsRequest({ + target: fastFillerLink, + type: RoomLogisticsRequestTypes.transfer, + priority: 10, + }) + } - if ( - fastFillerLink.reserveStore.energy > - fastFillerLink.store.getCapacity(RESOURCE_ENERGY) * 0.5 - ) - return + private hubToController() { + const controllerLink = this.communeManager.controllerLink + if (!controllerLink || !StructureUtils.isRCLActionable(controllerLink)) return - this.communeManager.room.createRoomLogisticsRequest({ - target: fastFillerLink, - type: RoomLogisticsRequestTypes.transfer, - priority: 10, - }) + const hubLink = this.communeManager.room.roomManager.hubLink + if (!hubLink || !StructureUtils.isRCLActionable(hubLink)) { + this.createControllerLinkRoomLogisticsRequest(controllerLink) + return } - private hubToController() { - const controllerLink = this.communeManager.controllerLink - if (!controllerLink || !structureUtils.isRCLActionable(controllerLink)) return - - const hubLink = this.communeManager.room.roomManager.hubLink - if (!hubLink || !structureUtils.isRCLActionable(hubLink)) { - this.createControllerLinkRoomLogisticsRequest(controllerLink) - return - } - - // If the controller is close to downgrading and the storage has insufficient energy, stop - - if ( - this.communeManager.room.controller.ticksToDowngrade > 10000 && - this.communeManager.room.roomManager.resourcesInStoringStructures.energy < - this.communeManager.storedEnergyUpgradeThreshold * 0.5 - ) - return + // If the controller is close to downgrading and the storage has insufficient energy, stop - // If the hubLink is not sufficiently full, stop + if ( + this.communeManager.room.controller.ticksToDowngrade > 10000 && + this.communeManager.room.roomManager.resourcesInStoringStructures.energy < + this.communeManager.storedEnergyUpgradeThreshold * 0.5 + ) + return - if (hubLink.store.getCapacity(RESOURCE_ENERGY) * linkSendThreshold > hubLink.store.energy) - return + // If the hubLink is not sufficiently full, stop - // If the controllerLink is more than x% full, stop + if (hubLink.store.getCapacity(RESOURCE_ENERGY) * linkSendThreshold > hubLink.store.energy) + return - if ( - controllerLink.store.energy > - controllerLink.store.getCapacity(RESOURCE_ENERGY) * linkReceiveTreshold - ) - return + // If the controllerLink is more than x% full, stop - // Otherwise, have the sourceLink transfer to the recieverLink + if ( + controllerLink.store.energy > + controllerLink.store.getCapacity(RESOURCE_ENERGY) * linkReceiveTreshold + ) + return - hubLink.transferEnergy(controllerLink) + // Otherwise, have the sourceLink transfer to the recieverLink - controllerLink.store.energy += hubLink.store.energy - hubLink.store.energy -= controllerLink.store.getFreeCapacity(RESOURCE_ENERGY) - } + hubLink.transferEnergy(controllerLink) - private createControllerLinkRoomLogisticsRequest(controllerLink: StructureLink) { + controllerLink.store.energy += hubLink.store.energy + hubLink.store.energy -= controllerLink.store.getFreeCapacity(RESOURCE_ENERGY) + } - // If we have suffient energy + private createControllerLinkRoomLogisticsRequest(controllerLink: StructureLink) { + // If we have suffient energy - if ( - controllerLink.reserveStore.energy > - controllerLink.store.getCapacity(RESOURCE_ENERGY) * 0.75 - ) - return + if ( + controllerLink.reserveStore.energy > + controllerLink.store.getCapacity(RESOURCE_ENERGY) * 0.75 + ) + return - this.communeManager.room.createRoomLogisticsRequest({ - target: controllerLink, - type: RoomLogisticsRequestTypes.transfer, - priority: 100, - }) - } + this.communeManager.room.createRoomLogisticsRequest({ + target: controllerLink, + type: RoomLogisticsRequestTypes.transfer, + priority: 100, + }) + } } diff --git a/src/room/commune/remotesManager.ts b/src/room/commune/remotesManager.ts index b10739654..070e254c3 100644 --- a/src/room/commune/remotesManager.ts +++ b/src/room/commune/remotesManager.ts @@ -20,7 +20,7 @@ import { import { unpackPosList } from 'other/codec' import { CommuneManager } from './commune' import { roomNameUtils } from 'room/roomNameUtils' -import { structureUtils } from 'room/structureUtils' +import { StructureUtils } from 'room/structureUtils' type RemoteSourcePathTypes = | RoomMemoryKeys.remoteSourceFastFillerPaths @@ -55,7 +55,7 @@ export class RemotesManager { if ( this.communeManager.room.storage && - structureUtils.isRCLActionable(this.communeManager.room.storage) + StructureUtils.isRCLActionable(this.communeManager.room.storage) ) { this.communeManager.remoteResourcePathType = RoomMemoryKeys.remoteSourceHubPaths return diff --git a/src/room/commune/spawning/spawnRequests.ts b/src/room/commune/spawning/spawnRequests.ts index 500bc083b..d053a044c 100644 --- a/src/room/commune/spawning/spawnRequests.ts +++ b/src/room/commune/spawning/spawnRequests.ts @@ -27,7 +27,7 @@ import { customLog } from 'utils/logging' import { SpawnRequest, SpawnRequestArgs, SpawnRequestTypes } from 'types/spawnRequest' import { SpawnRequestConstructor, spawnRequestConstructors } from './spawnRequestConstructors' import { communeUtils } from '../communeUtils' -import { structureUtils } from 'room/structureUtils' +import { StructureUtils } from 'room/structureUtils' export class SpawnRequestsManager { communeManager: CommuneManager @@ -363,7 +363,7 @@ export class SpawnRequestsManager { (!this.communeManager.room.roomManager.hubLink || this.communeManager.room.roomManager.structures.link.length < 2) && (!this.communeManager.room.terminal || - !structureUtils.isRCLActionable(this.communeManager.room.terminal)) + !StructureUtils.isRCLActionable(this.communeManager.room.terminal)) ) return false diff --git a/src/room/commune/spawning/spawningStructureProcs.ts b/src/room/commune/spawning/spawningStructureProcs.ts index 0caea1fe8..74351ffb8 100644 --- a/src/room/commune/spawning/spawningStructureProcs.ts +++ b/src/room/commune/spawning/spawningStructureProcs.ts @@ -13,7 +13,7 @@ import { import { StatsManager } from 'international/stats' import { unpackPosAt, packCoord, unpackCoord } from 'other/codec' import { CreepProcs } from 'room/creeps/creepProcs' -import { structureUtils } from 'room/structureUtils' +import { StructureUtils } from 'room/structureUtils' import { SpawnRequest, BodyPartCounts, SpawnRequestTypes } from 'types/spawnRequest' import { customLog, LogTypes } from 'utils/logging' import { getRange, findAdjacentCoordsToCoord, utils } from 'utils/utils' diff --git a/src/room/commune/spawning/spawningStructureUtils.ts b/src/room/commune/spawning/spawningStructureUtils.ts index bac8b3555..d301ccd51 100644 --- a/src/room/commune/spawning/spawningStructureUtils.ts +++ b/src/room/commune/spawning/spawningStructureUtils.ts @@ -1,10 +1,8 @@ -import { structureUtils } from 'room/structureUtils' +import { StructureUtils } from 'room/structureUtils' import { OrganizedSpawns } from './spawningStructureProcs' import { CreepProcs } from 'room/creeps/creepProcs' import { CreepMemoryKeys } from 'international/constants' -export class SpawningStructureUtils { - -} +export class SpawningStructureUtils {} export const spawningStructureUtils = new SpawningStructureUtils() diff --git a/src/room/commune/terminal/terminalProcs.ts b/src/room/commune/terminal/terminalProcs.ts index 80413020f..6193a534a 100644 --- a/src/room/commune/terminal/terminalProcs.ts +++ b/src/room/commune/terminal/terminalProcs.ts @@ -2,7 +2,7 @@ import { CollectiveManager } from 'international/collective' import { Result } from 'international/constants' import { MarketManager } from 'international/market/marketOrders' import { simpleAllies } from 'international/simpleAllies/simpleAllies' -import { structureUtils } from 'room/structureUtils' +import { StructureUtils } from 'room/structureUtils' import { customLog } from 'utils/logging' import { newID, utils } from 'utils/utils' import { ResourceTargets } from '../commune' @@ -12,7 +12,7 @@ import { ResourceRequest } from 'international/simpleAllies/types' export class TerminalProcs { preTickRun(room: Room) { if (!room.terminal) return - if (!structureUtils.isRCLActionable(room.terminal)) return + if (!StructureUtils.isRCLActionable(room.terminal)) return const resourceTargets = room.communeManager.resourceTargets @@ -22,7 +22,7 @@ export class TerminalProcs { run(room: Room) { // Stop if there is no terminal if (!room.terminal) return - if (!structureUtils.isRCLActionable(room.terminal)) return + if (!StructureUtils.isRCLActionable(room.terminal)) return if (room.terminal.cooldown > 0) return const resourceTargets = room.communeManager.resourceTargets diff --git a/src/room/commune/towerProcs.ts b/src/room/commune/towerProcs.ts index 9bd049277..7898c7829 100644 --- a/src/room/commune/towerProcs.ts +++ b/src/room/commune/towerProcs.ts @@ -2,7 +2,7 @@ import { PlayerMemoryKeys, RoomLogisticsRequestTypes } from "international/const import { PlayerManager } from 'international/players' import { StatsManager } from 'international/stats' import { packCoord } from 'other/codec' -import { structureUtils } from 'room/structureUtils' +import { StructureUtils } from 'room/structureUtils' import { findWithHighestScore, findObjectWithID, @@ -17,7 +17,7 @@ import { towerUtils } from './towerUtils' export class TowerProcs { run(room: Room) { const towers = room.roomManager.structures.tower.filter(tower => - structureUtils.isRCLActionable(tower), + StructureUtils.isRCLActionable(tower), ) if (!towers.length) { room.towerInferiority = room.roomManager.notMyCreeps.enemy.length > 0 diff --git a/src/room/creeps/creepAdditions.ts b/src/room/creeps/creepAdditions.ts index a0c53ab60..0b3ec5f8f 100644 --- a/src/room/creeps/creepAdditions.ts +++ b/src/room/creeps/creepAdditions.ts @@ -10,7 +10,7 @@ import { customLog } from 'utils/logging' import { getRangeXY, getRange, isXYExit, isExit } from 'utils/utils' import { profiler } from 'other/profiler' import { CreepUtils } from './creepUtils' -import { structureUtils } from 'room/structureUtils' +import { StructureUtils } from 'room/structureUtils' import { towerUtils } from 'room/commune/towerUtils' Object.defineProperties(Creep.prototype, { @@ -230,151 +230,144 @@ Object.defineProperties(Creep.prototype, { } as PropertyDescriptorMap & ThisType) Object.defineProperties(PowerCreep.prototype, { - macroHealStrength: { - get() { - if (this._macroHealStrength !== undefined) return this._macroHealStrength + macroHealStrength: { + get() { + if (this._macroHealStrength !== undefined) return this._macroHealStrength - this._macroHealStrength = 0 + this._macroHealStrength = 0 - // Find adjacent creeps + // Find adjacent creeps - let top = Math.max(Math.min(this.pos.y - 3, roomDimensions - 1), 0) - let left = Math.max(Math.min(this.pos.x - 3, roomDimensions - 1), 0) - let bottom = Math.max(Math.min(this.pos.y + 3, roomDimensions - 1), 0) - let right = Math.max(Math.min(this.pos.x + 3, roomDimensions - 1), 0) + let top = Math.max(Math.min(this.pos.y - 3, roomDimensions - 1), 0) + let left = Math.max(Math.min(this.pos.x - 3, roomDimensions - 1), 0) + let bottom = Math.max(Math.min(this.pos.y + 3, roomDimensions - 1), 0) + let right = Math.max(Math.min(this.pos.x + 3, roomDimensions - 1), 0) - // Find adjacent creeps + // Find adjacent creeps - const adjacentCreeps = this.room.lookForAtArea( - LOOK_CREEPS, - top, - left, - bottom, - right, - true, - ) + const adjacentCreeps = this.room.lookForAtArea(LOOK_CREEPS, top, left, bottom, right, true) - // Loop through each adjacentCreep this creep + // Loop through each adjacentCreep this creep - for (const posData of adjacentCreeps) { - const { creep } = posData + for (const posData of adjacentCreeps) { + const { creep } = posData - if (this.owner.username === Memory.me) { - if (creep.owner.username !== Memory.me) continue - } else if (this.owner.username !== creep.owner.username) continue + if (this.owner.username === Memory.me) { + if (creep.owner.username !== Memory.me) continue + } else if (this.owner.username !== creep.owner.username) continue - const range = getRange(this.pos, creep.pos) - if (range > 3) continue + const range = getRange(this.pos, creep.pos) + if (range > 3) continue - let healStrength = creep.combatStrength.heal - if (range > 1) healStrength /= HEAL_POWER / RANGED_HEAL_POWER + let healStrength = creep.combatStrength.heal + if (range > 1) healStrength /= HEAL_POWER / RANGED_HEAL_POWER - this._macroHealStrength += Math.floor(healStrength) - } + this._macroHealStrength += Math.floor(healStrength) + } - return this._macroHealStrength - }, + return this._macroHealStrength }, - netTowerDamage: { - get() { - if (this._netTowerDamage !== undefined) return this._netTowerDamage + }, + netTowerDamage: { + get() { + if (this._netTowerDamage !== undefined) return this._netTowerDamage - this._netTowerDamage = this.grossTowerDamage + this._netTowerDamage = this.grossTowerDamage - // The enemy can't heal when we're in safemode, so don't calculate it + // The enemy can't heal when we're in safemode, so don't calculate it - if (this.room.controller.safeMode) return this._netTowerDamage + if (this.room.controller.safeMode) return this._netTowerDamage - this._netTowerDamage -= this.macroHealStrength + this._netTowerDamage -= this.macroHealStrength - return this._netTowerDamage - }, + return this._netTowerDamage }, - powerCooldowns: { - get() { - if (this._powerCooldowns) return this._powerCooldowns + }, + powerCooldowns: { + get() { + if (this._powerCooldowns) return this._powerCooldowns - this._powerCooldowns = new Map() + this._powerCooldowns = new Map() - for (const powerType in this.powers) { - const cooldown = this.powers[powerType].cooldown - if (!cooldown) continue + for (const powerType in this.powers) { + const cooldown = this.powers[powerType].cooldown + if (!cooldown) continue - this._powerCooldowns.set(parseInt(powerType) as PowerConstant, cooldown) - } + this._powerCooldowns.set(parseInt(powerType) as PowerConstant, cooldown) + } - return this._powerCooldowns - }, + return this._powerCooldowns }, + }, } as PropertyDescriptorMap & ThisType) const additions = { - reserveHits: { - get() { - if (this._reserveHits !== undefined) return this._reserveHits - - return (this._reserveHits = this.hits + this.macroHealStrength) - }, - set(newHits) { - this._reserveHits = newHits - }, + reserveHits: { + get() { + if (this._reserveHits !== undefined) return this._reserveHits + + return (this._reserveHits = this.hits + this.macroHealStrength) }, - grossTowerDamage: { - get() { - if (this._grossTowerDamage !== undefined) return this._grossTowerDamage + set(newHits) { + this._reserveHits = newHits + }, + }, + grossTowerDamage: { + get() { + if (this._grossTowerDamage !== undefined) return this._grossTowerDamage + + this._grossTowerDamage = 0 - this._grossTowerDamage = 0 + for (const tower of this.room.roomManager.structures.tower) { + if (!StructureUtils.isRCLActionable(tower)) continue + if (tower.store.getUsedCapacity(RESOURCE_ENERGY) < TOWER_ENERGY_COST) continue - for (const tower of this.room.roomManager.structures.tower) { - if (!structureUtils.isRCLActionable(tower)) continue - if (tower.store.getUsedCapacity(RESOURCE_ENERGY) < TOWER_ENERGY_COST) continue + this._grossTowerDamage = towerUtils.estimateDamageGross(tower, this.pos) + } - this._grossTowerDamage = towerUtils.estimateDamageGross(tower, this.pos) - } + return this._grossTowerDamage + }, + }, + message: { + get() { + if (this._message) return this._message - return this._grossTowerDamage - }, + return (this._message = '') + }, + set(newMessage) { + this._message = newMessage }, - message: { - get() { - if (this._message) return this._message - - return (this._message = '') - }, - set(newMessage) { - this._message = newMessage - }, + }, + freeCapacityNextTick: { + get() { + if (this._freeCapacityNextTick !== undefined) return this._freeCapacityNextTick + + return (this._freeCapacityNextTick = this.store.getFreeCapacity()) }, - freeCapacityNextTick: { - get() { - if (this._freeCapacityNextTick !== undefined) return this._freeCapacityNextTick - - return (this._freeCapacityNextTick = this.store.getFreeCapacity()) - }, - set(newFreeCapacityNextNext) { - this._freeCapacityNextTick = newFreeCapacityNextNext - }, + set(newFreeCapacityNextNext) { + this._freeCapacityNextTick = newFreeCapacityNextNext }, - isOnExit: { - get() { - if (this._isOnExit !== undefined) return this._isOnExit + }, + isOnExit: { + get() { + if (this._isOnExit !== undefined) return this._isOnExit - return isExit(this.pos) - }, + return isExit(this.pos) }, - exitTo: { - get() { - if (this._exitTo !== undefined) return this._exitTo - - if (!this.isOnExit) return (this._exitTo = false) - - const exits = Game.map.describeExits(this.room.name) - if (this.pos.y === 0) return (this._exitTo = exits[TOP]) - if (this.pos.x === 0) return (this._exitTo = exits[LEFT]) - if (this.pos.y === roomDimensions - 1) return (this._exitTo = exits[BOTTOM]) - return (this._exitTo = exits[RIGHT]) - }, + }, + exitTo: { + get() { + if (this._exitTo !== undefined) return this._exitTo + + if (!this.isOnExit) return (this._exitTo = false) + + const exits = Game.map.describeExits(this.room.name) + if (this.pos.y === 0) return (this._exitTo = exits[TOP]) + if (this.pos.x === 0) return (this._exitTo = exits[LEFT]) + if (this.pos.y === roomDimensions - 1) return (this._exitTo = exits[BOTTOM]) + return (this._exitTo = exits[RIGHT]) }, + }, } as PropertyDescriptorMap & (ThisType | ThisType) /* profiler.registerObject(additions, 'creepAdditions') */ diff --git a/src/room/creeps/creepProcs.ts b/src/room/creeps/creepProcs.ts index 1a374dc4d..c4040ff99 100644 --- a/src/room/creeps/creepProcs.ts +++ b/src/room/creeps/creepProcs.ts @@ -20,7 +20,7 @@ import { } from 'types/roomRequests' import { customLog, stringifyLog } from 'utils/logging' import { roomObjectUtils } from 'room/roomObjectUtils' -import { structureUtils } from 'room/structureUtils' +import { StructureUtils } from 'room/structureUtils' import { packCoord } from 'other/codec' export class CreepProcs { @@ -35,7 +35,7 @@ export class CreepProcs { creep.room.roomManager.controllerContainer const controllerLink = creep.room.communeManager.controllerLink - if (!controllerStructure && controllerLink && structureUtils.isRCLActionable(controllerLink)) + if (!controllerStructure && controllerLink && StructureUtils.isRCLActionable(controllerLink)) controllerStructure = controllerLink // If there is a controllerContainer @@ -1123,7 +1123,7 @@ export class CreepProcs { getRangeXY(creep.pos.x, spawn.pos.x, creep.pos.y, spawn.pos.y) === 1 && !spawn.renewed && !spawn.spawning && - structureUtils.isRCLActionable(spawn), + StructureUtils.isRCLActionable(spawn), ) if (!spawn) return diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index 13d95e563..bf7334337 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -19,7 +19,7 @@ import { RoomLogisticsRequest } from 'types/roomRequests' import { CustomPathFinder } from 'international/customPathFinder' import { communeUtils } from 'room/commune/communeUtils' import { myCreepUtils } from '../myCreepUtils' -import { structureUtils } from 'room/structureUtils' +import { StructureUtils } from 'room/structureUtils' import { CreepProcs } from '../creepProcs' Creep.prototype.update = function () {} @@ -643,7 +643,7 @@ Creep.prototype.findRecycleTarget = function () { const { room } = this const spawns = room.roomManager.structures.spawn.filter(spawn => - structureUtils.isRCLActionable(spawn), + StructureUtils.isRCLActionable(spawn), ) if (!spawns.length) return false diff --git a/src/room/creeps/roleManagers/commune/fastFiller.ts b/src/room/creeps/roleManagers/commune/fastFiller.ts index b1a5af802..1a95c997b 100644 --- a/src/room/creeps/roleManagers/commune/fastFiller.ts +++ b/src/room/creeps/roleManagers/commune/fastFiller.ts @@ -1,7 +1,7 @@ import { CreepMemoryKeys, ReservedCoordTypes } from 'international/constants' import { findClosestPos, getRangeXY, getRange } from 'utils/utils' import { packCoord, packPos, unpackCoord, unpackCoordAsPos, unpackPos } from 'other/codec' -import { structureUtils } from 'room/structureUtils' +import { StructureUtils } from 'room/structureUtils' import { CreepProcs } from 'room/creeps/creepProcs' export class FastFiller extends Creep { @@ -130,7 +130,7 @@ export class FastFiller extends Creep { let fastFillerStoringStructures: (StructureContainer | StructureLink)[] = [] const fastFillerLink = room.roomManager.fastFillerLink - if (fastFillerLink && structureUtils.isRCLActionable(fastFillerLink)) + if (fastFillerLink && StructureUtils.isRCLActionable(fastFillerLink)) fastFillerStoringStructures.push(fastFillerLink) fastFillerStoringStructures = fastFillerStoringStructures.concat(fastFillerContainers) diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index d70f1f4c0..5548778bd 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -16,7 +16,7 @@ import { StatsManager } from 'international/stats' import { packCoord, reversePosList, unpackCoord, unpackPosAt } from 'other/codec' import { CreepProcs } from 'room/creeps/creepProcs' import { myCreepUtils } from 'room/creeps/myCreepUtils' -import { structureUtils } from 'room/structureUtils' +import { StructureUtils } from 'room/structureUtils' import { findObjectWithID, getRange, @@ -88,7 +88,7 @@ export class Hauler extends Creep { getRangeXY(this.pos.x, spawn.pos.x, this.pos.y, spawn.pos.y) === 1 && !spawn.renewed && !spawn.spawning && - structureUtils.isRCLActionable(spawn), + StructureUtils.isRCLActionable(spawn), ) if (!spawn) return diff --git a/src/room/creeps/roleManagers/commune/sourceHarvester.ts b/src/room/creeps/roleManagers/commune/sourceHarvester.ts index 76d864641..6e4c13665 100644 --- a/src/room/creeps/roleManagers/commune/sourceHarvester.ts +++ b/src/room/creeps/roleManagers/commune/sourceHarvester.ts @@ -20,7 +20,7 @@ import { packCoord, packPos, reversePosList, unpackPos } from 'other/codec' import { Hauler } from './hauler' import { CreepUtils } from 'room/creeps/creepUtils' import { myCreepUtils } from 'room/creeps/myCreepUtils' -import { structureUtils } from 'room/structureUtils' +import { StructureUtils } from 'room/structureUtils' import { CreepProcs } from 'room/creeps/creepProcs' export class SourceHarvester extends Creep { @@ -280,7 +280,7 @@ export class SourceHarvester extends Creep { const sourceLink = this.room.communeManager.sourceLinks[this.memory[CreepMemoryKeys.sourceIndex]] - if (sourceLink && structureUtils.isRCLActionable(sourceLink)) return false + if (sourceLink && StructureUtils.isRCLActionable(sourceLink)) return false // If the creep isn't full enough to justify a request diff --git a/src/room/logisticsUtils.ts b/src/room/logisticsUtils.ts index 897d4d4a0..94a507055 100644 --- a/src/room/logisticsUtils.ts +++ b/src/room/logisticsUtils.ts @@ -1,5 +1,3 @@ export class LogisticsUtils { } - -export const logisticsUtils = new LogisticsUtils() diff --git a/src/room/remoteProcs.ts b/src/room/remoteProcs.ts index fb15c67cf..2adc41738 100644 --- a/src/room/remoteProcs.ts +++ b/src/room/remoteProcs.ts @@ -1,7 +1,5 @@ import { RoomLogisticsRequestTypes } from 'international/constants' export class RemoteProcs { - -} -export const remoteProcs = new RemoteProcs() +} diff --git a/src/room/remoteUtils.ts b/src/room/remoteUtils.ts index 085a0f779..6e541c2ff 100644 --- a/src/room/remoteUtils.ts +++ b/src/room/remoteUtils.ts @@ -1,5 +1,3 @@ export class RemoteUtils { } - -export const remoteUtils = new RemoteUtils() diff --git a/src/room/room.ts b/src/room/room.ts index e4076dcc6..0cb2805d7 100644 --- a/src/room/room.ts +++ b/src/room/room.ts @@ -63,8 +63,7 @@ import { PathGoal, CustomPathFinder } from 'international/customPathFinder' import { roomNameUtils } from './roomNameUtils' import { CollectiveManager } from 'international/collective' import { customLog } from 'utils/logging' -import { structureUtils } from './structureUtils' -import { remoteProcs } from './remoteProcs' +import { StructureUtils } from './structureUtils' import { LogisticsProcs } from './logisticsProcs' export interface InterpretedRoomEvent { @@ -1378,7 +1377,7 @@ export class RoomManager { const structureCoords = this.structureCoords const fastFillerLink = this.fastFillerLink - const sufficientLink = fastFillerLink && structureUtils.isRCLActionable(fastFillerLink) + const sufficientLink = fastFillerLink && StructureUtils.isRCLActionable(fastFillerLink) for (const pos of rawFastFillerPositions) { const adjacentStructuresOfTypes: Partial> = { @@ -2177,7 +2176,7 @@ export class RoomManager { for (const structure of storingStructures) { if (!structure) continue - if (!structureUtils.isRCLActionable(structure)) continue + if (!StructureUtils.isRCLActionable(structure)) continue for (const key in structure.store) { const resourceType = key as ResourceConstant diff --git a/src/room/roomUtils.ts b/src/room/roomUtils.ts index ab85c241f..51dc314f0 100644 --- a/src/room/roomUtils.ts +++ b/src/room/roomUtils.ts @@ -2,7 +2,7 @@ import { RoomMemoryKeys, RoomTypes, roomDimensions } from 'international/constan import { packCoord, packXYAsCoord, unpackCoord } from 'other/codec' import { RoomDataProcs, roomData } from './roomData' import { findObjectWithID, forAdjacentCoords, utils } from 'utils/utils' -import { structureUtils } from './structureUtils' +import { StructureUtils } from './structureUtils' import { StructureCoords } from './room' import { Dashboard, Rectangle, Table } from 'screeps-viz' @@ -41,7 +41,7 @@ export class RoomUtils { anchor.y, structure => structure.structureType === STRUCTURE_CONTAINER, ) - if (!container || !structureUtils.isRCLActionable(container)) { + if (!container || !StructureUtils.isRCLActionable(container)) { data.fastFillerContainerLeftId = false return false } @@ -67,7 +67,7 @@ export class RoomUtils { anchor.y, structure => structure.structureType === STRUCTURE_CONTAINER, ) - if (!container || !structureUtils.isRCLActionable(container)) { + if (!container || !StructureUtils.isRCLActionable(container)) { data.fastFillerContainerRightId = false return false } @@ -130,7 +130,7 @@ export class RoomUtils { const fastFillerLink = room.roomManager.fastFillerLink // If we have a valid link - if (fastFillerLink && structureUtils.isRCLActionable(fastFillerLink)) { + if (fastFillerLink && StructureUtils.isRCLActionable(fastFillerLink)) { // then all fastFiller positions are valid const sourcedFastFillerCoords = [ // left diff --git a/src/room/structureUtils.ts b/src/room/structureUtils.ts index 887db542b..59981e0ae 100644 --- a/src/room/structureUtils.ts +++ b/src/room/structureUtils.ts @@ -1,15 +1,16 @@ import { RoomMemoryKeys } from "international/constants" export class StructureUtils { - isRCLActionable(structure: Structure) { + static isRCLActionable(structure: Structure) { if (structure.isRCLActionable !== undefined) return structure.isRCLActionable if (!structure.room.controller) return (structure.isRCLActionable = true) - if (Memory.rooms[structure.room.name][RoomMemoryKeys.greatestRCL] === structure.room.controller.level) - return (structure.isRCLActionable = true) + if ( + Memory.rooms[structure.room.name][RoomMemoryKeys.greatestRCL] === + structure.room.controller.level + ) + return (structure.isRCLActionable = true) return (structure.isRCLActionable = structure.isActive()) } } - -export const structureUtils = new StructureUtils() diff --git a/src/types.d.ts b/src/types.d.ts index b0c2e17ac..a1035c31e 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -1030,7 +1030,7 @@ declare global { /** * Wether the structure is disabled or not by the room's downgraded controller level - * @method structureUtils.isRCLActionable(structure) + * @method StructureUtils.isRCLActionable(structure) */ isRCLActionable: boolean } From e7c5000cdd7a0ed9622ec94d7de621355bddcf1b Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 23 Jan 2024 13:58:17 -0800 Subject: [PATCH 100/190] more static conversions --- src/international/commands.ts | 10 ++--- src/international/flags/flags.ts | 14 +++--- src/international/mapVisuals.ts | 6 +-- src/international/migration.ts | 33 ++++++-------- src/international/requests.ts | 16 +++---- src/room/commune/commune.ts | 12 +++--- src/room/commune/defence.ts | 6 +-- src/room/commune/nukerProcs.ts | 26 +++++------ src/room/commune/observerProcs.ts | 11 +++-- src/room/commune/remotesManager.ts | 12 +++--- src/room/creeps/creepProcs.ts | 14 +++--- .../roleManagers/international/scout.ts | 6 +-- src/room/room.ts | 14 +++--- src/room/roomFunctions.ts | 26 +++++------ src/room/roomNameProcs.ts | 8 ++-- src/room/roomNameUtils.ts | 43 ++++++++++--------- src/room/roomObjectUtils.ts | 6 +-- src/room/roomProcs.ts | 5 +-- src/room/sourceProcs.ts | 4 +- src/room/sourceUtils.ts | 2 - src/utils/utils.ts | 14 +++--- 21 files changed, 135 insertions(+), 153 deletions(-) diff --git a/src/international/commands.ts b/src/international/commands.ts index dc505a6b5..561b48788 100644 --- a/src/international/commands.ts +++ b/src/international/commands.ts @@ -1,4 +1,4 @@ -import { roomNameUtils } from 'room/roomNameUtils' +import { RoomNameUtils } from 'room/roomNameUtils' import { CollectiveManager } from './collective' import { allStructureTypes, @@ -202,7 +202,7 @@ global.claim = function (requestName, communeName, priority = 0, override?: bool if (override) { Memory.rooms[requestName][RoomMemoryKeys.type] = RoomTypes.neutral - roomNameUtils.cleanMemory(requestName) + RoomNameUtils.cleanMemory(requestName) } return `${ @@ -306,7 +306,7 @@ global.deleteBasePlans = function (roomName) { } global.usedHeap = function () { - const usedHeap = - Game.cpu.getHeapStatistics().total_heap_size / Game.cpu.getHeapStatistics().heap_size_limit - return (usedHeap * 100).toFixed(2) + '%' + const usedHeap = + Game.cpu.getHeapStatistics().total_heap_size / Game.cpu.getHeapStatistics().heap_size_limit + return (usedHeap * 100).toFixed(2) + '%' } diff --git a/src/international/flags/flags.ts b/src/international/flags/flags.ts index 839bbecf6..c58cc85a9 100644 --- a/src/international/flags/flags.ts +++ b/src/international/flags/flags.ts @@ -13,13 +13,13 @@ import { } from '../constants' import { CollectiveManager } from '../collective' import { CombatRequestTypes } from 'types/internationalRequests' -import { roomNameUtils } from 'room/roomNameUtils' +import { RoomNameUtils } from 'room/roomNameUtils' import { packCoord } from 'other/codec' import { findObjectWithID, isAlly } from 'utils/utils' import { customLog } from 'utils/logging' import { RoomUtils } from 'room/roomUtils' import { spawnRequestConstructorsByType } from 'room/commune/spawning/spawningStructureProcs' -import { roomProcs } from 'room/roomProcs' +import { RoomProcs } from 'room/roomProcs' export class FlagManager { run() { @@ -304,7 +304,7 @@ export class FlagManager { const terrain = Game.map.getRoomTerrain(room.name) const rampartPlans = room.roomManager.rampartPlans - roomNameUtils.floodFillFor(room.name, [anchor], coord => { + RoomNameUtils.floodFillFor(room.name, [anchor], coord => { // Ignore terrain that protects us if (terrain.get(coord.x, coord.y) === TERRAIN_MASK_WALL) return false @@ -348,7 +348,7 @@ export class FlagManager { } const terrain = Game.map.getRoomTerrain(room.name) - roomNameUtils.floodFillFor(room.name, [room.controller.pos], (coord, packedCoord, depth) => { + RoomNameUtils.floodFillFor(room.name, [room.controller.pos], (coord, packedCoord, depth) => { // See if we should even consider the coord // Ignore terrain that protects us @@ -458,7 +458,7 @@ export class FlagManager { const flag = Game.flags[flagName] const roomName = flagNameParts[1] || flag.pos.roomName - const dynamicScore = roomNameUtils.findDynamicScore(roomName) + const dynamicScore = RoomNameUtils.findDynamicScore(roomName) customLog('dynamic score for ' + roomName, dynamicScore) } @@ -732,7 +732,7 @@ export class FlagManager { return } - const diagonalCoords = roomNameUtils.diagonalCoords(room.name, commune) + const diagonalCoords = RoomNameUtils.diagonalCoords(room.name, commune) room.visualizeCoordMap(diagonalCoords) } @@ -1046,7 +1046,7 @@ export class FlagManager { data.push(row) } - roomProcs.tableVisual(room, 'Funneling', headers, data) + RoomProcs.tableVisual(room, 'Funneling', headers, data) } } diff --git a/src/international/mapVisuals.ts b/src/international/mapVisuals.ts index 09fd71719..4c9ef1d06 100644 --- a/src/international/mapVisuals.ts +++ b/src/international/mapVisuals.ts @@ -223,14 +223,14 @@ export class MapVisualsManager { } } private static test(roomName: string, roomMemory: RoomMemory) { - /* + /* Game.map.visual.text((Game.time - roomMemory[RoomMemoryKeys.lastScout]).toString(), new RoomPosition(2, 40, roomName), { align: 'left', fontSize: 5, }) */ - /* - const roomCoord = roomNameUtils.pack(roomName) + /* + const roomCoord = RoomNameUtils.pack(roomName) Game.map.visual.text(('x: ' + roomCoord.x + ', y: ' + roomCoord.y).toString(), new RoomPosition(2, 40, roomName), { align: 'left', fontSize: 5, diff --git a/src/international/migration.ts b/src/international/migration.ts index e4cff7d92..68c8a0663 100644 --- a/src/international/migration.ts +++ b/src/international/migration.ts @@ -1,6 +1,6 @@ -import { roomNameUtils } from 'room/roomNameUtils' +import { RoomNameUtils } from 'room/roomNameUtils' import { RoomMemoryKeys, RoomTypes, SegmentIDs, majorVersion } from './constants' -import { roomNameProcs } from 'room/roomNameProcs' +import { RoomNameProcs } from 'room/roomNameProcs' /** * Migrate version by performing actions, if required @@ -19,7 +19,9 @@ export class MigrationManager { } // If the Memory's breaking version is more than the setting's, somebody messed up if (Memory.breakingVersion > global.settings.breakingVersion) { - throw Error(`breakingVersion exceeds maximum published. Please downgrade to v${majorVersion}.${global.settings.breakingVersion}`) + throw Error( + `breakingVersion exceeds maximum published. Please downgrade to v${majorVersion}.${global.settings.breakingVersion}`, + ) } // Otherwise, we are still not at the desired version. Do a breaking migration @@ -28,7 +30,6 @@ export class MigrationManager { } private static trySoftMigrations() { - if (Memory.breakingVersion === 89) { global.killCreeps() Memory.breakingVersion += 1 @@ -51,24 +52,19 @@ export class MigrationManager { Memory.breakingVersion += 1 } if (Memory.breakingVersion === 121) { - Memory.breakingVersion += 1 } if (Memory.breakingVersion === 122) { - delete (Memory as any).recordedTransactionIDs delete (Memory as any).constructionSites Memory.breakingVersion += 1 } if (Memory.breakingVersion === 123) { - - RawMemory.segments[SegmentIDs.basePlans] = JSON.stringify({ - - } as BasePlansSegment) + RawMemory.segments[SegmentIDs.basePlans] = JSON.stringify({} as BasePlansSegment) RawMemory.segments[SegmentIDs.IDs] = JSON.stringify({ - constructionSites: {}, - recordedTransactionIDs: {}, + constructionSites: {}, + recordedTransactionIDs: {}, } as IDsSegment) Memory.breakingVersion += 1 } @@ -78,19 +74,16 @@ export class MigrationManager { } if (Memory.breakingVersion === 126) { for (const roomName in Memory.rooms) { - - roomNameProcs.findAndRecordStatus(roomName) + RoomNameProcs.findAndRecordStatus(roomName) } Memory.breakingVersion += 1 } } private static hardMigration() { - - global.killCreeps() - global.killPowerCreeps() - global.clearMemory() - global.removeCSites() - + global.killCreeps() + global.killPowerCreeps() + global.clearMemory() + global.removeCSites() } } diff --git a/src/international/requests.ts b/src/international/requests.ts index 42ad8d282..0adba3592 100644 --- a/src/international/requests.ts +++ b/src/international/requests.ts @@ -1,6 +1,6 @@ import { randomIntRange, randomRange, utils } from 'utils/utils' import { CollectiveManager } from './collective' -import { roomNameUtils } from 'room/roomNameUtils' +import { RoomNameUtils } from 'room/roomNameUtils' import { CombatRequestKeys, HaulRequestKeys, @@ -62,7 +62,7 @@ export class RequestsManager extends StaticSleepable { !roomMemory[RoomMemoryKeys.dynamicScore] || Game.time - roomMemory[RoomMemoryKeys.dynamicScoreUpdate] >= runThreshold ) { - roomNameUtils.findDynamicScore(roomName) + RoomNameUtils.findDynamicScore(roomName) } } } @@ -160,7 +160,7 @@ export class RequestsManager extends StaticSleepable { continue } - const communeName = roomNameUtils.findClosestRoomName(roomName, communesForResponding) + const communeName = RoomNameUtils.findClosestRoomName(roomName, communesForResponding) if (!communeName) { // Wait on the request Memory.workRequests[roomName][WorkRequestKeys.abandon] = 20000 @@ -177,7 +177,7 @@ export class RequestsManager extends StaticSleepable { // Run a more simple and less expensive check, then a more complex and expensive to confirm. If the check fails, abandon the room for some time if ( Game.map.getRoomLinearDistance(communeName, roomName) > maxWorkRequestDistance || - roomNameUtils.advancedFindDistance(communeName, roomName, { + RoomNameUtils.advancedFindDistance(communeName, roomName, { typeWeights: { keeper: Infinity, enemy: Infinity, @@ -288,7 +288,7 @@ export class RequestsManager extends StaticSleepable { communes.push(roomName) } - const communeName = roomNameUtils.findClosestRoomName(requestName, communes) + const communeName = RoomNameUtils.findClosestRoomName(requestName, communes) if (!communeName) continue if ( @@ -304,7 +304,7 @@ export class RequestsManager extends StaticSleepable { // Run a more simple and less expensive check, then a more complex and expensive to confirm if ( Game.map.getRoomLinearDistance(communeName, requestName) > maxCombatDistance || - roomNameUtils.advancedFindDistance(communeName, requestName, { + RoomNameUtils.advancedFindDistance(communeName, requestName, { typeWeights: { keeper: Infinity, enemy: Infinity, @@ -364,7 +364,7 @@ export class RequestsManager extends StaticSleepable { communes.push(roomName) } - const communeName = roomNameUtils.findClosestRoomName(requestName, communes) + const communeName = RoomNameUtils.findClosestRoomName(requestName, communes) if (!communeName) continue if ( @@ -380,7 +380,7 @@ export class RequestsManager extends StaticSleepable { // Run a more simple and less expensive check, then a more complex and expensive to confirm if ( Game.map.getRoomLinearDistance(communeName, requestName) > maxHaulDistance || - roomNameUtils.advancedFindDistance(communeName, requestName, { + RoomNameUtils.advancedFindDistance(communeName, requestName, { typeWeights: { keeper: Infinity, enemy: Infinity, diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index bd9b8ba13..d3315eefd 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -35,13 +35,13 @@ import { FactoryManager } from './factory' import { SpawnRequestsManager } from './spawning/spawnRequests' import { CollectiveManager } from 'international/collective' import { ConstructionManager } from 'room/construction/construction' -import { roomNameUtils } from 'room/roomNameUtils' +import { RoomNameUtils } from 'room/roomNameUtils' import { LogTypes, customLog } from 'utils/logging' import { communeProcs } from './communeProcs' import { StructureUtils } from 'room/structureUtils' import { LogisticsProcs } from 'room/logisticsProcs' import { towerProcs } from './towerProcs' -import { sourceProcs } from 'room/sourceProcs' +import { SourceProcs } from 'room/sourceProcs' import { terminalProcs } from './terminal/terminalProcs' import { spawningStructureProcs } from './spawning/spawningStructureProcs' import { observerProcs } from './observerProcs' @@ -152,7 +152,7 @@ export class CommuneManager { if (roomMemory[RoomMemoryKeys.abandonCommune] === true) { room.controller.unclaim() roomMemory[RoomMemoryKeys.type] = RoomTypes.neutral - roomNameUtils.cleanMemory(room.name) + RoomNameUtils.cleanMemory(room.name) for (const cSite of room.find(FIND_MY_CONSTRUCTION_SITES)) { cSite.remove() @@ -255,7 +255,7 @@ export class CommuneManager { this.combatRequestManager.run() this.haulRequestManager.run() - sourceProcs.createPowerTasks(this.room) + SourceProcs.createPowerTasks(this.room) this.remotesManager.run() this.haulerNeedManager.run() @@ -337,7 +337,7 @@ export class CommuneManager { const remoteMemory = Memory.rooms[remoteName] remoteMemory[RoomMemoryKeys.type] = RoomTypes.neutral - roomNameUtils.cleanMemory(remoteName) + RoomNameUtils.cleanMemory(remoteName) } findMinRangedAttackCost(minDamage: number = 10) { @@ -817,7 +817,7 @@ export class CommuneManager { const structuresToSort: SpawningStructures = [] for (const structure of this.actionableSpawningStructures) { - if (roomNameUtils.isSourceSpawningStructure(this.room.name, structure)) { + if (RoomNameUtils.isSourceSpawningStructure(this.room.name, structure)) { spawningStructuresByPriority.push(structure) } diff --git a/src/room/commune/defence.ts b/src/room/commune/defence.ts index 09876a95f..0fa2be8a0 100644 --- a/src/room/commune/defence.ts +++ b/src/room/commune/defence.ts @@ -27,7 +27,7 @@ import { import { packCoord } from 'other/codec' import { CommuneManager } from './commune' import { CollectiveManager } from 'international/collective' -import { roomNameUtils } from 'room/roomNameUtils' +import { RoomNameUtils } from 'room/roomNameUtils' import { RampartPlans } from 'room/construction/rampartPlans' import { customLog, LogTypes } from 'utils/logging' @@ -100,7 +100,7 @@ export class DefenceManager { const terrain = Game.map.getRoomTerrain(room.name) const rampartPlans = this.communeManager.room.roomManager.rampartPlans - const enemyCoord = roomNameUtils.floodFillFor(room.name, [anchor], coord => { + const enemyCoord = RoomNameUtils.floodFillFor(room.name, [anchor], coord => { // Ignore terrain that protects us if (terrain.get(coord.x, coord.y) === TERRAIN_MASK_WALL) return false @@ -140,7 +140,7 @@ export class DefenceManager { private isControllerSafe() { const { room } = this.communeManager const terrain = Game.map.getRoomTerrain(room.name) - const enemyCoord = roomNameUtils.floodFillFor( + const enemyCoord = RoomNameUtils.floodFillFor( room.name, [room.controller.pos], (coord, packedCoord, depth) => { diff --git a/src/room/commune/nukerProcs.ts b/src/room/commune/nukerProcs.ts index 031fcd7a6..824400fa4 100644 --- a/src/room/commune/nukerProcs.ts +++ b/src/room/commune/nukerProcs.ts @@ -1,5 +1,5 @@ import { RoomMemoryKeys, Result, NukeRequestKeys, RoomLogisticsRequestTypes } from "international/constants" -import { roomObjectUtils } from "room/roomObjectUtils" +import { RoomObjectUtils } from 'room/roomObjectUtils' const nukerResources = [RESOURCE_ENERGY, RESOURCE_GHODIUM] @@ -11,34 +11,34 @@ export class NukerProcs { const nuker = room.roomManager.nuker if (!nuker) { - return + return } if (this.createRoomLogisticsRequests(room, nuker) === Result.action) return const request = Memory.nukeRequests[requestName] nuker.launchNuke( - new RoomPosition(request[NukeRequestKeys.x], request[NukeRequestKeys.y], requestName), + new RoomPosition(request[NukeRequestKeys.x], request[NukeRequestKeys.y], requestName), ) -} + } -private createRoomLogisticsRequests(room: Room, nuker: StructureNuker) { + private createRoomLogisticsRequests(room: Room, nuker: StructureNuker) { let result = Result.noAction for (const resource of nukerResources) { - if (roomObjectUtils.freeReserveStoreOf(nuker, resource) <= 0) continue + if (RoomObjectUtils.freeReserveStoreOf(nuker, resource) <= 0) continue - room.createRoomLogisticsRequest({ - target: nuker, - type: RoomLogisticsRequestTypes.transfer, - priority: 100, - }) + room.createRoomLogisticsRequest({ + target: nuker, + type: RoomLogisticsRequestTypes.transfer, + priority: 100, + }) - result = Result.action + result = Result.action } return result -} + } } export const nukerProcs = new NukerProcs() diff --git a/src/room/commune/observerProcs.ts b/src/room/commune/observerProcs.ts index 54e6b668e..a503142e9 100644 --- a/src/room/commune/observerProcs.ts +++ b/src/room/commune/observerProcs.ts @@ -1,6 +1,6 @@ import { RoomMemoryKeys } from "international/constants" -import { roomNameUtils } from "room/roomNameUtils" -import { forRoomNamesAroundRangeXY, utils } from "utils/utils" +import { RoomNameUtils } from 'room/roomNameUtils' +import { forRoomNamesAroundRangeXY, utils } from 'utils/utils' export class ObserverProcs { preTickRun(room: Room) { @@ -17,13 +17,13 @@ export class ObserverProcs { } findScoutTarget(room: Room) { - const roomCoord = roomNameUtils.pack(room.name) + const roomCoord = RoomNameUtils.pack(room.name) let scoutTarget: string | undefined let highestScore = 0 forRoomNamesAroundRangeXY(roomCoord.x, roomCoord.y, OBSERVER_RANGE, (x, y) => { - const scoutRoomName = roomNameUtils.unpackXY(x, y) + const scoutRoomName = RoomNameUtils.unpackXY(x, y) const score = this.findRoomNameScore(room, scoutRoomName) if (score <= highestScore) return @@ -36,8 +36,7 @@ export class ObserverProcs { } private findRoomNameScore(room: Room, scoutRoomName: string) { - const roomsDistance = - OBSERVER_RANGE - Game.map.getRoomLinearDistance(room.name, scoutRoomName) + const roomsDistance = OBSERVER_RANGE - Game.map.getRoomLinearDistance(room.name, scoutRoomName) const scoutRoomMemory = Memory.rooms[scoutRoomName] if (!scoutRoomMemory) { diff --git a/src/room/commune/remotesManager.ts b/src/room/commune/remotesManager.ts index 070e254c3..2c76decee 100644 --- a/src/room/commune/remotesManager.ts +++ b/src/room/commune/remotesManager.ts @@ -19,7 +19,7 @@ import { } from 'utils/utils' import { unpackPosList } from 'other/codec' import { CommuneManager } from './commune' -import { roomNameUtils } from 'room/roomNameUtils' +import { RoomNameUtils } from 'room/roomNameUtils' import { StructureUtils } from 'room/structureUtils' type RemoteSourcePathTypes = @@ -44,7 +44,7 @@ export class RemotesManager { const roomMemory = Memory.rooms[this.communeManager.room.name] for (const remoteName of roomMemory[RoomMemoryKeys.remotes]) { - roomNameUtils.updateCreepsOfRemoteName(remoteName, this.communeManager) + RoomNameUtils.updateCreepsOfRemoteName(remoteName, this.communeManager) } this.updateRemoteResourcePathType() @@ -207,7 +207,7 @@ export class RemotesManager { return creep.ticksToLive }) remoteMemory[RoomMemoryKeys.danger] = Game.time + randomIntRange(score, score + 100) - roomNameUtils.abandonRemote(remoteName, randomIntRange(score, score + 100)) + RoomNameUtils.abandonRemote(remoteName, randomIntRange(score, score + 100)) continue } @@ -384,7 +384,7 @@ export class RemotesManager { } private isRemoteBlocked(remoteName: string) { - const safeDistance = roomNameUtils.advancedFindDistance( + const safeDistance = RoomNameUtils.advancedFindDistance( this.communeManager.room.name, remoteName, { @@ -394,7 +394,7 @@ export class RemotesManager { ) if (safeDistance > maxRemoteRoomDistance) return true - const distance = roomNameUtils.advancedFindDistance(this.communeManager.room.name, remoteName, { + const distance = RoomNameUtils.advancedFindDistance(this.communeManager.room.name, remoteName, { typeWeights: remoteTypeWeights, }) if (Math.round(safeDistance * 0.75) > distance) return true @@ -415,7 +415,7 @@ export class RemotesManager { // We want to abandon if the remote paths through the specified remote if (!remoteMemory2[RoomMemoryKeys.pathsThrough].includes(remoteName)) continue - roomNameUtils.abandonRemote(remoteName2, remoteMemory[RoomMemoryKeys.abandonRemote]) + RoomNameUtils.abandonRemote(remoteName2, remoteMemory[RoomMemoryKeys.abandonRemote]) } remoteMemory[RoomMemoryKeys.recursedAbandonment] = true diff --git a/src/room/creeps/creepProcs.ts b/src/room/creeps/creepProcs.ts index c4040ff99..560e1f28a 100644 --- a/src/room/creeps/creepProcs.ts +++ b/src/room/creeps/creepProcs.ts @@ -19,7 +19,7 @@ import { RoomLogisticsTargets, } from 'types/roomRequests' import { customLog, stringifyLog } from 'utils/logging' -import { roomObjectUtils } from 'room/roomObjectUtils' +import { RoomObjectUtils } from 'room/roomObjectUtils' import { StructureUtils } from 'room/structureUtils' import { packCoord } from 'other/codec' @@ -472,7 +472,7 @@ export class CreepProcs { // Delete the request if the target is fulfilled - const targetFreeNextStore = roomObjectUtils.freeNextStoreOf( + const targetFreeNextStore = RoomObjectUtils.freeNextStoreOf( target, request[CreepLogisticsRequestKeys.resourceType], ) @@ -548,7 +548,7 @@ export class CreepProcs { target: Resource, ) { const creepMemory = Memory.creeps[creep.name] - const creepFreeNextStore = roomObjectUtils.freeNextStoreOf( + const creepFreeNextStore = RoomObjectUtils.freeNextStoreOf( creep, request[CreepLogisticsRequestKeys.resourceType], ) @@ -591,7 +591,7 @@ export class CreepProcs { return false } - const creepFreeNextStore = roomObjectUtils.freeNextStoreOf( + const creepFreeNextStore = RoomObjectUtils.freeNextStoreOf( creep, request[CreepLogisticsRequestKeys.resourceType], ) @@ -643,7 +643,7 @@ export class CreepProcs { if (target instanceof Resource) { // Update in accordance to potential resource decay - const creepFreeNextStore = roomObjectUtils.freeNextStoreOf( + const creepFreeNextStore = RoomObjectUtils.freeNextStoreOf( creep, request[CreepLogisticsRequestKeys.resourceType], ) @@ -685,7 +685,7 @@ export class CreepProcs { return false } - const creepFreeNextStore = roomObjectUtils.freeNextStoreOf( + const creepFreeNextStore = RoomObjectUtils.freeNextStoreOf( creep, request[CreepLogisticsRequestKeys.resourceType], ) @@ -1011,7 +1011,7 @@ export class CreepProcs { if (type === RoomLogisticsRequestTypes.transfer) { // Delete the request if the target is fulfilled - const targetFreeReserveStore = roomObjectUtils.freeNextStoreOf(target, resourceType) + const targetFreeReserveStore = RoomObjectUtils.freeNextStoreOf(target, resourceType) if (targetFreeReserveStore < amount) return 0 amount = Math.min(Math.min(creep.nextStore[resourceType], targetFreeReserveStore), amount) diff --git a/src/room/creeps/roleManagers/international/scout.ts b/src/room/creeps/roleManagers/international/scout.ts index 1e62d8594..aa3dd5768 100644 --- a/src/room/creeps/roleManagers/international/scout.ts +++ b/src/room/creeps/roleManagers/international/scout.ts @@ -8,7 +8,7 @@ import { } from 'international/constants' import { getRangeXY, getRange, randomOf } from 'utils/utils' import { partial } from 'lodash' -import { roomNameUtils } from 'room/roomNameUtils' +import { RoomNameUtils } from 'room/roomNameUtils' export class Scout extends Creep { scoutedRooms?: string[] @@ -62,7 +62,7 @@ export class Scout extends Creep { if ( Memory.rooms[this.room.name][RoomMemoryKeys.status] !== - roomNameUtils.getStatusForPotentialMemory(roomName) + RoomNameUtils.getStatusForPotentialMemory(roomName) ) continue @@ -241,7 +241,7 @@ export class Scout extends Creep { // Clean the room's memory - roomNameUtils.cleanMemory(room.name) + RoomNameUtils.cleanMemory(room.name) // And delete the creep's scoutTarget diff --git a/src/room/room.ts b/src/room/room.ts index 0cb2805d7..75376e312 100644 --- a/src/room/room.ts +++ b/src/room/room.ts @@ -60,7 +60,7 @@ import { import { BasePlans } from './construction/basePlans' import { RampartPlans } from './construction/rampartPlans' import { PathGoal, CustomPathFinder } from 'international/customPathFinder' -import { roomNameUtils } from './roomNameUtils' +import { RoomNameUtils } from './roomNameUtils' import { CollectiveManager } from 'international/collective' import { customLog } from 'utils/logging' import { StructureUtils } from './structureUtils' @@ -187,7 +187,7 @@ export class RoomManager { // If it hasn't been scouted for 100~ ticks if (Game.time - roomMemory[RoomMemoryKeys.lastScout] > Math.floor(Math.random() * 200)) { room.basicScout() - roomNameUtils.cleanMemory(room.name) + RoomNameUtils.cleanMemory(room.name) } const roomType = roomMemory[RoomMemoryKeys.type] @@ -243,7 +243,7 @@ export class RoomManager { if (!this.room.controller.my) { if (roomMemory[RoomMemoryKeys.type] === RoomTypes.commune) { roomMemory[RoomMemoryKeys.type] = RoomTypes.neutral - roomNameUtils.cleanMemory(room.name) + RoomNameUtils.cleanMemory(room.name) } return false } @@ -252,7 +252,7 @@ export class RoomManager { if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.commune) { roomMemory[RoomMemoryKeys.type] = RoomTypes.commune - roomNameUtils.cleanMemory(room.name) + RoomNameUtils.cleanMemory(room.name) } // If there is no communeManager for the room yet, make one and assign them together @@ -386,7 +386,7 @@ export class RoomManager { [this.room.name]: weightCoords, }, weightCoordMapsForRoomName(roomName) { - return roomNameUtils.diagonalCoords(roomName, commune) + return RoomNameUtils.diagonalCoords(roomName, commune) }, weightCommuneStructurePlans: true, weightRemoteStructurePlans: { @@ -450,7 +450,7 @@ export class RoomManager { [this.room.name]: weightCoords, }, weightCoordMapsForRoomName(roomName) { - return roomNameUtils.diagonalCoords(roomName, commune) + return RoomNameUtils.diagonalCoords(roomName, commune) }, weightCommuneStructurePlans: true, weightRemoteStructurePlans: { @@ -524,7 +524,7 @@ export class RoomManager { [this.room.name]: weightCoords, }, weightCoordMapsForRoomName(roomName) { - return roomNameUtils.diagonalCoords(roomName, commune) + return RoomNameUtils.diagonalCoords(roomName, commune) }, weightCommuneStructurePlans: true, weightRemoteStructurePlans: { diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index 279a48544..d2c0cc76e 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -32,10 +32,10 @@ import { import { CollectiveManager } from 'international/collective' import { packCoord, packCoordList, packXYAsCoord, unpackPosList } from 'other/codec' import { PlayerManager } from 'international/players' -import { roomNameUtils } from './roomNameUtils' +import { RoomNameUtils } from './roomNameUtils' import { customLog } from 'utils/logging' -import { roomObjectUtils } from './roomObjectUtils' -import { roomNameProcs } from './roomNameProcs' +import { RoomObjectUtils } from './roomObjectUtils' +import { RoomNameProcs } from './roomNameProcs' /** @param pos1 pos of the object performing the action @@ -193,7 +193,7 @@ Room.prototype.scoutMyRemote = function (scoutingRoom) { // Find distance from scoutingRoom if (distance <= maxRemoteRoomDistance) - distance = roomNameUtils.advancedFindDistance(scoutingRoom.name, this.name, { + distance = RoomNameUtils.advancedFindDistance(scoutingRoom.name, this.name, { typeWeights: { keeper: Infinity, enemy: Infinity, @@ -394,13 +394,13 @@ Room.prototype.scoutMyRemote = function (scoutingRoom) { roomMemory[RoomMemoryKeys.abandonRemote] = 0 // Add the room's name to the scoutingRoom's remotes data - roomNameUtils.updateCreepsOfRemoteName(this.name, scoutingRoom.communeManager) + RoomNameUtils.updateCreepsOfRemoteName(this.name, scoutingRoom.communeManager) Memory.rooms[scoutingRoom.name][RoomMemoryKeys.remotes].push(this.name) roomMemory[RoomMemoryKeys.commune] = scoutingRoom.name roomMemory[RoomMemoryKeys.type] = RoomTypes.remote - roomNameUtils.cleanMemory(this.name) + RoomNameUtils.cleanMemory(this.name) return roomMemory[RoomMemoryKeys.type] } @@ -531,13 +531,13 @@ Room.prototype.scoutMyRemote = function (scoutingRoom) { roomMemory[RoomMemoryKeys.abandonRemote] = 0 // Add the room's name to the scoutingRoom's remotes data - roomNameUtils.updateCreepsOfRemoteName(this.name, scoutingRoom.communeManager) + RoomNameUtils.updateCreepsOfRemoteName(this.name, scoutingRoom.communeManager) Memory.rooms[scoutingRoom.name][RoomMemoryKeys.remotes].push(this.name) roomMemory[RoomMemoryKeys.commune] = scoutingRoom.name roomMemory[RoomMemoryKeys.type] = RoomTypes.remote - roomNameUtils.cleanMemory(this.name) + RoomNameUtils.cleanMemory(this.name) return roomMemory[RoomMemoryKeys.type] } @@ -623,7 +623,7 @@ Room.prototype.basicScout = function () { const roomMemory = Memory.rooms[this.name] if (roomMemory[RoomMemoryKeys.lastScout] === undefined) { - roomNameProcs.findAndRecordStatus(this.name, roomMemory) + RoomNameProcs.findAndRecordStatus(this.name, roomMemory) } // Record that the room was scouted this tick @@ -661,7 +661,7 @@ Room.prototype.advancedScout = function (scoutingRoom: Room) { const roomMemory = Memory.rooms[this.name] if (roomMemory[RoomMemoryKeys.lastScout] === undefined) { - roomNameProcs.findAndRecordStatus(this.name, roomMemory) + RoomNameProcs.findAndRecordStatus(this.name, roomMemory) } // Record that the room was scouted this tick @@ -683,7 +683,7 @@ Room.prototype.advancedScout = function (scoutingRoom: Room) { roomMemory[RoomMemoryKeys.sourceCoords] = packedSourceCoords } - const roomNameScoutType = roomNameProcs.findAndRecordConstantType(this.name) + const roomNameScoutType = RoomNameProcs.findAndRecordConstantType(this.name) if (roomNameScoutType) { if (roomNameScoutType === RoomTypes.sourceKeeper) { // Record the positions of keeper lairs @@ -1457,7 +1457,7 @@ Room.prototype.createWorkRequest = function () { if (this.find(FIND_SOURCES).length < 2) return false if (Memory.workRequests[this.name]) return false - roomNameUtils.findDynamicScore(this.name) + RoomNameUtils.findDynamicScore(this.name) const communePlanned = Memory.rooms[this.name][RoomMemoryKeys.communePlanned] if (communePlanned === false) return false @@ -1618,7 +1618,7 @@ Room.prototype.createRoomLogisticsRequest = function (args) { ) return Result.fail - amount = roomObjectUtils.freeReserveStoreOf(args.target, args.resourceType) + amount = RoomObjectUtils.freeReserveStoreOf(args.target, args.resourceType) /* this.visual.text(args.target.reserveStore[args.resourceType].toString(), args.target.pos) */ } diff --git a/src/room/roomNameProcs.ts b/src/room/roomNameProcs.ts index 8b4134d79..e140f973f 100644 --- a/src/room/roomNameProcs.ts +++ b/src/room/roomNameProcs.ts @@ -1,15 +1,15 @@ import { RoomMemoryKeys, RoomStatusKeys, RoomTypes } from 'international/constants' export class RoomNameProcs { - findAndRecordStatus(roomName: string, roomMemory = Memory.rooms[roomName]) { + static findAndRecordStatus(roomName: string, roomMemory = Memory.rooms[roomName]) { const status = Game.map.getRoomStatus(roomName).status roomMemory[RoomMemoryKeys.status] = RoomStatusKeys[status] return status } - findAndRecordConstantType(roomName: string) { - + static findAndRecordConstantType(roomName: string) { + // Find the numbers in the room's name const [EWstring, NSstring] = roomName.match(/\d+/g) @@ -39,5 +39,3 @@ export class RoomNameProcs { return false } } - -export const roomNameProcs = new RoomNameProcs() diff --git a/src/room/roomNameUtils.ts b/src/room/roomNameUtils.ts index 0f88016fb..9ba7ca3e4 100644 --- a/src/room/roomNameUtils.ts +++ b/src/room/roomNameUtils.ts @@ -25,8 +25,8 @@ import { import { unpackPosAt } from 'other/codec' import { CommuneManager } from './commune/commune' import { customLog } from 'utils/logging' -import { roomProcs } from './roomProcs' -import { roomNameProcs } from './roomNameProcs' +import { RoomProcs } from './roomProcs' +import { RoomNameProcs } from './roomNameProcs' /** * considers a position being flooded @@ -39,7 +39,7 @@ type FloodForCoordCheck = ( ) => boolean | Result.stop export class RoomNameUtils { - abandonRemote(roomName: string, time: number) { + static abandonRemote(roomName: string, time: number) { const roomMemory = Memory.rooms[roomName] if (roomMemory[RoomMemoryKeys.abandonRemote] >= time) return @@ -47,7 +47,7 @@ export class RoomNameUtils { roomMemory[RoomMemoryKeys.abandonRemote] = time delete roomMemory[RoomMemoryKeys.recursedAbandonment] } - findDynamicScore(roomName: string) { + static findDynamicScore(roomName: string) { let dynamicScore = 0 let closestEnemy = 0 @@ -117,7 +117,7 @@ export class RoomNameUtils { return dynamicScore } - floodFillFor(roomName: string, seeds: Coord[], coordCheck: FloodForCoordCheck) { + static floodFillFor(roomName: string, seeds: Coord[], coordCheck: FloodForCoordCheck) { const visitedCoords = new Uint8Array(2500) let depth = 0 @@ -156,8 +156,11 @@ export class RoomNameUtils { return false } - floodFillCardinalFor() {} - isSourceSpawningStructure(roomName: string, structure: StructureExtension | StructureSpawn) { + static floodFillCardinalFor() {} + static isSourceSpawningStructure( + roomName: string, + structure: StructureExtension | StructureSpawn, + ) { const packedSourceHarvestPositions = Memory.rooms[roomName][RoomMemoryKeys.communeSourceHarvestPositions] for (const i in packedSourceHarvestPositions) { @@ -172,7 +175,7 @@ export class RoomNameUtils { /** * Removes roomType-based values in the room's memory that don't match its type */ - cleanMemory(roomName: string) { + static cleanMemory(roomName: string) { const roomMemory = Memory.rooms[roomName] for (const key in roomMemory) { // Make sure key is a type-specific key @@ -189,7 +192,7 @@ export class RoomNameUtils { /** * Finds the name of the closest commune, exluding the specified roomName */ - findClosestCommuneName(roomName: string) { + static findClosestCommuneName(roomName: string) { const communesNotThis = [] for (const communeName of CollectiveManager.communes) { @@ -203,13 +206,13 @@ export class RoomNameUtils { Game.map.getRoomLinearDistance(roomName, a) - Game.map.getRoomLinearDistance(roomName, b), )[0] } - findClosestClaimType(roomName: string) { + static findClosestClaimType(roomName: string) { return Array.from(CollectiveManager.communes).sort( (a, b) => Game.map.getRoomLinearDistance(roomName, a) - Game.map.getRoomLinearDistance(roomName, b), )[0] } - updateCreepsOfRemoteName(remoteName: string, communeManager: CommuneManager) { + static updateCreepsOfRemoteName(remoteName: string, communeManager: CommuneManager) { const remoteMemory = Memory.rooms[remoteName] communeManager.room.creepsOfRemote[remoteName] = {} @@ -222,7 +225,7 @@ export class RoomNameUtils { communeManager.remoteSourceHarvesters[remoteName].push([]) } } - diagonalCoords(roomName: string, commune: Room) { + static diagonalCoords(roomName: string, commune: Room) { const anchor = commune.roomManager.anchor if (!anchor) throw Error('no anchor for room: ' + roomName) @@ -253,7 +256,7 @@ export class RoomNameUtils { return diagonalCoords } - pack(roomName: string) { + static pack(roomName: string) { // Find the numbers in the room's name let [name, cx, x, cy, y] = roomName.match(/^([WE])([0-9]+)([NS])([0-9]+)$/) @@ -264,19 +267,19 @@ export class RoomNameUtils { } } - unpackXY(x: number, y: number) { + static unpackXY(x: number, y: number) { return ( (x < 0 ? 'W' + String(~x) : 'E' + String(x)) + (y < 0 ? 'S' + String(~y) : 'N' + String(y)) ) } - unpack(roomCoord: RoomCoord) { + static unpack(roomCoord: RoomCoord) { return this.unpackXY(roomCoord.x, roomCoord.y) } /** * Finds the distance between two rooms based on walkable exits while avoiding rooms with specified types */ - advancedFindDistance( + static advancedFindDistance( originRoomName: string, goalRoomName: string, opts: { @@ -315,7 +318,7 @@ export class RoomNameUtils { return findRouteResult.length } - findClosestRoomName(roomName: string, targetRoomNames: Iterable) { + static findClosestRoomName(roomName: string, targetRoomNames: Iterable) { let minRange = Infinity let closest = undefined @@ -334,11 +337,11 @@ export class RoomNameUtils { /** * get the room status for a room that potentially has no initialized memory */ - getStatusForPotentialMemory(roomName: string) { + static getStatusForPotentialMemory(roomName: string) { const roomMemory = Memory.rooms[roomName] if (!roomMemory) { Memory.rooms[roomName] = {} as any - return RoomStatusKeys[roomNameProcs.findAndRecordStatus(roomName)] + return RoomStatusKeys[RoomNameProcs.findAndRecordStatus(roomName)] } // Otherwise there is room memory @@ -346,5 +349,3 @@ export class RoomNameUtils { return roomMemory[RoomMemoryKeys.status] } } - -export const roomNameUtils = new RoomNameUtils() diff --git a/src/room/roomObjectUtils.ts b/src/room/roomObjectUtils.ts index 7d3a139dc..25545901b 100644 --- a/src/room/roomObjectUtils.ts +++ b/src/room/roomObjectUtils.ts @@ -1,7 +1,7 @@ import { separateStoreStructureTypes } from "international/constants" export class RoomObjectUtils { - freeNextStoreOf(roomObject: RoomObject & { store: StoreDefinition }, resourceType: ResourceConstant) { + static freeNextStoreOf(roomObject: RoomObject & { store: StoreDefinition }, resourceType: ResourceConstant) { // If our storing system is like a lab, nuker, power spawn if (roomObject instanceof Structure && separateStoreStructureTypes.has(roomObject.structureType)) { return roomObject.store.getCapacity(resourceType) - roomObject.nextStore[resourceType] @@ -10,7 +10,7 @@ export class RoomObjectUtils { return roomObject.store.getCapacity(resourceType) - roomObject.usedNextStore } - freeReserveStoreOf( + static freeReserveStoreOf( roomObject: RoomObject & { store: StoreDefinition }, resourceType: ResourceConstant, ) { @@ -22,5 +22,3 @@ export class RoomObjectUtils { return roomObject.store.getCapacity(resourceType) - roomObject.usedReserveStore } } - -export const roomObjectUtils = new RoomObjectUtils() diff --git a/src/room/roomProcs.ts b/src/room/roomProcs.ts index 50721babd..8725f0517 100644 --- a/src/room/roomProcs.ts +++ b/src/room/roomProcs.ts @@ -1,8 +1,7 @@ import { Dashboard, Rectangle, Table } from "screeps-viz" export class RoomProcs { - tableVisual(room: Room, title: string, headers: string[], data: string[][]) { - + static tableVisual(room: Room, title: string, headers: string[], data: string[][]) { Dashboard({ config: { room: room.name, @@ -29,5 +28,3 @@ export class RoomProcs { }) } } - -export const roomProcs = new RoomProcs() diff --git a/src/room/sourceProcs.ts b/src/room/sourceProcs.ts index 2f851c266..605289ae2 100644 --- a/src/room/sourceProcs.ts +++ b/src/room/sourceProcs.ts @@ -1,7 +1,7 @@ import { RoomUtils } from 'room/roomUtils' export class SourceProcs { - createPowerTasks(room: Room) { + static createPowerTasks(room: Room) { if (!room.myPowerCreeps.length) return const sources = RoomUtils.getSources(room) @@ -10,5 +10,3 @@ export class SourceProcs { } } } - -export const sourceProcs = new SourceProcs() diff --git a/src/room/sourceUtils.ts b/src/room/sourceUtils.ts index 9bf9de019..8af332565 100644 --- a/src/room/sourceUtils.ts +++ b/src/room/sourceUtils.ts @@ -1,5 +1,3 @@ export class SourceUtils { } - -export const sourceUtils = new SourceUtils() diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 8128468a8..4024df26a 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -4,7 +4,7 @@ import { } from '../international/constants' import { customLog } from './logging' import { PlayerRelationships } from 'international/constants' -import { roomNameUtils } from 'room/roomNameUtils' +import { RoomNameUtils } from 'room/roomNameUtils' import { Dashboard, Rectangle, Table } from 'screeps-viz' /** @@ -742,14 +742,14 @@ export function getMe() { } export class Utils { - isTickInterval(interval: number) { + static isTickInterval(interval: number) { return Game.time % interval === 0 } /** * * @returns [score, index] */ - findIndexWithLowestScore(iter: T[], f: (val: T) => number | false): [number, number] { + static findIndexWithLowestScore(iter: T[], f: (val: T) => number | false): [number, number] { let lowestScore = Infinity let bestIndex: number @@ -767,7 +767,7 @@ export class Utils { return [lowestScore, bestIndex] } - getInterRangeXY( + static getInterRangeXY( x1: number, y1: number, roomName1: string, @@ -779,8 +779,8 @@ export class Utils { return getRangeXY(x1, x2, y1, y2) } - const roomCoord1 = roomNameUtils.pack(roomName1) - const roomCoord2 = roomNameUtils.pack(roomName2) + const roomCoord1 = RoomNameUtils.pack(roomName1) + const roomCoord2 = RoomNameUtils.pack(roomName2) const worldCoord1 = { x: @@ -802,7 +802,7 @@ export class Utils { return range } - getInterRange(coord1: Coord, roomName1: string, coord2: Coord, roomName2: string) { + static getInterRange(coord1: Coord, roomName1: string, coord2: Coord, roomName2: string) { return this.getInterRangeXY(coord1.x, coord1.y, roomName1, coord2.x, coord2.y, roomName2) } } From 23b589e38312305377fe04f8e646fff1693a08fd Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 23 Jan 2024 14:24:58 -0800 Subject: [PATCH 101/190] static SpawnRequestConstructors, MemoryHack --- src/international/collective.ts | 8 +- src/international/constructionSites.ts | 4 +- src/international/flags/flags.ts | 4 +- src/international/garbageCollector.ts | 30 ++--- src/international/market/marketOrders.ts | 22 ++-- src/international/requests.ts | 4 +- src/international/stats.ts | 6 +- src/international/transactions.ts | 8 +- src/main.ts | 10 +- src/other/memHack.ts | 24 ---- src/other/memoryHack.ts | 28 +++++ src/room/commune/combatRequest.ts | 7 +- src/room/commune/commune.ts | 4 +- src/room/commune/communeData.ts | 7 +- src/room/commune/haulRequestManager.ts | 7 +- src/room/commune/observerProcs.ts | 4 +- src/room/commune/remotesManager.ts | 6 +- .../spawning/spawnRequestConstructors.ts | 10 +- src/room/commune/spawning/spawnRequests.ts | 4 - .../spawning/spawningStructureProcs.ts | 18 +-- src/room/commune/terminal/terminalProcs.ts | 4 +- src/room/commune/towerProcs.ts | 2 +- src/room/commune/towerUtils.ts | 2 +- src/room/commune/workRequest.ts | 7 +- src/room/construction/basePlans.ts | 62 +++++----- src/room/construction/construction.ts | 4 +- src/room/construction/rampartPlans.ts | 66 +++++------ src/room/creeps/creepData.ts | 9 +- src/room/creeps/creepProcs.ts | 8 +- .../creeps/creepPrototypes/creepFunctions.ts | 8 +- .../roleManagers/antifa/dynamicSquad.ts | 49 +++----- .../commune/defenders/meleeDefender.ts | 22 ++-- .../creeps/roleManagers/commune/hauler.ts | 4 +- .../roleManagers/remote/remoteBuilder.ts | 14 +-- .../remote/remoteSourceHarvester.ts | 4 +- src/room/remotePlanner.ts | 48 ++++---- src/room/room.ts | 26 ++-- src/room/roomData.ts | 2 +- src/room/roomUtils.ts | 2 +- src/utils/procs.ts | 4 +- src/utils/sleepable.ts | 112 +++++++++--------- src/utils/utils.ts | 2 - 42 files changed, 341 insertions(+), 335 deletions(-) delete mode 100644 src/other/memHack.ts create mode 100644 src/other/memoryHack.ts diff --git a/src/international/collective.ts b/src/international/collective.ts index fedcc7354..b3a8a5d93 100644 --- a/src/international/collective.ts +++ b/src/international/collective.ts @@ -1,4 +1,4 @@ -import { packXYAsNum, randomIntRange, roundTo, utils } from '../utils/utils' +import { packXYAsNum, randomIntRange, roundTo, Utils } from '../utils/utils' import { WorkRequestKeys, @@ -19,7 +19,9 @@ export class CollectiveManager { /** * Antifa creeps by combat request name, then by role with an array of creep names */ - static creepsByCombatRequest: { [requestName: string]: Partial<{ [key in CreepRoles]: string[] }> } + static creepsByCombatRequest: { + [requestName: string]: Partial<{ [key in CreepRoles]: string[] }> + } static creepsByHaulRequest: { [requestName: string]: string[] } @@ -108,7 +110,7 @@ export class CollectiveManager { // Run CollectiveManager stuff every so often - if (utils.isTickInterval(periodicUpdateInterval)) { + if (Utils.isTickInterval(periodicUpdateInterval)) { // delete this._funnelOrder = undefined diff --git a/src/international/constructionSites.ts b/src/international/constructionSites.ts index 14e6ba67a..b2e7553ae 100644 --- a/src/international/constructionSites.ts +++ b/src/international/constructionSites.ts @@ -1,6 +1,6 @@ import { Sleepable } from 'utils/sleepable' import { CollectiveManager } from './collective' -import { utils } from 'utils/utils' +import { Utils } from 'utils/utils' import { IDUpdateInterval } from './constants' import { SegmentsManager } from './segments' @@ -9,7 +9,7 @@ import { SegmentsManager } from './segments' */ export class ConstructionSiteManager { static run() { - if (!utils.isTickInterval(IDUpdateInterval)) return + if (!Utils.isTickInterval(IDUpdateInterval)) return const recordedIDs = SegmentsManager.IDs.constructionSites diff --git a/src/international/flags/flags.ts b/src/international/flags/flags.ts index c58cc85a9..9a8d8eac5 100644 --- a/src/international/flags/flags.ts +++ b/src/international/flags/flags.ts @@ -18,7 +18,7 @@ import { packCoord } from 'other/codec' import { findObjectWithID, isAlly } from 'utils/utils' import { customLog } from 'utils/logging' import { RoomUtils } from 'room/roomUtils' -import { spawnRequestConstructorsByType } from 'room/commune/spawning/spawningStructureProcs' +import { SpawnRequestConstructorsByType } from 'room/commune/spawning/spawningStructureProcs' import { RoomProcs } from 'room/roomProcs' export class FlagManager { @@ -477,7 +477,7 @@ export class FlagManager { const spawnRequestsArgs = room.communeManager.spawnRequestsManager.run() for (const requestArgs of spawnRequestsArgs) { - const spawnRequests = spawnRequestConstructorsByType[requestArgs.type](room, requestArgs) + const spawnRequests = SpawnRequestConstructorsByType[requestArgs.type](room, requestArgs) for (const request of spawnRequests) { const row: any[] = [] diff --git a/src/international/garbageCollector.ts b/src/international/garbageCollector.ts index f0ac20c22..963be7172 100644 --- a/src/international/garbageCollector.ts +++ b/src/international/garbageCollector.ts @@ -5,22 +5,22 @@ import { RoomMemoryKeys } from './constants' * Intended to clean Memory, global, segments from stale data */ export class GarbageCollector extends StaticSleepable { - // Clean rooms that haven't been scouted for a certain amount of ticks - static cleanRoomThreshold = 300000 - static sleepFor = 100000 - static tryRun() { - if (this.isSleepingResponsive()) return + // Clean rooms that haven't been scouted for a certain amount of ticks + static cleanRoomThreshold = 300000 + static sleepFor = 100000 + static tryRun() { + if (this.isSleepingResponsive()) return - this.cleanRooms() - this.cleanPlayers() - } - static cleanRooms() { - for (const roomName in Memory.rooms) { - const roomMemory = Memory.rooms[roomName] - if (Game.time - roomMemory[RoomMemoryKeys.lastScout] < this.cleanRoomThreshold) continue + this.cleanRooms() + this.cleanPlayers() + } + static cleanRooms() { + for (const roomName in Memory.rooms) { + const roomMemory = Memory.rooms[roomName] + if (Game.time - roomMemory[RoomMemoryKeys.lastScout] < this.cleanRoomThreshold) continue - delete Memory.rooms[roomName] - } + delete Memory.rooms[roomName] } - static cleanPlayers() {} + } + static cleanPlayers() {} } diff --git a/src/international/market/marketOrders.ts b/src/international/market/marketOrders.ts index 4d01046bd..8ffc51789 100644 --- a/src/international/market/marketOrders.ts +++ b/src/international/market/marketOrders.ts @@ -1,4 +1,4 @@ -import { findHighestScore, randomIntRange, randomTick, utils } from 'utils/utils' +import { findHighestScore, randomIntRange, randomTick, Utils } from 'utils/utils' import { PlayerMemoryKeys, Result, RoomMemoryKeys } from '../constants' import { CollectiveManager } from '../collective' import { customLog } from 'utils/logging' @@ -15,7 +15,7 @@ export class MarketManager { if (randomTick(100)) { this.resourceHistory = {} } - if (utils.isTickInterval(optimizeOrdersInterval)) { + if (Utils.isTickInterval(optimizeOrdersInterval)) { this.optimizeMyOrders() } @@ -370,7 +370,9 @@ export class MarketManager { return (this._isMarketFunctional = !!Game.market.getAllOrders().length) } - private static resourceHistory: Partial<{ [key in MarketResourceConstant]: { [days: string]: number } }> + private static resourceHistory: Partial<{ + [key in MarketResourceConstant]: { [days: string]: number } + }> /** * Finds the average trading price of a resourceType over a set amount of days */ @@ -401,13 +403,17 @@ export class MarketManager { return avgPrice } - static decidePrice(resourceType: ResourceConstant, priority: number, startTick: number = Game.time) {} + static decidePrice( + resourceType: ResourceConstant, + priority: number, + startTick: number = Game.time, + ) {} } export type MarketOrderTypes = ORDER_BUY | ORDER_SELL export type CachedMarketOrders = Partial<{ - [key in MarketResourceConstant]: { - [key in MarketOrderTypes]: Order[] - } - }> + [key in MarketResourceConstant]: { + [key in MarketOrderTypes]: Order[] + } +}> diff --git a/src/international/requests.ts b/src/international/requests.ts index 0adba3592..f11bc4f10 100644 --- a/src/international/requests.ts +++ b/src/international/requests.ts @@ -1,4 +1,4 @@ -import { randomIntRange, randomRange, utils } from 'utils/utils' +import { randomIntRange, randomRange, Utils } from 'utils/utils' import { CollectiveManager } from './collective' import { RoomNameUtils } from 'room/roomNameUtils' import { @@ -30,7 +30,7 @@ export class RequestsManager extends StaticSleepable { this.updateCombatRequests() this.updateHaulRequests() - if (utils.isTickInterval(runRequestInverval)) return + if (Utils.isTickInterval(runRequestInverval)) return this.runWorkRequests() this.runCombatRequests() diff --git a/src/international/stats.ts b/src/international/stats.ts index a2e8ca8ad..41f9962f4 100644 --- a/src/international/stats.ts +++ b/src/international/stats.ts @@ -444,7 +444,11 @@ export class StatsManager { return roundTo(avg, precision) } - static updateStat(roomName: string, statName: keyof RoomStats | keyof CommuneStats, value: number) { + static updateStat( + roomName: string, + statName: keyof RoomStats | keyof CommuneStats, + value: number, + ) { if (this.stats[RoomTypes.commune][roomName]) { this.updateCommuneStat(roomName, statName as keyof CommuneStats, value) return diff --git a/src/international/transactions.ts b/src/international/transactions.ts index ad325f858..0a3b59602 100644 --- a/src/international/transactions.ts +++ b/src/international/transactions.ts @@ -1,13 +1,13 @@ -import { Sleepable } from "utils/sleepable" -import { IDUpdateInterval, RoomStatsKeys } from "./constants" -import { randomIntRange, utils } from "utils/utils" +import { Sleepable } from 'utils/sleepable' +import { IDUpdateInterval, RoomStatsKeys } from './constants' +import { randomIntRange, Utils } from 'utils/utils' import { CollectiveManager } from './collective' import { SegmentsManager } from './segments' import { StatsManager } from './stats' export class TransactionsManager { static run() { - if (!utils.isTickInterval(IDUpdateInterval)) return + if (!Utils.isTickInterval(IDUpdateInterval)) return const recordedTransactionIDs = SegmentsManager.IDs.recordedTransactionIDs diff --git a/src/main.ts b/src/main.ts index c9de67005..d35eb97a0 100644 --- a/src/main.ts +++ b/src/main.ts @@ -9,7 +9,7 @@ import './room/roomObjectFunctions' import './room/roomObjectAdditions' import './room/creeps/creepAdditions' import './other/profilerRegister' -import { memHack } from 'other/memHack' +import { MemoryHack } from 'other/memoryHack' import { CPUMaxPerTick, Result } from 'international/constants' import { InitManager } from './international/init' import { MigrationManager } from 'international/migration' @@ -35,18 +35,18 @@ import { TransactionsManager } from 'international/transactions' import { SegmentsManager } from 'international/segments' import { CreepDataProcs } from 'room/creeps/creepData' import { RoomDataProcs } from 'room/roomData' -import { utils } from 'utils/utils' -import { procs } from 'utils/procs' +import { Utils } from 'utils/utils' +import { Procs } from 'utils/procs' import { CommuneDataProcs } from 'room/commune/communeData' import { GarbageCollector } from 'international/garbageCollector' export function originalLoop() { - memHack.run() + MemoryHack.runHack() if (SegmentsManager.run() === Result.stop) return if (Game.flags.deactivate) return if (Game.cpu.bucket < CPUMaxPerTick) { - procs.outOfBucket() + Procs.outOfBucket() return } if (global.userScript) global.userScript.initialRun() diff --git a/src/other/memHack.ts b/src/other/memHack.ts deleted file mode 100644 index 17df71a2a..000000000 --- a/src/other/memHack.ts +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Ripped from https://github.com/AlinaNova21/ZeSwarm/ - * Organized by Carson Burke and xTwisteDx - * - * Usage: - * Before the loop, import memHack - * At start of loop(), run memHack.run() - */ -class MemHack { - memory: Memory | undefined - - constructor() { - this.memory = Memory - this.memory = RawMemory._parsed - } - - run() { - delete global.Memory - global.Memory = this.memory - RawMemory._parsed = this.memory - } -} - -export const memHack = new MemHack() diff --git a/src/other/memoryHack.ts b/src/other/memoryHack.ts new file mode 100644 index 000000000..13ac6a18b --- /dev/null +++ b/src/other/memoryHack.ts @@ -0,0 +1,28 @@ +/** + * Ripped from https://github.com/AlinaNova21/ZeSwarm/ + * Organized by Carson Burke and xTwisteDx + * + * At point of writing, this "exploit" is not an official feature nor a violation of the TOS. + * It has officially been implictly endorsed by o4 as he has shared the code publically + * + * Usage: + * register MemoryHack + * import MemoryHack into main file + * At start of loop, run MemoryHack + */ +export class MemoryHack { + static memory: Memory | undefined + + static register () { + this.memory = Memory + this.memory = RawMemory._parsed + } + + static runHack() { + delete global.Memory + global.Memory = this.memory + RawMemory._parsed = this.memory + } +} + +MemoryHack.register() diff --git a/src/room/commune/combatRequest.ts b/src/room/commune/combatRequest.ts index c65f46a61..cacdcb707 100644 --- a/src/room/commune/combatRequest.ts +++ b/src/room/commune/combatRequest.ts @@ -1,7 +1,7 @@ import { CombatRequestKeys, RoomMemoryKeys, customColors } from 'international/constants' import { CommuneManager } from './commune' import { StatsManager } from 'international/stats' -import { randomIntRange, utils } from 'utils/utils' +import { randomIntRange, Utils } from 'utils/utils' import { CombatRequest } from 'types/internationalRequests' const checkRoomStatusInverval = randomIntRange(200, 500) @@ -64,8 +64,9 @@ export class CombatRequestManager { // If the room is closed or is now a respawn or novice zone if ( - utils.isTickInterval(checkRoomStatusInverval) && - Memory.rooms[room.name][RoomMemoryKeys.status] !== Memory.rooms[requestName][RoomMemoryKeys.status] + Utils.isTickInterval(checkRoomStatusInverval) && + Memory.rooms[room.name][RoomMemoryKeys.status] !== + Memory.rooms[requestName][RoomMemoryKeys.status] ) { return false } diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index d3315eefd..d57aceb77 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -6,7 +6,7 @@ import { findLowestScore, roundTo, forCoordsAroundRange, - utils, + Utils, } from 'utils/utils' import './defence' import './workRequest' @@ -138,7 +138,7 @@ export class CommuneManager { delete this._storedEnergyBuildThreshold } - if (utils.isTickInterval(100)) { + if (Utils.isTickInterval(100)) { delete this._upgradeStructure delete this._hasSufficientRoads delete this._resourceTargets diff --git a/src/room/commune/communeData.ts b/src/room/commune/communeData.ts index dcc22f777..0ab214707 100644 --- a/src/room/commune/communeData.ts +++ b/src/room/commune/communeData.ts @@ -1,5 +1,5 @@ import { CollectiveManager } from 'international/collective' -import { utils } from 'utils/utils' +import { Utils } from 'utils/utils' interface CommuneData { /** @@ -20,13 +20,12 @@ interface CommuneData { /** * Inter-tick data for communes */ -export const communeData: { [roomName: string]: Partial} = {} +export const communeData: { [roomName: string]: Partial } = {} /** * Handles cached data for communes */ export class CommuneDataProcs { - /** * Called by the room's RoomManager */ @@ -43,7 +42,7 @@ export class CommuneDataProcs { private static updateCommune(roomName: string) { const data = communeData[roomName] - if (utils.isTickInterval(10)) { + if (Utils.isTickInterval(10)) { delete data.estimatedCommuneSourceIncome delete data.towerRampartRepairTreshold } diff --git a/src/room/commune/haulRequestManager.ts b/src/room/commune/haulRequestManager.ts index abd0d2bf0..d3b8a5a53 100644 --- a/src/room/commune/haulRequestManager.ts +++ b/src/room/commune/haulRequestManager.ts @@ -4,7 +4,7 @@ import { CombatRequestKeys, RoomMemoryKeys, } from 'international/constants' -import { randomIntRange, randomTick, utils } from 'utils/utils' +import { randomIntRange, randomTick, Utils } from 'utils/utils' import { CommuneManager } from './commune' const checkRoomStatusInverval = randomIntRange(200, 500) @@ -35,8 +35,9 @@ export class HaulRequestManager { // The room is closed or is now a respawn or novice zone if ( - utils.isTickInterval(checkRoomStatusInverval) && - Memory.rooms[room.name][RoomMemoryKeys.status] !== Memory.rooms[requestName][RoomMemoryKeys.status] + Utils.isTickInterval(checkRoomStatusInverval) && + Memory.rooms[room.name][RoomMemoryKeys.status] !== + Memory.rooms[requestName][RoomMemoryKeys.status] ) { delete Memory.haulRequests[requestName] room.memory[RoomMemoryKeys.haulRequests].splice(index, 1) diff --git a/src/room/commune/observerProcs.ts b/src/room/commune/observerProcs.ts index a503142e9..14fa29c6e 100644 --- a/src/room/commune/observerProcs.ts +++ b/src/room/commune/observerProcs.ts @@ -1,11 +1,11 @@ import { RoomMemoryKeys } from "international/constants" import { RoomNameUtils } from 'room/roomNameUtils' -import { forRoomNamesAroundRangeXY, utils } from 'utils/utils' +import { forRoomNamesAroundRangeXY, Utils } from 'utils/utils' export class ObserverProcs { preTickRun(room: Room) { // Run only every so often - if (!utils.isTickInterval(10)) return + if (!Utils.isTickInterval(10)) return const observer = room.roomManager.structures.observer[0] if (!observer) return diff --git a/src/room/commune/remotesManager.ts b/src/room/commune/remotesManager.ts index 2c76decee..39eadb099 100644 --- a/src/room/commune/remotesManager.ts +++ b/src/room/commune/remotesManager.ts @@ -15,7 +15,7 @@ import { randomIntRange, randomRange, randomTick, - utils, + Utils, } from 'utils/utils' import { unpackPosList } from 'other/codec' import { CommuneManager } from './commune' @@ -102,7 +102,7 @@ export class RemotesManager { // The room is closed or is now a respawn or novice zone if ( - utils.isTickInterval(checkRoomStatusInterval) && + Utils.isTickInterval(checkRoomStatusInterval) && Memory.rooms[room.name][RoomMemoryKeys.status] !== remoteMemory[RoomMemoryKeys.status] ) { this.communeManager.removeRemote(remoteName, index) @@ -360,7 +360,7 @@ export class RemotesManager { private manageUse(remoteName: string): boolean { const roomMemory = Memory.rooms[remoteName] // If we aren't on the inverval to check for use - if (!utils.isTickInterval(manageUseInterval)) { + if (!Utils.isTickInterval(manageUseInterval)) { // Inform the current state of things return !roomMemory[RoomMemoryKeys.disable] } diff --git a/src/room/commune/spawning/spawnRequestConstructors.ts b/src/room/commune/spawning/spawnRequestConstructors.ts index fbd8f5c5b..d4624291d 100644 --- a/src/room/commune/spawning/spawnRequestConstructors.ts +++ b/src/room/commune/spawning/spawnRequestConstructors.ts @@ -9,7 +9,7 @@ export class SpawnRequestConstructors { /** * Generally, all creeps will have the same bodies */ - spawnRequestIndividualUniform(room: Room, args: SpawnRequestArgs) { + static spawnRequestIndividualUniform(room: Room, args: SpawnRequestArgs) { const spawnRequests: SpawnRequest[] = [] const maxCostPerCreep = Math.max( @@ -157,7 +157,8 @@ export class SpawnRequestConstructors { return spawnRequests } - spawnRequestGroupDiverse(room: Room, args: SpawnRequestArgs) { + + static spawnRequestGroupDiverse(room: Room, args: SpawnRequestArgs) { const spawnRequests: SpawnRequest[] = [] @@ -295,7 +296,8 @@ export class SpawnRequestConstructors { return spawnRequests } - spawnRequestGroupUniform(room: Room, args: SpawnRequestArgs) { + + static spawnRequestGroupUniform(room: Room, args: SpawnRequestArgs) { const spawnRequests: SpawnRequest[] = [] if (Game.flags[FlagNames.debugSpawning]) { @@ -405,5 +407,3 @@ export class SpawnRequestConstructors { return spawnRequests } } - -export const spawnRequestConstructors = new SpawnRequestConstructors() diff --git a/src/room/commune/spawning/spawnRequests.ts b/src/room/commune/spawning/spawnRequests.ts index d053a044c..88bff0f73 100644 --- a/src/room/commune/spawning/spawnRequests.ts +++ b/src/room/commune/spawning/spawnRequests.ts @@ -20,12 +20,8 @@ import { roundTo, } from 'utils/utils' import { CollectiveManager } from 'international/collective' -import { packPos, unpackPosList } from 'other/codec' -import { StatsManager } from 'international/stats' import { CommuneManager } from '../commune' -import { customLog } from 'utils/logging' import { SpawnRequest, SpawnRequestArgs, SpawnRequestTypes } from 'types/spawnRequest' -import { SpawnRequestConstructor, spawnRequestConstructors } from './spawnRequestConstructors' import { communeUtils } from '../communeUtils' import { StructureUtils } from 'room/structureUtils' diff --git a/src/room/commune/spawning/spawningStructureProcs.ts b/src/room/commune/spawning/spawningStructureProcs.ts index 74351ffb8..c168f77a2 100644 --- a/src/room/commune/spawning/spawningStructureProcs.ts +++ b/src/room/commune/spawning/spawningStructureProcs.ts @@ -16,8 +16,8 @@ import { CreepProcs } from 'room/creeps/creepProcs' import { StructureUtils } from 'room/structureUtils' import { SpawnRequest, BodyPartCounts, SpawnRequestTypes } from 'types/spawnRequest' import { customLog, LogTypes } from 'utils/logging' -import { getRange, findAdjacentCoordsToCoord, utils } from 'utils/utils' -import { SpawnRequestConstructor, spawnRequestConstructors } from './spawnRequestConstructors' +import { getRange, findAdjacentCoordsToCoord, Utils } from 'utils/utils' +import { SpawnRequestConstructor, SpawnRequestConstructors } from './spawnRequestConstructors' import { spawningStructureUtils } from './spawningStructureUtils' import { communeUtils } from '../communeUtils' @@ -46,7 +46,7 @@ export class SpawningStructureProcs { const spawnRequestsArgs = room.communeManager.spawnRequestsManager.run() for (const requestArgs of spawnRequestsArgs) { - const spawnRequests = spawnRequestConstructorsByType[requestArgs.type](room, requestArgs) + const spawnRequests = SpawnRequestConstructorsByType[requestArgs.type](room, requestArgs) // Loop through priorities inside requestsByPriority @@ -182,7 +182,7 @@ export class SpawningStructureProcs { private findSpawnIndexForSpawnRequest(inactiveSpawns: StructureSpawn[], request: SpawnRequest) { if (request.spawnTarget) { - const [score, index] = utils.findIndexWithLowestScore(inactiveSpawns, spawn => { + const [score, index] = Utils.findIndexWithLowestScore(inactiveSpawns, spawn => { return getRange(spawn.pos, request.spawnTarget) }) @@ -326,7 +326,7 @@ export class SpawningStructureProcs { /* const args = room.communeManager.spawnRequestsManager.run() stringifyLog('spawn request args', args) - stringifyLog('request', spawnRequestConstructorsByType[requestArgs.type](room, args[0])) + stringifyLog('request', SpawnRequestConstructorsByType[requestArgs.type](room, args[0])) */ return @@ -419,10 +419,10 @@ export interface OrganizedSpawns { inactiveSpawns: StructureSpawn[] } -export const spawnRequestConstructorsByType: { +export const SpawnRequestConstructorsByType: { [key in SpawnRequestTypes]: SpawnRequestConstructor } = { - [SpawnRequestTypes.individualUniform]: spawnRequestConstructors.spawnRequestIndividualUniform, - [SpawnRequestTypes.groupDiverse]: spawnRequestConstructors.spawnRequestGroupDiverse, - [SpawnRequestTypes.groupUniform]: spawnRequestConstructors.spawnRequestGroupUniform, + [SpawnRequestTypes.individualUniform]: SpawnRequestConstructors.spawnRequestIndividualUniform, + [SpawnRequestTypes.groupDiverse]: SpawnRequestConstructors.spawnRequestGroupDiverse, + [SpawnRequestTypes.groupUniform]: SpawnRequestConstructors.spawnRequestGroupUniform, } diff --git a/src/room/commune/terminal/terminalProcs.ts b/src/room/commune/terminal/terminalProcs.ts index 6193a534a..0003000d9 100644 --- a/src/room/commune/terminal/terminalProcs.ts +++ b/src/room/commune/terminal/terminalProcs.ts @@ -4,7 +4,7 @@ import { MarketManager } from 'international/market/marketOrders' import { simpleAllies } from 'international/simpleAllies/simpleAllies' import { StructureUtils } from 'room/structureUtils' import { customLog } from 'utils/logging' -import { newID, utils } from 'utils/utils' +import { newID, Utils } from 'utils/utils' import { ResourceTargets } from '../commune' import { tradingUtils } from './tradingUtils' import { ResourceRequest } from 'international/simpleAllies/types' @@ -34,7 +34,7 @@ export class TerminalProcs { if (!global.settings.marketUsage) return // only run every terminal cooldown interval, to have every terminal share the same required data (reduces CPU costs) - if (utils.isTickInterval(TERMINAL_COOLDOWN)) return + if (Utils.isTickInterval(TERMINAL_COOLDOWN)) return if (!MarketManager.isMarketFunctional) return if (this.manageResources(room, resourceTargets) === Result.action) return diff --git a/src/room/commune/towerProcs.ts b/src/room/commune/towerProcs.ts index 7898c7829..f26e00dac 100644 --- a/src/room/commune/towerProcs.ts +++ b/src/room/commune/towerProcs.ts @@ -9,7 +9,7 @@ import { randomTick, findWithLowestScore, scalePriority, - utils, + Utils, } from 'utils/utils' import { communeUtils } from './communeUtils' import { towerUtils } from './towerUtils' diff --git a/src/room/commune/towerUtils.ts b/src/room/commune/towerUtils.ts index 217f98f66..d4b1b8927 100644 --- a/src/room/commune/towerUtils.ts +++ b/src/room/commune/towerUtils.ts @@ -1,5 +1,5 @@ import { towerPowers } from "international/constants" -import { findWithLowestScore, getRange } from "utils/utils" +import { findWithLowestScore, getRange } from 'utils/utils' import { CommuneDataProcs, communeData } from './communeData' import { communeUtils } from './communeUtils' import { packCoord } from 'other/codec' diff --git a/src/room/commune/workRequest.ts b/src/room/commune/workRequest.ts index 164191043..708d3850a 100644 --- a/src/room/commune/workRequest.ts +++ b/src/room/commune/workRequest.ts @@ -5,7 +5,7 @@ import { RoomTypes, customColors, } from 'international/constants' -import { randomIntRange, randomTick, utils } from 'utils/utils' +import { randomIntRange, randomTick, Utils } from 'utils/utils' import { CollectiveManager } from 'international/collective' import { CommuneManager } from './commune' import { StatsManager } from 'international/stats' @@ -73,8 +73,9 @@ export class WorkRequestManager { // If the room is closed or is now a respawn or novice zone if ( - utils.isTickInterval(checkRoomStatusInverval) && - Memory.rooms[room.name][RoomMemoryKeys.status] !== Memory.rooms[requestName][RoomMemoryKeys.status] + Utils.isTickInterval(checkRoomStatusInverval) && + Memory.rooms[room.name][RoomMemoryKeys.status] !== + Memory.rooms[requestName][RoomMemoryKeys.status] ) { this.delete(requestName, request) return diff --git a/src/room/construction/basePlans.ts b/src/room/construction/basePlans.ts index a6548a149..ca0d578ca 100644 --- a/src/room/construction/basePlans.ts +++ b/src/room/construction/basePlans.ts @@ -5,41 +5,41 @@ import { encode, decode } from 'base32768' import { allStructureTypes } from 'international/constants' export class BasePlans { - /** - * doesn't cover the entire room grid, only coords that have plans - */ - map: { [packedCoord: string]: BasePlanCoord[] } - - constructor(map?: { [packedCoord: string]: BasePlanCoord[] }) { - this.map = map || {} - } - get(packedCoord: string) { - return this.map[packedCoord] + /** + * doesn't cover the entire room grid, only coords that have plans + */ + map: { [packedCoord: string]: BasePlanCoord[] } + + constructor(map?: { [packedCoord: string]: BasePlanCoord[] }) { + this.map = map || {} + } + get(packedCoord: string) { + return this.map[packedCoord] + } + getXY(x: number, y: number) { + return this.get(packXYAsCoord(x, y)) + } + pack() { + let str = '' + + for (const packedCoord in this.map) { + str += packedCoord + packBasePlanCoord(this.map[packedCoord]) } - getXY(x: number, y: number) { - return this.get(packXYAsCoord(x, y)) - } - pack() { - let str = '' - for (const packedCoord in this.map) { - str += packedCoord + packBasePlanCoord(this.map[packedCoord]) - } + return str + } + static unpack(packedMap: string) { + const plans = new BasePlans() - return str - } - static unpack(packedMap: string) { - const plans = new BasePlans() + const mapData = packedMap.split('_') - const mapData = packedMap.split('_') + for (const data of mapData) { + if (!data.length) continue + const [packedCoord, coordData] = splitStringAt(data, 2) - for (const data of mapData) { - if (!data.length) continue - const [packedCoord, coordData] = splitStringAt(data, 2) - - plans.map[packedCoord] = unpackBasePlanCoords(coordData) - } - - return plans + plans.map[packedCoord] = unpackBasePlanCoords(coordData) } + + return plans + } } diff --git a/src/room/construction/construction.ts b/src/room/construction/construction.ts index 4767c92aa..857165ad5 100644 --- a/src/room/construction/construction.ts +++ b/src/room/construction/construction.ts @@ -8,7 +8,7 @@ import { structureTypesToProtectSet, } from 'international/constants' import { customLog } from 'utils/logging' -import { findObjectWithID, packAsNum, randomIntRange, randomTick, utils } from 'utils/utils' +import { findObjectWithID, packAsNum, randomIntRange, randomTick, Utils } from 'utils/utils' import { packCoord, unpackCoord } from 'other/codec' import { CommuneManager } from 'room/commune/commune' import { BasePlans } from './basePlans' @@ -89,7 +89,7 @@ export class ConstructionManager { // If there are no builders // Only run every so often - else if (this.room.controller.level !== 1 && !utils.isTickInterval(constructionInterval)) + else if (this.room.controller.level !== 1 && !Utils.isTickInterval(constructionInterval)) return false // If there are too many construction sites diff --git a/src/room/construction/rampartPlans.ts b/src/room/construction/rampartPlans.ts index 714208fb5..df79320a1 100644 --- a/src/room/construction/rampartPlans.ts +++ b/src/room/construction/rampartPlans.ts @@ -4,44 +4,44 @@ import { encode, decode } from 'base32768' import { allStructureTypes } from 'international/constants' export class RampartPlans { - /** - * doesn't cover the entire room grid, only coords that have plans - */ - map: { [packedCoord: string]: RampartPlanCoord } + /** + * doesn't cover the entire room grid, only coords that have plans + */ + map: { [packedCoord: string]: RampartPlanCoord } - constructor(map?: { [packedCoord: string]: RampartPlanCoord }) { - this.map = map || {} - } - get(packedCoord: string) { - return this.map[packedCoord] - } - getXY(x: number, y: number) { - return this.get(packXYAsCoord(x, y)) - } - pack() { - let str = '' + constructor(map?: { [packedCoord: string]: RampartPlanCoord }) { + this.map = map || {} + } + get(packedCoord: string) { + return this.map[packedCoord] + } + getXY(x: number, y: number) { + return this.get(packXYAsCoord(x, y)) + } + pack() { + let str = '' - for (const packedCoord in this.map) { - str += packedCoord + packRampartPlanCoord(this.map[packedCoord]) - } - - return str + for (const packedCoord in this.map) { + str += packedCoord + packRampartPlanCoord(this.map[packedCoord]) } - static unpack(packedMap: string) { - const plans = new RampartPlans() - for (let i = 0; i < packedMap.length; i += 5) { - const data = decode(packedMap[i + 2] + packedMap[i + 3] + packedMap[i + 4]) + return str + } + static unpack(packedMap: string) { + const plans = new RampartPlans() - plans.map[packedMap[i] + packedMap[i + 1]] = { - minRCL: data[0], - coversStructure: data[1], - buildForNuke: data[2], - buildForThreat: data[3], - needsStoringStructure: data[4], - } - } + for (let i = 0; i < packedMap.length; i += 5) { + const data = decode(packedMap[i + 2] + packedMap[i + 3] + packedMap[i + 4]) - return plans + plans.map[packedMap[i] + packedMap[i + 1]] = { + minRCL: data[0], + coversStructure: data[1], + buildForNuke: data[2], + buildForThreat: data[3], + needsStoringStructure: data[4], + } } + + return plans + } } diff --git a/src/room/creeps/creepData.ts b/src/room/creeps/creepData.ts index 411e143c2..3bdc35969 100644 --- a/src/room/creeps/creepData.ts +++ b/src/room/creeps/creepData.ts @@ -1,10 +1,10 @@ import { util } from "chai" -import { utils } from "utils/utils" +import { Utils } from 'utils/utils' -export type Boosts = Partial<{[ key in MineralBoostConstant]: number }> +export type Boosts = Partial<{ [key in MineralBoostConstant]: number }> export interface CreepData { - parts: Partial<{[key in BodyPartConstant]: number }> + parts: Partial<{ [key in BodyPartConstant]: number }> /** * update when applying boosts */ @@ -28,7 +28,6 @@ export const creepData: { [creepName: string]: Partial } = {} * Handles cached data for creeps we own */ export class CreepDataProcs { - static initCreep(creepName: string) { creepData[creepName] ??= {} } @@ -49,7 +48,7 @@ export class CreepDataProcs { /* .delete */ - if (utils.isTickInterval(15)) { + if (Utils.isTickInterval(15)) { } } } diff --git a/src/room/creeps/creepProcs.ts b/src/room/creeps/creepProcs.ts index 560e1f28a..624d9d22a 100644 --- a/src/room/creeps/creepProcs.ts +++ b/src/room/creeps/creepProcs.ts @@ -1,5 +1,11 @@ import { RoomManager } from 'room/room' -import { findClosestObject, findObjectWithID, forAdjacentCoords, getRange, getRangeXY } from 'utils/utils' +import { + findClosestObject, + findObjectWithID, + forAdjacentCoords, + getRange, + getRangeXY, +} from 'utils/utils' import { myCreepUtils } from './myCreepUtils' import { StatsManager } from 'international/stats' import { diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index bf7334337..8e6f80853 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -6,8 +6,12 @@ import { RoomLogisticsRequestTypes } from 'international/constants' import { - findClosestObject, findObjectWithID, getRangeXY, - findClosestObjectInRange, getRange, findWithLowestScore + findClosestObject, + findObjectWithID, + getRangeXY, + findClosestObjectInRange, + getRange, + findWithLowestScore, } from 'utils/utils' import { packCoord, unpackCoordAsPos diff --git a/src/room/creeps/roleManagers/antifa/dynamicSquad.ts b/src/room/creeps/roleManagers/antifa/dynamicSquad.ts index 722b643c0..d7dc68c49 100644 --- a/src/room/creeps/roleManagers/antifa/dynamicSquad.ts +++ b/src/room/creeps/roleManagers/antifa/dynamicSquad.ts @@ -2,7 +2,7 @@ import { CombatRequestKeys, CreepMemoryKeys } from 'international/constants' -import { findClosestObject, getRange, utils } from 'utils/utils' +import { findClosestObject, getRange, Utils } from 'utils/utils' import { Antifa } from './antifa' interface MembersByType { @@ -49,12 +49,9 @@ export class DynamicSquad { if (this.runCombatRoom()) return if (!this.getInFormation()) return - - } private runCombatRoom() { - this.runMelee() this.runHealer() this.runRanger() @@ -63,40 +60,34 @@ export class DynamicSquad { } private runMelee() { - const melee = this.membersByType.melee if (!melee) return - - } private runHealer() { - const healer = this.membersByType.healer if (!healer) return const melee = this.membersByType.melee if (melee) { - - if (getRange(healer.pos, melee.pos) <= 1) { - - if (melee.hits < melee.hitsMax) { - healer.heal(melee) - healer.assignMoveRequest(melee.pos) - } - return - - healer.createMoveRequest({ - origin: healer.pos, - goals: [ - { - pos: melee.pos, - range: 1, - }, - ], - }) + if (getRange(healer.pos, melee.pos) <= 1) { + if (melee.hits < melee.hitsMax) { + healer.heal(melee) + healer.assignMoveRequest(melee.pos) } return + + healer.createMoveRequest({ + origin: healer.pos, + goals: [ + { + pos: melee.pos, + range: 1, + }, + ], + }) + } + return } // There is no melee @@ -105,15 +96,11 @@ export class DynamicSquad { } private runRanger() { - const ranger = this.membersByType.ranger if (!ranger) return - - } private runDismantler() { - const dismantler = this.membersByType.dismantler if (!dismantler) return /* @@ -137,7 +124,7 @@ export class DynamicSquad { const previousMember = members[previousIndex] // If we are the member in question or nearby to it if ( - utils.getInterRange( + Utils.getInterRange( member.pos, member.room.name, previousMember.pos, diff --git a/src/room/creeps/roleManagers/commune/defenders/meleeDefender.ts b/src/room/creeps/roleManagers/commune/defenders/meleeDefender.ts index 9b0f020d1..4418784e6 100644 --- a/src/room/creeps/roleManagers/commune/defenders/meleeDefender.ts +++ b/src/room/creeps/roleManagers/commune/defenders/meleeDefender.ts @@ -7,17 +7,17 @@ import { } from 'international/constants' import { PlayerManager } from 'international/players' import { - areCoordsEqual, - findClosestObject, - findClosestObjectEuc, - findFurthestObjectEuc, - findObjectWithID, - getRangeXY, - getRangeEucXY, - getRange, - randomTick, - randomVal, - getRangeEuc, + areCoordsEqual, + findClosestObject, + findClosestObjectEuc, + findFurthestObjectEuc, + findObjectWithID, + getRangeXY, + getRangeEucXY, + getRange, + randomTick, + randomVal, + getRangeEuc, } from 'utils/utils' import { packCoord } from 'other/codec' diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index 5548778bd..042b42f94 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -23,7 +23,7 @@ import { getRangeXY, randomIntRange, randomTick, - utils, + Utils, } from 'utils/utils' export class Hauler extends Creep { @@ -100,7 +100,7 @@ export class Hauler extends Creep { } initRun() { - if (utils.isTickInterval(10) && this.getActiveBodyparts(CARRY) === 0) { + if (Utils.isTickInterval(10) && this.getActiveBodyparts(CARRY) === 0) { this.suicide() return } diff --git a/src/room/creeps/roleManagers/remote/remoteBuilder.ts b/src/room/creeps/roleManagers/remote/remoteBuilder.ts index 1d78fcb4e..b50cfc74c 100644 --- a/src/room/creeps/roleManagers/remote/remoteBuilder.ts +++ b/src/room/creeps/roleManagers/remote/remoteBuilder.ts @@ -6,13 +6,13 @@ import { RoomTypes, } from 'international/constants' import { - findCarryPartsRequired, - findObjectWithID, - getRangeXY, - getRange, - randomTick, - scalePriority, - areCoordsEqual, + findCarryPartsRequired, + findObjectWithID, + getRangeXY, + getRange, + randomTick, + scalePriority, + areCoordsEqual, } from 'utils/utils' import { packCoord, reversePosList, unpackPosAt } from 'other/codec' import { indexOf } from 'lodash' diff --git a/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts b/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts index 934476ca0..7d3e9b55c 100644 --- a/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts +++ b/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts @@ -16,7 +16,7 @@ import { randomTick, scalePriority, areCoordsEqual, - utils, + Utils, } from 'utils/utils' import { packCoord, reversePosList, unpackPosAt } from 'other/codec' import { indexOf } from 'lodash' @@ -63,7 +63,7 @@ export class RemoteHarvester extends Creep { } initRun(): void { - if (utils.isTickInterval(10) && this.getActiveBodyparts(MOVE) === 0) { + if (Utils.isTickInterval(10) && this.getActiveBodyparts(MOVE) === 0) { this.suicide() return } diff --git a/src/room/remotePlanner.ts b/src/room/remotePlanner.ts index 9ed5a2590..050f06c14 100644 --- a/src/room/remotePlanner.ts +++ b/src/room/remotePlanner.ts @@ -17,30 +17,30 @@ import { RoomMemoryKeys, } from 'international/constants' import { - areCoordsEqual, - createPosMap, - findAdjacentCoordsToCoord, - findAdjacentCoordsToXY, - findAvgBetweenCoords, - findClosestCoord, - findClosestPos, - findCoordsInRange, - findCoordsInRangeXY, - findCoordsInsideRect, - forAdjacentCoords, - forCoordsInRange, - getRangeXY, - getRange, - isXYExit, - isXYInBorder, - isXYInRoom, - packAsNum, - packXYAsNum, - unpackNumAsCoord, - unpackNumAsPos, - forCoordsAroundRange, - randomIntRange, - sortBy, + areCoordsEqual, + createPosMap, + findAdjacentCoordsToCoord, + findAdjacentCoordsToXY, + findAvgBetweenCoords, + findClosestCoord, + findClosestPos, + findCoordsInRange, + findCoordsInRangeXY, + findCoordsInsideRect, + forAdjacentCoords, + forCoordsInRange, + getRangeXY, + getRange, + isXYExit, + isXYInBorder, + isXYInRoom, + packAsNum, + packXYAsNum, + unpackNumAsCoord, + unpackNumAsPos, + forCoordsAroundRange, + randomIntRange, + sortBy, } from 'utils/utils' import { CollectiveManager } from 'international/collective' import { diff --git a/src/room/room.ts b/src/room/room.ts index 75376e312..9ec8593c8 100644 --- a/src/room/room.ts +++ b/src/room/room.ts @@ -26,19 +26,19 @@ import { roomTypesUsedForStats, } from 'international/constants' import { - findClosestObject, - findHighestScore, - findObjectWithID, - forAdjacentCoords, - forCoordsInRange, - forRoomNamesAroundRangeXY, - getRange, - getRangeXY, - isAlly, - packAsNum, - packXYAsNum, - randomTick, - sortBy, + findClosestObject, + findHighestScore, + findObjectWithID, + forAdjacentCoords, + forCoordsInRange, + forRoomNamesAroundRangeXY, + getRange, + getRangeXY, + isAlly, + packAsNum, + packXYAsNum, + randomTick, + sortBy, } from 'utils/utils' import { CommuneManager } from './commune/commune' import { CreepRoleManager } from './creeps/creepRoleManager' diff --git a/src/room/roomData.ts b/src/room/roomData.ts index f86faa94c..23c7dd648 100644 --- a/src/room/roomData.ts +++ b/src/room/roomData.ts @@ -1,4 +1,4 @@ -import { utils } from "utils/utils" +import { Utils } from 'utils/utils' import { CommuneDataProcs } from './commune/communeData' export interface RoomData { diff --git a/src/room/roomUtils.ts b/src/room/roomUtils.ts index 51dc314f0..8464d341c 100644 --- a/src/room/roomUtils.ts +++ b/src/room/roomUtils.ts @@ -1,7 +1,7 @@ import { RoomMemoryKeys, RoomTypes, roomDimensions } from 'international/constants' import { packCoord, packXYAsCoord, unpackCoord } from 'other/codec' import { RoomDataProcs, roomData } from './roomData' -import { findObjectWithID, forAdjacentCoords, utils } from 'utils/utils' +import { findObjectWithID, forAdjacentCoords, Utils } from 'utils/utils' import { StructureUtils } from './structureUtils' import { StructureCoords } from './room' import { Dashboard, Rectangle, Table } from 'screeps-viz' diff --git a/src/utils/procs.ts b/src/utils/procs.ts index ec22dd27f..d0b1f0ae0 100644 --- a/src/utils/procs.ts +++ b/src/utils/procs.ts @@ -4,7 +4,7 @@ import { CollectiveManager } from 'international/collective' import { LogTypes, customLog } from "./logging" export class Procs { - outOfBucket() { + static outOfBucket() { CollectiveManager.logs = '' customLog('Skipping tick due to low bucket, bucket remaining', Game.cpu.bucket, { type: LogTypes.warning, @@ -16,5 +16,3 @@ export class Procs { ) } } - -export const procs = new Procs() diff --git a/src/utils/sleepable.ts b/src/utils/sleepable.ts index 19687abfe..605e84615 100644 --- a/src/utils/sleepable.ts +++ b/src/utils/sleepable.ts @@ -4,74 +4,74 @@ import { randomIntRange } from './utils' * Persistent instances of this class and its inhereters are able to sleep */ export class Sleepable { - /** - * The tick we need to be asleep until - */ - sleepUntil: number - /** - * How long we sleep for each time - */ - sleepFor = randomIntRange(10, 20) + /** + * The tick we need to be asleep until + */ + sleepUntil: number + /** + * How long we sleep for each time + */ + sleepFor = randomIntRange(10, 20) - /** - * Simply checks if the program is alseep or not - */ - isSleeping() { - return this.sleepUntil > Game.time - } + /** + * Simply checks if the program is alseep or not + */ + isSleeping() { + return this.sleepUntil > Game.time + } - /** - * Begin sleeping when whatever process being run is completed - */ - sleepWhenDone() { - this.sleepUntil = Game.time + this.sleepFor - } + /** + * Begin sleeping when whatever process being run is completed + */ + sleepWhenDone() { + this.sleepUntil = Game.time + this.sleepFor + } - /** - * Puts the program to sleep for future tick(s) if it is not - */ - isSleepingResponsive() { - if (this.sleepUntil > Game.time) return true + /** + * Puts the program to sleep for future tick(s) if it is not + */ + isSleepingResponsive() { + if (this.sleepUntil > Game.time) return true - this.sleepWhenDone() - return false - } + this.sleepWhenDone() + return false + } } /** * Persistent instances of this class and its inhereters are able to sleep */ export class StaticSleepable { - /** - * The tick we need to be asleep until - */ - static sleepUntil: number - /** - * How long we sleep for each time - */ - static sleepFor = randomIntRange(10, 20) + /** + * The tick we need to be asleep until + */ + static sleepUntil: number + /** + * How long we sleep for each time + */ + static sleepFor = randomIntRange(10, 20) - /** - * Simply checks if the program is alseep or not - */ - static isSleeping() { - return StaticSleepable.sleepUntil > Game.time - } + /** + * Simply checks if the program is alseep or not + */ + static isSleeping() { + return StaticSleepable.sleepUntil > Game.time + } - /** - * Begin sleeping when whatever process being run is completed - */ - static sleepWhenDone() { - StaticSleepable.sleepUntil = Game.time + StaticSleepable.sleepFor - } + /** + * Begin sleeping when whatever process being run is completed + */ + static sleepWhenDone() { + StaticSleepable.sleepUntil = Game.time + StaticSleepable.sleepFor + } - /** - * Puts the program to sleep for future tick(s) if it is not - */ - static isSleepingResponsive() { - if (StaticSleepable.sleepUntil > Game.time) return true + /** + * Puts the program to sleep for future tick(s) if it is not + */ + static isSleepingResponsive() { + if (StaticSleepable.sleepUntil > Game.time) return true - StaticSleepable.sleepWhenDone() - return false - } + StaticSleepable.sleepWhenDone() + return false + } } diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 4024df26a..f68f9c404 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -806,5 +806,3 @@ export class Utils { return this.getInterRangeXY(coord1.x, coord1.y, roomName1, coord2.x, coord2.y, roomName2) } } - -export const utils = new Utils() From 7bc38e8adf4969c58bdd69211f56866671a003c1 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 23 Jan 2024 14:36:24 -0800 Subject: [PATCH 102/190] static ErrorExporter, SpawningStructureProcs --- src/international/constants.ts | 1 + src/main.ts | 4 +- src/other/ErrorMapper.ts | 172 +++++++++--------- .../{ErrorExporter.ts => errorExporter.ts} | 8 +- src/other/profilerRegister.ts | 2 +- src/room/commune/commune.ts | 10 +- .../spawning/spawningStructureProcs.ts | 32 ++-- .../spawning/spawningStructureUtils.ts | 2 - 8 files changed, 111 insertions(+), 120 deletions(-) rename src/other/{ErrorExporter.ts => errorExporter.ts} (77%) diff --git a/src/international/constants.ts b/src/international/constants.ts index 54445b5e9..336c56717 100644 --- a/src/international/constants.ts +++ b/src/international/constants.ts @@ -1472,6 +1472,7 @@ export enum FlagNames { debugCreepLogistics = 'debugCreepLogistics', debugSpawning = 'debugSpawning', mapVisuals = 'mapVisuals', + deactivate = 'deactiveate', } export const IDUpdateInterval = randomIntRange(50, 100) diff --git a/src/main.ts b/src/main.ts index d35eb97a0..18e1425c1 100644 --- a/src/main.ts +++ b/src/main.ts @@ -10,7 +10,7 @@ import './room/roomObjectAdditions' import './room/creeps/creepAdditions' import './other/profilerRegister' import { MemoryHack } from 'other/memoryHack' -import { CPUMaxPerTick, Result } from 'international/constants' +import { CPUMaxPerTick, FlagNames, Result } from 'international/constants' import { InitManager } from './international/init' import { MigrationManager } from 'international/migration' import { RespawnManager } from './international/respawn' @@ -44,7 +44,7 @@ export function originalLoop() { MemoryHack.runHack() if (SegmentsManager.run() === Result.stop) return - if (Game.flags.deactivate) return + if (Game.flags[FlagNames.deactivate]) return if (Game.cpu.bucket < CPUMaxPerTick) { Procs.outOfBucket() return diff --git a/src/other/ErrorMapper.ts b/src/other/ErrorMapper.ts index ca4ef6e55..06c4e3dc0 100644 --- a/src/other/ErrorMapper.ts +++ b/src/other/ErrorMapper.ts @@ -1,107 +1,103 @@ /* eslint-disable */ import { SourceMapConsumer } from 'source-map' -import { errorExporter } from './ErrorExporter' +import { ErrorExporter } from './errorExporter' export class ErrorMapper { - // Cache consumer - private static _consumer?: SourceMapConsumer + // Cache consumer + private static _consumer?: SourceMapConsumer - public static get consumer(): SourceMapConsumer { - if (this._consumer == null) { - // @ts-ignore - this._consumer = new SourceMapConsumer(require('main.js.map')) - } - - // @ts-ignore - return this._consumer + public static get consumer(): SourceMapConsumer { + if (this._consumer == null) { + // @ts-ignore + this._consumer = new SourceMapConsumer(require('main.js.map')) } - // Cache previously mapped traces to improve performance - public static cache: { [key: string]: string } = {} + // @ts-ignore + return this._consumer + } - /** - * Generates a stack trace using a source map generate original symbol names. - * - * WARNING - EXTREMELY high CPU cost for first call after reset - >30 CPU! Use sparingly! - * (Consecutive calls after a reset are more reasonable, ~0.1 CPU/ea) - * - * @param {Error | string} error The error or original stack trace - * @returns {string} The source-mapped stack trace - */ - public static sourceMappedStackTrace(error: Error | string): string { - const stack: string = error instanceof Error ? (error.stack as string) : error - if (Object.prototype.hasOwnProperty.call(this.cache, stack)) { - return this.cache[stack] - } + // Cache previously mapped traces to improve performance + public static cache: { [key: string]: string } = {} + + /** + * Generates a stack trace using a source map generate original symbol names. + * + * WARNING - EXTREMELY high CPU cost for first call after reset - >30 CPU! Use sparingly! + * (Consecutive calls after a reset are more reasonable, ~0.1 CPU/ea) + * + * @param {Error | string} error The error or original stack trace + * @returns {string} The source-mapped stack trace + */ + public static sourceMappedStackTrace(error: Error | string): string { + const stack: string = error instanceof Error ? (error.stack as string) : error + if (Object.prototype.hasOwnProperty.call(this.cache, stack)) { + return this.cache[stack] + } - // eslint-disable-next-line no-useless-escape - const re = /^\s+at\s+(.+?\s+)?\(?([0-z._\-\\\/]+):(\d+):(\d+)\)?$/gm - let match: RegExpExecArray | null - let outStack = error.toString() + // eslint-disable-next-line no-useless-escape + const re = /^\s+at\s+(.+?\s+)?\(?([0-z._\-\\\/]+):(\d+):(\d+)\)?$/gm + let match: RegExpExecArray | null + let outStack = error.toString() - while ((match = re.exec(stack))) { - if (match[2] === 'main') { - const pos = this.consumer.originalPositionFor({ - column: parseInt(match[4], 10), - line: parseInt(match[3], 10), - }) + while ((match = re.exec(stack))) { + if (match[2] === 'main') { + const pos = this.consumer.originalPositionFor({ + column: parseInt(match[4], 10), + line: parseInt(match[3], 10), + }) - if (pos.line != null) { - if (pos.name) { - outStack += `\n at ${pos.name} (${pos.source}:${pos.line}:${pos.column})` - } else { - if (match[1]) { - // no original source file name known - use file name from given trace - outStack += `\n at ${match[1]} (${pos.source}:${pos.line}:${pos.column})` - } else { - // no original source file name known or in given trace - omit name - outStack += `\n at ${pos.source}:${pos.line}:${pos.column}` - } - } - } else { - // no known position - break - } + if (pos.line != null) { + if (pos.name) { + outStack += `\n at ${pos.name} (${pos.source}:${pos.line}:${pos.column})` + } else { + if (match[1]) { + // no original source file name known - use file name from given trace + outStack += `\n at ${match[1]} (${pos.source}:${pos.line}:${pos.column})` } else { - // no more parseable lines - break + // no original source file name known or in given trace - omit name + outStack += `\n at ${pos.source}:${pos.line}:${pos.column}` } + } + } else { + // no known position + break } - - this.cache[stack] = outStack - return outStack + } else { + // no more parseable lines + break + } } - public static wrapLoop(loop: () => void): () => void { - return () => { - try { - loop() - } catch (e) { - if (e instanceof Error) { - if ('sim' in Game.rooms) { - const message = `Source maps don't work in the simulator - displaying original error` - // @ts-ignore - console.log( - `

${message}
${_.escape(e.stack)}

`, - ) - } else if (Game.cpu.bucket < Game.cpu.tickLimit) { - const message = `Out of CPU - displaying original error` - // @ts-ignore - console.log( - `

${message}
${_.escape(e.stack)}

`, - ) - } else { - const stack = _.escape(this.sourceMappedStackTrace(e)) - // @ts-ignore - console.log(`

${stack}

`) - if (global.settings.errorExporting) - errorExporter.addErrorToSegment(stack, global.settings.breakingVersion) - } - } else { - // can't handle it - throw e - } - } + this.cache[stack] = outStack + return outStack + } + + public static wrapLoop(loop: () => void): () => void { + return () => { + try { + loop() + } catch (e) { + if (e instanceof Error) { + if ('sim' in Game.rooms) { + const message = `Source maps don't work in the simulator - displaying original error` + // @ts-ignore + console.log(`

${message}
${_.escape(e.stack)}

`) + } else if (Game.cpu.bucket < Game.cpu.tickLimit) { + const message = `Out of CPU - displaying original error` + // @ts-ignore + console.log(`

${message}
${_.escape(e.stack)}

`) + } else { + const stack = _.escape(this.sourceMappedStackTrace(e)) + // @ts-ignore + console.log(`

${stack}

`) + if (global.settings.errorExporting) + ErrorExporter.addErrorToSegment(stack, global.settings.breakingVersion) + } + } else { + // can't handle it + throw e } + } } + } } diff --git a/src/other/ErrorExporter.ts b/src/other/errorExporter.ts similarity index 77% rename from src/other/ErrorExporter.ts rename to src/other/errorExporter.ts index 2e0e8b71b..cfe9c766f 100644 --- a/src/other/ErrorExporter.ts +++ b/src/other/errorExporter.ts @@ -4,17 +4,17 @@ import { SegmentIDs } from "international/constants" * Rather cpu intensive and unavoidably inefficient. Try to avoid this needing to ba called */ export class ErrorExporter { - public getSegmentData(): ErrorsSegment { + public static getSegmentData(): ErrorsSegment { const segment = RawMemory.segments[SegmentIDs.errors] if (segment === undefined || segment.length === 0) return { errors: [] } else return JSON.parse(RawMemory.segments[SegmentIDs.errors]) } - public setSegmentData(data: ErrorsSegment): void { + public static setSegmentData(data: ErrorsSegment): void { RawMemory.segments[SegmentIDs.errors] = JSON.stringify(data) } - public addErrorToSegment(stack: string, version?: number): void { + public static addErrorToSegment(stack: string, version?: number): void { const data = this.getSegmentData() if (JSON.stringify(data).length > 90000) { Game.notify(`Error segment (${SegmentIDs.errors}) is almost full`) @@ -26,5 +26,3 @@ export class ErrorExporter { this.setSegmentData(data) } } - -export const errorExporter = new ErrorExporter() diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index 3d7f344d8..8422781d0 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -37,7 +37,7 @@ import { MapVisualsManager } from 'international/mapVisuals' import { MigrationManager } from 'international/migration' import { RoomPruningManager } from 'international/roomPruning' import { RoomVisualsManager } from 'room/roomVisuals' -import { ErrorExporter } from './ErrorExporter' +import { ErrorExporter } from './errorExporter' import { RespawnManager } from 'international/respawn' import { BasePlans } from 'room/construction/basePlans' import { RampartPlans } from 'room/construction/rampartPlans' diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index d57aceb77..c391f5708 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -43,7 +43,7 @@ import { LogisticsProcs } from 'room/logisticsProcs' import { towerProcs } from './towerProcs' import { SourceProcs } from 'room/sourceProcs' import { terminalProcs } from './terminal/terminalProcs' -import { spawningStructureProcs } from './spawning/spawningStructureProcs' +import { SpawningStructureProcs } from './spawning/spawningStructureProcs' import { observerProcs } from './observerProcs' import { powerSpawnProcs } from './powerSpawnProcs' @@ -259,7 +259,7 @@ export class CommuneManager { this.remotesManager.run() this.haulerNeedManager.run() - spawningStructureProcs.createRoomLogisticsRequests(this.room) + SpawningStructureProcs.createRoomLogisticsRequests(this.room) LogisticsProcs.createCommuneStoringStructureLogisticsRequests(this.room) this.factoryManager.run() LogisticsProcs.createCommuneContainerLogisticsRequests(this.room) @@ -269,15 +269,15 @@ export class CommuneManager { this.linkManager.run() this.labManager.run() powerSpawnProcs.run(this.room) - spawningStructureProcs.createPowerTasks(this.room) + SpawningStructureProcs.createPowerTasks(this.room) this.room.roomManager.creepRoleManager.run() this.room.roomManager.powerCreepRoleManager.run() communeProcs.tryUpdateMinHaulerCost(this.room) - spawningStructureProcs.tryRunSpawning(this.room) + SpawningStructureProcs.tryRunSpawning(this.room) - spawningStructureProcs.tryRegisterSpawningMovement(this.room) + SpawningStructureProcs.tryRegisterSpawningMovement(this.room) this.room.roomManager.endTickCreepManager.run() this.room.roomManager.roomVisualsManager.run() diff --git a/src/room/commune/spawning/spawningStructureProcs.ts b/src/room/commune/spawning/spawningStructureProcs.ts index c168f77a2..f66f94c81 100644 --- a/src/room/commune/spawning/spawningStructureProcs.ts +++ b/src/room/commune/spawning/spawningStructureProcs.ts @@ -18,11 +18,10 @@ import { SpawnRequest, BodyPartCounts, SpawnRequestTypes } from 'types/spawnRequ import { customLog, LogTypes } from 'utils/logging' import { getRange, findAdjacentCoordsToCoord, Utils } from 'utils/utils' import { SpawnRequestConstructor, SpawnRequestConstructors } from './spawnRequestConstructors' -import { spawningStructureUtils } from './spawningStructureUtils' import { communeUtils } from '../communeUtils' export class SpawningStructureProcs { - public tryRunSpawning(room: Room) { + public static tryRunSpawning(room: Room) { const spawns = room.roomManager.structures.spawn if (!spawns.length) return @@ -42,7 +41,7 @@ export class SpawningStructureProcs { this.runSpawning(room, organizedSpawns.inactiveSpawns) } - private runSpawning(room: Room, inactiveSpawns: StructureSpawn[]) { + private static runSpawning(room: Room, inactiveSpawns: StructureSpawn[]) { const spawnRequestsArgs = room.communeManager.spawnRequestsManager.run() for (const requestArgs of spawnRequestsArgs) { @@ -56,7 +55,7 @@ export class SpawningStructureProcs { } } - private registerSpawningCreeps(room: Room, activeSpawns: StructureSpawn[]) { + private static registerSpawningCreeps(room: Room, activeSpawns: StructureSpawn[]) { for (const spawn of activeSpawns) { const creep = Game.creeps[spawn.spawning.name] CreepProcs.registerSpawning(creep, spawn) @@ -74,7 +73,7 @@ export class SpawningStructureProcs { } } - private runSpawnRequest( + private static runSpawnRequest( room: Room, inactiveSpawns: StructureSpawn[], request: SpawnRequest, @@ -180,7 +179,7 @@ export class SpawningStructureProcs { return Result.success } - private findSpawnIndexForSpawnRequest(inactiveSpawns: StructureSpawn[], request: SpawnRequest) { + private static findSpawnIndexForSpawnRequest(inactiveSpawns: StructureSpawn[], request: SpawnRequest) { if (request.spawnTarget) { const [score, index] = Utils.findIndexWithLowestScore(inactiveSpawns, spawn => { return getRange(spawn.pos, request.spawnTarget) @@ -192,7 +191,7 @@ export class SpawningStructureProcs { return 0 } - private constructBodyFromSpawnRequest(role: CreepRoles, bodyPartCounts: BodyPartCounts) { + private static constructBodyFromSpawnRequest(role: CreepRoles, bodyPartCounts: BodyPartCounts) { let body: BodyPartConstant[] = [] if (role === 'hauler') { @@ -247,7 +246,7 @@ export class SpawningStructureProcs { return body } - private findDirections(room: Room, pos: RoomPosition) { + private static findDirections(room: Room, pos: RoomPosition) { const anchor = room.roomManager.anchor if (!anchor) throw Error('No anchor for spawning structures ' + room.name) @@ -269,11 +268,11 @@ export class SpawningStructureProcs { return directions } - private testSpawn(spawn: StructureSpawn, body: BodyPartConstant[], requestID: number) { + private static testSpawn(spawn: StructureSpawn, body: BodyPartConstant[], requestID: number) { return spawn.spawnCreep(body, requestID.toString(), { dryRun: true }) } - private advancedSpawn( + private static advancedSpawn( spawn: StructureSpawn, spawnRequest: SpawnRequest, body: BodyPartConstant[], @@ -290,7 +289,7 @@ export class SpawningStructureProcs { return spawnResult } - createPowerTasks(room: Room) { + static createPowerTasks(room: Room) { if (!room.myPowerCreeps.length) return // There is a vivid benefit to powering spawns @@ -306,7 +305,7 @@ export class SpawningStructureProcs { } } - createRoomLogisticsRequests(room: Room) { + static createRoomLogisticsRequests(room: Room) { // If all spawning structures are 100% filled, no need to go further if (room.energyAvailable === room.energyCapacityAvailable) return @@ -322,7 +321,7 @@ export class SpawningStructureProcs { /** * Spawn request debugging */ - private test(room: Room) { + private static test(room: Room) { /* const args = room.communeManager.spawnRequestsManager.run() stringifyLog('spawn request args', args) @@ -334,7 +333,7 @@ export class SpawningStructureProcs { this.testRequests() } - private testArgs(room: Room) { + private static testArgs(room: Room) { const spawnRequestsArgs = room.communeManager.spawnRequestsManager.run() for (const request of spawnRequestsArgs) { @@ -349,9 +348,9 @@ export class SpawningStructureProcs { } } - private testRequests() {} + private static testRequests() {} - tryRegisterSpawningMovement(room: Room) { + static tryRegisterSpawningMovement(room: Room) { const organizedSpawns = communeUtils.getOrganizedSpawns(room) if (!organizedSpawns) return @@ -412,7 +411,6 @@ export class SpawningStructureProcs { } } } -export const spawningStructureProcs = new SpawningStructureProcs() export interface OrganizedSpawns { activeSpawns: StructureSpawn[] diff --git a/src/room/commune/spawning/spawningStructureUtils.ts b/src/room/commune/spawning/spawningStructureUtils.ts index d301ccd51..753243586 100644 --- a/src/room/commune/spawning/spawningStructureUtils.ts +++ b/src/room/commune/spawning/spawningStructureUtils.ts @@ -4,5 +4,3 @@ import { CreepProcs } from 'room/creeps/creepProcs' import { CreepMemoryKeys } from 'international/constants' export class SpawningStructureUtils {} - -export const spawningStructureUtils = new SpawningStructureUtils() From 2e5e3962648059833c62ef538518cfe6a6017db7 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 23 Jan 2024 14:46:16 -0800 Subject: [PATCH 103/190] many more static conversions --- design.md | 2 +- src/room/commune/commune.ts | 18 +++++----- src/room/commune/nukerProcs.ts | 6 ++-- src/room/commune/observerProcs.ts | 8 ++--- src/room/commune/powerSpawnProcs.ts | 10 +++--- src/room/commune/terminal/terminalProcs.ts | 40 ++++++++++------------ src/room/commune/terminal/tradingUtils.ts | 18 +++++----- src/room/commune/towerProcs.ts | 34 +++++++++--------- src/room/commune/towerUtils.ts | 17 +++++---- src/room/construction/communePlanner.ts | 4 +-- src/room/creeps/creepAdditions.ts | 4 +-- src/room/remotePlanner.ts | 4 +-- 12 files changed, 77 insertions(+), 88 deletions(-) diff --git a/design.md b/design.md index f3bcbe3f6..891080a5c 100644 --- a/design.md +++ b/design.md @@ -48,7 +48,7 @@ The MarketManager handles caching market related data, updating / deleting it as ## Use of classes -Classes should be static. If a class needs to be instantiated, there is probably a better way to do it. +Classes should be static, and static classes should not be instantiated. If a class needs to be instantiated, there is probably a better way to do it. Inherence of classes should be avoided. diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index c391f5708..68eb0a697 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -40,12 +40,12 @@ import { LogTypes, customLog } from 'utils/logging' import { communeProcs } from './communeProcs' import { StructureUtils } from 'room/structureUtils' import { LogisticsProcs } from 'room/logisticsProcs' -import { towerProcs } from './towerProcs' +import { TowerProcs } from './towerProcs' import { SourceProcs } from 'room/sourceProcs' -import { terminalProcs } from './terminal/terminalProcs' +import { TerminalProcs } from './terminal/terminalProcs' import { SpawningStructureProcs } from './spawning/spawningStructureProcs' -import { observerProcs } from './observerProcs' -import { powerSpawnProcs } from './powerSpawnProcs' +import { ObserverProcs } from './observerProcs' +import { PowerSpawnProcs } from './powerSpawnProcs' export type ResourceTargets = { min: Partial<{ [key in ResourceConstant]: number }> @@ -234,8 +234,8 @@ export class CommuneManager { if (!roomMemory[RoomMemoryKeys.communePlanned]) return this.constructionManager.preTickRun() - observerProcs.preTickRun(this.room) - terminalProcs.preTickRun(this.room) + ObserverProcs.preTickRun(this.room) + TerminalProcs.preTickRun(this.room) this.remotesManager.initRun() this.haulRequestManager.preTickRun() this.workRequestManager.preTickRun() @@ -245,11 +245,11 @@ export class CommuneManager { if (!this.room.memory[RoomMemoryKeys.communePlanned]) return this.defenceManager.run() - towerProcs.run(this.room) + TowerProcs.run(this.room) this.defenceManager.manageThreat() this.defenceManager.manageDefenceRequests() - terminalProcs.run(this.room) + TerminalProcs.run(this.room) this.workRequestManager.run() this.combatRequestManager.run() @@ -268,7 +268,7 @@ export class CommuneManager { LogisticsProcs.createCommuneRuinLogisticsRequests(this.room) this.linkManager.run() this.labManager.run() - powerSpawnProcs.run(this.room) + PowerSpawnProcs.run(this.room) SpawningStructureProcs.createPowerTasks(this.room) this.room.roomManager.creepRoleManager.run() diff --git a/src/room/commune/nukerProcs.ts b/src/room/commune/nukerProcs.ts index 824400fa4..9cb388111 100644 --- a/src/room/commune/nukerProcs.ts +++ b/src/room/commune/nukerProcs.ts @@ -4,7 +4,7 @@ import { RoomObjectUtils } from 'room/roomObjectUtils' const nukerResources = [RESOURCE_ENERGY, RESOURCE_GHODIUM] export class NukerProcs { - run(room: Room) { + static run(room: Room) { const roomMemory = Memory.rooms[room.name] const requestName = roomMemory[RoomMemoryKeys.nukeRequest] if (!requestName) return @@ -22,7 +22,7 @@ export class NukerProcs { ) } - private createRoomLogisticsRequests(room: Room, nuker: StructureNuker) { + private static createRoomLogisticsRequests(room: Room, nuker: StructureNuker) { let result = Result.noAction for (const resource of nukerResources) { @@ -40,5 +40,3 @@ export class NukerProcs { return result } } - -export const nukerProcs = new NukerProcs() diff --git a/src/room/commune/observerProcs.ts b/src/room/commune/observerProcs.ts index 14fa29c6e..2fb650a4e 100644 --- a/src/room/commune/observerProcs.ts +++ b/src/room/commune/observerProcs.ts @@ -3,7 +3,7 @@ import { RoomNameUtils } from 'room/roomNameUtils' import { forRoomNamesAroundRangeXY, Utils } from 'utils/utils' export class ObserverProcs { - preTickRun(room: Room) { + static preTickRun(room: Room) { // Run only every so often if (!Utils.isTickInterval(10)) return @@ -16,7 +16,7 @@ export class ObserverProcs { observer.observeRoom(scoutTarget) } - findScoutTarget(room: Room) { + static findScoutTarget(room: Room) { const roomCoord = RoomNameUtils.pack(room.name) let scoutTarget: string | undefined @@ -35,7 +35,7 @@ export class ObserverProcs { return scoutTarget } - private findRoomNameScore(room: Room, scoutRoomName: string) { + private static findRoomNameScore(room: Room, scoutRoomName: string) { const roomsDistance = OBSERVER_RANGE - Game.map.getRoomLinearDistance(room.name, scoutRoomName) const scoutRoomMemory = Memory.rooms[scoutRoomName] @@ -53,5 +53,3 @@ export class ObserverProcs { return score } } - -export const observerProcs = new ObserverProcs() diff --git a/src/room/commune/powerSpawnProcs.ts b/src/room/commune/powerSpawnProcs.ts index 80a069ab3..52db686af 100644 --- a/src/room/commune/powerSpawnProcs.ts +++ b/src/room/commune/powerSpawnProcs.ts @@ -4,7 +4,7 @@ import { StatsManager } from 'international/stats' import { scalePriority } from 'utils/utils' export class PowerSpawnProcs { - public run(room: Room) { + static run(room: Room) { const powerSpawn = room.roomManager.powerSpawn if (!powerSpawn) return @@ -15,7 +15,7 @@ export class PowerSpawnProcs { /** * So long as there are sufficient resources, try to process power */ - private advancedProcessPower(powerSpawn: StructurePowerSpawn) { + private static advancedProcessPower(powerSpawn: StructurePowerSpawn) { if (powerSpawn.store.getCapacity(RESOURCE_ENERGY) < POWER_SPAWN_ENERGY_RATIO) return if (!powerSpawn.store.getCapacity(RESOURCE_POWER)) return @@ -28,7 +28,7 @@ export class PowerSpawnProcs { /** * Find unspawned power creeps and spawn them */ - private advancedSpawn(powerSpawn: StructurePowerSpawn) { + private static advancedSpawn(powerSpawn: StructurePowerSpawn) { for (let i = CollectiveManager.unspawnedPowerCreepNames.length - 1; i >= 0; i--) { const creep = Game.powerCreeps[CollectiveManager.unspawnedPowerCreepNames[i]] @@ -38,7 +38,7 @@ export class PowerSpawnProcs { } } - private createRoomLogisticsRequests(room: Room, powerSpawn: StructurePowerSpawn) { + private static createRoomLogisticsRequests(room: Room, powerSpawn: StructurePowerSpawn) { // Make sure we have a reasonable amount of energy and power const resourcesInStoringStructures = room.roomManager.resourcesInStoringStructures @@ -82,5 +82,3 @@ export class PowerSpawnProcs { } } } - -export const powerSpawnProcs = new PowerSpawnProcs() diff --git a/src/room/commune/terminal/terminalProcs.ts b/src/room/commune/terminal/terminalProcs.ts index 0003000d9..445a6eb0d 100644 --- a/src/room/commune/terminal/terminalProcs.ts +++ b/src/room/commune/terminal/terminalProcs.ts @@ -6,11 +6,11 @@ import { StructureUtils } from 'room/structureUtils' import { customLog } from 'utils/logging' import { newID, Utils } from 'utils/utils' import { ResourceTargets } from '../commune' -import { tradingUtils } from './tradingUtils' +import { TradingUtils } from './tradingUtils' import { ResourceRequest } from 'international/simpleAllies/types' export class TerminalProcs { - preTickRun(room: Room) { + static preTickRun(room: Room) { if (!room.terminal) return if (!StructureUtils.isRCLActionable(room.terminal)) return @@ -19,7 +19,7 @@ export class TerminalProcs { this.createTerminalRequests(room, resourceTargets) } - run(room: Room) { + static run(room: Room) { // Stop if there is no terminal if (!room.terminal) return if (!StructureUtils.isRCLActionable(room.terminal)) return @@ -40,7 +40,7 @@ export class TerminalProcs { if (this.manageResources(room, resourceTargets) === Result.action) return } - private createTerminalRequests(room: Room, resourceTargets: ResourceTargets) { + private static createTerminalRequests(room: Room, resourceTargets: ResourceTargets) { const resourcesInStoringStructures = room.roomManager.resourcesInStoringStructures for (const key in resourceTargets.min) { const resourceType = key as ResourceConstant @@ -53,7 +53,7 @@ export class TerminalProcs { if (storedResourceAmount >= targetAmount) continue targetAmount = Math.floor(targetAmount * 1.1) - const priority = tradingUtils.getPriority(storedResourceAmount, targetAmount) + const priority = TradingUtils.getPriority(storedResourceAmount, targetAmount) const amount = Math.min( targetAmount - storedResourceAmount, room.terminal.store.getFreeCapacity(), @@ -70,7 +70,7 @@ export class TerminalProcs { } } - private findBestTerminalRequest( + private static findBestTerminalRequest( room: Room, resourceTargets: ResourceTargets, ): [TerminalRequest, string, number] { @@ -98,7 +98,7 @@ export class TerminalProcs { if (storedResource <= minStoredResource) continue */ const ourPriority = Math.max( - tradingUtils.getPriority(storedResource, resourceTargets.min[request.resource]), + TradingUtils.getPriority(storedResource, resourceTargets.min[request.resource]), 0, ) // Our priority should be lower @@ -107,12 +107,12 @@ export class TerminalProcs { // The request's priority must be 10% greater than our own if (priorityDiff < 0.15) continue - const equivalentAmount = tradingUtils.getAmountFromPriority( + const equivalentAmount = TradingUtils.getAmountFromPriority( request.priority, resourceTargets.min[request.resource], ) - const equivalentPriority = tradingUtils.getPriority( + const equivalentPriority = TradingUtils.getPriority( equivalentAmount, resourceTargets.min[request.resource], ) @@ -138,7 +138,7 @@ export class TerminalProcs { ) const sendAmount = - tradingUtils.findLargestTransactionAmount( + TradingUtils.findLargestTransactionAmount( budget, maxSendAmount, room.name, @@ -160,7 +160,7 @@ export class TerminalProcs { ', ' + (storedResource - request.amount) * priorityDiff + ', ' + - tradingUtils.getAmountFromPriority(priorityDiff, resourceTargets.min[request.resource]), + TradingUtils.getAmountFromPriority(priorityDiff, resourceTargets.min[request.resource]), ) // Make sure we are fulfilling at least 10% of the request if (request.amount * 0.1 > sendAmount) continue @@ -178,7 +178,7 @@ export class TerminalProcs { return [bestRequest, bestRequestID, amount] } - private respondToTerminalRequests(room: Room, resourceTargets: ResourceTargets) { + private static respondToTerminalRequests(room: Room, resourceTargets: ResourceTargets) { // We don't have enough energy to help other rooms if (room.roomManager.resourcesInStoringStructures.energy < room.communeManager.minStoredEnergy) return Result.noAction @@ -195,7 +195,7 @@ export class TerminalProcs { return Result.action } - private findBestAllyRequest( + private static findBestAllyRequest( room: Room, resourceTargets: ResourceTargets, ): [ResourceRequest, number] { @@ -220,7 +220,7 @@ export class TerminalProcs { const storedResource = resourcesInStoringStructures[request.resourceType] || 0 if (storedResource <= minStoredResource) continue - const sendAmount = tradingUtils.findLargestTransactionAmount( + const sendAmount = TradingUtils.findLargestTransactionAmount( budget, Math.min(request.amount, storedResource - minStoredResource), room.name, @@ -242,7 +242,7 @@ export class TerminalProcs { return [bestRequest, amount] } - private respondToAllyRequests(room: Room, resourceTargets: ResourceTargets) { + private static respondToAllyRequests(room: Room, resourceTargets: ResourceTargets) { if (!global.settings.allyCommunication) return Result.noAction if (!simpleAllies.allySegmentData) return Result.noAction if (!simpleAllies.allySegmentData.requests) return Result.noAction @@ -265,7 +265,7 @@ export class TerminalProcs { return Result.action } - private manageResources(room: Room, resourceTargets: ResourceTargets) { + private static manageResources(room: Room, resourceTargets: ResourceTargets) { for (const key in resourceTargets.min) { const resourceType = key as ResourceConstant @@ -277,7 +277,7 @@ export class TerminalProcs { return Result.noAction } - private manageResource( + private static manageResource( room: Room, resourceType: ResourceConstant, resourceTargets: ResourceTargets, @@ -290,7 +290,7 @@ export class TerminalProcs { if (Game.market.credits < CollectiveManager.minCredits) return Result.noAction if ( - tradingUtils.advancedBuy(room, resourceType, min - room.terminal.store[resourceType]) === + TradingUtils.advancedBuy(room, resourceType, min - room.terminal.store[resourceType]) === Result.success ) { return Result.action @@ -307,7 +307,7 @@ export class TerminalProcs { // Try to sell the excess amount if ( - tradingUtils.advancedSell(room, resourceType, room.terminal.store[resourceType] - max) === + TradingUtils.advancedSell(room, resourceType, room.terminal.store[resourceType] - max) === Result.success ) { return Result.action @@ -316,5 +316,3 @@ export class TerminalProcs { return Result.noAction } } - -export const terminalProcs = new TerminalProcs() diff --git a/src/room/commune/terminal/tradingUtils.ts b/src/room/commune/terminal/tradingUtils.ts index 072effe60..a50a0d5eb 100644 --- a/src/room/commune/terminal/tradingUtils.ts +++ b/src/room/commune/terminal/tradingUtils.ts @@ -6,7 +6,7 @@ import { MarketManager } from 'international/market/marketOrders' import { Result, RoomStatsKeys } from 'international/constants' export class TradingUtils { - advancedSell(room: Room, resourceType: ResourceConstant, amount: number) { + static advancedSell(room: Room, resourceType: ResourceConstant, amount: number) { const mySpecificOrders = MarketManager.myOrders[room.name]?.[ORDER_SELL][resourceType] || [] for (const order of mySpecificOrders) amount -= order.remainingAmount @@ -67,7 +67,8 @@ export class TradingUtils { return Result.success } - advancedBuy(room: Room, resourceType: ResourceConstant, amount: number) { + + static advancedBuy(room: Room, resourceType: ResourceConstant, amount: number) { const mySpecificOrders = MarketManager.myOrders[room.name]?.[ORDER_BUY][resourceType] || [] for (const order of mySpecificOrders) amount -= order.remainingAmount @@ -127,6 +128,7 @@ export class TradingUtils { return Result.success } + /** * Finds the largest possible transaction amount given a budget and starting amount * @param budget The number of energy willing to be invested in the trade @@ -135,7 +137,7 @@ export class TradingUtils { * @param roomName2 * @returns */ - findLargestTransactionAmount( + static findLargestTransactionAmount( budget: number, amount: number, roomName1: string, @@ -153,7 +155,7 @@ export class TradingUtils { return Math.floor(amount) } - advancedDeal(room: Room, order: Order, amount: number) { + static advancedDeal(room: Room, order: Order, amount: number) { const dealAmount = this.findLargestTransactionAmount( room.terminal.store.energy * 0.75, amount, @@ -172,7 +174,7 @@ export class TradingUtils { return Result.success } - getPriority(amount: number, targetAmount: number) { + static getPriority(amount: number, targetAmount: number) { // the / 2 is temporary const priority = roundTo(1 - amount / targetAmount, 2) return priority @@ -181,16 +183,14 @@ export class TradingUtils { /** * Inverse function of priority */ - getTargetAmountFromPriority(priority: number, amount: number) { + static getTargetAmountFromPriority(priority: number, amount: number) { return amount / -(priority - 1) } /** * Inverse function of priority */ - getAmountFromPriority(priority: number, targetAmount: number) { + static getAmountFromPriority(priority: number, targetAmount: number) { return targetAmount * -(priority - 1) } } - -export const tradingUtils = new TradingUtils() diff --git a/src/room/commune/towerProcs.ts b/src/room/commune/towerProcs.ts index f26e00dac..7df5a6e6a 100644 --- a/src/room/commune/towerProcs.ts +++ b/src/room/commune/towerProcs.ts @@ -12,10 +12,10 @@ import { Utils, } from 'utils/utils' import { communeUtils } from './communeUtils' -import { towerUtils } from './towerUtils' +import { TowerUtils } from './towerUtils' export class TowerProcs { - run(room: Room) { + static run(room: Room) { const towers = room.roomManager.structures.tower.filter(tower => StructureUtils.isRCLActionable(tower), ) @@ -43,9 +43,9 @@ export class TowerProcs { } } - private trackEnemySquads() {} + private static trackEnemySquads() {} - private considerAttackTargets(room: Room) { + private static considerAttackTargets(room: Room) { const enemyCreeps = room.roomManager.notMyCreeps.enemy if (!room.communeManager.towerAttackTarget) { @@ -90,7 +90,7 @@ export class TowerProcs { return room.communeManager.towerAttackTarget } - private attackEnemyCreeps(room: Room, actionableTowerIDs: Id[]) { + private static attackEnemyCreeps(room: Room, actionableTowerIDs: Id[]) { if (Game.flags.disableTowerAttacks) { room.towerInferiority = room.roomManager.enemyAttackers.length > 0 return false @@ -110,7 +110,7 @@ export class TowerProcs { actionableTowerIDs.splice(i, 1) - attackTarget.reserveHits -= towerUtils.estimateDamageNet(tower, attackTarget) + attackTarget.reserveHits -= TowerUtils.estimateDamageNet(tower, attackTarget) if (attackTarget.reserveHits <= 0) return true } @@ -121,7 +121,7 @@ export class TowerProcs { * @description Distribute fire amoung enemies * Maybe we can mess up healing */ - scatterShot(room: Room, actionableTowerIDs: Id[]) { + private static scatterShot(room: Room, actionableTowerIDs: Id[]) { if (actionableTowerIDs.length <= 1) return false if (!randomTick(200)) return false @@ -137,7 +137,7 @@ export class TowerProcs { if (tower.attack(attackTarget) !== OK) continue actionableTowerIDs.splice(i, 1) - attackTarget.reserveHits -= towerUtils.estimateDamageNet(tower, attackTarget) + attackTarget.reserveHits -= TowerUtils.estimateDamageNet(tower, attackTarget) if (targetIndex >= enemyCreeps.length - 1) { targetIndex = 0 @@ -150,10 +150,10 @@ export class TowerProcs { return true } - private healCreeps(room: Room, actionableTowerIDs: Id[]) { + private static healCreeps(room: Room, actionableTowerIDs: Id[]) { if (!actionableTowerIDs.length) return false - const healTarget = towerUtils.findHealTarget(room) + const healTarget = TowerUtils.findHealTarget(room) if (!healTarget) return false for (let i = actionableTowerIDs.length - 1; i >= 0; i--) { @@ -167,10 +167,10 @@ export class TowerProcs { return true } - private repairRamparts(room: Room, actionableTowerIDs: Id[]) { + private static repairRamparts(room: Room, actionableTowerIDs: Id[]) { if (!actionableTowerIDs.length) return false - const repairTarget = towerUtils.findRampartRepairTarget(room) + const repairTarget = TowerUtils.findRampartRepairTarget(room) if (!repairTarget) return false for (let i = actionableTowerIDs.length - 1; i >= 0; i--) { @@ -184,10 +184,10 @@ export class TowerProcs { return true } - private repairGeneral(room: Room, actionableTowerIDs: Id[]) { + private static repairGeneral(room: Room, actionableTowerIDs: Id[]) { if (!actionableTowerIDs.length) return false - const structures = towerUtils.findGeneralRepairTargets(room) + const structures = TowerUtils.findGeneralRepairTargets(room) if (!structures.length) return false for (let i = actionableTowerIDs.length - 1; i >= 0; i--) { @@ -205,7 +205,7 @@ export class TowerProcs { return true } - private createPowerTasks(room: Room) { + private static createPowerTasks(room: Room) { if (!room.myPowerCreeps.length) return for (const tower of room.roomManager.structures.tower) { @@ -213,7 +213,7 @@ export class TowerProcs { } } - private createRoomLogisticsRequests(room: Room) { + private static createRoomLogisticsRequests(room: Room) { for (const structure of room.roomManager.structures.tower) { // If don't have enough energy, request more @@ -248,5 +248,3 @@ export class TowerProcs { } } } - -export const towerProcs = new TowerProcs() diff --git a/src/room/commune/towerUtils.ts b/src/room/commune/towerUtils.ts index d4b1b8927..a1602ad35 100644 --- a/src/room/commune/towerUtils.ts +++ b/src/room/commune/towerUtils.ts @@ -10,7 +10,7 @@ export class TowerUtils { /** * Estimate the damage a normal tower would do over a given distance. Does not account for effects */ - estimateRangeDamage(origin: Coord, goal: Coord) { + static estimateRangeDamage(origin: Coord, goal: Coord) { let damage = TOWER_POWER_ATTACK let range = getRange(origin, goal) @@ -26,7 +26,7 @@ export class TowerUtils { return Math.floor(damage) } - estimateDamageGross(tower: StructureTower, targetCoord: Coord) { + static estimateDamageGross(tower: StructureTower, targetCoord: Coord) { let damage = this.estimateRangeDamage(tower.pos, targetCoord) for (const powerType of towerPowers) { @@ -39,7 +39,7 @@ export class TowerUtils { return Math.floor(damage) } - estimateDamageNet(tower: StructureTower, target: Creep) { + static estimateDamageNet(tower: StructureTower, target: Creep) { let damage = this.estimateDamageGross(tower, target.pos) damage *= target.defenceStrength @@ -47,7 +47,7 @@ export class TowerUtils { return Math.floor(damage) } - getRampartRepairTreshold(room: Room) { + static getRampartRepairTreshold(room: Room) { const data = communeData[room.name] if (data.towerRampartRepairTreshold !== undefined) return data.towerRampartRepairTreshold @@ -62,7 +62,7 @@ export class TowerUtils { return rampartRepairTreshold } - findHealTarget(room: Room) { + static findHealTarget(room: Room) { if (room.roomManager.enemyAttackers.length) { return room.roomManager.myDamagedCreeps.find(creep => { return !creep.isOnExit && !room.roomManager.enemyThreatCoords.has(packCoord(creep.pos)) @@ -79,7 +79,7 @@ export class TowerUtils { return healTargets.find(creep => !creep.isOnExit) } - findRampartRepairTarget(room: Room) { + static findRampartRepairTarget(room: Room) { const ramparts = room.roomManager.enemyAttackers.length ? room.communeManager.defensiveRamparts : communeUtils.getRampartRepairTargets(room) @@ -94,14 +94,14 @@ export class TowerUtils { return score }) - const rampartRepairThreshold = towerUtils.getRampartRepairTreshold(room) + const rampartRepairThreshold = TowerUtils.getRampartRepairTreshold(room) // Make sure the rampart is below the treshold if (score > rampartRepairThreshold) return false return rampart } - findGeneralRepairTargets(room: Room) { + static findGeneralRepairTargets(room: Room) { let structures: Structure[] = room.roomManager.structures.spawn structures = structures.concat(room.roomManager.structures.tower) @@ -109,4 +109,3 @@ export class TowerUtils { } } -export const towerUtils = new TowerUtils() diff --git a/src/room/construction/communePlanner.ts b/src/room/construction/communePlanner.ts index e29a4a5ae..49fd3c4f7 100644 --- a/src/room/construction/communePlanner.ts +++ b/src/room/construction/communePlanner.ts @@ -62,7 +62,7 @@ import { BasePlans } from './basePlans' import { RampartPlans } from './rampartPlans' import { minCutToExit } from './minCut' import { CustomPathFinder } from 'international/customPathFinder' -import { towerUtils } from 'room/commune/towerUtils' +import { TowerUtils } from 'room/commune/towerUtils' const unprotectedCoordWeight = defaultRoadPlanningPlainCost * 16 const dynamicDistanceWeight = 8 @@ -2952,7 +2952,7 @@ export class CommunePlanner { let minIndividualDamage = Infinity for (const packedCoord of this.outsideMinCut) { - const damage = towerUtils.estimateRangeDamage(coord, unpackNumAsCoord(packedCoord)) + const damage = TowerUtils.estimateRangeDamage(coord, unpackNumAsCoord(packedCoord)) damageMap[packedCoord] += damage if (damage >= minIndividualDamage) continue diff --git a/src/room/creeps/creepAdditions.ts b/src/room/creeps/creepAdditions.ts index 0b3ec5f8f..9e5889cbc 100644 --- a/src/room/creeps/creepAdditions.ts +++ b/src/room/creeps/creepAdditions.ts @@ -11,7 +11,7 @@ import { getRangeXY, getRange, isXYExit, isExit } from 'utils/utils' import { profiler } from 'other/profiler' import { CreepUtils } from './creepUtils' import { StructureUtils } from 'room/structureUtils' -import { towerUtils } from 'room/commune/towerUtils' +import { TowerUtils } from 'room/commune/towerUtils' Object.defineProperties(Creep.prototype, { nameData: { @@ -322,7 +322,7 @@ const additions = { if (!StructureUtils.isRCLActionable(tower)) continue if (tower.store.getUsedCapacity(RESOURCE_ENERGY) < TOWER_ENERGY_COST) continue - this._grossTowerDamage = towerUtils.estimateDamageGross(tower, this.pos) + this._grossTowerDamage = TowerUtils.estimateDamageGross(tower, this.pos) } return this._grossTowerDamage diff --git a/src/room/remotePlanner.ts b/src/room/remotePlanner.ts index 050f06c14..b523dcfb3 100644 --- a/src/room/remotePlanner.ts +++ b/src/room/remotePlanner.ts @@ -61,7 +61,7 @@ import { BasePlans } from './construction/basePlans' import { RampartPlans } from './construction/rampartPlans' import { minCutToExit } from './construction/minCut' import { CustomPathFinder } from 'international/customPathFinder' -import { towerUtils } from './commune/towerUtils' +import { TowerUtils } from './commune/towerUtils' const unprotectedCoordWeight = defaultRoadPlanningPlainCost * 16 const dynamicDistanceWeight = 8 @@ -2933,7 +2933,7 @@ export class RemotePlanner { let minIndividualDamage = Infinity for (const packedCoord of this.outsideMinCut) { - const damage = towerUtils.estimateRangeDamage(coord, unpackNumAsCoord(packedCoord)) + const damage = TowerUtils.estimateRangeDamage(coord, unpackNumAsCoord(packedCoord)) damageMap[packedCoord] += damage if (damage >= minIndividualDamage) continue From 1bdd849550e67e394614dcd01ea6f665d4e478fc Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 23 Jan 2024 14:54:34 -0800 Subject: [PATCH 104/190] completed static conversion for viable classes? --- src/debug/debugUtils.ts | 9 +- src/other/profilerRegister.ts | 4 +- src/room/commune/commune.ts | 6 +- src/room/commune/communeProcs.ts | 12 +- .../spawning/spawningStructureProcs.ts | 2 +- src/room/creeps/creepProcs.ts | 12 +- .../creeps/creepPrototypes/creepFunctions.ts | 6 +- src/room/creeps/creepUtils.ts | 10 +- src/room/creeps/myCreepUtils.ts | 10 +- .../commune/controllerUpgrader.ts | 4 +- .../creeps/roleManagers/commune/hauler.ts | 6 +- .../roleManagers/commune/mineralHarvester.ts | 6 +- .../roleManagers/commune/sourceHarvester.ts | 6 +- .../international/allyVanguard.ts | 4 +- .../roleManagers/international/claimer.ts | 166 +++++++------- .../roleManagers/international/vanguard.ts | 8 +- .../roleManagers/remote/remoteBuilder.ts | 214 +++++++++--------- .../roleManagers/remote/remoteReserver.ts | 4 +- .../remote/remoteSourceHarvester.ts | 10 +- src/types.d.ts | 2 +- src/utils/logging.ts | 2 +- 21 files changed, 252 insertions(+), 251 deletions(-) diff --git a/src/debug/debugUtils.ts b/src/debug/debugUtils.ts index 72940ea6d..14eeada5c 100644 --- a/src/debug/debugUtils.ts +++ b/src/debug/debugUtils.ts @@ -1,10 +1,10 @@ import { time } from "console" -class DebugUtils { +export class DebugUtils { /** * Deeply stringifies values with some added benefits */ - stringify(v: any) { + static stringify(v: any) { let alreadyReferencedObjects: any[] = [] const recStringify = (value: any, depth: number): string => { switch (typeof value) { @@ -60,10 +60,11 @@ class DebugUtils { return recStringify(v, 0) } + /** * I don't fully understand what this does or what it is meant to do */ - findGlobalLength() { + static findGlobalLength() { const dict: { [key: number]: string } = { 0: '', 3: 'K', @@ -114,8 +115,6 @@ class DebugUtils { } } -global.debugUtils = new DebugUtils() - global.stringify = function stringify(v: any, maxDepth = 3) { let alreadyReferencedObjects: any[] = []; const recStringify = (value: any, depth: number): string => { diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index 8422781d0..65c7842e5 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -111,6 +111,7 @@ import { wasm } from './wasmInit' import { initSync } from '../wasm/pkg/commiebot_wasm.js' import { InitManager } from 'international/init' import { TickInit } from 'international/tickInit' +import { DebugUtils } from 'debug/debugUtils' export function profilerRegister() { // Classes @@ -141,6 +142,7 @@ export function profilerRegister() { profiler.registerClass(CustomPathFinder, 'CustomPathFinder') profiler.registerClass(TradingUtils, 'MarketUtils') profiler.registerClass(Utils, 'Utils') + profiler.registerClass(DebugUtils, 'DebugUtils') profiler.registerClass(Procs, 'Procs') profiler.registerClass(SegmentsManager, 'SegmentsManager') @@ -205,7 +207,7 @@ export function profilerRegister() { // Objects - profiler.registerObject(global.debugUtils, 'debugUtils') + profiler.registerObject(global.DebugUtils, 'DebugUtils') // Room objects diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index 68eb0a697..67b85cdc0 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -37,7 +37,7 @@ import { CollectiveManager } from 'international/collective' import { ConstructionManager } from 'room/construction/construction' import { RoomNameUtils } from 'room/roomNameUtils' import { LogTypes, customLog } from 'utils/logging' -import { communeProcs } from './communeProcs' +import { CommuneProcs } from './communeProcs' import { StructureUtils } from 'room/structureUtils' import { LogisticsProcs } from 'room/logisticsProcs' import { TowerProcs } from './towerProcs' @@ -180,7 +180,7 @@ export class CommuneManager { } this.room.roomManager.communePlanner.attemptPlan(this.room) - communeProcs.getRCLUpdate(room) + CommuneProcs.getRCLUpdate(room) if (!roomMemory[RoomMemoryKeys.combatRequests]) roomMemory[RoomMemoryKeys.combatRequests] = [] if (!roomMemory[RoomMemoryKeys.haulRequests]) roomMemory[RoomMemoryKeys.haulRequests] = [] @@ -274,7 +274,7 @@ export class CommuneManager { this.room.roomManager.creepRoleManager.run() this.room.roomManager.powerCreepRoleManager.run() - communeProcs.tryUpdateMinHaulerCost(this.room) + CommuneProcs.tryUpdateMinHaulerCost(this.room) SpawningStructureProcs.tryRunSpawning(this.room) SpawningStructureProcs.tryRegisterSpawningMovement(this.room) diff --git a/src/room/commune/communeProcs.ts b/src/room/commune/communeProcs.ts index 5b4b7cfd5..847995d93 100644 --- a/src/room/commune/communeProcs.ts +++ b/src/room/commune/communeProcs.ts @@ -12,7 +12,7 @@ import { randomIntRange } from 'utils/utils' * Minor processes for communes */ export class CommuneProcs { - getRCLUpdate(room: Room) { + static getRCLUpdate(room: Room) { const data = communeData[room.name] // If the registered RCL is the actual RCL, we're good. No need to update anything if (data.registeredRCL === room.controller.level) { @@ -27,7 +27,7 @@ export class CommuneProcs { this.updateRegisteredRCL(room) } - private updateRegisteredRCL(room: Room) { + private static updateRegisteredRCL(room: Room) { const data = communeData[room.name] /* const roomData = roomData[room.name] */ @@ -36,7 +36,7 @@ export class CommuneProcs { data.registeredRCL = room.controller.level } - tryUpdateMinHaulerCost(room: Room) { + static tryUpdateMinHaulerCost(room: Room) { const roomMemory = Memory.rooms[room.name] // If there is no min hauler size @@ -61,7 +61,7 @@ export class CommuneProcs { roomMemory[RoomMemoryKeys.minHaulerCostUpdate] = Game.time + randomIntRange(0, 10) } - registerRampartDamage(room: Room) { + static registerRampartDamage(room: Room) { if (!room.roomManager.enemyAttackers.length) return const data = communeData[room.name] @@ -70,11 +70,9 @@ export class CommuneProcs { } } - private initRampartDamageCoords(room: Room) { + private static initRampartDamageCoords(room: Room) { const ramparts = room.communeManager.defensiveRamparts for (const rampart of ramparts) { } } } - -export const communeProcs = new CommuneProcs() diff --git a/src/room/commune/spawning/spawningStructureProcs.ts b/src/room/commune/spawning/spawningStructureProcs.ts index f66f94c81..59ea14b60 100644 --- a/src/room/commune/spawning/spawningStructureProcs.ts +++ b/src/room/commune/spawning/spawningStructureProcs.ts @@ -154,7 +154,7 @@ export class SpawningStructureProcs { if (result !== OK) { customLog( 'Failed to spawn: spawning failed', - `error: ${result}, request: ${global.debugUtils.stringify(request)}`, + `error: ${result}, request: ${global.DebugUtils.stringify(request)}`, { type: LogTypes.error, position: 3, diff --git a/src/room/creeps/creepProcs.ts b/src/room/creeps/creepProcs.ts index 624d9d22a..ae33cf8e3 100644 --- a/src/room/creeps/creepProcs.ts +++ b/src/room/creeps/creepProcs.ts @@ -6,7 +6,7 @@ import { getRange, getRangeXY, } from 'utils/utils' -import { myCreepUtils } from './myCreepUtils' +import { MyCreepUtils } from './myCreepUtils' import { StatsManager } from 'international/stats' import { CreepMemoryKeys, @@ -78,7 +78,7 @@ export class CreepProcs { creep.actionCoord = creep.room.roomManager.centerUpgradePos - const workPartCount = myCreepUtils.parts(creep).work + const workPartCount = MyCreepUtils.parts(creep).work const controllerRange = getRange(creep.pos, controller.pos) if (controllerRange <= 3 && creep.nextStore.energy > 0) { @@ -203,7 +203,7 @@ export class CreepProcs { const energySpentOnUpgrades = Math.min( creep.nextStore.energy, - myCreepUtils.parts(creep).work * UPGRADE_CONTROLLER_POWER, + MyCreepUtils.parts(creep).work * UPGRADE_CONTROLLER_POWER, ) StatsManager.updateStat(creep.room.name, 'eou', energySpentOnUpgrades) @@ -252,7 +252,7 @@ export class CreepProcs { if (creep.worked) return Result.noAction if (creep.repair(target) !== OK) return Result.fail - const workParts = myCreepUtils.parts(creep).work + const workParts = MyCreepUtils.parts(creep).work // Estimate the repair cost, assuming it goes through const energySpentOnRepair = Math.min( workParts, @@ -300,7 +300,7 @@ export class CreepProcs { // Otherwise if we don't need resources and can maintain - const workPartCount = myCreepUtils.parts(creep).work + const workPartCount = MyCreepUtils.parts(creep).work let repairTarget = CreepUtils.findRepairTarget(creep) if (!repairTarget) { @@ -387,7 +387,7 @@ export class CreepProcs { creep.message += '🗺️' - const workPartCount = myCreepUtils.parts(creep).work + const workPartCount = MyCreepUtils.parts(creep).work // At some point we should compare this search with flat searching positions around the creep const structure = communeUtils.getGeneralRepairStructures(creep.room).find(structure => { return ( diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index 8e6f80853..01237a20a 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -22,7 +22,7 @@ import { RoomManager } from 'room/room' import { RoomLogisticsRequest } from 'types/roomRequests' import { CustomPathFinder } from 'international/customPathFinder' import { communeUtils } from 'room/commune/communeUtils' -import { myCreepUtils } from '../myCreepUtils' +import { MyCreepUtils } from '../myCreepUtils' import { StructureUtils } from 'room/structureUtils' import { CreepProcs } from '../creepProcs' @@ -258,7 +258,7 @@ Creep.prototype.advancedBuildCSite = function (cSite) { const energySpentOnConstruction = CreepUtils.findEnergySpentOnConstruction( this, cSite, - myCreepUtils.parts(this).work, + MyCreepUtils.parts(this).work, ) this.nextStore.energy -= energySpentOnConstruction @@ -340,7 +340,7 @@ Creep.prototype.advancedBuildAllyCSite = function () { const energySpentOnConstruction = CreepUtils.findEnergySpentOnConstruction( this, cSiteTarget, - myCreepUtils.parts(this).work, + MyCreepUtils.parts(this).work, ) this.nextStore.energy -= energySpentOnConstruction diff --git a/src/room/creeps/creepUtils.ts b/src/room/creeps/creepUtils.ts index c509e229f..cbec08dd7 100644 --- a/src/room/creeps/creepUtils.ts +++ b/src/room/creeps/creepUtils.ts @@ -21,7 +21,7 @@ import { RoomManager } from 'room/room' import { CollectiveManager } from 'international/collective' import { creepClasses } from './creepClasses' import { communeUtils } from 'room/commune/communeUtils' -import { myCreepUtils } from './myCreepUtils' +import { MyCreepUtils } from './myCreepUtils' import { CreepLogisticsRequest, FindNewRoomLogisticsRequestArgs, @@ -61,7 +61,7 @@ export class CreepUtils { static findEnergySpentOnConstruction( creep: Creep, cSite: ConstructionSite, - workParts: number = myCreepUtils.parts(creep).work, + workParts: number = MyCreepUtils.parts(creep).work, ) { const energySpent = Math.min( workParts * BUILD_POWER, @@ -105,7 +105,11 @@ export class CreepUtils { return upgradePos } - static harvestSource(creep: Creep, source: Source, workParts: number = myCreepUtils.parts(creep).work) { + static harvestSource( + creep: Creep, + source: Source, + workParts: number = MyCreepUtils.parts(creep).work, + ) { if (creep.harvest(source) !== OK) { return Result.fail } diff --git a/src/room/creeps/myCreepUtils.ts b/src/room/creeps/myCreepUtils.ts index ada0e15ea..5abc5d96e 100644 --- a/src/room/creeps/myCreepUtils.ts +++ b/src/room/creeps/myCreepUtils.ts @@ -7,7 +7,7 @@ export class MyCreepUtils { /** * provides a cached number of parts for creeps we own */ - parts(creep: Creep) { + static parts(creep: Creep) { const data = creepData[creep.name].parts if (data) return data @@ -22,7 +22,7 @@ export class MyCreepUtils { return parts } - boosts(creep: Creep) { + static boosts(creep: Creep) { const data = creepData[creep.name].boosts if (data) return data @@ -44,7 +44,7 @@ export class MyCreepUtils { return boosts } - upgradeStrength(creep: Creep) { + static upgradeStrength(creep: Creep) { const data = creepData[creep.name].upgradeStrength if (data) return data @@ -54,7 +54,7 @@ export class MyCreepUtils { return data } - findUpgradeStrength(workParts: number, boosts: Boosts) { + static findUpgradeStrength(workParts: number, boosts: Boosts) { if (boosts.XGH2O > 0) { return workParts * BOOSTS.work.XGH2O.upgradeController } @@ -70,5 +70,3 @@ export class MyCreepUtils { return workParts } } - -export const myCreepUtils = new MyCreepUtils() diff --git a/src/room/creeps/roleManagers/commune/controllerUpgrader.ts b/src/room/creeps/roleManagers/commune/controllerUpgrader.ts index 415404751..5641e08d3 100644 --- a/src/room/creeps/roleManagers/commune/controllerUpgrader.ts +++ b/src/room/creeps/roleManagers/commune/controllerUpgrader.ts @@ -1,7 +1,7 @@ import { CreepMemoryKeys, ReservedCoordTypes, RoomMemoryKeys, packedPosLength } from 'international/constants' import { CreepProcs } from 'room/creeps/creepProcs' import { CreepUtils } from 'room/creeps/creepUtils' -import { myCreepUtils } from 'room/creeps/myCreepUtils' +import { MyCreepUtils } from 'room/creeps/myCreepUtils' export class ControllerUpgrader extends Creep { constructor(creepID: Id) { @@ -39,7 +39,7 @@ export class ControllerUpgrader extends Creep { } initRun() { - this.room.communeManager.upgradeStrength += myCreepUtils.upgradeStrength(this) + this.room.communeManager.upgradeStrength += MyCreepUtils.upgradeStrength(this) } public static roleManager(room: Room, creepsOfRole: string[]) { diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index 042b42f94..e6c6a941b 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -15,7 +15,7 @@ import { import { StatsManager } from 'international/stats' import { packCoord, reversePosList, unpackCoord, unpackPosAt } from 'other/codec' import { CreepProcs } from 'room/creeps/creepProcs' -import { myCreepUtils } from 'room/creeps/myCreepUtils' +import { MyCreepUtils } from 'room/creeps/myCreepUtils' import { StructureUtils } from 'room/structureUtils' import { findObjectWithID, @@ -113,7 +113,7 @@ export class Hauler extends Creep { creepMemory[CreepMemoryKeys.previousRelayer] = undefined } - const carryParts = myCreepUtils.parts(this).carry + const carryParts = MyCreepUtils.parts(this).carry this.commune.communeManager.haulerCarryParts += carryParts if (this.hasValidRemote()) { @@ -1035,7 +1035,7 @@ export class Hauler extends Creep { if (!creepMemory[CreepMemoryKeys.taskRoom]) { creepMemory[CreepMemoryKeys.taskRoom] = this.room.name - this.commune.communeManager.communeHaulerCarryParts += myCreepUtils.parts(this).carry + this.commune.communeManager.communeHaulerCarryParts += MyCreepUtils.parts(this).carry } this.runCommuneLogistics() diff --git a/src/room/creeps/roleManagers/commune/mineralHarvester.ts b/src/room/creeps/roleManagers/commune/mineralHarvester.ts index ec182bff2..d73f82484 100644 --- a/src/room/creeps/roleManagers/commune/mineralHarvester.ts +++ b/src/room/creeps/roleManagers/commune/mineralHarvester.ts @@ -7,7 +7,7 @@ import { import { StatsManager } from 'international/stats' import { getRangeXY, getRange, areCoordsEqual } from 'utils/utils' import { reversePosList, unpackPos } from 'other/codec' -import { myCreepUtils } from 'room/creeps/myCreepUtils' +import { MyCreepUtils } from 'room/creeps/myCreepUtils' export class MineralHarvester extends Creep { update() { @@ -19,7 +19,7 @@ export class MineralHarvester extends Creep { initRun() { this.room.communeManager.mineralHarvestStrength += - myCreepUtils.parts(this).work * HARVEST_MINERAL_POWER + MyCreepUtils.parts(this).work * HARVEST_MINERAL_POWER } advancedHarvestMineral?(mineral: Mineral) { @@ -61,7 +61,7 @@ export class MineralHarvester extends Creep { // Find amount of minerals harvested and record it in data const mineralsHarvested = Math.min( - myCreepUtils.parts(this).work * HARVEST_MINERAL_POWER, + MyCreepUtils.parts(this).work * HARVEST_MINERAL_POWER, mineral.mineralAmount, ) this.reserveStore[mineral.mineralType] += mineralsHarvested diff --git a/src/room/creeps/roleManagers/commune/sourceHarvester.ts b/src/room/creeps/roleManagers/commune/sourceHarvester.ts index 6e4c13665..c8bf28ddf 100644 --- a/src/room/creeps/roleManagers/commune/sourceHarvester.ts +++ b/src/room/creeps/roleManagers/commune/sourceHarvester.ts @@ -19,7 +19,7 @@ import { import { packCoord, packPos, reversePosList, unpackPos } from 'other/codec' import { Hauler } from './hauler' import { CreepUtils } from 'room/creeps/creepUtils' -import { myCreepUtils } from 'room/creeps/myCreepUtils' +import { MyCreepUtils } from 'room/creeps/myCreepUtils' import { StructureUtils } from 'room/structureUtils' import { CreepProcs } from 'room/creeps/creepProcs' @@ -185,7 +185,7 @@ export class SourceHarvester extends Creep { return false if (!sourceContainer) { - if (this.nextStore.energy < myCreepUtils.parts(this).work) { + if (this.nextStore.energy < MyCreepUtils.parts(this).work) { if (this.movedResource) return false const result = CreepProcs.runRoomLogisticsRequestAdvanced(this, { @@ -212,7 +212,7 @@ export class SourceHarvester extends Creep { return true } - const workPartCount = myCreepUtils.parts(this).work + const workPartCount = MyCreepUtils.parts(this).work // If the sourceContainer doesn't need repairing, inform false if (sourceContainer.hitsMax - sourceContainer.hits < workPartCount * REPAIR_POWER) return false diff --git a/src/room/creeps/roleManagers/international/allyVanguard.ts b/src/room/creeps/roleManagers/international/allyVanguard.ts index 6c54f12e1..e5f35f0bd 100644 --- a/src/room/creeps/roleManagers/international/allyVanguard.ts +++ b/src/room/creeps/roleManagers/international/allyVanguard.ts @@ -9,7 +9,7 @@ import { import { findObjectWithID, getRangeXY, getRange } from 'utils/utils' import { unpackCoord } from 'other/codec' import { CreepUtils } from 'room/creeps/creepUtils' -import { myCreepUtils } from 'room/creeps/myCreepUtils' +import { MyCreepUtils } from 'room/creeps/myCreepUtils' import { CreepProcs } from 'room/creeps/creepProcs' export class AllyVanguard extends Creep { @@ -29,7 +29,7 @@ export class AllyVanguard extends Creep { if (!request) return - request[WorkRequestKeys.allyVanguard] -= myCreepUtils.parts(this).work + request[WorkRequestKeys.allyVanguard] -= MyCreepUtils.parts(this).work } findRemote?(): boolean { diff --git a/src/room/creeps/roleManagers/international/claimer.ts b/src/room/creeps/roleManagers/international/claimer.ts index d42cb666e..7241ba3b4 100644 --- a/src/room/creeps/roleManagers/international/claimer.ts +++ b/src/room/creeps/roleManagers/international/claimer.ts @@ -1,101 +1,101 @@ import { WorkRequestKeys, CreepMemoryKeys, Result, RoomTypes } from 'international/constants' -import { myCreepUtils } from 'room/creeps/myCreepUtils' +import { MyCreepUtils } from 'room/creeps/myCreepUtils' export class Claimer extends Creep { - constructor(creepID: Id) { - super(creepID) - } - - initRun() { - if (this.isDying()) return - - const request = Memory.workRequests[this.memory[CreepMemoryKeys.workRequest]] - if (!request) return + constructor(creepID: Id) { + super(creepID) + } - request[WorkRequestKeys.claimer] -= 1 - } - - /** - * Claims a room specified in the creep's commune workRequest - */ - claimRoom?(): void { - const creep = this - const { room } = creep + initRun() { + if (this.isDying()) return - if (room.controller.my) return + const request = Memory.workRequests[this.memory[CreepMemoryKeys.workRequest]] + if (!request) return - // If the creep is not in range to claim the controller + request[WorkRequestKeys.claimer] -= 1 + } - if (creep.pos.getRangeTo(room.controller) > 1) { - // Move to the controller and stop + /** + * Claims a room specified in the creep's commune workRequest + */ + claimRoom?(): void { + const creep = this + const { room } = creep - creep.createMoveRequest({ - origin: creep.pos, - goals: [{ pos: room.controller.pos, range: 1 }], - avoidEnemyRanges: true, - plainCost: 1, - swampCost: myCreepUtils.parts(this).move >= 5 ? 1 : undefined, - }) + if (room.controller.my) return - return - } + // If the creep is not in range to claim the controller - // If the owner or reserver isn't me + if (creep.pos.getRangeTo(room.controller) > 1) { + // Move to the controller and stop - if ( - room.controller.owner || - (room.controller.reservation && room.controller.reservation.username !== Memory.me) - ) { - creep.attackController(room.controller) - return - } + creep.createMoveRequest({ + origin: creep.pos, + goals: [{ pos: room.controller.pos, range: 1 }], + avoidEnemyRanges: true, + plainCost: 1, + swampCost: MyCreepUtils.parts(this).move >= 5 ? 1 : undefined, + }) - // Otherwise, claim the controller. If the successful, remove claimerNeed + return + } - if (!creep.claimController(room.controller)) return + // If the owner or reserver isn't me - // We claimed the controller + if ( + room.controller.owner || + (room.controller.reservation && room.controller.reservation.username !== Memory.me) + ) { + creep.attackController(room.controller) + return } - static roleManager(room: Room, creepsOfRole: string[]) { - // Loop through the names of the creeps of the role - - for (const creepName of creepsOfRole) { - // Get the creep using its name - - const creep: Claimer = Game.creeps[creepName] - - creep.message = creep.memory[CreepMemoryKeys.workRequest] - - if (room.name === creep.memory[CreepMemoryKeys.workRequest]) { - creep.claimRoom() - continue - } - - // Otherwise if the creep is not in the claimTarget - - if ( - creep.createMoveRequest({ - origin: creep.pos, - goals: [ - { - pos: new RoomPosition(25, 25, creep.memory[CreepMemoryKeys.workRequest]), - range: 25, - }, - ], - avoidEnemyRanges: true, - plainCost: 1, - swampCost: myCreepUtils.parts(creep).move >= 5 ? 1 : undefined, - typeWeights: { - [RoomTypes.enemy]: Infinity, - [RoomTypes.ally]: Infinity, - [RoomTypes.sourceKeeper]: Infinity, - }, - }) === Result.fail - ) { - const request = Memory.workRequests[creep.memory[CreepMemoryKeys.workRequest]] - if (request) request[WorkRequestKeys.abandon] = 20000 - } - } + // Otherwise, claim the controller. If the successful, remove claimerNeed + + if (!creep.claimController(room.controller)) return + + // We claimed the controller + } + + static roleManager(room: Room, creepsOfRole: string[]) { + // Loop through the names of the creeps of the role + + for (const creepName of creepsOfRole) { + // Get the creep using its name + + const creep: Claimer = Game.creeps[creepName] + + creep.message = creep.memory[CreepMemoryKeys.workRequest] + + if (room.name === creep.memory[CreepMemoryKeys.workRequest]) { + creep.claimRoom() + continue + } + + // Otherwise if the creep is not in the claimTarget + + if ( + creep.createMoveRequest({ + origin: creep.pos, + goals: [ + { + pos: new RoomPosition(25, 25, creep.memory[CreepMemoryKeys.workRequest]), + range: 25, + }, + ], + avoidEnemyRanges: true, + plainCost: 1, + swampCost: MyCreepUtils.parts(creep).move >= 5 ? 1 : undefined, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + }, + }) === Result.fail + ) { + const request = Memory.workRequests[creep.memory[CreepMemoryKeys.workRequest]] + if (request) request[WorkRequestKeys.abandon] = 20000 + } } + } } diff --git a/src/room/creeps/roleManagers/international/vanguard.ts b/src/room/creeps/roleManagers/international/vanguard.ts index 0fd8d465f..eda37fb8c 100644 --- a/src/room/creeps/roleManagers/international/vanguard.ts +++ b/src/room/creeps/roleManagers/international/vanguard.ts @@ -8,7 +8,7 @@ import { import { findObjectWithID, getRangeXY, getRange } from 'utils/utils' import { unpackCoord } from 'other/codec' import { CreepUtils } from 'room/creeps/creepUtils' -import { myCreepUtils } from 'room/creeps/myCreepUtils' +import { MyCreepUtils } from 'room/creeps/myCreepUtils' export class Vanguard extends Creep { constructor(creepID: Id) { @@ -35,7 +35,7 @@ export class Vanguard extends Creep { const request = Memory.workRequests[this.memory[CreepMemoryKeys.workRequest]] if (!request) return - request[WorkRequestKeys.vanguard] -= myCreepUtils.parts(this).work + request[WorkRequestKeys.vanguard] -= MyCreepUtils.parts(this).work } /** @@ -88,7 +88,7 @@ export class Vanguard extends Creep { this.upgradeController(controller) - if (this.store.energy - myCreepUtils.parts(this).work * UPGRADE_CONTROLLER_POWER <= 0) { + if (this.store.energy - MyCreepUtils.parts(this).work * UPGRADE_CONTROLLER_POWER <= 0) { delete Memory.creeps[this.name][CreepMemoryKeys.targetID] } @@ -131,7 +131,7 @@ export class Vanguard extends Creep { this.repair(rampartTarget) - if (this.store.energy - myCreepUtils.parts(this).work * REPAIR_POWER * REPAIR_COST <= 0) { + if (this.store.energy - MyCreepUtils.parts(this).work * REPAIR_POWER * REPAIR_COST <= 0) { delete creepMemory[CreepMemoryKeys.targetID] } return true diff --git a/src/room/creeps/roleManagers/remote/remoteBuilder.ts b/src/room/creeps/roleManagers/remote/remoteBuilder.ts index b50cfc74c..c5525cb83 100644 --- a/src/room/creeps/roleManagers/remote/remoteBuilder.ts +++ b/src/room/creeps/roleManagers/remote/remoteBuilder.ts @@ -16,117 +16,117 @@ import { } from 'utils/utils' import { packCoord, reversePosList, unpackPosAt } from 'other/codec' import { indexOf } from 'lodash' -import { myCreepUtils } from 'room/creeps/myCreepUtils' +import { MyCreepUtils } from 'room/creeps/myCreepUtils' export class RemoteBuilder extends Creep { - constructor(creepID: Id) { - super(creepID) - } - - public isDying(): boolean { - // Stop if creep is spawning + constructor(creepID: Id) { + super(creepID) + } - if (this.spawning) return false + public isDying(): boolean { + // Stop if creep is spawning - if (this.memory[CreepMemoryKeys.remote]) { - if (this.ticksToLive > this.body.length * CREEP_SPAWN_TIME) return false - } else if (this.ticksToLive > this.body.length * CREEP_SPAWN_TIME) return false + if (this.spawning) return false - // Record creep as isDying + if (this.memory[CreepMemoryKeys.remote]) { + if (this.ticksToLive > this.body.length * CREEP_SPAWN_TIME) return false + } else if (this.ticksToLive > this.body.length * CREEP_SPAWN_TIME) return false - return true - } + // Record creep as isDying - initRun(): void { - if (randomTick() && !this.getActiveBodyparts(MOVE)) this.suicide() + return true + } - if (!this.findRemote()) return + initRun(): void { + if (randomTick() && !this.getActiveBodyparts(MOVE)) this.suicide() - const creepMemory = Memory.creeps[this.name] - const remoteName = creepMemory[CreepMemoryKeys.remote] + if (!this.findRemote()) return - if (remoteName === this.room.name) { - this.remoteActions() - } + const creepMemory = Memory.creeps[this.name] + const remoteName = creepMemory[CreepMemoryKeys.remote] - if (this.isDying()) return + if (remoteName === this.room.name) { + this.remoteActions() + } - // Record response + if (this.isDying()) return - Memory.rooms[remoteName][RoomMemoryKeys.remoteBuilder] += myCreepUtils.parts(this).work - } + // Record response - hasValidRemote?() { - if (!this.memory[CreepMemoryKeys.remote]) return false + Memory.rooms[remoteName][RoomMemoryKeys.remoteBuilder] += MyCreepUtils.parts(this).work + } - const remoteMemory = Memory.rooms[this.memory[CreepMemoryKeys.remote]] + hasValidRemote?() { + if (!this.memory[CreepMemoryKeys.remote]) return false - if (remoteMemory[RoomMemoryKeys.disable]) return false - if (remoteMemory[RoomMemoryKeys.abandonRemote]) return false - if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) return false - if (remoteMemory[RoomMemoryKeys.commune] !== this.commune.name) return false + const remoteMemory = Memory.rooms[this.memory[CreepMemoryKeys.remote]] - return true - } + if (remoteMemory[RoomMemoryKeys.disable]) return false + if (remoteMemory[RoomMemoryKeys.abandonRemote]) return false + if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) return false + if (remoteMemory[RoomMemoryKeys.commune] !== this.commune.name) return false - /** - * Finds a remote to harvest in - */ - findRemote?() { - if (this.hasValidRemote()) return true + return true + } - for (const remoteInfo of this.commune.roomManager.remoteSourceIndexesByEfficacy) { - const splitRemoteInfo = remoteInfo.split(' ') - const remoteName = splitRemoteInfo[0] + /** + * Finds a remote to harvest in + */ + findRemote?() { + if (this.hasValidRemote()) return true - const remoteMemory = Memory.rooms[remoteName] - if (remoteMemory[RoomMemoryKeys.remoteBuilder] <= 0) continue - if (remoteMemory[RoomMemoryKeys.disable]) continue - if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) continue - if (remoteMemory[RoomMemoryKeys.commune] !== this.commune.name) continue + for (const remoteInfo of this.commune.roomManager.remoteSourceIndexesByEfficacy) { + const splitRemoteInfo = remoteInfo.split(' ') + const remoteName = splitRemoteInfo[0] - this.assignRemote(remoteName) - return true - } + const remoteMemory = Memory.rooms[remoteName] + if (remoteMemory[RoomMemoryKeys.remoteBuilder] <= 0) continue + if (remoteMemory[RoomMemoryKeys.disable]) continue + if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) continue + if (remoteMemory[RoomMemoryKeys.commune] !== this.commune.name) continue - return false + this.assignRemote(remoteName) + return true } - assignRemote?(remoteName: string) { - const creepMemory = Memory.creeps[this.name] - creepMemory[CreepMemoryKeys.remote] = remoteName + return false + } - delete creepMemory[CreepMemoryKeys.packedCoord] + assignRemote?(remoteName: string) { + const creepMemory = Memory.creeps[this.name] + creepMemory[CreepMemoryKeys.remote] = remoteName - if (this.isDying()) return + delete creepMemory[CreepMemoryKeys.packedCoord] - Memory.rooms[remoteName][RoomMemoryKeys.remoteBuilder] += myCreepUtils.parts(this).work - } + if (this.isDying()) return - removeRemote?() { - const creepMemory = Memory.creeps[this.name] + Memory.rooms[remoteName][RoomMemoryKeys.remoteBuilder] += MyCreepUtils.parts(this).work + } - if (!this.isDying()) { - const remoteName = creepMemory[CreepMemoryKeys.remote] + removeRemote?() { + const creepMemory = Memory.creeps[this.name] - Memory.rooms[remoteName][RoomMemoryKeys.remoteBuilder] -= myCreepUtils.parts(this).work - } + if (!this.isDying()) { + const remoteName = creepMemory[CreepMemoryKeys.remote] - delete creepMemory[CreepMemoryKeys.remote] - delete creepMemory[CreepMemoryKeys.packedCoord] + Memory.rooms[remoteName][RoomMemoryKeys.remoteBuilder] -= MyCreepUtils.parts(this).work } - remoteActions?() {} + delete creepMemory[CreepMemoryKeys.remote] + delete creepMemory[CreepMemoryKeys.packedCoord] + } + + remoteActions?() {} - static roleManager(room: Room, creepsOfRole: string[]) { - for (const creepName of creepsOfRole) { - const creep: RemoteBuilder = Game.creeps[creepName] as RemoteBuilder + static roleManager(room: Room, creepsOfRole: string[]) { + for (const creepName of creepsOfRole) { + const creep: RemoteBuilder = Game.creeps[creepName] as RemoteBuilder - // Try to find a remote + // Try to find a remote - if (!creep.findRemote()) { - creep.message = '❌ Remote' - /* + if (!creep.findRemote()) { + creep.message = '❌ Remote' + /* // If the room is the creep's commune if (room.name === creep.commune.name) { @@ -148,37 +148,37 @@ export class RemoteBuilder extends Creep { ], }) */ - continue - } - - // If the creep needs resources - - const creepMemory = Memory.creeps[creep.name] - if (room.name === creepMemory[CreepMemoryKeys.remote]) { - creep.remoteActions() - continue - } - - creep.message = creepMemory[CreepMemoryKeys.remote] - - creep.createMoveRequest({ - origin: creep.pos, - goals: [ - { - pos: new RoomPosition(25, 25, creepMemory[CreepMemoryKeys.remote]), - range: 1, - }, - ], - avoidEnemyRanges: true, - typeWeights: { - [RoomTypes.enemy]: Infinity, - [RoomTypes.ally]: Infinity, - [RoomTypes.sourceKeeper]: Infinity, - [RoomTypes.enemyRemote]: Infinity, - [RoomTypes.allyRemote]: Infinity, - }, - avoidDanger: true, - }) - } + continue + } + + // If the creep needs resources + + const creepMemory = Memory.creeps[creep.name] + if (room.name === creepMemory[CreepMemoryKeys.remote]) { + creep.remoteActions() + continue + } + + creep.message = creepMemory[CreepMemoryKeys.remote] + + creep.createMoveRequest({ + origin: creep.pos, + goals: [ + { + pos: new RoomPosition(25, 25, creepMemory[CreepMemoryKeys.remote]), + range: 1, + }, + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + avoidDanger: true, + }) } + } } diff --git a/src/room/creeps/roleManagers/remote/remoteReserver.ts b/src/room/creeps/roleManagers/remote/remoteReserver.ts index 253f72fd0..38aadaf4e 100644 --- a/src/room/creeps/roleManagers/remote/remoteReserver.ts +++ b/src/room/creeps/roleManagers/remote/remoteReserver.ts @@ -14,7 +14,7 @@ import { unpackPosAt, unpackPosList, } from 'other/codec' -import { myCreepUtils } from 'room/creeps/myCreepUtils' +import { MyCreepUtils } from 'room/creeps/myCreepUtils' export class RemoteReserver extends Creep { constructor(creepID: Id) { @@ -123,7 +123,7 @@ export class RemoteReserver extends Creep { if (this.isDying()) return Memory.rooms[creepMemory[CreepMemoryKeys.remote]][RoomMemoryKeys.remoteReservers] -= - myCreepUtils.parts(this).claim + MyCreepUtils.parts(this).claim } removeRemote?() { diff --git a/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts b/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts index 7d3e9b55c..882b8ea67 100644 --- a/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts +++ b/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts @@ -21,7 +21,7 @@ import { import { packCoord, reversePosList, unpackPosAt } from 'other/codec' import { indexOf } from 'lodash' import { CreepUtils } from 'room/creeps/creepUtils' -import { myCreepUtils } from 'room/creeps/myCreepUtils' +import { MyCreepUtils } from 'room/creeps/myCreepUtils' import { CreepProcs } from 'room/creeps/creepProcs' export class RemoteHarvester extends Creep { @@ -185,7 +185,7 @@ export class RemoteHarvester extends Creep { applyRemote?() { const creepMemory = Memory.creeps[this.name] const sourceIndex = creepMemory[CreepMemoryKeys.sourceIndex] - const workParts = myCreepUtils.parts(this).work + const workParts = MyCreepUtils.parts(this).work const remoteMemory = Memory.rooms[creepMemory[CreepMemoryKeys.remote]] /* if (!this.spawning) { @@ -296,7 +296,7 @@ export class RemoteHarvester extends Creep { if ( getRange(this.pos, container.pos) === 1 && - this.store.getFreeCapacity() <= myCreepUtils.parts(this).work + this.store.getFreeCapacity() <= MyCreepUtils.parts(this).work ) { this.transfer(container, RESOURCE_ENERGY) } @@ -327,7 +327,7 @@ export class RemoteHarvester extends Creep { } private obtainEnergyIfNeeded() { - if (this.nextStore.energy >= myCreepUtils.parts(this).work) return Result.success + if (this.nextStore.energy >= MyCreepUtils.parts(this).work) return Result.success if (this.movedResource) return Result.fail return CreepProcs.runRoomLogisticsRequestAdvanced(this, { @@ -355,7 +355,7 @@ export class RemoteHarvester extends Creep { // Ensure we have enough energy to use all work parts - if (this.store.energy < myCreepUtils.parts(this).work) return Result.noAction + if (this.store.energy < MyCreepUtils.parts(this).work) return Result.noAction // Make sure the contianer is sufficiently needy of repair diff --git a/src/types.d.ts b/src/types.d.ts index a1035c31e..9febb6243 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -1374,7 +1374,7 @@ declare global { lastReset: number - debugUtils: DebugUtils + DebugUtils: DebugUtils // Command functions diff --git a/src/utils/logging.ts b/src/utils/logging.ts index 362211487..848879323 100644 --- a/src/utils/logging.ts +++ b/src/utils/logging.ts @@ -82,5 +82,5 @@ export function customLog(title: any, message?: any, opts?: LogOpts) { } export function stringifyLog(title: any, message: any, opts?: LogOpts) { - return customLog(title, global.debugUtils.stringify(message), opts) + return customLog(title, global.DebugUtils.stringify(message), opts) } From f09b4ec9ab7752ca53a3472ce87e04977346ac7e Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 23 Jan 2024 15:21:07 -0800 Subject: [PATCH 105/190] defence procs/utils, static CommuneUtils --- src/international/collective.ts | 4 +- src/international/flags/flags.ts | 2 +- src/international/requests.ts | 4 +- src/other/profilerRegister.ts | 6 +- src/room/commune/commune.ts | 10 +- src/room/commune/communeProcs.ts | 2 +- src/room/commune/communeUtils.ts | 24 +- src/room/commune/defence.ts | 426 ------------------ src/room/commune/defenceProcs.ts | 236 ++++++++++ src/room/commune/defenceUtils.ts | 162 +++++++ src/room/commune/haulerNeed.ts | 4 +- src/room/commune/spawning/spawnRequests.ts | 14 +- .../spawning/spawningStructureProcs.ts | 13 +- src/room/commune/towerProcs.ts | 2 +- src/room/commune/towerUtils.ts | 4 +- src/room/creeps/creepProcs.ts | 4 +- .../creeps/creepPrototypes/creepFunctions.ts | 2 +- src/room/creeps/creepUtils.ts | 6 +- src/room/creeps/endTickCreepManager.ts | 2 +- 19 files changed, 450 insertions(+), 477 deletions(-) delete mode 100644 src/room/commune/defence.ts create mode 100644 src/room/commune/defenceProcs.ts create mode 100644 src/room/commune/defenceUtils.ts diff --git a/src/international/collective.ts b/src/international/collective.ts index b3a8a5d93..13db77318 100644 --- a/src/international/collective.ts +++ b/src/international/collective.ts @@ -8,7 +8,7 @@ import { minerals, haulerUpdateDefault, } from './constants' -import { communeUtils } from 'room/commune/communeUtils' +import { CommuneUtils } from 'room/commune/communeUtils' const periodicUpdateInterval = randomIntRange(100, 200) @@ -362,7 +362,7 @@ export class CollectiveManager { const roomName = funnelOrder[i] const room = Game.rooms[roomName] - const wantsToBeFunneledIndependent = communeUtils.wantsToBeFunneledIndependent(room) + const wantsToBeFunneledIndependent = CommuneUtils.wantsToBeFunneledIndependent(room) if (!(previousWantsToBeIndependentlyFunneled && wantsToBeFunneledIndependent)) { previousWantsToBeIndependentlyFunneled = false diff --git a/src/international/flags/flags.ts b/src/international/flags/flags.ts index 9a8d8eac5..02e158747 100644 --- a/src/international/flags/flags.ts +++ b/src/international/flags/flags.ts @@ -34,7 +34,7 @@ export class FlagManager { /** * Tricks typescript into accepting the dynamic function call in run() */ - public doNothing(flagName: string, flagNameParts: string[]) {} + doNothing(flagName: string, flagNameParts: string[]) {} private internationalDataVisuals(flagName: string, flagNameParts: string[]) { const flag = Game.flags[flagName] diff --git a/src/international/requests.ts b/src/international/requests.ts index f11bc4f10..60ed30834 100644 --- a/src/international/requests.ts +++ b/src/international/requests.ts @@ -17,7 +17,7 @@ import { indexOf } from 'lodash' import { Sleepable, StaticSleepable } from 'utils/sleepable' import { util } from 'chai' import { WorkRequest } from 'types/internationalRequests' -import { communeUtils } from 'room/commune/communeUtils' +import { CommuneUtils } from 'room/commune/communeUtils' const runRequestInverval = randomIntRange(100, 200) @@ -128,7 +128,7 @@ export class RequestsManager extends StaticSleepable { const communesForResponding = new Set() for (const roomName of CollectiveManager.communes) { - if (!communeUtils.canTakeNewWorkRequest(roomName)) continue + if (!CommuneUtils.canTakeNewWorkRequest(roomName)) continue communesForResponding.add(roomName) } diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index 65c7842e5..722a612f9 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -31,7 +31,6 @@ import { EndTickCreepManager } from 'room/creeps/endTickCreepManager' import { PowerCreepOrganizer } from 'international/powerCreepOrganizer' import { HaulerNeedManager } from 'room/commune/haulerNeed' import { LinkManager } from 'room/commune/links' -import { DefenceManager } from 'room/commune/defence' import { CombatRequestManager } from 'room/commune/combatRequest' import { MapVisualsManager } from 'international/mapVisuals' import { MigrationManager } from 'international/migration' @@ -112,6 +111,8 @@ import { initSync } from '../wasm/pkg/commiebot_wasm.js' import { InitManager } from 'international/init' import { TickInit } from 'international/tickInit' import { DebugUtils } from 'debug/debugUtils' +import { DefenceProcs } from 'room/commune/defenceProcs' +import { DefenceUtils } from 'room/commune/defenceUtils' export function profilerRegister() { // Classes @@ -162,7 +163,8 @@ export function profilerRegister() { profiler.registerClass(EndTickCreepManager, 'EndTickCreepManager') profiler.registerClass(HaulerNeedManager, 'HaulerNeedManager') profiler.registerClass(LinkManager, 'LinkManager') - profiler.registerClass(DefenceManager, 'DefenceManager') + profiler.registerClass(DefenceProcs, 'DefenceProcs') + profiler.registerClass(DefenceUtils, 'DefenceUtils') profiler.registerClass(CombatRequestManager, 'CombatRequestManager') profiler.registerClass(RoomVisualsManager, 'RoomVisualsManager') profiler.registerClass(Operator, 'Operator') diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index 67b85cdc0..1b310afb0 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -26,7 +26,7 @@ import './links' import { RemotesManager } from './remotesManager' import { WorkRequestManager } from './workRequest' import { CombatRequestManager } from './combatRequest' -import { DefenceManager } from './defence' +import { DefenceProcs } from './defenceProcs' import { HaulRequestManager } from './haulRequestManager' import { HaulerNeedManager } from './haulerNeed' import { packCoord, unpackPosAt } from 'other/codec' @@ -58,7 +58,6 @@ export class CommuneManager { // Managers constructionManager: ConstructionManager - defenceManager: DefenceManager linkManager: LinkManager labManager: LabManager @@ -101,7 +100,6 @@ export class CommuneManager { constructor() { this.constructionManager = new ConstructionManager(this) - this.defenceManager = new DefenceManager(this) this.linkManager = new LinkManager(this) this.labManager = new LabManager(this) @@ -244,10 +242,10 @@ export class CommuneManager { run() { if (!this.room.memory[RoomMemoryKeys.communePlanned]) return - this.defenceManager.run() + DefenceProcs.run(this.room) TowerProcs.run(this.room) - this.defenceManager.manageThreat() - this.defenceManager.manageDefenceRequests() + DefenceProcs.manageThreat(this.room) + DefenceProcs.manageDefenceRequests(this.room) TerminalProcs.run(this.room) diff --git a/src/room/commune/communeProcs.ts b/src/room/commune/communeProcs.ts index 847995d93..cc1230e9f 100644 --- a/src/room/commune/communeProcs.ts +++ b/src/room/commune/communeProcs.ts @@ -1,6 +1,6 @@ import { RoomUtils } from 'room/roomUtils' import { CommuneDataProcs, communeData } from './communeData' -import { communeUtils } from './communeUtils' +import { CommuneUtils } from './communeUtils' import { RoomLogisticsRequestTypes, RoomMemoryKeys, diff --git a/src/room/commune/communeUtils.ts b/src/room/commune/communeUtils.ts index 8bed75599..43967eae6 100644 --- a/src/room/commune/communeUtils.ts +++ b/src/room/commune/communeUtils.ts @@ -15,7 +15,7 @@ import { StructureUtils } from 'room/structureUtils' import { OrganizedSpawns } from './spawning/spawningStructureProcs' export class CommuneUtils { - getGeneralRepairStructures(room: Room) { + static getGeneralRepairStructures(room: Room) { if (room.generalRepairStructures) return room.generalRepairStructures const repairTargets = this.getGeneralRepairStructuresFromCoords(room) @@ -58,7 +58,7 @@ export class CommuneUtils { return repairTargets } - private getGeneralRepairStructuresFromCoords(room: Room) { + private static getGeneralRepairStructuresFromCoords(room: Room) { const repairTargets: (StructureContainer | StructureRoad)[] = [] const structureCoords = communeData[room.name].generalRepairStructureCoords if (!structureCoords) return repairTargets @@ -78,7 +78,7 @@ export class CommuneUtils { return repairTargets } - getRampartRepairTargets(room: Room) { + static getRampartRepairTargets(room: Room) { if (room.rampartRepairStructures) return room.rampartRepairStructures const repairTargets: StructureRampart[] = [] @@ -121,7 +121,7 @@ export class CommuneUtils { /** * The presently desired upgrader strength for the commune based on energy thresholds */ - getDesiredUpgraderStrength(room: Room) { + static getDesiredUpgraderStrength(room: Room) { const strength = Math.pow( (room.roomManager.resourcesInStoringStructures.energy - room.communeManager.storedEnergyUpgradeThreshold * 0.5) / @@ -132,7 +132,7 @@ export class CommuneUtils { return strength } - getMaxUpgradeStrength(room: Room) { + static getMaxUpgradeStrength(room: Room) { const data = communeData[room.name] if (data.maxUpgradeStrength !== undefined && !room.roomManager.structureUpdate) return data.maxUpgradeStrength @@ -187,7 +187,7 @@ export class CommuneUtils { return maxUpgradeStrength } - getEstimatedSourceIncome(room: Room) { + static getEstimatedSourceIncome(room: Room) { const data = communeData[room.name] if (data.estimatedCommuneSourceIncome !== undefined) return data.estimatedCommuneSourceIncome @@ -215,7 +215,7 @@ export class CommuneUtils { return estimatedIncome } - canTakeNewWorkRequest(roomName: string) { + static canTakeNewWorkRequest(roomName: string) { if (Memory.rooms[roomName][RoomMemoryKeys.workRequest]) return false if (Game.rooms[roomName].energyCapacityAvailable < 650) return false @@ -229,7 +229,7 @@ export class CommuneUtils { * Find spawns that are inactive and active * Assign spawnIDs to creeps */ - public getOrganizedSpawns( + static getOrganizedSpawns( room: Room, spawns: StructureSpawn[] = room.roomManager.structures.spawn, ): false | OrganizedSpawns { @@ -262,9 +262,9 @@ export class CommuneUtils { * Wether the commune wants to be funneled for upgrading, independent of what other rooms want. * Assumes the room already meats the requirements to be a funnel target */ - wantsToBeFunneledIndependent(room: Room) { - const desiredStrength = communeUtils.getDesiredUpgraderStrength(room) - const maxStrength = communeUtils.getMaxUpgradeStrength(room) + static wantsToBeFunneledIndependent(room: Room) { + const desiredStrength = this.getDesiredUpgraderStrength(room) + const maxStrength = this.getMaxUpgradeStrength(room) // We do not have enough desire if (desiredStrength < maxStrength) return false @@ -272,5 +272,3 @@ export class CommuneUtils { return true } } - -export const communeUtils = new CommuneUtils() diff --git a/src/room/commune/defence.ts b/src/room/commune/defence.ts deleted file mode 100644 index 0fa2be8a0..000000000 --- a/src/room/commune/defence.ts +++ /dev/null @@ -1,426 +0,0 @@ -import { - CombatRequestKeys, - customColors, - defaultDataDecay, - impassibleStructureTypes, - impassibleStructureTypesSet, - ourImpassibleStructuresSet, - PlayerMemoryKeys, - Result, - roomDimensions, - RoomMemoryKeys, - safemodeTargets, -} from 'international/constants' -import { PlayerManager } from 'international/players' -import { simpleAllies } from 'international/simpleAllies/simpleAllies' -import { StatsManager } from 'international/stats' -import { - findObjectWithID, - findWeightedRangeFromExit, - getRange, - isAlly, - isXYInBorder, - randomIntRange, - randomRange, - randomTick, -} from 'utils/utils' -import { packCoord } from 'other/codec' -import { CommuneManager } from './commune' -import { CollectiveManager } from 'international/collective' -import { RoomNameUtils } from 'room/roomNameUtils' -import { RampartPlans } from 'room/construction/rampartPlans' -import { customLog, LogTypes } from 'utils/logging' - -export class DefenceManager { - communeManager: CommuneManager - - constructor(communeManager: CommuneManager) { - this.communeManager = communeManager - } - - run() { - if (!this.communeManager.room.roomManager.notMyCreeps.enemy.length) { - this.considerRampartsPublic() - return - } - - // There are at least enemy creeps - - this.makeRampartsPrivate() - this.advancedActivateSafeMode() - - if (!this.communeManager.room.roomManager.enemyAttackers.length) return - - // There are at least enemyAttackers - - this.assignDefenceTargets() - } - - private shouldSafeMode() { - const { room } = this.communeManager - const { controller } = room - - // Conditions check - - if (controller.safeModeCooldown) return false - if (!controller.safeModeAvailable) return false - if (controller.upgradeBlocked) return false - // We can't use safemode when the downgrade timer is too low - if (controller.ticksToDowngrade <= CONTROLLER_DOWNGRADE_SAFEMODE_THRESHOLD) return false - // If another room is safemoded, make sure that we are a higher level - if ( - CollectiveManager.safemodedCommuneName && - Game.rooms[CollectiveManager.safemodedCommuneName].controller.level >= - this.communeManager.room.controller.level - ) - return false - - // Filter attackers that are not invaders. If there are none, stop - - const nonInvaderAttackers = room.roomManager.enemyAttackers.filter( - enemyCreep => !enemyCreep.isOnExit && enemyCreep.owner.username !== 'Invader', - ) - if (!nonInvaderAttackers.length) return false - - if (!this.isControllerSafe()) return true - if (!this.isBaseSafe()) return true - - return false - } - - private isSafe() {} - - private isBaseSafe() { - const { room } = this.communeManager - - const anchor = room.roomManager.anchor - if (!anchor) { - throw Error('no anchor') - } - - const terrain = Game.map.getRoomTerrain(room.name) - const rampartPlans = this.communeManager.room.roomManager.rampartPlans - const enemyCoord = RoomNameUtils.floodFillFor(room.name, [anchor], coord => { - // Ignore terrain that protects us - if (terrain.get(coord.x, coord.y) === TERRAIN_MASK_WALL) return false - - const planData = rampartPlans.getXY(coord.x, coord.y) - if (planData) { - // Filter out non-mincut ramparts - if (planData.buildForNuke || planData.coversStructure || planData.buildForThreat) - return true - // Don't flood past mincut ramparts - return false - } - - // See if there is an enemy creep - const enemyCreepID = room.roomManager.enemyCreepPositions[packCoord(coord)] - if (!enemyCreepID) return true - - const enemyCreep = findObjectWithID(enemyCreepID) - if (isAlly(enemyCreep.owner.username)) return true - // If it can deal damage, safemode - if ( - enemyCreep.combatStrength.ranged > 0 || - enemyCreep.combatStrength.melee > 0 || - enemyCreep.combatStrength.dismantle > 0 - ) - return Result.stop - - return true - }) - - // If there is an enemy inside our base, we want to safemode - return !enemyCoord - } - - /** - * Identify claim creeps trying to downgrade the controller, safemode just before - */ - private isControllerSafe() { - const { room } = this.communeManager - const terrain = Game.map.getRoomTerrain(room.name) - const enemyCoord = RoomNameUtils.floodFillFor( - room.name, - [room.controller.pos], - (coord, packedCoord, depth) => { - // See if we should even consider the coord - - // Ignore terrain that protects us - if (terrain.get(coord.x, coord.y) === TERRAIN_MASK_WALL) return false - - // Don't go out of range 2 from controller - if (depth > 2) return false - - // Ignore structures that protect us - if (room.coordHasStructureTypes(coord, ourImpassibleStructuresSet)) return false - - // Past this point we should always add this coord to the next generation - - // See if there is an enemy creep - const enemyCreepID = room.roomManager.enemyCreepPositions[packCoord(coord)] - if (!enemyCreepID) return true - - const enemyCreep = findObjectWithID(enemyCreepID) - if (isAlly(enemyCreep.owner.username)) return true - // We only need to protect our controller from claim creeps - if (!enemyCreep.parts.claim) return true - - // We identified an enemy claimed near our controller! - return Result.stop - }, - ) - - // If there is an enemy claimer, we want to safemode - return !enemyCoord - } - - private advancedActivateSafeMode() { - if (!this.shouldSafeMode()) return - - // If another room is safemoded and we determined it to be okay: unclaim it so we can safemode - if (CollectiveManager.safemodedCommuneName) { - const safemodedRoom = Game.rooms[CollectiveManager.safemodedCommuneName] - safemodedRoom.controller.unclaim() - // Add a return if we can't unclaim and safemode on the same tick - } - - if (this.communeManager.room.controller.activateSafeMode() !== OK) return - - // Safemode was probably activated - - // Record that we safemoded so other communes know - CollectiveManager.safemodedCommuneName = this.communeManager.room.name - } - - private considerRampartsPublic() { - if (!global.settings.publicRamparts) return - - const { room } = this.communeManager - const roomMemory = Memory.rooms[room.name] - - // Wait some pseudo-random time before publicizing ramparts - if ( - roomMemory[RoomMemoryKeys.lastAttackedBy] !== undefined && - roomMemory[RoomMemoryKeys.lastAttackedBy] < randomIntRange(100, 150) - ) - return - - // Publicize at most 10 ramparts per tick, to avoid too many intents - - let intents = 0 - - for (const rampart of room.roomManager.structures.rampart) { - if (intents >= 10) return - - // If the rampart is public - - if (rampart.isPublic) continue - - // Otherwise set the rampart to public, increase increment - - rampart.setPublic(true) - intents += 1 - } - } - - private makeRampartsPrivate() { - for (const rampart of this.communeManager.room.roomManager.structures.rampart) { - if (rampart.isPublic) rampart.setPublic(false) - } - } - - private assignDefenceTargets() { - const { room } = this.communeManager - - // Sort by estimated percent health change - - const defenderEnemyTargetsByDamage = Array.from( - room.defenderEnemyTargetsWithDefender.keys(), - ).sort((a, b) => { - const creepA = findObjectWithID(a) - const creepB = findObjectWithID(b) - - return ( - creepA.hits / creepA.hitsMax - - (creepA.hits + room.defenderEnemyTargetsWithDamage.get(a)) / creepA.hitsMax - - (creepB.hits / creepB.hitsMax - - (creepB.hits + room.defenderEnemyTargetsWithDamage.get(b)) / creepB.hitsMax) - ) - }) - - customLog('ENEMY TARGETS BY DAMAGE', defenderEnemyTargetsByDamage, { - type: LogTypes.warning, - }) - - // Attack enemies in order of most net damage members can heal - - for (const enemyCreepID of defenderEnemyTargetsByDamage) { - if (!room.attackingDefenderIDs.size) break - - const enemyCreep = findObjectWithID(enemyCreepID) - - for (const memberID of room.defenderEnemyTargetsWithDefender.get(enemyCreepID)) { - if (!room.attackingDefenderIDs.has(memberID)) continue - - const member = Game.getObjectById(memberID) - - Game.creeps[member.name].combatTarget = enemyCreep - - room.attackingDefenderIDs.delete(memberID) - } - - if (this.communeManager.towerAttackTarget) continue - - const damage = room.defenderEnemyTargetsWithDamage.get(enemyCreep.id) - room.visual.text(damage.toString(), enemyCreep.pos.x, enemyCreep.pos.y - 0.25, { - font: 0.3, - }) - - if (enemyCreep.owner.username === 'Invader') { - if (damage <= 0) continue - } else { - const playerMemory = - Memory.players[enemyCreep.owner.username] || - PlayerManager.initPlayer(enemyCreep.owner.username) - const weight = playerMemory[PlayerMemoryKeys.rangeFromExitWeight] - - if (/* findWeightedRangeFromExit(enemyCreep.pos, weight) * */ damage < enemyCreep.hits) - continue - } - - this.communeManager.towerAttackTarget = enemyCreep - } - } - - manageDefenceRequests() { - const { room } = this.communeManager - - if (!room.towerInferiority) return - - const hasTowers = !!room.roomManager.structures.tower.length - - let onlyInvader = true - let minDamage = 0 - let minMeleeHeal = 0 - let minRangedHeal = 0 - - for (const enemyCreep of room.roomManager.enemyAttackers) { - if (enemyCreep.owner.username === 'Invader') { - // If we have towers, don't care about the invader - if (hasTowers) continue - } else onlyInvader = false - - minDamage += Math.max(enemyCreep.combatStrength.heal * 1.2, Math.ceil(enemyCreep.hits / 50)) - minMeleeHeal += enemyCreep.combatStrength.melee + enemyCreep.combatStrength.ranged - minRangedHeal += enemyCreep.combatStrength.ranged - } - - // If we have towers and it's only invaders, we don't need a defence request - if (onlyInvader && hasTowers) return - - // There is tower inferiority, make a defend request - - room.createDefendCombatRequest({ - [CombatRequestKeys.minDamage]: minDamage, - [CombatRequestKeys.minMeleeHeal]: minMeleeHeal, - [CombatRequestKeys.minRangedHeal]: minRangedHeal, - [CombatRequestKeys.quadQuota]: 1, - [CombatRequestKeys.inactionTimerMax]: onlyInvader ? 1 : randomIntRange(2000, 3000), - }) - - if (!global.settings.allyCommunication) return - - simpleAllies.requestDefense({ - roomName: room.name, - priority: 1, - }) - } - - private findPresentThreat() { - const { room } = this.communeManager - - if (!room.towerInferiority) return false - - const presentThreat: PresentThreat = { - total: 0, - byPlayers: {}, - } - - for (const enemyCreep of room.roomManager.enemyAttackers) { - let creepThreat = 0 - - creepThreat += enemyCreep.combatStrength.dismantle - creepThreat += enemyCreep.combatStrength.melee * 1.2 - creepThreat += enemyCreep.combatStrength.ranged * 3.5 - - creepThreat += enemyCreep.combatStrength.heal / enemyCreep.defenceStrength - - creepThreat = Math.floor(creepThreat) - - presentThreat.total += creepThreat - - const playerName = enemyCreep.owner.username - if (playerName === 'Invader') continue - - const playerThreat = presentThreat.byPlayers[enemyCreep.owner.username] - if (playerThreat) { - presentThreat.byPlayers[playerName] = playerThreat + creepThreat - continue - } - - presentThreat.byPlayers[playerName] = creepThreat - } - - return presentThreat - } - - manageThreat() { - const { room } = this.communeManager - - const presentThreat = this.findPresentThreat() - const roomMemory = Memory.rooms[room.name] - - if (!presentThreat) { - // Reduce attack threat over time - if (roomMemory[RoomMemoryKeys.threatened] > 0) - roomMemory[RoomMemoryKeys.threatened] *= defaultDataDecay - - if (roomMemory[RoomMemoryKeys.lastAttackedBy] !== undefined) - roomMemory[RoomMemoryKeys.lastAttackedBy] += 1 - return - } - - // There is a present threat - - roomMemory[RoomMemoryKeys.threatened] = Math.max( - roomMemory[RoomMemoryKeys.threatened], - presentThreat.total, - PlayerManager.highestThreat / 3, - ) - - for (const playerName in presentThreat.byPlayers) { - const threat = presentThreat.byPlayers[playerName] - - const player = Memory.players[playerName] - if (!player) { - PlayerManager.initPlayer(playerName) - } - - player[PlayerMemoryKeys.offensiveThreat] = Math.max( - threat, - player[PlayerMemoryKeys.offensiveThreat], - ) - player[PlayerMemoryKeys.hate] = Math.max(threat, player[PlayerMemoryKeys.hate]) - player[PlayerMemoryKeys.lastAttackedBy] = 0 - } - - roomMemory[RoomMemoryKeys.lastAttackedBy] = 0 - return - } -} - -interface PresentThreat { - total: number - byPlayers: {[playerName: string]: number} -} diff --git a/src/room/commune/defenceProcs.ts b/src/room/commune/defenceProcs.ts new file mode 100644 index 000000000..d4362386e --- /dev/null +++ b/src/room/commune/defenceProcs.ts @@ -0,0 +1,236 @@ +import { CollectiveManager } from "international/collective" +import { Result, ourImpassibleStructuresSet, RoomMemoryKeys, PlayerMemoryKeys, CombatRequestKeys, defaultDataDecay } from "international/constants" +import { PlayerManager } from "international/players" +import { simpleAllies } from "international/simpleAllies/simpleAllies" +import { packCoord } from "other/codec" +import { RoomNameUtils } from "room/roomNameUtils" +import { customLog, LogTypes } from "utils/logging" +import { findObjectWithID, isAlly, randomIntRange } from "utils/utils" +import { DefenceUtils } from "./defenceUtils" + +export class DefenceProcs { + static run(room: Room) { + if (!room.roomManager.notMyCreeps.enemy.length) { + this.considerRampartsPublic(room) + return + } + + // There are at least enemy creeps + + this.makeRampartsPrivate(room) + this.advancedActivateSafeMode(room) + + if (!room.roomManager.enemyAttackers.length) return + + // There are at least enemyAttackers + + this.assignDefenceTargets(room) + } + + private static advancedActivateSafeMode(room: Room) { + if (!DefenceUtils.shouldSafeMode(room)) return + + // If another room is safemoded and we determined it to be okay: unclaim it so we can safemode + if (CollectiveManager.safemodedCommuneName) { + const safemodedRoom = Game.rooms[CollectiveManager.safemodedCommuneName] + safemodedRoom.controller.unclaim() + // Add a return if we can't unclaim and safemode on the same tick + } + + if (room.controller.activateSafeMode() !== OK) return + + // Safemode was probably activated + + // Record that we safemoded so other communes know + CollectiveManager.safemodedCommuneName = room.name + } + + private static considerRampartsPublic(room: Room) { + if (!global.settings.publicRamparts) return + + const roomMemory = Memory.rooms[room.name] + + // Wait some pseudo-random time before publicizing ramparts + if ( + roomMemory[RoomMemoryKeys.lastAttackedBy] !== undefined && + roomMemory[RoomMemoryKeys.lastAttackedBy] < randomIntRange(100, 150) + ) + return + + // Publicize at most 10 ramparts per tick, to avoid too many intents + + let intents = 0 + + for (const rampart of room.roomManager.structures.rampart) { + if (intents >= 10) return + + // If the rampart is public + + if (rampart.isPublic) continue + + // Otherwise set the rampart to public, increase increment + + rampart.setPublic(true) + intents += 1 + } + } + + private static makeRampartsPrivate(room: Room) { + for (const rampart of room.roomManager.structures.rampart) { + if (rampart.isPublic) rampart.setPublic(false) + } + } + + private static assignDefenceTargets(room: Room) { + + // Sort by estimated percent health change + + const defenderEnemyTargetsByDamage = Array.from( + room.defenderEnemyTargetsWithDefender.keys(), + ).sort((a, b) => { + const creepA = findObjectWithID(a) + const creepB = findObjectWithID(b) + + return ( + creepA.hits / creepA.hitsMax - + (creepA.hits + room.defenderEnemyTargetsWithDamage.get(a)) / creepA.hitsMax - + (creepB.hits / creepB.hitsMax - + (creepB.hits + room.defenderEnemyTargetsWithDamage.get(b)) / creepB.hitsMax) + ) + }) + + customLog('ENEMY TARGETS BY DAMAGE', defenderEnemyTargetsByDamage, { + type: LogTypes.warning, + }) + + // Attack enemies in order of most net damage members can heal + + for (const enemyCreepID of defenderEnemyTargetsByDamage) { + if (!room.attackingDefenderIDs.size) break + + const enemyCreep = findObjectWithID(enemyCreepID) + + for (const memberID of room.defenderEnemyTargetsWithDefender.get(enemyCreepID)) { + if (!room.attackingDefenderIDs.has(memberID)) continue + + const member = Game.getObjectById(memberID) + + Game.creeps[member.name].combatTarget = enemyCreep + + room.attackingDefenderIDs.delete(memberID) + } + + if (room.communeManager.towerAttackTarget) continue + + const damage = room.defenderEnemyTargetsWithDamage.get(enemyCreep.id) + room.visual.text(damage.toString(), enemyCreep.pos.x, enemyCreep.pos.y - 0.25, { + font: 0.3, + }) + + if (enemyCreep.owner.username === 'Invader') { + if (damage <= 0) continue + } else { + const playerMemory = + Memory.players[enemyCreep.owner.username] || + PlayerManager.initPlayer(enemyCreep.owner.username) + const weight = playerMemory[PlayerMemoryKeys.rangeFromExitWeight] + + if (/* findWeightedRangeFromExit(enemyCreep.pos, weight) * */ damage < enemyCreep.hits) + continue + } + + room.communeManager.towerAttackTarget = enemyCreep + } + } + + static manageDefenceRequests(room: Room) { + + if (!room.towerInferiority) return + + const hasTowers = !!room.roomManager.structures.tower.length + + let onlyInvader = true + let minDamage = 0 + let minMeleeHeal = 0 + let minRangedHeal = 0 + + for (const enemyCreep of room.roomManager.enemyAttackers) { + if (enemyCreep.owner.username === 'Invader') { + // If we have towers, don't care about the invader + if (hasTowers) continue + } else onlyInvader = false + + minDamage += Math.max(enemyCreep.combatStrength.heal * 1.2, Math.ceil(enemyCreep.hits / 50)) + minMeleeHeal += enemyCreep.combatStrength.melee + enemyCreep.combatStrength.ranged + minRangedHeal += enemyCreep.combatStrength.ranged + } + + // If we have towers and it's only invaders, we don't need a defence request + if (onlyInvader && hasTowers) return + + // There is tower inferiority, make a defend request + + room.createDefendCombatRequest({ + [CombatRequestKeys.minDamage]: minDamage, + [CombatRequestKeys.minMeleeHeal]: minMeleeHeal, + [CombatRequestKeys.minRangedHeal]: minRangedHeal, + [CombatRequestKeys.quadQuota]: 1, + [CombatRequestKeys.inactionTimerMax]: onlyInvader ? 1 : randomIntRange(2000, 3000), + }) + + if (!global.settings.allyCommunication) return + + simpleAllies.requestDefense({ + roomName: room.name, + priority: 1, + }) + } + + static manageThreat(room: Room) { + + const presentThreat = DefenceUtils.findPresentThreat(room) + const roomMemory = Memory.rooms[room.name] + + if (!presentThreat) { + // Reduce attack threat over time + if (roomMemory[RoomMemoryKeys.threatened] > 0) + roomMemory[RoomMemoryKeys.threatened] *= defaultDataDecay + + if (roomMemory[RoomMemoryKeys.lastAttackedBy] !== undefined) + roomMemory[RoomMemoryKeys.lastAttackedBy] += 1 + return + } + + // There is a present threat + + roomMemory[RoomMemoryKeys.threatened] = Math.max( + roomMemory[RoomMemoryKeys.threatened], + presentThreat.total, + PlayerManager.highestThreat / 3, + ) + + for (const playerName in presentThreat.byPlayers) { + const threat = presentThreat.byPlayers[playerName] + + const player = Memory.players[playerName] + if (!player) { + PlayerManager.initPlayer(playerName) + } + + player[PlayerMemoryKeys.offensiveThreat] = Math.max( + threat, + player[PlayerMemoryKeys.offensiveThreat], + ) + player[PlayerMemoryKeys.hate] = Math.max(threat, player[PlayerMemoryKeys.hate]) + player[PlayerMemoryKeys.lastAttackedBy] = 0 + } + + roomMemory[RoomMemoryKeys.lastAttackedBy] = 0 + return + } +} + +export interface PresentThreat { + total: number + byPlayers: {[playerName: string]: number} +} diff --git a/src/room/commune/defenceUtils.ts b/src/room/commune/defenceUtils.ts new file mode 100644 index 000000000..dc8bf1e73 --- /dev/null +++ b/src/room/commune/defenceUtils.ts @@ -0,0 +1,162 @@ +import { CollectiveManager } from "international/collective" +import { Result, ourImpassibleStructuresSet } from "international/constants" +import { packCoord } from "other/codec" +import { RoomNameUtils } from "room/roomNameUtils" +import { findObjectWithID, isAlly } from "utils/utils" +import { PresentThreat } from "./defenceProcs" + +export class DefenceUtils { + static shouldSafeMode(room: Room) { + const { controller } = room + + // Conditions check + + if (controller.safeModeCooldown) return false + if (!controller.safeModeAvailable) return false + if (controller.upgradeBlocked) return false + // We can't use safemode when the downgrade timer is too low + if (controller.ticksToDowngrade <= CONTROLLER_DOWNGRADE_SAFEMODE_THRESHOLD) return false + // If another room is safemoded, make sure that we are a higher level + if ( + CollectiveManager.safemodedCommuneName && + Game.rooms[CollectiveManager.safemodedCommuneName].controller.level >= + room.controller.level + ) + return false + + // Filter attackers that are not invaders. If there are none, stop + + const nonInvaderAttackers = room.roomManager.enemyAttackers.filter( + enemyCreep => !enemyCreep.isOnExit && enemyCreep.owner.username !== 'Invader', + ) + if (!nonInvaderAttackers.length) return false + + if (!this.isControllerSafe(room)) return true + if (!this.isBaseSafe(room)) return true + + return false + } + + private static isSafe(room: Room) {} + + private static isBaseSafe(room: Room) { + + const anchor = room.roomManager.anchor + if (!anchor) { + throw Error('no anchor') + } + + const terrain = Game.map.getRoomTerrain(room.name) + const rampartPlans = room.roomManager.rampartPlans + const enemyCoord = RoomNameUtils.floodFillFor(room.name, [anchor], coord => { + // Ignore terrain that protects us + if (terrain.get(coord.x, coord.y) === TERRAIN_MASK_WALL) return false + + const planData = rampartPlans.getXY(coord.x, coord.y) + if (planData) { + // Filter out non-mincut ramparts + if (planData.buildForNuke || planData.coversStructure || planData.buildForThreat) + return true + // Don't flood past mincut ramparts + return false + } + + // See if there is an enemy creep + const enemyCreepID = room.roomManager.enemyCreepPositions[packCoord(coord)] + if (!enemyCreepID) return true + + const enemyCreep = findObjectWithID(enemyCreepID) + if (isAlly(enemyCreep.owner.username)) return true + // If it can deal damage, safemode + if ( + enemyCreep.combatStrength.ranged > 0 || + enemyCreep.combatStrength.melee > 0 || + enemyCreep.combatStrength.dismantle > 0 + ) + return Result.stop + + return true + }) + + // If there is an enemy inside our base, we want to safemode + return !enemyCoord + } + + /** + * Identify claim creeps trying to downgrade the controller, safemode just before + */ + private static isControllerSafe(room: Room) { + + const terrain = Game.map.getRoomTerrain(room.name) + const enemyCoord = RoomNameUtils.floodFillFor( + room.name, + [room.controller.pos], + (coord, packedCoord, depth) => { + // See if we should even consider the coord + + // Ignore terrain that protects us + if (terrain.get(coord.x, coord.y) === TERRAIN_MASK_WALL) return false + + // Don't go out of range 2 from controller + if (depth > 2) return false + + // Ignore structures that protect us + if (room.coordHasStructureTypes(coord, ourImpassibleStructuresSet)) return false + + // Past this point we should always add this coord to the next generation + + // See if there is an enemy creep + const enemyCreepID = room.roomManager.enemyCreepPositions[packCoord(coord)] + if (!enemyCreepID) return true + + const enemyCreep = findObjectWithID(enemyCreepID) + if (isAlly(enemyCreep.owner.username)) return true + // We only need to protect our controller from claim creeps + if (!enemyCreep.parts.claim) return true + + // We identified an enemy claimed near our controller! + return Result.stop + }, + ) + + // If there is an enemy claimer, we want to safemode + return !enemyCoord + } + + static findPresentThreat(room: Room) { + + if (!room.towerInferiority) return false + + const presentThreat: PresentThreat = { + total: 0, + byPlayers: {}, + } + + for (const enemyCreep of room.roomManager.enemyAttackers) { + let creepThreat = 0 + + creepThreat += enemyCreep.combatStrength.dismantle + creepThreat += enemyCreep.combatStrength.melee * 1.2 + creepThreat += enemyCreep.combatStrength.ranged * 3.5 + + creepThreat += enemyCreep.combatStrength.heal / enemyCreep.defenceStrength + + creepThreat = Math.floor(creepThreat) + + presentThreat.total += creepThreat + + const playerName = enemyCreep.owner.username + if (playerName === 'Invader') continue + + const playerThreat = presentThreat.byPlayers[enemyCreep.owner.username] + if (playerThreat) { + presentThreat.byPlayers[playerName] = playerThreat + creepThreat + continue + } + + presentThreat.byPlayers[playerName] = creepThreat + } + + return presentThreat + } +} diff --git a/src/room/commune/haulerNeed.ts b/src/room/commune/haulerNeed.ts index 41909a132..99995215b 100644 --- a/src/room/commune/haulerNeed.ts +++ b/src/room/commune/haulerNeed.ts @@ -2,7 +2,7 @@ import { RoomMemoryKeys, packedPosLength, stamps } from 'international/constants import { customLog } from 'utils/logging' import { findCarryPartsRequired } from 'utils/utils' import { CommuneManager } from './commune' -import { communeUtils } from './communeUtils' +import { CommuneUtils } from './communeUtils' import { StructureUtils } from 'room/structureUtils' export class HaulerNeedManager { @@ -45,7 +45,7 @@ export class HaulerNeedManager { private sourceNeed() { const room = this.communeManager.room const packedSourcePaths = Memory.rooms[room.name][RoomMemoryKeys.communeSourcePaths] - const estimatedSourceIncome = communeUtils.getEstimatedSourceIncome(room) + const estimatedSourceIncome = CommuneUtils.getEstimatedSourceIncome(room) const hubLink = room.roomManager.hubLink if (hubLink && StructureUtils.isRCLActionable(hubLink)) { diff --git a/src/room/commune/spawning/spawnRequests.ts b/src/room/commune/spawning/spawnRequests.ts index 88bff0f73..88f348167 100644 --- a/src/room/commune/spawning/spawnRequests.ts +++ b/src/room/commune/spawning/spawnRequests.ts @@ -22,7 +22,7 @@ import { import { CollectiveManager } from 'international/collective' import { CommuneManager } from '../commune' import { SpawnRequest, SpawnRequestArgs, SpawnRequestTypes } from 'types/spawnRequest' -import { communeUtils } from '../communeUtils' +import { CommuneUtils } from '../communeUtils' import { StructureUtils } from 'room/structureUtils' export class SpawnRequestsManager { @@ -563,7 +563,7 @@ export class SpawnRequestsManager { private maintainers() { this.rawSpawnRequestsArgs.push( ((): SpawnRequestArgs | false => { - const generalRepairStructures = communeUtils.getGeneralRepairStructures( + const generalRepairStructures = CommuneUtils.getGeneralRepairStructures( this.communeManager.room, ) const repairTargets = generalRepairStructures.filter( @@ -572,9 +572,9 @@ export class SpawnRequestsManager { // Get ramparts below their max hits - const repairRamparts = communeUtils - .getRampartRepairTargets(this.communeManager.room) - .filter(rampart => rampart.hits < this.communeManager.room.communeManager.minRampartHits) + const repairRamparts = CommuneUtils.getRampartRepairTargets( + this.communeManager.room, + ).filter(rampart => rampart.hits < this.communeManager.room.communeManager.minRampartHits) // If there are no ramparts or repair targets @@ -902,7 +902,7 @@ export class SpawnRequestsManager { ) { return false } - partsMultiplier = communeUtils.getDesiredUpgraderStrength(this.communeManager.room) + partsMultiplier = CommuneUtils.getDesiredUpgraderStrength(this.communeManager.room) } // Otherwise if there is no storing structure @@ -912,7 +912,7 @@ export class SpawnRequestsManager { partsMultiplier = Math.min( partsMultiplier, - communeUtils.getMaxUpgradeStrength(this.communeManager.room), + CommuneUtils.getMaxUpgradeStrength(this.communeManager.room), ) if (partsMultiplier <= 0) return false diff --git a/src/room/commune/spawning/spawningStructureProcs.ts b/src/room/commune/spawning/spawningStructureProcs.ts index 59ea14b60..0c3d7fc68 100644 --- a/src/room/commune/spawning/spawningStructureProcs.ts +++ b/src/room/commune/spawning/spawningStructureProcs.ts @@ -18,7 +18,7 @@ import { SpawnRequest, BodyPartCounts, SpawnRequestTypes } from 'types/spawnRequ import { customLog, LogTypes } from 'utils/logging' import { getRange, findAdjacentCoordsToCoord, Utils } from 'utils/utils' import { SpawnRequestConstructor, SpawnRequestConstructors } from './spawnRequestConstructors' -import { communeUtils } from '../communeUtils' +import { CommuneUtils } from '../communeUtils' export class SpawningStructureProcs { public static tryRunSpawning(room: Room) { @@ -28,7 +28,7 @@ export class SpawningStructureProcs { this.test(room) // There are no spawns that we can spawn with (they are probably spawning something) - const organizedSpawns = communeUtils.getOrganizedSpawns(room, spawns) + const organizedSpawns = CommuneUtils.getOrganizedSpawns(room, spawns) if (!organizedSpawns) return this.registerSpawningCreeps(room, organizedSpawns.activeSpawns) @@ -179,7 +179,10 @@ export class SpawningStructureProcs { return Result.success } - private static findSpawnIndexForSpawnRequest(inactiveSpawns: StructureSpawn[], request: SpawnRequest) { + private static findSpawnIndexForSpawnRequest( + inactiveSpawns: StructureSpawn[], + request: SpawnRequest, + ) { if (request.spawnTarget) { const [score, index] = Utils.findIndexWithLowestScore(inactiveSpawns, spawn => { return getRange(spawn.pos, request.spawnTarget) @@ -294,7 +297,7 @@ export class SpawningStructureProcs { // There is a vivid benefit to powering spawns - const organizedSpawns = communeUtils.getOrganizedSpawns(room) + const organizedSpawns = CommuneUtils.getOrganizedSpawns(room) // We need spawns if we want to power them if (!organizedSpawns) return // Make sure there are no inactive spawns @@ -351,7 +354,7 @@ export class SpawningStructureProcs { private static testRequests() {} static tryRegisterSpawningMovement(room: Room) { - const organizedSpawns = communeUtils.getOrganizedSpawns(room) + const organizedSpawns = CommuneUtils.getOrganizedSpawns(room) if (!organizedSpawns) return // For every spawn spawning a creep, register their movement intentions diff --git a/src/room/commune/towerProcs.ts b/src/room/commune/towerProcs.ts index 7df5a6e6a..a839f37e3 100644 --- a/src/room/commune/towerProcs.ts +++ b/src/room/commune/towerProcs.ts @@ -11,7 +11,7 @@ import { scalePriority, Utils, } from 'utils/utils' -import { communeUtils } from './communeUtils' +import { CommuneUtils } from './communeUtils' import { TowerUtils } from './towerUtils' export class TowerProcs { diff --git a/src/room/commune/towerUtils.ts b/src/room/commune/towerUtils.ts index a1602ad35..379324a95 100644 --- a/src/room/commune/towerUtils.ts +++ b/src/room/commune/towerUtils.ts @@ -1,7 +1,7 @@ import { towerPowers } from "international/constants" import { findWithLowestScore, getRange } from 'utils/utils' import { CommuneDataProcs, communeData } from './communeData' -import { communeUtils } from './communeUtils' +import { CommuneUtils } from './communeUtils' import { packCoord } from 'other/codec' const minTowerRampartRepairTreshold = RAMPART_DECAY_AMOUNT * 1.5 @@ -82,7 +82,7 @@ export class TowerUtils { static findRampartRepairTarget(room: Room) { const ramparts = room.roomManager.enemyAttackers.length ? room.communeManager.defensiveRamparts - : communeUtils.getRampartRepairTargets(room) + : CommuneUtils.getRampartRepairTargets(room) const [score, rampart] = findWithLowestScore(ramparts, rampart => { let score = rampart.hits diff --git a/src/room/creeps/creepProcs.ts b/src/room/creeps/creepProcs.ts index ae33cf8e3..c43f6cfbe 100644 --- a/src/room/creeps/creepProcs.ts +++ b/src/room/creeps/creepProcs.ts @@ -17,7 +17,7 @@ import { offsetsByDirection, } from 'international/constants' import { CreepUtils } from './creepUtils' -import { communeUtils } from 'room/commune/communeUtils' +import { CommuneUtils } from 'room/commune/communeUtils' import { CreepLogisticsRequest, FindNewRoomLogisticsRequestArgs, @@ -389,7 +389,7 @@ export class CreepProcs { const workPartCount = MyCreepUtils.parts(creep).work // At some point we should compare this search with flat searching positions around the creep - const structure = communeUtils.getGeneralRepairStructures(creep.room).find(structure => { + const structure = CommuneUtils.getGeneralRepairStructures(creep.room).find(structure => { return ( getRange(structure.pos, creep.pos) <= 3 && structure.hitsMax - structure.hits >= workPartCount * REPAIR_POWER diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index 01237a20a..354604d3d 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -21,7 +21,7 @@ import { CreepUtils } from '../creepUtils' import { RoomManager } from 'room/room' import { RoomLogisticsRequest } from 'types/roomRequests' import { CustomPathFinder } from 'international/customPathFinder' -import { communeUtils } from 'room/commune/communeUtils' +import { CommuneUtils } from 'room/commune/communeUtils' import { MyCreepUtils } from '../myCreepUtils' import { StructureUtils } from 'room/structureUtils' import { CreepProcs } from '../creepProcs' diff --git a/src/room/creeps/creepUtils.ts b/src/room/creeps/creepUtils.ts index cbec08dd7..3ff32c871 100644 --- a/src/room/creeps/creepUtils.ts +++ b/src/room/creeps/creepUtils.ts @@ -20,7 +20,7 @@ import { packCoord, unpackCoordAsPos, unpackPosAt } from 'other/codec' import { RoomManager } from 'room/room' import { CollectiveManager } from 'international/collective' import { creepClasses } from './creepClasses' -import { communeUtils } from 'room/commune/communeUtils' +import { CommuneUtils } from 'room/commune/communeUtils' import { MyCreepUtils } from './myCreepUtils' import { CreepLogisticsRequest, @@ -582,7 +582,7 @@ export class CreepUtils { static findNewRampartRepairTarget(creep: Creep) { const ramparts = creep.room.roomManager.enemyAttackers.length ? creep.room.communeManager.defensiveRamparts - : communeUtils.getRampartRepairTargets(creep.room) + : CommuneUtils.getRampartRepairTargets(creep.room) const [score, bestTarget] = findWithLowestScore(ramparts, structure => { if (structure.nextHits / structure.hitsMax > 0.9) return false @@ -604,7 +604,7 @@ export class CreepUtils { let lowestScore = Infinity let bestTarget - const structures = communeUtils.getGeneralRepairStructures(creep.room) + const structures = CommuneUtils.getGeneralRepairStructures(creep.room) for (const structure of structures) { // If above 30% of max hits diff --git a/src/room/creeps/endTickCreepManager.ts b/src/room/creeps/endTickCreepManager.ts index f570190f5..971dc1c80 100644 --- a/src/room/creeps/endTickCreepManager.ts +++ b/src/room/creeps/endTickCreepManager.ts @@ -12,7 +12,7 @@ import { customLog } from 'utils/logging' import { forCoordsInRange, randomOf, randomRange, randomTick } from 'utils/utils' import { RoomManager } from '../room' import { packCoord, unpackCoord } from 'other/codec' -import { communeUtils } from 'room/commune/communeUtils' +import { CommuneUtils } from 'room/commune/communeUtils' export class EndTickCreepManager { roomManager: RoomManager From 2d095eaeeda2c60e022b007760126422d2a3b73f Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 23 Jan 2024 15:32:32 -0800 Subject: [PATCH 106/190] minor lab code improvements --- src/room/commune/labs.ts | 1365 ++++++++++++++++---------------------- 1 file changed, 569 insertions(+), 796 deletions(-) diff --git a/src/room/commune/labs.ts b/src/room/commune/labs.ts index b206663ad..301208451 100644 --- a/src/room/commune/labs.ts +++ b/src/room/commune/labs.ts @@ -6,949 +6,722 @@ import { findObjectWithID, getRange, randomTick, scalePriority } from 'utils/uti const reactionCycleAmount = 5000 const reverseReactions: { - [key in MineralCompoundConstant]?: (MineralConstant | MineralCompoundConstant)[] + [key in MineralCompoundConstant]?: (MineralConstant | MineralCompoundConstant)[] } = { - G: ['ZK', 'UL'], - - ZK: ['Z', 'K'], - UL: ['U', 'L'], - OH: ['H', 'O'], - LH: ['L', 'H'], - LO: ['L', 'O'], - KO: ['K', 'O'], - KH: ['K', 'H'], - GH: ['G', 'H'], - GO: ['G', 'O'], - UO: ['U', 'O'], - UH: ['U', 'H'], - ZH: ['Z', 'H'], - ZO: ['Z', 'O'], - - LH2O: ['LH', 'OH'], - LHO2: ['LO', 'OH'], - GH2O: ['GH', 'OH'], - GHO2: ['GO', 'OH'], - KHO2: ['KO', 'OH'], - KH2O: ['KH', 'OH'], - UH2O: ['UH', 'OH'], - UHO2: ['UO', 'OH'], - ZH2O: ['ZH', 'OH'], - ZHO2: ['ZO', 'OH'], - - XLH2O: ['X', 'LH2O'], - XLHO2: ['X', 'LHO2'], - XGH2O: ['X', 'GH2O'], - XGHO2: ['X', 'GHO2'], - XKHO2: ['X', 'KHO2'], - XKH2O: ['X', 'KH2O'], - XUH2O: ['X', 'UH2O'], - XUHO2: ['X', 'UHO2'], - XZH2O: ['X', 'ZH2O'], - XZHO2: ['X', 'ZHO2'], + G: ['ZK', 'UL'], + + ZK: ['Z', 'K'], + UL: ['U', 'L'], + OH: ['H', 'O'], + LH: ['L', 'H'], + LO: ['L', 'O'], + KO: ['K', 'O'], + KH: ['K', 'H'], + GH: ['G', 'H'], + GO: ['G', 'O'], + UO: ['U', 'O'], + UH: ['U', 'H'], + ZH: ['Z', 'H'], + ZO: ['Z', 'O'], + + LH2O: ['LH', 'OH'], + LHO2: ['LO', 'OH'], + GH2O: ['GH', 'OH'], + GHO2: ['GO', 'OH'], + KHO2: ['KO', 'OH'], + KH2O: ['KH', 'OH'], + UH2O: ['UH', 'OH'], + UHO2: ['UO', 'OH'], + ZH2O: ['ZH', 'OH'], + ZHO2: ['ZO', 'OH'], + + XLH2O: ['X', 'LH2O'], + XLHO2: ['X', 'LHO2'], + XGH2O: ['X', 'GH2O'], + XGHO2: ['X', 'GHO2'], + XKHO2: ['X', 'KHO2'], + XKH2O: ['X', 'KH2O'], + XUH2O: ['X', 'UH2O'], + XUHO2: ['X', 'UHO2'], + XZH2O: ['X', 'ZH2O'], + XZHO2: ['X', 'ZHO2'], } const allCompounds: (MineralConstant | MineralCompoundConstant)[] = [ - ...Object.keys(reverseReactions), - ...minerals, + ...Object.keys(reverseReactions), + ...minerals, ] as (MineralConstant | MineralCompoundConstant)[] function decompose( - compound: MineralConstant | MineralCompoundConstant, + compound: MineralConstant | MineralCompoundConstant, ): (MineralConstant | MineralCompoundConstant)[] { - return reverseReactions[compound as MineralCompoundConstant] + return reverseReactions[compound as MineralCompoundConstant] } const boostsInOrder: MineralBoostConstant[] = [ - // fatigue decrease speed + // fatigue decrease speed - RESOURCE_CATALYZED_ZYNTHIUM_ALKALIDE, - RESOURCE_ZYNTHIUM_ALKALIDE, - RESOURCE_ZYNTHIUM_OXIDE, + RESOURCE_CATALYZED_ZYNTHIUM_ALKALIDE, + RESOURCE_ZYNTHIUM_ALKALIDE, + RESOURCE_ZYNTHIUM_OXIDE, - // defence + // defence - RESOURCE_CATALYZED_GHODIUM_ALKALIDE, - RESOURCE_GHODIUM_ALKALIDE, - RESOURCE_GHODIUM_OXIDE, + RESOURCE_CATALYZED_GHODIUM_ALKALIDE, + RESOURCE_GHODIUM_ALKALIDE, + RESOURCE_GHODIUM_OXIDE, - // heal and rangedHeal effectiveness + // heal and rangedHeal effectiveness - RESOURCE_CATALYZED_LEMERGIUM_ALKALIDE, - RESOURCE_LEMERGIUM_ALKALIDE, - RESOURCE_LEMERGIUM_OXIDE, + RESOURCE_CATALYZED_LEMERGIUM_ALKALIDE, + RESOURCE_LEMERGIUM_ALKALIDE, + RESOURCE_LEMERGIUM_OXIDE, - // attack effectiveness + // attack effectiveness - RESOURCE_CATALYZED_UTRIUM_ACID, - RESOURCE_UTRIUM_ACID, - RESOURCE_UTRIUM_HYDRIDE, + RESOURCE_CATALYZED_UTRIUM_ACID, + RESOURCE_UTRIUM_ACID, + RESOURCE_UTRIUM_HYDRIDE, - // rangedAttack and rangedMassAttack effectiveness + // rangedAttack and rangedMassAttack effectiveness - RESOURCE_CATALYZED_KEANIUM_ALKALIDE, - RESOURCE_KEANIUM_ALKALIDE, - RESOURCE_KEANIUM_OXIDE, + RESOURCE_CATALYZED_KEANIUM_ALKALIDE, + RESOURCE_KEANIUM_ALKALIDE, + RESOURCE_KEANIUM_OXIDE, - // dismantle effectiveness + // dismantle effectiveness - RESOURCE_CATALYZED_ZYNTHIUM_ACID, - RESOURCE_ZYNTHIUM_ACID, - RESOURCE_ZYNTHIUM_HYDRIDE, + RESOURCE_CATALYZED_ZYNTHIUM_ACID, + RESOURCE_ZYNTHIUM_ACID, + RESOURCE_ZYNTHIUM_HYDRIDE, - // upgradeController effectiveness + // upgradeController effectiveness - RESOURCE_CATALYZED_GHODIUM_ACID, - RESOURCE_GHODIUM_ACID, - RESOURCE_GHODIUM_HYDRIDE, + RESOURCE_CATALYZED_GHODIUM_ACID, + RESOURCE_GHODIUM_ACID, + RESOURCE_GHODIUM_HYDRIDE, - // capacity + // capacity - RESOURCE_CATALYZED_KEANIUM_ACID, - RESOURCE_KEANIUM_ACID, - RESOURCE_KEANIUM_HYDRIDE, + RESOURCE_CATALYZED_KEANIUM_ACID, + RESOURCE_KEANIUM_ACID, + RESOURCE_KEANIUM_HYDRIDE, - // repair and build effectiveness + // repair and build effectiveness - RESOURCE_CATALYZED_LEMERGIUM_ACID, - RESOURCE_LEMERGIUM_ACID, - RESOURCE_LEMERGIUM_HYDRIDE, + RESOURCE_CATALYZED_LEMERGIUM_ACID, + RESOURCE_LEMERGIUM_ACID, + RESOURCE_LEMERGIUM_HYDRIDE, - // harvest effectiveness + // harvest effectiveness - RESOURCE_CATALYZED_UTRIUM_ALKALIDE, - RESOURCE_UTRIUM_ALKALIDE, - RESOURCE_UTRIUM_OXIDE, + RESOURCE_CATALYZED_UTRIUM_ALKALIDE, + RESOURCE_UTRIUM_ALKALIDE, + RESOURCE_UTRIUM_OXIDE, ] export class LabManager { - targetCompounds: { [key in MineralConstant | MineralCompoundConstant]?: number } = { - KH: 15000, - G: 10000, - [RESOURCE_CATALYZED_UTRIUM_ACID]: 10000, - [RESOURCE_CATALYZED_LEMERGIUM_ALKALIDE]: 10000, - [RESOURCE_CATALYZED_KEANIUM_ALKALIDE]: 10000, - [RESOURCE_CATALYZED_ZYNTHIUM_ALKALIDE]: 10000, - [RESOURCE_CATALYZED_LEMERGIUM_ACID]: 10000, - [RESOURCE_CATALYZED_GHODIUM_ALKALIDE]: 10000, - [RESOURCE_CATALYZED_ZYNTHIUM_ACID]: 10000, - [RESOURCE_CATALYZED_GHODIUM_ACID]: 10000, - } + targetCompounds: { [key in MineralConstant | MineralCompoundConstant]?: number } = { + KH: 15000, + G: 10000, + [RESOURCE_CATALYZED_UTRIUM_ACID]: 10000, + [RESOURCE_CATALYZED_LEMERGIUM_ALKALIDE]: 10000, + [RESOURCE_CATALYZED_KEANIUM_ALKALIDE]: 10000, + [RESOURCE_CATALYZED_ZYNTHIUM_ALKALIDE]: 10000, + [RESOURCE_CATALYZED_LEMERGIUM_ACID]: 10000, + [RESOURCE_CATALYZED_GHODIUM_ALKALIDE]: 10000, + [RESOURCE_CATALYZED_ZYNTHIUM_ACID]: 10000, + [RESOURCE_CATALYZED_GHODIUM_ACID]: 10000, + } - communeManager: CommuneManager - outputResource: MineralConstant | MineralCompoundConstant - inputResources: (MineralConstant | MineralCompoundConstant)[] = [] - isReverse: boolean - targetAmount: number - inputLab1: StructureLab - inputLab2: StructureLab - private requestedBoosts: MineralBoostConstant[] = [] - private labsByBoost: { [key in MineralBoostConstant]?: Id } - - constructor(communeManager: CommuneManager) { - this.communeManager = communeManager - } + communeManager: CommuneManager + outputResource: MineralConstant | MineralCompoundConstant + inputResources: (MineralConstant | MineralCompoundConstant)[] = [] + isReverse: boolean + targetAmount: number + inputLab1: StructureLab + inputLab2: StructureLab + private requestedBoosts: MineralBoostConstant[] = [] + private labsByBoost: { [key in MineralBoostConstant]?: Id } - /** - * Boost stuff - */ - preTickRun() {} + constructor(communeManager: CommuneManager) { + this.communeManager = communeManager + } - inputLabIDs: Id[] + /** + * Boost stuff + */ + preTickRun() {} - _inputLabs: StructureLab[] + inputLabIDs: Id[] - /** - * Finds the input labs we need to opperate production - */ - public get inputLabs() { - if (this._inputLabs) return this._inputLabs + _inputLabs: StructureLab[] - this._inputLabs = [] + /** + * Finds the input labs we need to opperate production + */ + public get inputLabs() { + if (this._inputLabs) return this._inputLabs - // We need at least 3 labs to opperate + this._inputLabs = [] - const labs = this.communeManager.room.roomManager.structures.lab - if (labs.length < 3) return this._inputLabs + // We need at least 3 labs to opperate - // We need a storage or terminal + const labs = this.communeManager.room.roomManager.structures.lab + if (labs.length < 3) return this._inputLabs - const storingStructure = - this.communeManager.room.terminal || this.communeManager.room.storage - if (!storingStructure) return this._inputLabs + // We need a storage or terminal - // Try to use cached lab IDs if valid + const storingStructure = this.communeManager.room.terminal || this.communeManager.room.storage + if (!storingStructure) return this._inputLabs - if (this.inputLabIDs && this.inputLabIDs.length >= 2) { - if (this.unpackLabIDsByType()) return this._inputLabs + // Try to use cached lab IDs if valid - // Reset labs in case any were added + if (this.inputLabIDs && this.inputLabIDs.length >= 2) { + if (this.unpackLabIDsByType()) return this._inputLabs - this._inputLabs = [] - } + // Reset labs in case any were added - // Reset lab IDs + this._inputLabs = [] + } - this.inputLabIDs = [] + // Reset lab IDs - // Prefer labs closer to the hub to be inputs + this.inputLabIDs = [] - labs.sort((a, b) => { - return getRange(a.pos, storingStructure.pos) - getRange(b.pos, storingStructure.pos) - }) + // Prefer labs closer to the hub to be inputs - for (const lab of labs) { - // We have enough inputs + labs.sort((a, b) => { + return getRange(a.pos, storingStructure.pos) - getRange(b.pos, storingStructure.pos) + }) - if (this._inputLabs.length >= 2) break + for (const lab of labs) { + // We have enough inputs - // Tzhe lab isn't in range of all labs + if (this._inputLabs.length >= 2) break - if (labs.filter(otherLab => getRange(lab.pos, otherLab.pos) <= 2).length < labs.length) - continue + // Tzhe lab isn't in range of all labs - // Make the lab an input + if (labs.filter(otherLab => getRange(lab.pos, otherLab.pos) <= 2).length < labs.length) + continue - this._inputLabs.push(lab) - this.inputLabIDs.push(lab.id) - } + // Make the lab an input - return this._inputLabs + this._inputLabs.push(lab) + this.inputLabIDs.push(lab.id) } - private unpackLabIDsByType() { - for (const ID of this.inputLabIDs) { - const lab = findObjectWithID(ID) - if (!lab) return false + return this._inputLabs + } - this._inputLabs.push(lab) - } + private unpackLabIDsByType() { + for (const ID of this.inputLabIDs) { + const lab = findObjectWithID(ID) + if (!lab) return false - return true + this._inputLabs.push(lab) } - _outputLabs: StructureLab[] + return true + } - public get outputLabs() { - if (this._outputLabs) return this._outputLabs + _outputLabs: StructureLab[] - let boostingLabs = Object.values(this.labsByBoost || {}) + public get outputLabs() { + if (this._outputLabs) return this._outputLabs - return (this._outputLabs = this.communeManager.room.roomManager.structures.lab.filter( - lab => !this.inputLabIDs.includes(lab.id) && !boostingLabs.includes(lab.id), - )) - } + let boostingLabs = Object.values(this.labsByBoost || {}) - run() { - if (!this.communeManager.room.storage) return - if (!this.communeManager.room.terminal) return + return (this._outputLabs = this.communeManager.room.roomManager.structures.lab.filter( + lab => !this.inputLabIDs.includes(lab.id) && !boostingLabs.includes(lab.id), + )) + } - delete this._inputLabs - delete this._outputLabs - this.inputLab1 = this.inputLabs[0] - this.inputLab2 = this.inputLabs[1] + run() { + if (!this.communeManager.room.storage) return + if (!this.communeManager.room.terminal) return - this.assignBoosts() - this.manageReactions() - } + delete this._inputLabs + delete this._outputLabs + this.inputLab1 = this.inputLabs[0] + this.inputLab2 = this.inputLabs[1] - //This is much like demand boost, but will return false if we don't have it, it can't be applied, etc. - public acceptBoost(creep: Creep, boost: MineralBoostConstant): boolean { - if (creep.ticksToLive < CREEP_LIFE_TIME - 100) return false + this.assignBoosts() + this.manageReactions() + } - if (creep.boosts[boost] > 0) return false + //This is much like demand boost, but will return false if we don't have it, it can't be applied, etc. + public acceptBoost(creep: Creep, boost: MineralBoostConstant): boolean { + if (creep.ticksToLive < CREEP_LIFE_TIME - 100) return false - const labId = this.labsByBoost[boost] - if (!labId) return false + if (creep.boosts[boost] > 0) return false - const lab = this.communeManager.room.roomManager.structures.lab.find(lab => lab.id == labId) + const labId = this.labsByBoost[boost] + if (!labId) return false - //See if the lab is ready to boost... - if (lab.mineralType != boost) return false + const lab = this.communeManager.room.roomManager.structures.lab.find(lab => lab.id == labId) - if ( - lab.mineralAmount < LAB_BOOST_MINERAL || - lab.store.getUsedCapacity(RESOURCE_ENERGY) < LAB_BOOST_ENERGY - ) - return false - - //This needs to see if the lab is fully ready to boost the creep. This will work - // even if it partially boosts the creep. - let result = lab.boostCreep(creep) - - if (result == OK) return false - - if (result == ERR_NOT_IN_RANGE) { - creep.createMoveRequest({ - origin: creep.pos, - goals: [ - { - pos: lab.pos, - range: 1, - }, - ], - avoidEnemyRanges: true, - }) - } else { - creep.message += 'BE' + result - } + //See if the lab is ready to boost... + if (lab.mineralType != boost) return false - return true - } + if ( + lab.mineralAmount < LAB_BOOST_MINERAL || + lab.store.getUsedCapacity(RESOURCE_ENERGY) < LAB_BOOST_ENERGY + ) + return false - public demandBoost(creep: Creep, boost: MineralBoostConstant): boolean { - if (creep.ticksToLive < CREEP_LIFE_TIME - 100) return false + //This needs to see if the lab is fully ready to boost the creep. This will work + // even if it partially boosts the creep. + let result = lab.boostCreep(creep) - if (creep.boosts[boost] > 0) return false + if (result == OK) return false - const labId = this.labsByBoost[boost] - if (!labId) return true + if (result == ERR_NOT_IN_RANGE) { + creep.createMoveRequest({ + origin: creep.pos, + goals: [ + { + pos: lab.pos, + range: 1, + }, + ], + avoidEnemyRanges: true, + }) + } else { + creep.message += 'BE' + result + } - const lab = this.communeManager.room.roomManager.structures.lab.find(lab => lab.id == labId) + return true + } - //See if the lab is ready to boost... - if (lab.mineralType != boost) return true + public demandBoost(creep: Creep, boost: MineralBoostConstant): boolean { + if (creep.ticksToLive < CREEP_LIFE_TIME - 100) return false - //This needs to see if the lab is fully ready to boost the creep. This will work - // even if it partially boosts the creep. - let result = lab.boostCreep(creep) + if (creep.boosts[boost] > 0) return false - if (result == OK) return false + const labId = this.labsByBoost[boost] + if (!labId) return true - if (result == ERR_NOT_IN_RANGE) { - creep.createMoveRequest({ - origin: creep.pos, - goals: [ - { - pos: lab.pos, - range: 1, - }, - ], - avoidEnemyRanges: true, - }) - } else { - creep.message += 'BE' + result - } + const lab = this.communeManager.room.roomManager.structures.lab.find(lab => lab.id == labId) - return true - } + //See if the lab is ready to boost... + if (lab.mineralType != boost) return true - private manageReactions() { - if (this.inputLabs.length < 2) return - if (!this.outputLabs.length) return + //This needs to see if the lab is fully ready to boost the creep. This will work + // even if it partially boosts the creep. + let result = lab.boostCreep(creep) - if (randomTick(100)) delete this._deficits - this.setCurrentReaction() - this.createRoomLogisticsRequests() + if (result == OK) return false - if (!this.outputResource) return - - this.runReactions() + if (result == ERR_NOT_IN_RANGE) { + creep.createMoveRequest({ + origin: creep.pos, + goals: [ + { + pos: lab.pos, + range: 1, + }, + ], + avoidEnemyRanges: true, + }) + } else { + creep.message += 'BE' + result } - private canReact() { - if (this.outputLabs[0].cooldown) return false + return true + } - const inputLabs = this.inputLabs - for (let i = 0; i < inputLabs.length; i++) { - const lab = inputLabs[i] + private manageReactions() { + if (this.inputLabs.length < 2) return + if (!this.outputLabs.length) return - if (lab.mineralType !== this.inputResources[i]) return false - } + if (randomTick(100)) delete this._deficits + this.setCurrentReaction() + this.createRoomLogisticsRequests() - return true - } + if (!this.outputResource) return - private runReactions() { - if (!this.canReact()) return false - - for (const output of this.outputLabs) { - if (this.isReverse) { - if ( - output.mineralType == this.outputResource && - output.store[this.outputResource] >= LAB_REACTION_AMOUNT - ) - output.reverseReaction(this.inputLab1, this.inputLab2) //Reverse is here so the outputLabs line up with the expected locations - } else { - output.runReaction(this.inputLab1, this.inputLab2) - } - } + this.runReactions() + } - return true - } + private canReact() { + if (this.outputLabs[0].cooldown) return false - assignBoosts() { - this.labsByBoost = {} - for (let compund of boostsInOrder) { - if (this.requestedBoosts.includes(compund)) { - // Input labs can act as boosting labs too - - if (this.inputResources[0] === compund) { - this.labsByBoost[compund] = this.inputLabs[0].id - continue - } - if (this.inputResources[1] === compund) { - this.labsByBoost[compund] = this.inputLabs[1].id - continue - } - - // Otherwise grab a lab that's not the input labs, and not a boosting lab - - let boostingLabs = Object.values(this.labsByBoost) - let freelabs = this.communeManager.room.roomManager.structures.lab.filter( - lab => !this.inputLabIDs.includes(lab.id) && !boostingLabs.includes(lab.id), - ) - - if ( - freelabs.length == 0 && - this.inputLabIDs[1] && - !boostingLabs.includes(this.inputLabIDs[1]) - ) { - freelabs = [this.inputLab1] - } - - if ( - freelabs.length == 0 && - this.inputLabIDs[1] && - !boostingLabs.includes(this.inputLabIDs[1]) - ) { - freelabs = [this.inputLab2] - } - - if (freelabs.length > 0) { - //If there's a free lab that already has the correct compound, that'll be our boosting lab. - let pickedLab = freelabs.find(lab => lab.mineralType == compund) - if (!pickedLab) pickedLab = freelabs[0] - - this.labsByBoost[compund] = pickedLab.id - } else { - //We needed a free lab, and couldn't find one. Give up on assigning additional boosts. - return - } - } - } - } + const inputLabs = this.inputLabs + for (let i = 0; i < inputLabs.length; i++) { + const lab = inputLabs[i] - get reactionAmountRemaining() { - if (this.isReverse) { - return this.resourceAmount(this.outputResource) - this.targetAmount - } else { - let minMaterial = _.min( - _.map(decompose(this.outputResource), comp => this.resourceAmount(comp)), - ) - return Math.min( - minMaterial, - this.targetAmount - this.resourceAmount(this.outputResource), - ) - } + if (lab.mineralType !== this.inputResources[i]) return false } - inputFull(inputLab: StructureLab) { - if (!inputLab) return false - if (!inputLab.mineralType) return false - return ( - inputLab.store.getFreeCapacity(inputLab.mineralType) === 0 && - inputLab.store.getUsedCapacity(inputLab.mineralType) >= this.reactionAmountRemaining + return true + } + + private runReactions() { + if (!this.canReact()) return false + + for (const output of this.outputLabs) { + if (this.isReverse) { + if ( + output.mineralType == this.outputResource && + output.store[this.outputResource] >= LAB_REACTION_AMOUNT ) + output.reverseReaction(this.inputLab1, this.inputLab2) //Reverse is here so the outputLabs line up with the expected locations + } else { + output.runReaction(this.inputLab1, this.inputLab2) + } } - chainDecompose(compound: MineralConstant | MineralCompoundConstant, amount: number) { - this.deficits[compound] = amount + (this.deficits[compound] || 0) - amount = Math.min(amount, this.deficits[compound]) - amount = Math.max(amount, 0) + return true + } - let decomps = decompose(compound) + assignBoosts() { + this.labsByBoost = {} + for (let compund of boostsInOrder) { + if (this.requestedBoosts.includes(compund)) { + // Input labs can act as boosting labs too - for (var c in decomps) { - this.chainDecompose(decomps[c], amount) - } - } - - _deficits: { [key in MineralConstant | MineralCompoundConstant]?: number } - /** - * Figures out what we have - */ - get deficits() { - if (this._deficits) return this._deficits - - this._deficits = {} - for (const key of allCompounds) { - this._deficits[key as MineralConstant | MineralCompoundConstant] = -this.resourceAmount( - key as MineralConstant | MineralCompoundConstant, - ) - } - for (const compound in this.targetCompounds) { - var amount = Math.max( - 0, - this.targetCompounds[compound as MineralConstant | MineralCompoundConstant], - ) // this.communeManager.roomai.trading.maxStorageAmount(compound)) - /* console.log('updateDeficits ' + this.communeManager.room.name + ': ' + compound + ', ' + amount) */ - this.chainDecompose(compound as MineralConstant | MineralCompoundConstant, amount) + if (this.inputResources[0] === compund) { + this.labsByBoost[compund] = this.inputLabs[0].id + continue } - - for (const key in this._deficits) { - Math.max(this._deficits[key as MineralConstant | MineralCompoundConstant], 0) + if (this.inputResources[1] === compund) { + this.labsByBoost[compund] = this.inputLabs[1].id + continue } - return this._deficits - } - - /** - * Assigns input resources based on the output, alongside reaction settings - */ - private assignReaction( - outputResource: MineralCompoundConstant, - targetAmount: number, - reverse: boolean, - ) { - this.outputResource = outputResource - - this.inputResources[0] = reverseReactions[outputResource][0] - this.inputResources[1] = reverseReactions[outputResource][1] - - this.isReverse = reverse - this.targetAmount = targetAmount - } - - assignNoReaction() { - this.outputResource = null - this.inputResources[0] = null - this.inputResources[1] = null - this.targetAmount = 0 - } - - snoozeUntil: number - replanAt: number - - private setCurrentReaction() { - if (this.snoozeUntil && this.snoozeUntil > Game.time) return - if (!this.isCurrentReactionFinished() && this.replanAt > Game.time) return - - const nextReaction = this.findNextReaction() - - // was... But I kept getting negative values in the targetAmount. I think I jusut need to get to the cycleAmount instead. - // Even then, that doesn't seem quite right. Maybe it's correct for intermediates, but not for the end products. - // The second argtument is what amount level will cause the reactor to stop. - /* this.assignReaction(nextReaction, reactionCycleAmount - this.resourceAmount(nextReaction)); */ - - if (nextReaction) { - this.assignReaction( - nextReaction.type, - this.resourceAmount(nextReaction.type) + - Math.min(reactionCycleAmount, nextReaction.amount), - false, - ) + // Otherwise grab a lab that's not the input labs, and not a boosting lab - // Prevents continious reactions that take a long time, like breaking down 10000's of a compound + let boostingLabs = Object.values(this.labsByBoost) + let freelabs = this.communeManager.room.roomManager.structures.lab.filter( + lab => !this.inputLabIDs.includes(lab.id) && !boostingLabs.includes(lab.id), + ) - this.replanAt = Game.time + 3000 - return + if ( + freelabs.length == 0 && + this.inputLabIDs[1] && + !boostingLabs.includes(this.inputLabIDs[1]) + ) { + freelabs = [this.inputLab1] } - this.assignNoReaction() - this.snoozeUntil = Game.time + 30 - } + if ( + freelabs.length == 0 && + this.inputLabIDs[1] && + !boostingLabs.includes(this.inputLabIDs[1]) + ) { + freelabs = [this.inputLab2] + } - private isCurrentReactionFinished(): boolean { - if (!this.outputResource) return true + if (freelabs.length > 0) { + //If there's a free lab that already has the correct compound, that'll be our boosting lab. + let pickedLab = freelabs.find(lab => lab.mineralType == compund) + if (!pickedLab) pickedLab = freelabs[0] - if (this.isReverse) { - if (this.resourceAmount(this.outputResource) <= this.targetAmount) return true - return false + this.labsByBoost[compund] = pickedLab.id + } else { + //We needed a free lab, and couldn't find one. Give up on assigning additional boosts. + return } + } + } + } + + get reactionAmountRemaining() { + if (this.isReverse) { + return this.resourceAmount(this.outputResource) - this.targetAmount + } else { + let minMaterial = _.min( + _.map(decompose(this.outputResource), comp => this.resourceAmount(comp)), + ) + return Math.min(minMaterial, this.targetAmount - this.resourceAmount(this.outputResource)) + } + } + + inputFull(inputLab: StructureLab) { + if (!inputLab) return false + if (!inputLab.mineralType) return false + return ( + inputLab.store.getFreeCapacity(inputLab.mineralType) === 0 && + inputLab.store.getUsedCapacity(inputLab.mineralType) >= this.reactionAmountRemaining + ) + } + + chainDecompose(compound: MineralConstant | MineralCompoundConstant, amount: number) { + this.deficits[compound] = amount + (this.deficits[compound] || 0) + amount = Math.min(amount, this.deficits[compound]) + amount = Math.max(amount, 0) + + let decomps = decompose(compound) + + for (var c in decomps) { + this.chainDecompose(decomps[c], amount) + } + } + + _deficits: { [key in MineralConstant | MineralCompoundConstant]?: number } + /** + * Figures out what we have + */ + get deficits() { + if (this._deficits) return this._deficits + + this._deficits = {} + for (const key of allCompounds) { + this._deficits[key as MineralConstant | MineralCompoundConstant] = -this.resourceAmount( + key as MineralConstant | MineralCompoundConstant, + ) + } + for (const compound in this.targetCompounds) { + var amount = Math.max( + 0, + this.targetCompounds[compound as MineralConstant | MineralCompoundConstant], + ) // this.communeManager.roomai.trading.maxStorageAmount(compound)) + /* console.log('updateDeficits ' + this.communeManager.room.name + ': ' + compound + ', ' + amount) */ + this.chainDecompose(compound as MineralConstant | MineralCompoundConstant, amount) + } - if ( - _.any(decompose(this.outputResource), r => this.resourceAmount(r) < LAB_REACTION_AMOUNT) - ) - return true - return this.resourceAmount(this.outputResource) >= this.targetAmount + for (const key in this._deficits) { + Math.max(this._deficits[key as MineralConstant | MineralCompoundConstant], 0) } - private chainFindNextReaction( - target: MineralConstant | MineralCompoundConstant, - targetAmount: number, - ): { type: MineralCompoundConstant; amount: number } { - const nextReaction = target - let missing = decompose(nextReaction).filter( - r => this.resourceAmount(r) < targetAmount * (0.25 + 0.05 * this.outputLabs.length), - ) + return this._deficits + } + + /** + * Assigns input resources based on the output, alongside reaction settings + */ + private assignReaction( + outputResource: MineralCompoundConstant, + targetAmount: number, + reverse: boolean, + ) { + this.outputResource = outputResource + + this.inputResources[0] = reverseReactions[outputResource][0] + this.inputResources[1] = reverseReactions[outputResource][1] + + this.isReverse = reverse + this.targetAmount = targetAmount + } + + assignNoReaction() { + this.outputResource = null + this.inputResources[0] = null + this.inputResources[1] = null + this.targetAmount = 0 + } + + snoozeUntil: number + replanAt: number + + private setCurrentReaction() { + if (this.snoozeUntil && this.snoozeUntil > Game.time) return + if (!this.isCurrentReactionFinished() && this.replanAt > Game.time) return + + const nextReaction = this.findNextReaction() + if (!nextReaction) { + this.assignNoReaction() + this.snoozeUntil = Game.time + 30 + } - console.log(target + ':' + targetAmount + ' missing: ' + JSON.stringify(missing)) + // was... But I kept getting negative values in the targetAmount. I think I jusut need to get to the cycleAmount instead. + // Even then, that doesn't seem quite right. Maybe it's correct for intermediates, but not for the end products. + // The second argtument is what amount level will cause the reactor to stop. + /* this.assignReaction(nextReaction, reactionCycleAmount - this.resourceAmount(nextReaction)); */ - if (!missing.length) - return { type: target as MineralCompoundConstant, amount: targetAmount } + this.assignReaction( + nextReaction.type, + this.resourceAmount(nextReaction.type) + Math.min(reactionCycleAmount, nextReaction.amount), + false, + ) - // filter uncookable resources (e.g. H). Can't get those using reactions + // Prevents continious reactions that take a long time, like breaking down 10000's of a compound - missing = decompose(nextReaction).filter(r => this.resourceAmount(r) < targetAmount) - missing = missing.filter(r => decompose(r)) + this.replanAt = Game.time + 3000 + return + } - for (const resource of missing) { - const result = this.chainFindNextReaction( - resource, - targetAmount - this.resourceAmount(resource), - ) - if (result) return result - } + private isCurrentReactionFinished(): boolean { + if (!this.outputResource) return true - return null + if (this.isReverse) { + if (this.resourceAmount(this.outputResource) <= this.targetAmount) return true + return false } - private findNextReaction(): { type: MineralCompoundConstant; amount: number } { - const resources = _.sortBy( - Object.keys(this.targetCompounds).filter( - v => this.deficits[v as MineralConstant | MineralCompoundConstant] > 0, - ), - v => -this.deficits[v as MineralConstant | MineralCompoundConstant], - ) - console.log(this.communeManager.room.name, JSON.stringify(this.deficits)) - for (const resource of resources) { - const result = this.chainFindNextReaction( - resource as MineralConstant | MineralCompoundConstant, - this.deficits[resource as MineralConstant | MineralCompoundConstant], - ) - - if (result) return result - } + if (_.any(decompose(this.outputResource), r => this.resourceAmount(r) < LAB_REACTION_AMOUNT)) + return true + return this.resourceAmount(this.outputResource) >= this.targetAmount + } - return null - } + private chainFindNextReaction( + target: MineralConstant | MineralCompoundConstant, + targetAmount: number, + ): { type: MineralCompoundConstant; amount: number } { + const nextReaction = target + let missing = decompose(nextReaction).filter( + r => this.resourceAmount(r) < targetAmount * (0.25 + 0.05 * this.outputLabs.length), + ) - private resourceAmount(resource: MineralConstant | MineralCompoundConstant): number { - if (!resource) return 0 + console.log(target + ':' + targetAmount + ' missing: ' + JSON.stringify(missing)) - let amount = - this.communeManager.room.roomManager.resourcesInStoringStructures[resource] || 0 + if (!missing.length) { + return { type: target as MineralCompoundConstant, amount: targetAmount } + } - for (const lab of this.communeManager.room.roomManager.structures.lab) { - if (lab.mineralType !== resource) continue - amount += lab.store.getUsedCapacity(lab.mineralType) - } + // filter uncookable resources (e.g. H). Can't get those using reactions - for (const name of this.communeManager.room.myCreepsByRole.hauler) { - amount += Game.creeps[name].store.getUsedCapacity(resource) - } + missing = missing.filter(r => decompose(r)) - return amount + for (const resource of missing) { + const result = this.chainFindNextReaction( + resource, + targetAmount /* - this.resourceAmount(resource) */, + ) + if (result) return result } - private createRoomLogisticsRequests() { - this.createInputRoomLogisticsRequests() - this.createOutputRoomLogisticsRequests() - this.createBoostRoomLogisticsRequests() + return undefined + } + + private findNextReaction(): { type: MineralCompoundConstant; amount: number } { + const resources = _.sortBy( + Object.keys(this.targetCompounds).filter( + v => this.deficits[v as MineralConstant | MineralCompoundConstant] > 0, + ), + v => -this.deficits[v as MineralConstant | MineralCompoundConstant], + ) + console.log(this.communeManager.room.name, JSON.stringify(this.deficits)) + for (const resource of resources) { + const result = this.chainFindNextReaction( + resource as MineralConstant | MineralCompoundConstant, + this.deficits[resource as MineralConstant | MineralCompoundConstant], + ) + + if (result) return result } - private createInputRoomLogisticsRequests() { - const inputLabs = this.inputLabs - for (let i = 0; i < inputLabs.length; i++) { - const lab = inputLabs[i] - const resourceType = this.inputResources[i] - - // If we have the right resource or no resource - if (this.outputResource && (!lab.mineralType || lab.mineralType === resourceType)) { - // If we have enough - if ( - lab.reserveStore[resourceType] > lab.store.getCapacity(resourceType) * 0.5 - ) - continue - - // Ask for more - - this.communeManager.room.createRoomLogisticsRequest({ - target: lab, - resourceType, - type: RoomLogisticsRequestTypes.transfer, - priority: - 50 + - scalePriority( - lab.store.getCapacity(resourceType), - lab.reserveStore[resourceType], - 20, - ), - }) - continue - } - - // We have the wrong resource - - this.communeManager.room.createRoomLogisticsRequest({ - target: lab, - resourceType: lab.mineralType, - type: RoomLogisticsRequestTypes.withdraw, - priority: - 20 + - scalePriority( - lab.store.getCapacity(lab.mineralType), - lab.reserveStore[lab.mineralType], - 20, - true, - ), - }) - } - } + return undefined + } - private createOutputRoomLogisticsRequests() { - for (const lab of this.outputLabs) { - // There is no resource to withdraw - - if (!lab.mineralType) continue - - // We have the right resource, withdraw after a threshold - - if (lab.mineralType === this.outputResource) { - // We have a small amount - - if ( - lab.mineralType && - lab.reserveStore[lab.mineralType] < - lab.store.getCapacity(lab.mineralType) * 0.25 - ) - continue - - // Ask for more - - this.communeManager.room.createRoomLogisticsRequest({ - target: lab, - resourceType: this.outputResource, - type: RoomLogisticsRequestTypes.withdraw, - priority: - 20 + - scalePriority( - lab.store.getCapacity(lab.mineralType), - lab.reserveStore[lab.mineralType], - 20, - true, - ), - }) - continue - } - - // We have the wrong resource, quickly withdraw it all - - this.communeManager.room.createRoomLogisticsRequest({ - target: lab, - resourceType: lab.mineralType, - type: RoomLogisticsRequestTypes.withdraw, - priority: - 20 + - scalePriority( - lab.store.getCapacity(lab.mineralType), - lab.reserveStore[lab.mineralType], - 20, - true, - ), - }) - } - } + private resourceAmount(resource: MineralConstant | MineralCompoundConstant): number { + if (!resource) return 0 - private createBoostRoomLogisticsRequests() {} - /* - private setupInputLab( - creep: Hauler, - inputLab: StructureLab, - inputRsc: MineralConstant | MineralCompoundConstant, - ): boolean { - if (this.isReverse) { - if ( - (inputLab.mineralType != null && inputLab.mineralType != inputRsc) || - inputLab.usedStore(inputRsc) >= creep.store.getFreeCapacity() - ) { - let amount = Math.min(creep.freeStore(), inputLab.store[inputLab.mineralType]) - - if (amount != 0) creep.createReservation('withdraw', inputLab.id, amount, inputLab.mineralType) - if (amount + creep.usedStore(inputLab.mineralType) != 0) - creep.createReservation( - 'transfer', - this.communeManager.room.storage?.id, - amount + creep.store[inputLab.mineralType], - inputLab.mineralType, - ) - - - } - } else { - if (inputLab.mineralType == inputRsc || inputLab.mineralType == null) { - let source = - this.communeManager.room?.storage.store[inputRsc] > - this.communeManager.room?.terminal.store[inputRsc] - ? this.communeManager.room.storage - : this.communeManager.room.terminal - - //This logic isn't quite correct, but it works, but I need to debug this at some point. - // If the creep starts with any of the desired resources, send the resources to it to free up the creep. - // Only if we have a creepful, should we withdraw from the source container. This works, but isn't the minimum code to do it. - let amount = Math.min( - creep.store.getFreeCapacity(), - source.store[inputRsc], - inputLab.store.getFreeCapacity(inputRsc), - ) - amount = Math.max(amount, 0) - //Do the transfer if there's a bunch of free space in the lab, not necessiarly if there's a bunch in storage, that way - // We react all the resources laying around. - if (inputLab.store.getFreeCapacity(inputRsc) >= creep.store.getCapacity()) { - creep.createReservation('withdraw', source.id, amount, inputRsc) - creep.createReservation('transfer', inputLab.id, amount, inputRsc) - } - } else { - let amount = Math.min(creep.store.getFreeCapacity(), inputLab.store[inputLab.mineralType]) - creep.createReservation('withdraw', inputLab.id, amount, inputLab.mineralType) - creep.createReservation( - 'transfer', - this.communeManager.room.storage?.id, - amount + creep.store[inputLab.mineralType], - inputLab.mineralType, - ) - } - } + let amount = this.communeManager.room.roomManager.resourcesInStoringStructures[resource] || 0 - if (creep.memory.Rs?.length > 0) return true - return false + for (const lab of this.communeManager.room.roomManager.structures.lab) { + if (lab.mineralType !== resource) continue + amount += lab.store.getUsedCapacity(lab.mineralType) } - private setupOutputLab(creep: Hauler, outputLab: StructureLab): boolean { - if (this.isReverse) { - if (outputLab.mineralType == this.outputResource || outputLab.mineralType == null) { - let source = - this.communeManager.room?.storage.store[this.outputResource] > - this.communeManager.room?.terminal.store[this.outputResource] - ? this.communeManager.room.storage - : this.communeManager.room.terminal - - let amount = Math.min( - creep.store.getFreeCapacity(), - source.store[this.outputResource], - outputLab.store.getFreeCapacity(this.outputResource), - ) - amount = Math.max(amount, 0) - - if (outputLab.store.getFreeCapacity(this.outputResource) >= creep.store.getCapacity()) { - creep.createReservation('withdraw', source.id, amount, this.outputResource) - creep.createReservation('transfer', outputLab.id, amount, this.outputResource) - } - } else { - let amount = Math.min(creep.store.getFreeCapacity(), outputLab.store[outputLab.mineralType]) - creep.createReservation('withdraw', outputLab.id, amount, outputLab.mineralType) - creep.createReservation( - 'transfer', - this.communeManager.room.storage?.id, - amount + creep.store[outputLab.mineralType], - outputLab.mineralType, - ) - } - } else { - if ( - (outputLab.mineralType != null && outputLab.mineralType != this.outputResource) || - outputLab.usedStore(this.outputResource) >= creep.store.getFreeCapacity() - ) { - let amount = Math.min(creep.freeStore(), outputLab.store[outputLab.mineralType]) - - if (amount != 0) creep.createReservation('withdraw', outputLab.id, amount, outputLab.mineralType) - if (amount + creep.usedStore(outputLab.mineralType) != 0) - creep.createReservation( - 'transfer', - this.communeManager.room.storage?.id, - amount + creep.store[outputLab.mineralType], - outputLab.mineralType, - ) - } - } + for (const name of this.communeManager.room.myCreepsByRole.hauler) { + amount += Game.creeps[name].store.getUsedCapacity(resource) + } - if (creep.memory.Rs?.length > 0) return true - return false + return amount + } + + private createRoomLogisticsRequests() { + this.createInputRoomLogisticsRequests() + this.createOutputRoomLogisticsRequests() + this.createBoostRoomLogisticsRequests() + } + + private createInputRoomLogisticsRequests() { + const inputLabs = this.inputLabs + for (let i = 0; i < inputLabs.length; i++) { + const lab = inputLabs[i] + const resourceType = this.inputResources[i] + + // If we have the right resource or no resource + if (this.outputResource && (!lab.mineralType || lab.mineralType === resourceType)) { + // If we have enough + if (lab.reserveStore[resourceType] > lab.store.getCapacity(resourceType) * 0.5) continue + + // Ask for more + + this.communeManager.room.createRoomLogisticsRequest({ + target: lab, + resourceType, + type: RoomLogisticsRequestTypes.transfer, + priority: + 50 + + scalePriority(lab.store.getCapacity(resourceType), lab.reserveStore[resourceType], 20), + }) + continue + } + + // We have the wrong resource + + this.communeManager.room.createRoomLogisticsRequest({ + target: lab, + resourceType: lab.mineralType, + type: RoomLogisticsRequestTypes.withdraw, + priority: + 20 + + scalePriority( + lab.store.getCapacity(lab.mineralType), + lab.reserveStore[lab.mineralType], + 20, + true, + ), + }) } + } - setupBoosterLab(creep: Hauler, lab: StructureLab, compound: MineralBoostConstant): boolean { - if (lab.mineralType == compound || lab.mineralType == null) { - //The 3*2 below are because it takes 30 compound and 20 energy to boost a creep, so make sure it's loaded - //in a reasonably ratioed sequence. - if ( - lab.store[RESOURCE_ENERGY] / 30 < lab.store[compound] / 20 && - lab.store.getFreeCapacity(RESOURCE_ENERGY) > creep.store.getCapacity() - ) { - let source = - this.communeManager.room?.storage.store[RESOURCE_ENERGY] > - this.communeManager.room?.terminal.store[RESOURCE_ENERGY] - ? this.communeManager.room.storage - : this.communeManager.room.terminal - - creep.createReservation('withdraw', source.id, creep.store.getCapacity(), RESOURCE_ENERGY) - creep.createReservation('transfer', lab.id, creep.store.getCapacity(), RESOURCE_ENERGY) - } else { - let source: AnyStoreStructure = - this.communeManager.room?.storage.store[compound] > - this.communeManager.room?.terminal.store[compound] - ? this.communeManager.room.storage - : this.communeManager.room.terminal - - if (source.store[compound] == 0) { - source = this.outputLabs.find(lab => lab.mineralType == compound && lab.mineralAmount > 100) - } - - if (source) { - let amount = Math.min( - creep.store.getFreeCapacity(), - source.store[compound], - lab.store.getFreeCapacity(compound), - ) - amount = Math.max(amount, 0) - - if (lab.store.getFreeCapacity(compound) >= creep.store.getCapacity()) { - creep.createReservation('withdraw', source.id, amount, compound) - creep.createReservation('transfer', lab.id, amount, compound) - } - } - } - } else { - //Unload the wrong material - let amount = Math.min(creep.store.getFreeCapacity(), lab.store[lab.mineralType]) - creep.createReservation('withdraw', lab.id, amount, lab.mineralType) - creep.createReservation( - 'transfer', - this.communeManager.room.storage?.id, - amount + creep.store[lab.mineralType], - lab.mineralType, - ) - } + private createOutputRoomLogisticsRequests() { + for (const lab of this.outputLabs) { + // There is no resource to withdraw - if (creep.memory.Rs?.length > 0) return true - return false - } - */ - /* - public requestBoost(compound: MineralBoostConstant) { - if (!this.requestedBoosts.includes(compound)) this.requestedBoosts.push(compound) - } + if (!lab.mineralType) continue + // We have the right resource, withdraw after a threshold - generateHaulingReservation(creep: Hauler) { - if (this.labsByBoost) { - for (const compound in this.labsByBoost) { - const labId = this.labsByBoost[compound as MineralBoostConstant] - const lab = this.communeManager.room.roomManager.structures.lab.find(lab => lab.id == labId) - if (this.setupBoosterLab(creep, lab, compound as MineralBoostConstant)) return - } - } + if (lab.mineralType === this.outputResource) { + // We have a small amount - if (this.inputLabs.length < 2) return - - //Priortize the worstly loaded lab. - if (this.inputLab2.store[this.inputResources[1]] > this.inputLab1.store[this.inputResources[0]]) { - if (this.isReverse) { - if (this.setupInputLab(creep, this.inputLab2, this.inputResources[1])) return - if (this.setupInputLab(creep, this.inputLab1, this.inputResources[0])) return - } else { - if (this.setupInputLab(creep, this.inputLab1, this.inputResources[0])) return - if (this.setupInputLab(creep, this.inputLab2, this.inputResources[1])) return - } - } else { - if (this.isReverse) { - if (this.setupInputLab(creep, this.inputLab1, this.inputResources[0])) return - if (this.setupInputLab(creep, this.inputLab2, this.inputResources[1])) return - } else { - if (this.setupInputLab(creep, this.inputLab2, this.inputResources[1])) return - if (this.setupInputLab(creep, this.inputLab1, this.inputResources[0])) return - } - } - for (const output of this.outputLabs) if (this.setupOutputLab(creep, output)) return + if ( + lab.mineralType && + lab.reserveStore[lab.mineralType] < lab.store.getCapacity(lab.mineralType) * 0.25 + ) + continue + + // Ask for more + + this.communeManager.room.createRoomLogisticsRequest({ + target: lab, + resourceType: this.outputResource, + type: RoomLogisticsRequestTypes.withdraw, + priority: + 20 + + scalePriority( + lab.store.getCapacity(lab.mineralType), + lab.reserveStore[lab.mineralType], + 20, + true, + ), + }) + continue + } + + // We have the wrong resource, quickly withdraw it all + + this.communeManager.room.createRoomLogisticsRequest({ + target: lab, + resourceType: lab.mineralType, + type: RoomLogisticsRequestTypes.withdraw, + priority: + 20 + + scalePriority( + lab.store.getCapacity(lab.mineralType), + lab.reserveStore[lab.mineralType], + 20, + true, + ), + }) } - */ + } + + private createBoostRoomLogisticsRequests() {} } From 1d73cbdb64112e4d26fe734add779ec8fb4bf050 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 23 Jan 2024 15:37:08 -0800 Subject: [PATCH 107/190] downgrader, core attacker priority adjustments --- src/room/commune/spawning/spawnRequests.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/room/commune/spawning/spawnRequests.ts b/src/room/commune/spawning/spawnRequests.ts index 88f348167..3cd01b51f 100644 --- a/src/room/commune/spawning/spawnRequests.ts +++ b/src/room/commune/spawning/spawnRequests.ts @@ -1494,7 +1494,7 @@ export class SpawnRequestsManager { /* minCreeps: 1, */ maxCreeps: 3, minCostPerCreep: cost * extraParts.length, - priority: this.minRemotePriority - 2, + priority: this.minRemotePriority, memoryAdditions: { [CreepMemoryKeys.remote]: remoteName, }, @@ -1524,7 +1524,7 @@ export class SpawnRequestsManager { spawnGroup: this.communeManager.room.creepsOfRemote[remoteName].remoteDismantler, creepsQuota: 1, minCostPerCreep: cost * 2, - priority: this.minRemotePriority - 1, + priority: this.minRemotePriority, memoryAdditions: { [CreepMemoryKeys.remote]: remoteName, }, From c21ec3039350faf8d04d692e03457e09ff0d0516 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 23 Jan 2024 23:15:36 -0800 Subject: [PATCH 108/190] CommuneProcs, RoomProcs more services from respective managers --- src/debug/debugUtils.ts | 140 +++-- src/international/mapVisuals.ts | 3 +- src/international/requests.ts | 23 +- src/room/commune/combatRequest.ts | 11 +- src/room/commune/commune.ts | 534 +----------------- src/room/commune/communeData.ts | 9 + src/room/commune/communeProcs.ts | 240 +++++++- src/room/commune/communeUtils.ts | 235 +++++++- src/room/commune/factory.ts | 7 +- src/room/commune/haulRequestManager.ts | 3 +- src/room/commune/links.ts | 9 +- src/room/commune/powerSpawnProcs.ts | 7 +- src/room/commune/remotesManager.ts | 5 +- src/room/commune/spawning/spawnRequests.ts | 36 +- src/room/commune/terminal/terminalProcs.ts | 11 +- src/room/commune/workRequest.ts | 4 +- src/room/construction/construction.ts | 3 +- src/room/creeps/creepProcs.ts | 2 +- .../creeps/creepPrototypes/creepFunctions.ts | 2 +- src/room/creeps/creepUtils.ts | 8 +- src/room/creeps/powerCreeps/operator.ts | 5 +- .../creeps/roleManagers/commune/hubHauler.ts | 3 +- .../remote/remoteSourceHarvester.ts | 3 +- src/room/room.ts | 184 +----- src/room/roomProcs.ts | 210 ++++++- src/room/roomVisuals.ts | 5 +- src/room/rooms.ts | 8 +- src/types.d.ts | 3 + src/utils/utils.ts | 36 ++ 29 files changed, 913 insertions(+), 836 deletions(-) diff --git a/src/debug/debugUtils.ts b/src/debug/debugUtils.ts index 14eeada5c..3f17593ee 100644 --- a/src/debug/debugUtils.ts +++ b/src/debug/debugUtils.ts @@ -1,4 +1,4 @@ -import { time } from "console" +import { time } from 'console' export class DebugUtils { /** @@ -116,59 +116,95 @@ export class DebugUtils { } global.stringify = function stringify(v: any, maxDepth = 3) { - let alreadyReferencedObjects: any[] = []; - const recStringify = (value: any, depth: number): string => { - switch (typeof value) { - case 'undefined': - return 'undefined'; - case 'boolean': - case 'number': - return value.toString(); - case 'string': - return '"' + value.toString() + '"'; - case 'function': - return 'function'; - case 'object': - if (value === null) - return "null"; - else if (value instanceof RoomPosition) { - return value.x+','+value.y+','+value.roomName; - } - else if (alreadyReferencedObjects.includes(value)) - return "*"; - else { - alreadyReferencedObjects.push(value); - if (value instanceof Array) { - if (value.length === 0) - return "[]"; - else if (depth > maxDepth) - return "[ ... ]"; - else { - let leftPad = new Array(depth).fill(" ").join(""); - let itemLeftPad = new Array(depth + 1).fill(" ").join(""); - return "[
" - + value.map(item => itemLeftPad + recStringify(item, depth + 1)).join(',
') + "
" - + leftPad + "]"; - } + let alreadyReferencedObjects: any[] = [] + const recStringify = (value: any, depth: number): string => { + switch (typeof value) { + case 'undefined': + return 'undefined' + case 'boolean': + case 'number': + return value.toString() + case 'string': + return '"' + value.toString() + '"' + case 'function': + return 'function' + case 'object': + if (value === null) return 'null' + else if (value instanceof RoomPosition) { + return value.x + ',' + value.y + ',' + value.roomName + } else if (alreadyReferencedObjects.includes(value)) return '*' + else { + alreadyReferencedObjects.push(value) + if (value instanceof Array) { + if (value.length === 0) return '[]' + else if (depth > maxDepth) return '[ ... ]' + else { + let leftPad = new Array(depth).fill(' ').join('') + let itemLeftPad = new Array(depth + 1).fill(' ').join('') + return ( + '[
' + + value.map(item => itemLeftPad + recStringify(item, depth + 1)).join(',
') + + '
' + + leftPad + + ']' + ) } + } else { + let props = Object.getOwnPropertyNames(value) + if (props.length === 0) return '{}' + else if (depth > maxDepth) return '{ ... }' else { - let props = Object.getOwnPropertyNames(value); - if (props.length === 0) - return "{}"; - else if (depth > maxDepth) - return "{ ... }"; - else { - let leftPad = new Array(depth).fill(" ").join(""); - let itemLeftPad = new Array(depth + 1).fill(" ").join(""); - return "{
" - + props.map(name => itemLeftPad + name + ': ' + recStringify(value[name], depth + 1)).join(',
') + "
" - + leftPad + "}"; - } + let leftPad = new Array(depth).fill(' ').join('') + let itemLeftPad = new Array(depth + 1).fill(' ').join('') + return ( + '{
' + + props + .map(name => itemLeftPad + name + ': ' + recStringify(value[name], depth + 1)) + .join(',
') + + '
' + + leftPad + + '}' + ) } } - default: - return ''; - } - }; - return recStringify(v, 0); + } + default: + return '' + } } + return recStringify(v, 0) +} + +global.roughSizeOfObject = function (object) { + const objectList: any = [] + const stack = [object] + let bytes = 0 + + while (stack.length) { + const value = stack.pop() + + switch (typeof value) { + case 'boolean': + bytes += 4 + break + case 'string': + bytes += value.length * 2 + break + case 'number': + bytes += 8 + break + case 'object': + if (!objectList.includes(value)) { + objectList.push(value) + for (const prop in value) { + if (value.hasOwnProperty(prop)) { + stack.push(value[prop]) + } + } + } + break + } + } + + return bytes +} diff --git a/src/international/mapVisuals.ts b/src/international/mapVisuals.ts index 4c9ef1d06..0fd56b617 100644 --- a/src/international/mapVisuals.ts +++ b/src/international/mapVisuals.ts @@ -8,6 +8,7 @@ import { packedPosLength, FlagNames, } from './constants' +import { CommuneUtils } from 'room/commune/communeUtils' /** * Adds colours and annotations to the map if mapVisuals are enabled @@ -43,7 +44,7 @@ export class MapVisualsManager { if (!anchor) throw Error('No anchor for mapVisuals commune ' + roomName) Game.map.visual.text( - `⚡${room.roomManager.resourcesInStoringStructures.energy} / ${room.communeManager.minStoredEnergy}`, + `⚡${room.roomManager.resourcesInStoringStructures.energy} / ${CommuneUtils.minStoredEnergy(room)}`, new RoomPosition(2, 8, roomName), { align: 'left', diff --git a/src/international/requests.ts b/src/international/requests.ts index 60ed30834..e0fd62d38 100644 --- a/src/international/requests.ts +++ b/src/international/requests.ts @@ -30,17 +30,18 @@ export class RequestsManager extends StaticSleepable { this.updateCombatRequests() this.updateHaulRequests() - if (Utils.isTickInterval(runRequestInverval)) return + if (Utils.isTickInterval(runRequestInverval)) { - this.runWorkRequests() - this.runCombatRequests() - this.runHaulRequests() + this.runWorkRequests() + this.runCombatRequests() + this.runHaulRequests() + } } // update requests private static updateWorkRequests() { - const runThreshold = randomIntRange(19000, 20000) + const newDynamicScoreTreshold = randomIntRange(19000, 20000) for (const roomName in Memory.workRequests) { const request = Memory.workRequests[roomName] @@ -60,7 +61,7 @@ export class RequestsManager extends StaticSleepable { const roomMemory = Memory.rooms[roomName] if ( !roomMemory[RoomMemoryKeys.dynamicScore] || - Game.time - roomMemory[RoomMemoryKeys.dynamicScoreUpdate] >= runThreshold + Game.time - roomMemory[RoomMemoryKeys.dynamicScoreUpdate] >= newDynamicScoreTreshold ) { RoomNameUtils.findDynamicScore(roomName) } @@ -267,20 +268,20 @@ export class RequestsManager extends StaticSleepable { // Ensure we can afford the creeps required - const minRangedAttackCost = room.communeManager.findMinRangedAttackCost( + const minRangedAttackCost = Utils.findMinRangedAttackCost( request[CombatRequestKeys.minDamage], ) - const minMeleeHealCost = room.communeManager.findMinHealCost( + const minMeleeHealCost = Utils.findMinHealCost( request[CombatRequestKeys.minMeleeHeal] + (request[CombatRequestKeys.maxTowerDamage] || 0), ) - const minRangedHealCost = room.communeManager.findMinHealCost( + const minRangedHealCost = Utils.findMinHealCost( request[CombatRequestKeys.minRangedHeal], ) if (minRangedAttackCost + minRangedHealCost > room.energyCapacityAvailable) continue - const minAttackCost = room.communeManager.findMinMeleeAttackCost( + const minAttackCost = Utils.findMinMeleeAttackCost( request[CombatRequestKeys.minDamage], ) if (minAttackCost > room.energyCapacityAvailable) continue @@ -352,7 +353,7 @@ export class RequestsManager extends StaticSleepable { if (room.controller.level < 4) continue if (!room.roomManager.structures.spawn.length) continue - if (!room.communeManager.storingStructures.length) continue + if (!CommuneUtils.storingStructures(room).length) continue // Ensure we aren't responding to too many requests for our energy level if ( room.roomManager.resourcesInStoringStructures.energy / diff --git a/src/room/commune/combatRequest.ts b/src/room/commune/combatRequest.ts index cacdcb707..50ef55efe 100644 --- a/src/room/commune/combatRequest.ts +++ b/src/room/commune/combatRequest.ts @@ -3,6 +3,7 @@ import { CommuneManager } from './commune' import { StatsManager } from 'international/stats' import { randomIntRange, Utils } from 'utils/utils' import { CombatRequest } from 'types/internationalRequests' +import { CommuneProcs } from './communeProcs' const checkRoomStatusInverval = randomIntRange(200, 500) @@ -175,7 +176,7 @@ export class CombatRequestManager { if (threateningAttacker) { request[CombatRequestKeys.abandon] = 1500 - this.communeManager.deleteCombatRequest(requestName, index) + CommuneProcs.deleteCombatRequest(room, requestName, index) return } @@ -185,7 +186,7 @@ export class CombatRequestManager { this.manageInaction(requestName, index) } else { if (!request[CombatRequestKeys.inactionTimerMax]) { - this.communeManager.deleteCombatRequest(requestName, index) + CommuneProcs.deleteCombatRequest(room, requestName, index) return } @@ -242,7 +243,7 @@ export class CombatRequestManager { this.manageInaction(requestName, index) } else { if (!request[CombatRequestKeys.inactionTimerMax]) { - this.communeManager.deleteCombatRequest(requestName, index) + CommuneProcs.deleteCombatRequest(room, requestName, index) return } @@ -254,7 +255,7 @@ export class CombatRequestManager { const request = Memory.combatRequests[requestName] if (request[CombatRequestKeys.inactionTimer] <= 0) { - this.communeManager.deleteCombatRequest(requestName, index) + CommuneProcs.deleteCombatRequest(this.communeManager.room, requestName, index) return } } @@ -265,7 +266,7 @@ export class CombatRequestManager { if (request[CombatRequestKeys.abandonments] >= 3) { // Delete the request - this.communeManager.deleteCombatRequest(requestName, index) + CommuneProcs.deleteCombatRequest(this.communeManager.room, requestName, index) return } diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index 1b310afb0..f48e3361a 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -46,6 +46,7 @@ import { TerminalProcs } from './terminal/terminalProcs' import { SpawningStructureProcs } from './spawning/spawningStructureProcs' import { ObserverProcs } from './observerProcs' import { PowerSpawnProcs } from './powerSpawnProcs' +import { CommuneUtils } from './communeUtils' export type ResourceTargets = { min: Partial<{ [key in ResourceConstant]: number }> @@ -115,265 +116,6 @@ export class CommuneManager { this.factoryManager = new FactoryManager(this) } - update(room: Room) { - // non manager - - // - - delete this._minStoredEnergy - delete this._storingStructures - delete this._maxCombatRequests - delete this._defensiveRamparts - delete this._sourceLinks - delete this._controllerLink - delete this.towerAttackTarget - delete this._actionableSpawningStructures - delete this._spawningStructuresByPriority - delete this._spawningStructuresByNeed - - if (randomTick()) { - delete this._minRampartHits - delete this._storedEnergyBuildThreshold - } - - if (Utils.isTickInterval(100)) { - delete this._upgradeStructure - delete this._hasSufficientRoads - delete this._resourceTargets - } - - this.room = room - const roomMemory = Memory.rooms[room.name] - - // If we should abandon the room - - if (roomMemory[RoomMemoryKeys.abandonCommune] === true) { - room.controller.unclaim() - roomMemory[RoomMemoryKeys.type] = RoomTypes.neutral - RoomNameUtils.cleanMemory(room.name) - - for (const cSite of room.find(FIND_MY_CONSTRUCTION_SITES)) { - cSite.remove() - } - return - } - - CollectiveManager.communes.add(room.name) - - if (this.room.controller.safeMode) CollectiveManager.safemodedCommuneName = this.room.name - - if (!roomMemory[RoomMemoryKeys.greatestRCL]) { - if (CollectiveManager.communes.size <= 1) - roomMemory[RoomMemoryKeys.greatestRCL] = room.controller.level - else if ( - room.controller.progress > room.controller.progressTotal || - room.find(FIND_MY_STRUCTURES, { - filter: structure => structure.structureType !== STRUCTURE_CONTROLLER, - }).length - ) { - roomMemory[RoomMemoryKeys.greatestRCL] = 8 - } else roomMemory[RoomMemoryKeys.greatestRCL] = room.controller.level - } else if (room.controller.level > roomMemory[RoomMemoryKeys.greatestRCL]) { - roomMemory[RoomMemoryKeys.greatestRCL] = room.controller.level - } - - this.room.roomManager.communePlanner.attemptPlan(this.room) - CommuneProcs.getRCLUpdate(room) - - if (!roomMemory[RoomMemoryKeys.combatRequests]) roomMemory[RoomMemoryKeys.combatRequests] = [] - if (!roomMemory[RoomMemoryKeys.haulRequests]) roomMemory[RoomMemoryKeys.haulRequests] = [] - - this.upgradeStrength = 0 - this.mineralHarvestStrength = 0 - this.communeHaulerNeed = 0 - this.nextSpawnEnergyAvailable = room.energyAvailable - - if (!roomMemory[RoomMemoryKeys.remotes]) roomMemory[RoomMemoryKeys.remotes] = [] - if (roomMemory[RoomMemoryKeys.threatened] == undefined) { - roomMemory[RoomMemoryKeys.threatened] = 0 - } - - room.usedRampartIDs = new Map() - - room.creepsOfRemote = {} - this.haulerCarryParts = 0 - this.communeHaulerCarryParts = 0 - this.remoteSourceHarvesters = {} - this.communeHaulers = [] - - this.remotesManager.update() - - // For each role, construct an array for creepsFromRoom - - room.creepsFromRoom = {} - for (const role of creepRoles) room.creepsFromRoom[role] = [] - - room.creepsFromRoomAmount = 0 - - room.scoutTargets = new Set() - - if (!roomMemory[RoomMemoryKeys.deposits]) roomMemory[RoomMemoryKeys.deposits] = {} - - room.attackingDefenderIDs = new Set() - room.defenderEnemyTargetsWithDamage = new Map() - room.defenderEnemyTargetsWithDefender = new Map() - - if (room.terminal && room.controller.level >= 6) { - CollectiveManager.terminalCommunes.push(room.name) - } - - CollectiveManager.mineralNodes[this.room.roomManager.mineral.mineralType] += 1 - } - - initRun() { - this.preTickTest() - - const roomMemory = Memory.rooms[this.room.name] - if (!roomMemory[RoomMemoryKeys.communePlanned]) return - - this.constructionManager.preTickRun() - ObserverProcs.preTickRun(this.room) - TerminalProcs.preTickRun(this.room) - this.remotesManager.initRun() - this.haulRequestManager.preTickRun() - this.workRequestManager.preTickRun() - } - - run() { - if (!this.room.memory[RoomMemoryKeys.communePlanned]) return - - DefenceProcs.run(this.room) - TowerProcs.run(this.room) - DefenceProcs.manageThreat(this.room) - DefenceProcs.manageDefenceRequests(this.room) - - TerminalProcs.run(this.room) - - this.workRequestManager.run() - this.combatRequestManager.run() - this.haulRequestManager.run() - - SourceProcs.createPowerTasks(this.room) - this.remotesManager.run() - this.haulerNeedManager.run() - - SpawningStructureProcs.createRoomLogisticsRequests(this.room) - LogisticsProcs.createCommuneStoringStructureLogisticsRequests(this.room) - this.factoryManager.run() - LogisticsProcs.createCommuneContainerLogisticsRequests(this.room) - LogisticsProcs.createCommuneDroppedResourceLogisticsRequests(this.room) - LogisticsProcs.createCommuneTombstoneLogisticsRequests(this.room) - LogisticsProcs.createCommuneRuinLogisticsRequests(this.room) - this.linkManager.run() - this.labManager.run() - PowerSpawnProcs.run(this.room) - SpawningStructureProcs.createPowerTasks(this.room) - - this.room.roomManager.creepRoleManager.run() - this.room.roomManager.powerCreepRoleManager.run() - - CommuneProcs.tryUpdateMinHaulerCost(this.room) - SpawningStructureProcs.tryRunSpawning(this.room) - - SpawningStructureProcs.tryRegisterSpawningMovement(this.room) - this.room.roomManager.endTickCreepManager.run() - this.room.roomManager.roomVisualsManager.run() - - this.test() - } - - private preTickTest() { - return - - let CPUUsed = Game.cpu.getUsed() - - customLog('CPU TEST 1 ' + this.room.name, Game.cpu.getUsed() - CPUUsed, { - type: LogTypes.info, - }) - } - - private test() { - /* this.room.visualizeCostMatrix(this.room.defaultCostMatrix) */ - - /* - const array = new Array(2500) - - for (let i = 0; i < array.length; i++) { - array[i] = packBasePlanCoord(STRUCTURE_SPAWN, 1) - } - */ - - return - - let CPUUsed = Game.cpu.getUsed() - - customLog('CPU TEST 1 ' + this.room.name, Game.cpu.getUsed() - CPUUsed, { - type: LogTypes.info, - }) - } - - /** - * Debug - */ - private visualizeSpawningStructuresByNeed() { - customLog('spawningStructuresByNeed', this.spawningStructuresByNeed, { - type: LogTypes.error, - }) - for (const structure of this.spawningStructuresByNeed) { - this.room.coordVisual(structure.pos.x, structure.pos.y) - } - } - - deleteCombatRequest(requestName: string, index: number) { - delete Memory.combatRequests[requestName] - Memory.rooms[this.room.name][RoomMemoryKeys.combatRequests].splice(index, 1) - } - - removeRemote(remoteName: string, index: number) { - Memory.rooms[this.room.name][RoomMemoryKeys.remotes].splice(index, 1) - - const remoteMemory = Memory.rooms[remoteName] - - remoteMemory[RoomMemoryKeys.type] = RoomTypes.neutral - RoomNameUtils.cleanMemory(remoteName) - } - - findMinRangedAttackCost(minDamage: number = 10) { - const rawCost = - (minDamage / RANGED_ATTACK_POWER) * BODYPART_COST[RANGED_ATTACK] + - (minDamage / RANGED_ATTACK_POWER) * BODYPART_COST[MOVE] - const combinedCost = BODYPART_COST[RANGED_ATTACK] + BODYPART_COST[MOVE] - - return Math.ceil(rawCost / combinedCost) * combinedCost - } - - findMinMeleeAttackCost(minDamage: number = 30) { - const rawCost = - (minDamage / ATTACK_POWER) * BODYPART_COST[ATTACK] + - (minDamage / ATTACK_POWER) * BODYPART_COST[MOVE] - const combinedCost = BODYPART_COST[ATTACK] + BODYPART_COST[MOVE] - - return Math.ceil(rawCost / combinedCost) * combinedCost - } - - /** - * Finds how expensive it will be to provide enough heal parts to withstand attacks - */ - findMinHealCost(minHeal: number = 12) { - const rawCost = - (minHeal / HEAL_POWER) * BODYPART_COST[HEAL] + (minHeal / HEAL_POWER) * BODYPART_COST[MOVE] - const combinedCost = BODYPART_COST[HEAL] + BODYPART_COST[MOVE] - - return Math.ceil(rawCost / combinedCost) * combinedCost - } - - findMinDismantleCost(minDismantle: number = 0) { - const rawCost = minDismantle * BODYPART_COST[WORK] + minDismantle * BODYPART_COST[MOVE] - const combinedCost = BODYPART_COST[WORK] + BODYPART_COST[MOVE] - - return Math.ceil(rawCost / combinedCost) * combinedCost - } - get estimatedEnergyIncome() { const roomStats = Memory.stats.rooms[this.room.name] @@ -385,33 +127,7 @@ export class CommuneManager { ) } - private _minStoredEnergy: number - - /** - * The minimum amount of stored energy the room should only use in emergencies - */ - get minStoredEnergy() { - if (this._minStoredEnergy !== undefined) return this._minStoredEnergy - - // Consider the controller level to an exponent and this room's attack threat - - this._minStoredEnergy = - Math.pow(this.room.controller.level * 6000, 1.06) + - this.room.memory[RoomMemoryKeys.threatened] * 20 - - // If there is a next RCL, Take away some minimum based on how close we are to the next RCL - - const RClCost = this.room.controller.progressTotal - if (RClCost) { - this._minStoredEnergy -= Math.pow( - (Math.min(this.room.controller.progress, RClCost) / RClCost) * 20, - 3.35, - ) - } - return (this._minStoredEnergy = Math.floor(this._minStoredEnergy)) - } - - private _targetEnergy: number + _targetEnergy: number /** * The amount of energy the room wants to have */ @@ -435,17 +151,7 @@ export class CommuneManager { return this._targetEnergy } - get storedEnergyUpgradeThreshold() { - /* - if (this.room.terminal && this.room.controller.level >= 6) { - - - } - */ - return Math.floor(this.minStoredEnergy * 1.3) - } - - private _storedEnergyBuildThreshold: number + _storedEnergyBuildThreshold: number get storedEnergyBuildThreshold() { this._storedEnergyBuildThreshold = Math.floor( Math.min( @@ -455,7 +161,7 @@ export class CommuneManager { cSite => cSite.progressTotal - cSite.progress, ) * 10, - this.minStoredEnergy * 1.2, + CommuneUtils.minStoredEnergy(this.room) * 1.2, ), ) @@ -466,7 +172,7 @@ export class CommuneManager { return roundTo(this.room.roomManager.structures.rampart.length * rampartUpkeepCost, 2) } - private _minRampartHits: number + _minRampartHits: number get minRampartHits() { if (this._minRampartHits !== undefined) return this._minRampartHits @@ -483,32 +189,7 @@ export class CommuneManager { ) || 20000) } - private _storingStructures: (StructureStorage | StructureTerminal)[] - - /** - * Storing structures - storage or teirmal - filtered to for defined and RCL active - */ - get storingStructures() { - if (this._storingStructures) return this._storingStructures - - const storingStructures: (StructureStorage | StructureTerminal)[] = [] - - if (this.room.storage && this.room.controller.level >= 4) - storingStructures.push(this.room.storage) - if (this.room.terminal && this.room.controller.level >= 6) - storingStructures.push(this.room.terminal) - - return (this._storingStructures = storingStructures) - } - - get storingStructuresCapacity() { - let capacity = 0 - if (this.room.storage) capacity += this.room.storage.store.getCapacity() - if (this.room.terminal) capacity += this.room.terminal.store.getCapacity() - return capacity - } - - private _maxCombatRequests: number + _maxCombatRequests: number /** * The largest amount of combat requests the room can respond to @@ -544,7 +225,7 @@ export class CommuneManager { return 100 } - private _hasSufficientRoads: boolean + _hasSufficientRoads: boolean /** * Informs wether we have sufficient roads compared to the roadQuota for our RCL */ @@ -565,7 +246,7 @@ export class CommuneManager { return (this._hasSufficientRoads = roads >= minRoads * 0.9) } - private _upgradeStructure: AnyStoreStructure | false + _upgradeStructure: AnyStoreStructure | false get upgradeStructure() { if (this._upgradeStructure !== undefined) return this._upgradeStructure @@ -591,7 +272,7 @@ export class CommuneManager { return (this._upgradeStructure = controllerLink) } - private _structureTypesByBuildPriority: BuildableStructureConstant[] + _structureTypesByBuildPriority: BuildableStructureConstant[] get structureTypesByBuildPriority() { if (this._structureTypesByBuildPriority) return this._structureTypesByBuildPriority @@ -645,7 +326,7 @@ export class CommuneManager { return Math.floor(CONTROLLER_DOWNGRADE[this.room.controller.level] * 0.75) } - private _defensiveRamparts: StructureRampart[] + _defensiveRamparts: StructureRampart[] /** * This should be cached inter-tick as IDs */ @@ -681,7 +362,7 @@ export class CommuneManager { } sourceLinkIDs: (Id | false)[] - private _sourceLinks: (StructureLink | false)[] + _sourceLinks: (StructureLink | false)[] get sourceLinks() { if (this._sourceLinks) return this._sourceLinks @@ -727,7 +408,7 @@ export class CommuneManager { } controllerLinkID: Id - private _controllerLink: StructureLink | false + _controllerLink: StructureLink | false get controllerLink() { if (this._controllerLink !== undefined) return this._controllerLink @@ -875,7 +556,7 @@ export class CommuneManager { return (this._spawningStructuresByNeed = spawningStructuresByNeed) } - private findFastFillerIgnoreCoords(ignoreCoords: Set) { + findFastFillerIgnoreCoords(ignoreCoords: Set) { const fastFillerPositions = this.room.roomManager.fastFillerPositions for (const pos of fastFillerPositions) { // Make sure the position is reserved (presumably by a fastFiller) @@ -892,193 +573,4 @@ export class CommuneManager { return ignoreCoords } - - /** - * Presciption on if we should be trying to build remote contianers - */ - get shouldRemoteContainers() { - return this.room.energyCapacityAvailable >= 650 - } - - // /** - // * Wether or not the barricade damage was recorded / updated for this tick - // */ - // barricadeDamageOverTimeRecorded: boolean - // _barricadeDamageOverTime: Uint16Array - // get barricadeDamageOverTime() { - - // if (this._barricadeDamageOverTime) return this._barricadeDamageOverTime - - // const barricadeDamageOverTime: Uint16Array = new Uint16Array(2500) - - // for (const rampart of this.room.roomManager.structures.rampart) { - - // const packedCoord = packAsNum(rampart.pos) - - // barricadeDamageOverTime[packedCoord] = rampart.hits - // } - // } - - _resourceTargets: ResourceTargets - get resourceTargets() { - if (this._resourceTargets) return this._resourceTargets - - const resourceTargets: ResourceTargets = { - min: {}, - max: {}, - } - const storingStructuresCapacity = this.storingStructuresCapacity - let min: number - - resourceTargets.min[RESOURCE_BATTERY] = this.room.roomManager.factory - ? storingStructuresCapacity * 0.005 - : 0 - resourceTargets.max[RESOURCE_BATTERY] = storingStructuresCapacity * 0.015 - - min = resourceTargets.min[RESOURCE_ENERGY] = - this.storingStructuresCapacity * - 0.9 /* this.energyMinResourceTarget(storingStructuresCapacity) */ - resourceTargets.max[RESOURCE_ENERGY] = Math.max( - storingStructuresCapacity * 0.5, - this.minStoredEnergy, - min, - ) - - // minerals - - resourceTargets.min[RESOURCE_HYDROGEN] = storingStructuresCapacity * 0.01 - resourceTargets.max[RESOURCE_HYDROGEN] = storingStructuresCapacity * 0.027 - - resourceTargets.min[RESOURCE_OXYGEN] = storingStructuresCapacity * 0.01 - resourceTargets.max[RESOURCE_OXYGEN] = storingStructuresCapacity * 0.027 - - resourceTargets.min[RESOURCE_UTRIUM] = storingStructuresCapacity * 0.01 - resourceTargets.max[RESOURCE_UTRIUM] = storingStructuresCapacity * 0.027 - - resourceTargets.min[RESOURCE_KEANIUM] = storingStructuresCapacity * 0.01 - resourceTargets.max[RESOURCE_KEANIUM] = storingStructuresCapacity * 0.027 - - resourceTargets.min[RESOURCE_LEMERGIUM] = storingStructuresCapacity * 0.01 - resourceTargets.max[RESOURCE_LEMERGIUM] = storingStructuresCapacity * 0.027 - - resourceTargets.min[RESOURCE_ZYNTHIUM] = storingStructuresCapacity * 0.01 - resourceTargets.max[RESOURCE_ZYNTHIUM] = storingStructuresCapacity * 0.027 - - if (Game.shard.name === 'swc') { - resourceTargets.min[RESOURCE_CATALYST] = storingStructuresCapacity * 0 - resourceTargets.max[RESOURCE_CATALYST] = storingStructuresCapacity * 0.01 - } else { - resourceTargets.min[RESOURCE_CATALYST] = storingStructuresCapacity * 0.01 - resourceTargets.max[RESOURCE_CATALYST] = storingStructuresCapacity * 0.027 - } - - // Boosts - - resourceTargets.min[RESOURCE_UTRIUM_HYDRIDE] = 0 - resourceTargets.max[RESOURCE_UTRIUM_HYDRIDE] = storingStructuresCapacity * 0.01 - - resourceTargets.min[RESOURCE_UTRIUM_OXIDE] = 0 - resourceTargets.max[RESOURCE_UTRIUM_OXIDE] = storingStructuresCapacity * 0.01 - - resourceTargets.min[RESOURCE_KEANIUM_HYDRIDE] = 0 - resourceTargets.max[RESOURCE_KEANIUM_HYDRIDE] = storingStructuresCapacity * 0.01 - - resourceTargets.min[RESOURCE_KEANIUM_OXIDE] = 0 - resourceTargets.max[RESOURCE_KEANIUM_OXIDE] = storingStructuresCapacity * 0.01 - - resourceTargets.min[RESOURCE_LEMERGIUM_HYDRIDE] = 0 - resourceTargets.max[RESOURCE_LEMERGIUM_HYDRIDE] = storingStructuresCapacity * 0.01 - - resourceTargets.min[RESOURCE_LEMERGIUM_OXIDE] = 0 - resourceTargets.max[RESOURCE_LEMERGIUM_OXIDE] = storingStructuresCapacity * 0.01 - - resourceTargets.min[RESOURCE_ZYNTHIUM_HYDRIDE] = 0 - resourceTargets.max[RESOURCE_ZYNTHIUM_HYDRIDE] = storingStructuresCapacity * 0.01 - - resourceTargets.min[RESOURCE_ZYNTHIUM_OXIDE] = 0 - resourceTargets.max[RESOURCE_ZYNTHIUM_OXIDE] = storingStructuresCapacity * 0.01 - - resourceTargets.min[RESOURCE_GHODIUM_HYDRIDE] = 0 - resourceTargets.max[RESOURCE_GHODIUM_HYDRIDE] = storingStructuresCapacity * 0.01 - - // other raw - - resourceTargets.min[RESOURCE_POWER] = this.room.roomManager.powerSpawn - ? storingStructuresCapacity * 0.002 - : 0 - resourceTargets.max[RESOURCE_POWER] = storingStructuresCapacity * 0.015 - - resourceTargets.min[RESOURCE_OPS] = storingStructuresCapacity * 0.01 - resourceTargets.max[RESOURCE_OPS] = storingStructuresCapacity * 0.02 - - resourceTargets.min[RESOURCE_METAL] = 0 - resourceTargets.max[RESOURCE_METAL] = 0 - - resourceTargets.min[RESOURCE_BIOMASS] = 0 - resourceTargets.max[RESOURCE_BIOMASS] = 0 - - resourceTargets.min[RESOURCE_SILICON] = 0 - resourceTargets.max[RESOURCE_SILICON] = 0 - - resourceTargets.min[RESOURCE_MIST] = 0 - resourceTargets.max[RESOURCE_MIST] = 0 - - // commodities - // low level - - resourceTargets.min[RESOURCE_GHODIUM_MELT] = 0 - resourceTargets.max[RESOURCE_GHODIUM_MELT] = 0 - - resourceTargets.min[RESOURCE_COMPOSITE] = 0 - resourceTargets.max[RESOURCE_COMPOSITE] = 0 - - resourceTargets.min[RESOURCE_CRYSTAL] = 0 - resourceTargets.max[RESOURCE_CRYSTAL] = 0 - - resourceTargets.min[RESOURCE_LIQUID] = 0 - resourceTargets.max[RESOURCE_LIQUID] = 0 - - // tier 1 commodities - - resourceTargets.min[RESOURCE_ALLOY] = 0 - resourceTargets.max[RESOURCE_ALLOY] = 0 - - resourceTargets.min[RESOURCE_CELL] = 0 - resourceTargets.max[RESOURCE_CELL] = 0 - - resourceTargets.min[RESOURCE_WIRE] = 0 - resourceTargets.max[RESOURCE_WIRE] = 0 - - resourceTargets.min[RESOURCE_CONDENSATE] = 0 - resourceTargets.max[RESOURCE_CONDENSATE] = 0 - - // tier 2 - - // tier 3 - - // tier 4 - - // tier 5 - - return (this._resourceTargets = resourceTargets) - } - - private energyMinResourceTarget(storingStructuresCapacity: number) { - if (this.room.controller.level < 8) { - const funnelOrder = CollectiveManager.getFunnelOrder() - if (funnelOrder[0] === this.room.name) { - return Math.min( - this.storedEnergyUpgradeThreshold * 1.2 + this.upgradeTargetDistance(), - storingStructuresCapacity / 2, - ) - } - return Math.min(this.storedEnergyUpgradeThreshold * 1.2, storingStructuresCapacity / 2) - } - - return this.minStoredEnergy - } - - private upgradeTargetDistance() { - return this.room.controller.progressTotal - this.room.controller.progress - } } diff --git a/src/room/commune/communeData.ts b/src/room/commune/communeData.ts index 0ab214707..7156162fc 100644 --- a/src/room/commune/communeData.ts +++ b/src/room/commune/communeData.ts @@ -1,5 +1,6 @@ import { CollectiveManager } from 'international/collective' import { Utils } from 'utils/utils' +import { ResourceTargets } from './commune' interface CommuneData { /** @@ -15,6 +16,8 @@ interface CommuneData { * The amount of hits for each rampart the previous tick, if exists */ previousRampartHits: number + resourceTargets: ResourceTargets + minStoredEnergy: number } /** @@ -45,6 +48,12 @@ export class CommuneDataProcs { if (Utils.isTickInterval(10)) { delete data.estimatedCommuneSourceIncome delete data.towerRampartRepairTreshold + delete data.minStoredEnergy + } + + if (Utils.isTickInterval(100)) { + + delete data.resourceTargets } } } diff --git a/src/room/commune/communeProcs.ts b/src/room/commune/communeProcs.ts index cc1230e9f..3089143b2 100644 --- a/src/room/commune/communeProcs.ts +++ b/src/room/commune/communeProcs.ts @@ -4,14 +4,232 @@ import { CommuneUtils } from './communeUtils' import { RoomLogisticsRequestTypes, RoomMemoryKeys, + RoomTypes, + creepRoles, haulerUpdateDefault, } from 'international/constants' -import { randomIntRange } from 'utils/utils' +import { Utils, randomIntRange, randomTick } from 'utils/utils' +import { CollectiveManager } from 'international/collective' +import { RoomNameUtils } from 'room/roomNameUtils' +import { customLog, LogTypes } from 'utils/logging' +import { ObserverProcs } from './observerProcs' +import { TerminalProcs } from './terminal/terminalProcs' +import { LogisticsProcs } from 'room/logisticsProcs' +import { SourceProcs } from 'room/sourceProcs' +import { DefenceProcs } from './defenceProcs' +import { PowerSpawnProcs } from './powerSpawnProcs' +import { SpawningStructureProcs } from './spawning/spawningStructureProcs' +import { TowerProcs } from './towerProcs' /** * Minor processes for communes */ export class CommuneProcs { + static update(room: Room) { + const communeManager = room.communeManager + communeManager.room = room + + // non manager + + // + + delete communeManager._maxCombatRequests + delete communeManager._defensiveRamparts + delete communeManager._sourceLinks + delete communeManager._controllerLink + delete communeManager.towerAttackTarget + delete communeManager._actionableSpawningStructures + delete communeManager._spawningStructuresByPriority + delete communeManager._spawningStructuresByNeed + + if (randomTick()) { + delete communeManager._minRampartHits + delete communeManager._storedEnergyBuildThreshold + } + + if (Utils.isTickInterval(100)) { + delete communeManager._upgradeStructure + delete communeManager._hasSufficientRoads + } + + const roomMemory = Memory.rooms[room.name] + + // If we should abandon the room + + if (roomMemory[RoomMemoryKeys.abandonCommune] === true) { + room.controller.unclaim() + roomMemory[RoomMemoryKeys.type] = RoomTypes.neutral + RoomNameUtils.cleanMemory(room.name) + + for (const cSite of room.find(FIND_MY_CONSTRUCTION_SITES)) { + cSite.remove() + } + return + } + + CollectiveManager.communes.add(room.name) + + if (room.controller.safeMode) { + CollectiveManager.safemodedCommuneName = room.name + } + + if (!roomMemory[RoomMemoryKeys.greatestRCL]) { + if (CollectiveManager.communes.size <= 1) + roomMemory[RoomMemoryKeys.greatestRCL] = room.controller.level + else if ( + room.controller.progress > room.controller.progressTotal || + room.find(FIND_MY_STRUCTURES, { + filter: structure => structure.structureType !== STRUCTURE_CONTROLLER, + }).length + ) { + roomMemory[RoomMemoryKeys.greatestRCL] = 8 + } else roomMemory[RoomMemoryKeys.greatestRCL] = room.controller.level + } else if (room.controller.level > roomMemory[RoomMemoryKeys.greatestRCL]) { + roomMemory[RoomMemoryKeys.greatestRCL] = room.controller.level + } + + room.roomManager.communePlanner.attemptPlan(room) + CommuneProcs.getRCLUpdate(room) + + if (!roomMemory[RoomMemoryKeys.combatRequests]) roomMemory[RoomMemoryKeys.combatRequests] = [] + if (!roomMemory[RoomMemoryKeys.haulRequests]) roomMemory[RoomMemoryKeys.haulRequests] = [] + + communeManager.upgradeStrength = 0 + communeManager.mineralHarvestStrength = 0 + communeManager.communeHaulerNeed = 0 + communeManager.nextSpawnEnergyAvailable = room.energyAvailable + + if (!roomMemory[RoomMemoryKeys.remotes]) roomMemory[RoomMemoryKeys.remotes] = [] + if (roomMemory[RoomMemoryKeys.threatened] == undefined) { + roomMemory[RoomMemoryKeys.threatened] = 0 + } + + room.usedRampartIDs = new Map() + + room.creepsOfRemote = {} + communeManager.haulerCarryParts = 0 + communeManager.communeHaulerCarryParts = 0 + communeManager.remoteSourceHarvesters = {} + communeManager.communeHaulers = [] + + communeManager.remotesManager.update() + + // For each role, construct an array for creepsFromRoom + + room.creepsFromRoom = {} + for (const role of creepRoles) room.creepsFromRoom[role] = [] + + room.creepsFromRoomAmount = 0 + + room.scoutTargets = new Set() + + if (!roomMemory[RoomMemoryKeys.deposits]) roomMemory[RoomMemoryKeys.deposits] = {} + + room.attackingDefenderIDs = new Set() + room.defenderEnemyTargetsWithDamage = new Map() + room.defenderEnemyTargetsWithDefender = new Map() + + if (room.terminal && room.controller.level >= 6) { + CollectiveManager.terminalCommunes.push(room.name) + } + + CollectiveManager.mineralNodes[room.roomManager.mineral.mineralType] += 1 + } + + static initRun(room: Room) { + this.preTickTest(room) + + const roomMemory = Memory.rooms[room.name] + if (!roomMemory[RoomMemoryKeys.communePlanned]) return + + const communeManager = room.communeManager + + communeManager.constructionManager.preTickRun() + ObserverProcs.preTickRun(room) + TerminalProcs.preTickRun(room) + communeManager.remotesManager.initRun() + communeManager.haulRequestManager.preTickRun() + communeManager.workRequestManager.preTickRun() + } + + private static preTickTest(room: Room) { + return + + let CPUUsed = Game.cpu.getUsed() + + customLog('CPU TEST 1 ' + room.name, Game.cpu.getUsed() - CPUUsed, { + type: LogTypes.info, + }) + } + + static run(room: Room) { + const roomMemory = Memory.rooms[room.name] + if (!roomMemory[RoomMemoryKeys.communePlanned]) return + + const communeManager = room.communeManager + + DefenceProcs.run(room) + TowerProcs.run(room) + DefenceProcs.manageThreat(room) + DefenceProcs.manageDefenceRequests(room) + + TerminalProcs.run(room) + + communeManager.workRequestManager.run() + communeManager.combatRequestManager.run() + communeManager.haulRequestManager.run() + + SourceProcs.createPowerTasks(room) + communeManager.remotesManager.run() + communeManager.haulerNeedManager.run() + + SpawningStructureProcs.createRoomLogisticsRequests(room) + LogisticsProcs.createCommuneStoringStructureLogisticsRequests(room) + communeManager.factoryManager.run() + LogisticsProcs.createCommuneContainerLogisticsRequests(room) + LogisticsProcs.createCommuneDroppedResourceLogisticsRequests(room) + LogisticsProcs.createCommuneTombstoneLogisticsRequests(room) + LogisticsProcs.createCommuneRuinLogisticsRequests(room) + communeManager.linkManager.run() + communeManager.labManager.run() + PowerSpawnProcs.run(room) + SpawningStructureProcs.createPowerTasks(room) + + room.roomManager.creepRoleManager.run() + room.roomManager.powerCreepRoleManager.run() + + CommuneProcs.tryUpdateMinHaulerCost(room) + SpawningStructureProcs.tryRunSpawning(room) + + SpawningStructureProcs.tryRegisterSpawningMovement(room) + room.roomManager.endTickCreepManager.run() + room.roomManager.roomVisualsManager.run() + + this.test(room) + } + + private static test(room: Room) { + return + + let CPUUsed = Game.cpu.getUsed() + + customLog('CPU TEST 1 ' + room.name, Game.cpu.getUsed() - CPUUsed, { + type: LogTypes.info, + }) + } + + /** + * Debug + */ + static visualizeSpawningStructuresByNeed(room: Room) { + customLog('spawningStructuresByNeed', room.communeManager.spawningStructuresByNeed, { + type: LogTypes.error, + }) + for (const structure of room.communeManager.spawningStructuresByNeed) { + room.coordVisual(structure.pos.x, structure.pos.y) + } + } + static getRCLUpdate(room: Room) { const data = communeData[room.name] // If the registered RCL is the actual RCL, we're good. No need to update anything @@ -75,4 +293,24 @@ export class CommuneProcs { for (const rampart of ramparts) { } } + + /** + * Delete a combat request from a commune + */ + static deleteCombatRequest(room: Room, requestName: string, index: number) { + delete Memory.combatRequests[requestName] + Memory.rooms[room.name][RoomMemoryKeys.combatRequests].splice(index, 1) + } + + /** + * Remove a remote from a commune + */ + static removeRemote(room: Room, remoteName: string, index: number) { + Memory.rooms[room.name][RoomMemoryKeys.remotes].splice(index, 1) + + const remoteMemory = Memory.rooms[remoteName] + + remoteMemory[RoomMemoryKeys.type] = RoomTypes.neutral + RoomNameUtils.cleanMemory(remoteName) + } } diff --git a/src/room/commune/communeUtils.ts b/src/room/commune/communeUtils.ts index 43967eae6..bf690a473 100644 --- a/src/room/commune/communeUtils.ts +++ b/src/room/commune/communeUtils.ts @@ -1,6 +1,6 @@ -import { packCoord, unpackCoord } from "other/codec" +import { packCoord, unpackCoord } from 'other/codec' import { CommuneDataProcs, communeData } from './communeData' -import { RoomDataProcs } from 'room/roomData' +import { RoomDataProcs, roomData } from 'room/roomData' import { findLinkThroughput, getRange, packAsNum, unpackNumAsCoord } from 'utils/utils' import { Result, @@ -13,6 +13,7 @@ import { CollectiveManager } from 'international/collective' import { RoomUtils } from 'room/roomUtils' import { StructureUtils } from 'room/structureUtils' import { OrganizedSpawns } from './spawning/spawningStructureProcs' +import { ResourceTargets } from './commune' export class CommuneUtils { static getGeneralRepairStructures(room: Room) { @@ -124,7 +125,7 @@ export class CommuneUtils { static getDesiredUpgraderStrength(room: Room) { const strength = Math.pow( (room.roomManager.resourcesInStoringStructures.energy - - room.communeManager.storedEnergyUpgradeThreshold * 0.5) / + this.storedEnergyUpgradeThreshold(room) * 0.5) / (6000 + room.controller.level * 2000), 2, ) @@ -271,4 +272,232 @@ export class CommuneUtils { // We have enough desired strength to register our room as fully funneled return true } + + static getResourceTargets(room: Room) { + const data = communeData[room.name] + if (data.resourceTargets !== undefined) return data.resourceTargets + + const resourceTargets: ResourceTargets = { + min: {}, + max: {}, + } + const storingStructuresCapacity = this.storingStructuresCapacity(room) + let min: number + + resourceTargets.min[RESOURCE_BATTERY] = room.roomManager.factory + ? storingStructuresCapacity * 0.005 + : 0 + resourceTargets.max[RESOURCE_BATTERY] = storingStructuresCapacity * 0.015 + + min = resourceTargets.min[RESOURCE_ENERGY] = + storingStructuresCapacity * 0.9 /* this.energyMinResourceTarget(storingStructuresCapacity) */ + resourceTargets.max[RESOURCE_ENERGY] = Math.max( + storingStructuresCapacity * 0.5, + this.minStoredEnergy(room), + min, + ) + + // minerals + + resourceTargets.min[RESOURCE_HYDROGEN] = storingStructuresCapacity * 0.01 + resourceTargets.max[RESOURCE_HYDROGEN] = storingStructuresCapacity * 0.027 + + resourceTargets.min[RESOURCE_OXYGEN] = storingStructuresCapacity * 0.01 + resourceTargets.max[RESOURCE_OXYGEN] = storingStructuresCapacity * 0.027 + + resourceTargets.min[RESOURCE_UTRIUM] = storingStructuresCapacity * 0.01 + resourceTargets.max[RESOURCE_UTRIUM] = storingStructuresCapacity * 0.027 + + resourceTargets.min[RESOURCE_KEANIUM] = storingStructuresCapacity * 0.01 + resourceTargets.max[RESOURCE_KEANIUM] = storingStructuresCapacity * 0.027 + + resourceTargets.min[RESOURCE_LEMERGIUM] = storingStructuresCapacity * 0.01 + resourceTargets.max[RESOURCE_LEMERGIUM] = storingStructuresCapacity * 0.027 + + resourceTargets.min[RESOURCE_ZYNTHIUM] = storingStructuresCapacity * 0.01 + resourceTargets.max[RESOURCE_ZYNTHIUM] = storingStructuresCapacity * 0.027 + + if (Game.shard.name === 'swc') { + resourceTargets.min[RESOURCE_CATALYST] = storingStructuresCapacity * 0 + resourceTargets.max[RESOURCE_CATALYST] = storingStructuresCapacity * 0.01 + } else { + resourceTargets.min[RESOURCE_CATALYST] = storingStructuresCapacity * 0.01 + resourceTargets.max[RESOURCE_CATALYST] = storingStructuresCapacity * 0.027 + } + + // Boosts + + resourceTargets.min[RESOURCE_UTRIUM_HYDRIDE] = 0 + resourceTargets.max[RESOURCE_UTRIUM_HYDRIDE] = storingStructuresCapacity * 0.01 + + resourceTargets.min[RESOURCE_UTRIUM_OXIDE] = 0 + resourceTargets.max[RESOURCE_UTRIUM_OXIDE] = storingStructuresCapacity * 0.01 + + resourceTargets.min[RESOURCE_KEANIUM_HYDRIDE] = 0 + resourceTargets.max[RESOURCE_KEANIUM_HYDRIDE] = storingStructuresCapacity * 0.01 + + resourceTargets.min[RESOURCE_KEANIUM_OXIDE] = 0 + resourceTargets.max[RESOURCE_KEANIUM_OXIDE] = storingStructuresCapacity * 0.01 + + resourceTargets.min[RESOURCE_LEMERGIUM_HYDRIDE] = 0 + resourceTargets.max[RESOURCE_LEMERGIUM_HYDRIDE] = storingStructuresCapacity * 0.01 + + resourceTargets.min[RESOURCE_LEMERGIUM_OXIDE] = 0 + resourceTargets.max[RESOURCE_LEMERGIUM_OXIDE] = storingStructuresCapacity * 0.01 + + resourceTargets.min[RESOURCE_ZYNTHIUM_HYDRIDE] = 0 + resourceTargets.max[RESOURCE_ZYNTHIUM_HYDRIDE] = storingStructuresCapacity * 0.01 + + resourceTargets.min[RESOURCE_ZYNTHIUM_OXIDE] = 0 + resourceTargets.max[RESOURCE_ZYNTHIUM_OXIDE] = storingStructuresCapacity * 0.01 + + resourceTargets.min[RESOURCE_GHODIUM_HYDRIDE] = 0 + resourceTargets.max[RESOURCE_GHODIUM_HYDRIDE] = storingStructuresCapacity * 0.01 + + // other raw + + resourceTargets.min[RESOURCE_POWER] = room.roomManager.powerSpawn + ? storingStructuresCapacity * 0.002 + : 0 + resourceTargets.max[RESOURCE_POWER] = storingStructuresCapacity * 0.015 + + resourceTargets.min[RESOURCE_OPS] = storingStructuresCapacity * 0.01 + resourceTargets.max[RESOURCE_OPS] = storingStructuresCapacity * 0.02 + + resourceTargets.min[RESOURCE_METAL] = 0 + resourceTargets.max[RESOURCE_METAL] = 0 + + resourceTargets.min[RESOURCE_BIOMASS] = 0 + resourceTargets.max[RESOURCE_BIOMASS] = 0 + + resourceTargets.min[RESOURCE_SILICON] = 0 + resourceTargets.max[RESOURCE_SILICON] = 0 + + resourceTargets.min[RESOURCE_MIST] = 0 + resourceTargets.max[RESOURCE_MIST] = 0 + + // commodities + // low level + + resourceTargets.min[RESOURCE_GHODIUM_MELT] = 0 + resourceTargets.max[RESOURCE_GHODIUM_MELT] = 0 + + resourceTargets.min[RESOURCE_COMPOSITE] = 0 + resourceTargets.max[RESOURCE_COMPOSITE] = 0 + + resourceTargets.min[RESOURCE_CRYSTAL] = 0 + resourceTargets.max[RESOURCE_CRYSTAL] = 0 + + resourceTargets.min[RESOURCE_LIQUID] = 0 + resourceTargets.max[RESOURCE_LIQUID] = 0 + + // tier 1 commodities + + resourceTargets.min[RESOURCE_ALLOY] = 0 + resourceTargets.max[RESOURCE_ALLOY] = 0 + + resourceTargets.min[RESOURCE_CELL] = 0 + resourceTargets.max[RESOURCE_CELL] = 0 + + resourceTargets.min[RESOURCE_WIRE] = 0 + resourceTargets.max[RESOURCE_WIRE] = 0 + + resourceTargets.min[RESOURCE_CONDENSATE] = 0 + resourceTargets.max[RESOURCE_CONDENSATE] = 0 + + // tier 2 + + // tier 3 + + // tier 4 + + // tier 5 + + data.resourceTargets = resourceTargets + return resourceTargets + } + + /** + * The minimum amount of stored energy the room should only use in emergencies + */ + static minStoredEnergy(room: Room) { + const data = communeData[room.name] + if (data.minStoredEnergy !== undefined) return data.minStoredEnergy + + // Consider the controller level to an exponent and this room's attack threat + + let minStoredEnergy = + Math.pow(room.controller.level * 6000, 1.06) + room.memory[RoomMemoryKeys.threatened] * 20 + + // If there is a next RCL, Take away some minimum based on how close we are to the next RCL + + const RClCost = room.controller.progressTotal + if (RClCost) { + minStoredEnergy -= Math.pow( + (Math.min(room.controller.progress, RClCost) / RClCost) * 20, + 3.35, + ) + } + + minStoredEnergy = Math.floor(minStoredEnergy) + + data.minStoredEnergy = minStoredEnergy + return minStoredEnergy + } + + static storedEnergyUpgradeThreshold(room: Room) { + return Math.floor(this.minStoredEnergy(room) * 1.3) + } + + static energyMinResourceTarget(room: Room, storingStructuresCapacity: number) { + if (room.controller.level < 8) { + const funnelOrder = CollectiveManager.getFunnelOrder() + if (funnelOrder[0] === room.name) { + return Math.min( + this.storedEnergyUpgradeThreshold(room) * 1.2 + this.upgradeTargetDistance(room), + storingStructuresCapacity / 2, + ) + } + return Math.min(this.storedEnergyUpgradeThreshold(room) * 1.2, storingStructuresCapacity / 2) + } + + return this.minStoredEnergy(room) + } + + static upgradeTargetDistance(room: Room) { + return Math.min( + room.controller.progressTotal - room.controller.progress, + Game.gcl.progressTotal - Game.gcl.progress, + ) + } + + /** + * Presciption on if we should be trying to build remote contianers + */ + static shouldRemoteContainers(room: Room) { + return room.energyCapacityAvailable >= 650 + } + + static storingStructuresCapacity(room: Room) { + if (room.storingStructuresCapacity !== undefined) return room.storingStructuresCapacity + + let capacity = 0 + if (room.storage && room.controller.level >= 4) capacity += room.storage.store.getCapacity() + if (room.terminal && room.controller.level >= 6) capacity += room.terminal.store.getCapacity() + + room.storingStructuresCapacity = capacity + return capacity + } + + static storingStructures(room: Room) { + if (room.storingStructures !== undefined) return room.storingStructures + + const storingStructures: (StructureStorage | StructureTerminal)[] = [] + + if (room.storage && room.controller.level >= 4) storingStructures.push(room.storage) + if (room.terminal && room.controller.level >= 6) storingStructures.push(room.terminal) + + room.storingStructures = storingStructures + return storingStructures + } } diff --git a/src/room/commune/factory.ts b/src/room/commune/factory.ts index 16e9d8e6f..92f0720e8 100644 --- a/src/room/commune/factory.ts +++ b/src/room/commune/factory.ts @@ -1,5 +1,6 @@ import { RoomMemoryKeys } from 'international/constants' import { CommuneManager, ResourceTargets } from './commune' +import { CommuneUtils } from './communeUtils' const BASE_RESOURCES = [ 'energy', @@ -239,7 +240,7 @@ export class FactoryManager { if ( this.communeManager.room.roomManager.resourcesInStoringStructures[RESOURCE_ENERGY] > - this.communeManager.room.communeManager.minStoredEnergy * 1.2 && + CommuneUtils.minStoredEnergy(this.communeManager.room) * 1.2 && this.communeManager.room.roomManager.resourcesInStoringStructures.battery < this.communeManager.room.roomManager.resourcesInStoringStructures.energy / 100 ) { @@ -250,7 +251,7 @@ export class FactoryManager { if ( this.communeManager.room.roomManager.resourcesInStoringStructures[RESOURCE_ENERGY] < - this.communeManager.room.communeManager.minStoredEnergy && + CommuneUtils.minStoredEnergy(this.communeManager.room) && this.communeManager.room.roomManager.resourcesInStoringStructures[RESOURCE_BATTERY] >= 600 ) { @@ -290,7 +291,7 @@ export class FactoryManager { const resourcesInStoringStructures = this.communeManager.room.roomManager.resourcesInStoringStructures - const resourceTargets = this.communeManager.resourceTargets + const resourceTargets = CommuneUtils.getResourceTargets(this.communeManager.room) for (const resourceType of stuffToMake) { const max = resourceTargets.max[resourceType] diff --git a/src/room/commune/haulRequestManager.ts b/src/room/commune/haulRequestManager.ts index d3b8a5a53..a396684bd 100644 --- a/src/room/commune/haulRequestManager.ts +++ b/src/room/commune/haulRequestManager.ts @@ -6,6 +6,7 @@ import { } from 'international/constants' import { randomIntRange, randomTick, Utils } from 'utils/utils' import { CommuneManager } from './commune' +import { CommuneUtils } from './communeUtils' const checkRoomStatusInverval = randomIntRange(200, 500) @@ -26,7 +27,7 @@ export class HaulRequestManager { if ( !request || !room.roomManager.structures.spawn.length || - room.roomManager.resourcesInStoringStructures.energy < this.communeManager.minStoredEnergy + room.roomManager.resourcesInStoringStructures.energy < CommuneUtils.minStoredEnergy(this.communeManager.room) ) { this.communeManager.room.memory[RoomMemoryKeys.haulRequests].splice(index, 1) continue diff --git a/src/room/commune/links.ts b/src/room/commune/links.ts index 84dd16412..323629156 100644 --- a/src/room/commune/links.ts +++ b/src/room/commune/links.ts @@ -1,11 +1,12 @@ import { - RoomLogisticsRequestTypes, - linkReceiveTreshold, - linkSendThreshold, + RoomLogisticsRequestTypes, + linkReceiveTreshold, + linkSendThreshold, } from 'international/constants' import { customLog } from 'utils/logging' import { CommuneManager } from './commune' import { StructureUtils } from 'room/structureUtils' +import { CommuneUtils } from './communeUtils' export class LinkManager { communeManager: CommuneManager @@ -143,7 +144,7 @@ export class LinkManager { if ( this.communeManager.room.controller.ticksToDowngrade > 10000 && this.communeManager.room.roomManager.resourcesInStoringStructures.energy < - this.communeManager.storedEnergyUpgradeThreshold * 0.5 + CommuneUtils.storedEnergyUpgradeThreshold(this.communeManager.room) * 0.5 ) return diff --git a/src/room/commune/powerSpawnProcs.ts b/src/room/commune/powerSpawnProcs.ts index 52db686af..40b2ce952 100644 --- a/src/room/commune/powerSpawnProcs.ts +++ b/src/room/commune/powerSpawnProcs.ts @@ -2,6 +2,7 @@ import { CollectiveManager } from 'international/collective' import { RoomLogisticsRequestTypes } from 'international/constants' import { StatsManager } from 'international/stats' import { scalePriority } from 'utils/utils' +import { CommuneUtils } from './communeUtils' export class PowerSpawnProcs { static run(room: Room) { @@ -46,14 +47,14 @@ export class PowerSpawnProcs { // Make sure we have a reasonable amount of power to process if (resourcesInStoringStructures.power < powerSpawn.store.getCapacity(RESOURCE_POWER)) return // Make sure we have enough energy -- don't process power if our economy is struggling or reovering - if (resourcesInStoringStructures.energy < room.communeManager.minStoredEnergy) return + if (resourcesInStoringStructures.energy < CommuneUtils.minStoredEnergy(room)) return // energy room.createRoomLogisticsRequest({ target: powerSpawn, /* onlyFull: true, */ - type: RoomLogisticsRequestTypes.offer, + type: RoomLogisticsRequestTypes.transfer, priority: scalePriority( powerSpawn.store.getCapacity(RESOURCE_ENERGY), powerSpawn.usedReserveStore, @@ -71,7 +72,7 @@ export class PowerSpawnProcs { room.createRoomLogisticsRequest({ target: powerSpawn, /* onlyFull: true, */ - type: RoomLogisticsRequestTypes.offer, + type: RoomLogisticsRequestTypes.transfer, priority: scalePriority( powerSpawn.store.getCapacity(RESOURCE_ENERGY), powerSpawn.usedReserveStore, diff --git a/src/room/commune/remotesManager.ts b/src/room/commune/remotesManager.ts index 39eadb099..d7b5ae84c 100644 --- a/src/room/commune/remotesManager.ts +++ b/src/room/commune/remotesManager.ts @@ -21,6 +21,7 @@ import { unpackPosList } from 'other/codec' import { CommuneManager } from './commune' import { RoomNameUtils } from 'room/roomNameUtils' import { StructureUtils } from 'room/structureUtils' +import { CommuneProcs } from './communeProcs' type RemoteSourcePathTypes = | RoomMemoryKeys.remoteSourceFastFillerPaths @@ -92,7 +93,7 @@ export class RemotesManager { remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote || remoteMemory[RoomMemoryKeys.commune] !== room.name ) { - this.communeManager.removeRemote(remoteName, index) + CommuneProcs.removeRemote(room, remoteName, index) continue } @@ -105,7 +106,7 @@ export class RemotesManager { Utils.isTickInterval(checkRoomStatusInterval) && Memory.rooms[room.name][RoomMemoryKeys.status] !== remoteMemory[RoomMemoryKeys.status] ) { - this.communeManager.removeRemote(remoteName, index) + CommuneProcs.removeRemote(room, remoteName, index) continue } diff --git a/src/room/commune/spawning/spawnRequests.ts b/src/room/commune/spawning/spawnRequests.ts index 3cd01b51f..a2c903168 100644 --- a/src/room/commune/spawning/spawnRequests.ts +++ b/src/room/commune/spawning/spawnRequests.ts @@ -1,29 +1,19 @@ import { WorkRequestKeys, CombatRequestKeys, - containerUpkeepCost, - customColors, - rampartUpkeepCost, - roadUpkeepCost, packedPosLength, decayCosts, CreepMemoryKeys, RoomMemoryKeys, RoomTypes, } from 'international/constants' -import { - findCarryPartsRequired, - findLinkThroughput, - getRangeXY, - getRange, - randomRange, - roundTo, -} from 'utils/utils' import { CollectiveManager } from 'international/collective' import { CommuneManager } from '../commune' -import { SpawnRequest, SpawnRequestArgs, SpawnRequestTypes } from 'types/spawnRequest' +import { SpawnRequestArgs, SpawnRequestTypes } from 'types/spawnRequest' import { CommuneUtils } from '../communeUtils' import { StructureUtils } from 'room/structureUtils' +import { CommuneProcs } from '../communeProcs' +import { Utils } from 'utils/utils' export class SpawnRequestsManager { communeManager: CommuneManager @@ -585,7 +575,7 @@ export class SpawnRequestsManager { if ( repairTargets.length || this.communeManager.room.towerInferiority || - !this.communeManager.storingStructures.length + !CommuneUtils.storingStructures(this.communeManager.room).length ) { priority = Math.min( 6 + this.communeManager.room.creepsFromRoom.maintainer.length * 0.5, @@ -681,7 +671,7 @@ export class SpawnRequestsManager { if (!this.communeManager.room.find(FIND_MY_CONSTRUCTION_SITES).length) return false let priority: number - if (this.communeManager.storingStructures.length) { + if (CommuneUtils.storingStructures(this.communeManager.room).length) { priority = this.activeRemotePriority + 0.1 } else { priority = this.minRemotePriority - 0.5 @@ -880,7 +870,7 @@ export class SpawnRequestsManager { } let priority: number - if (this.communeManager.storingStructures.length) { + if (CommuneUtils.storingStructures(this.communeManager.room).length) { priority = this.activeRemotePriority + 0.2 } else { priority = this.minRemotePriority - 1 @@ -898,7 +888,7 @@ export class SpawnRequestsManager { if ( this.communeManager.room.roomManager.resourcesInStoringStructures.energy < - this.communeManager.room.communeManager.storedEnergyUpgradeThreshold + CommuneUtils.storedEnergyUpgradeThreshold(this.communeManager.room) ) { return false } @@ -1689,26 +1679,26 @@ export class SpawnRequestsManager { // - const minRangedAttackCost = this.communeManager.room.communeManager.findMinRangedAttackCost( + const minRangedAttackCost = Utils.findMinRangedAttackCost( request[CombatRequestKeys.minDamage], ) const rangedAttackAmount = Math.floor( minRangedAttackCost / (BODYPART_COST[RANGED_ATTACK] + BODYPART_COST[MOVE]), ) - const minAttackCost = this.communeManager.room.communeManager.findMinMeleeAttackCost( + const minAttackCost = Utils.findMinMeleeAttackCost( request[CombatRequestKeys.minDamage], ) const attackAmount = Math.floor(minAttackCost / (BODYPART_COST[ATTACK] + BODYPART_COST[MOVE])) - const minMeleeHealCost = this.communeManager.room.communeManager.findMinHealCost( + const minMeleeHealCost = Utils.findMinHealCost( request[CombatRequestKeys.minMeleeHeal] + (request[CombatRequestKeys.maxTowerDamage] || 0), ) const meleeHealAmount = Math.floor( minMeleeHealCost / (BODYPART_COST[HEAL] + BODYPART_COST[MOVE]), ) - const minRangedHealCost = this.communeManager.room.communeManager.findMinHealCost( + const minRangedHealCost = Utils.findMinHealCost( request[CombatRequestKeys.minRangedHeal] + (request[CombatRequestKeys.maxTowerDamage] || 0), ) const rangedHealAmount = Math.floor( @@ -1730,7 +1720,7 @@ export class SpawnRequestsManager { (rangedAttackAmount + rangedHealAmount) * 2 > 50 || attackAmount * 2 > 50 ) { - this.communeManager.room.communeManager.deleteCombatRequest(requestName, i) + CommuneProcs.deleteCombatRequest(this.communeManager.room, requestName, i) continue } @@ -1857,7 +1847,7 @@ export class SpawnRequestsManager { minAttackCost + minMeleeHealCost > this.communeManager.room.energyCapacityAvailable || minAttackCost > this.communeManager.room.energyCapacityAvailable ) { - this.communeManager.room.communeManager.deleteCombatRequest(requestName, i) + CommuneProcs.deleteCombatRequest(this.communeManager.room, requestName, i) continue } diff --git a/src/room/commune/terminal/terminalProcs.ts b/src/room/commune/terminal/terminalProcs.ts index 445a6eb0d..2519ade65 100644 --- a/src/room/commune/terminal/terminalProcs.ts +++ b/src/room/commune/terminal/terminalProcs.ts @@ -8,13 +8,14 @@ import { newID, Utils } from 'utils/utils' import { ResourceTargets } from '../commune' import { TradingUtils } from './tradingUtils' import { ResourceRequest } from 'international/simpleAllies/types' +import { CommuneUtils } from '../communeUtils' export class TerminalProcs { static preTickRun(room: Room) { if (!room.terminal) return if (!StructureUtils.isRCLActionable(room.terminal)) return - const resourceTargets = room.communeManager.resourceTargets + const resourceTargets = CommuneUtils.getResourceTargets(room) this.createTerminalRequests(room, resourceTargets) } @@ -25,7 +26,7 @@ export class TerminalProcs { if (!StructureUtils.isRCLActionable(room.terminal)) return if (room.terminal.cooldown > 0) return - const resourceTargets = room.communeManager.resourceTargets + const resourceTargets = CommuneUtils.getResourceTargets(room) if (this.respondToTerminalRequests(room, resourceTargets) === Result.action) return if (this.respondToAllyRequests(room, resourceTargets) === Result.action) return @@ -77,7 +78,7 @@ export class TerminalProcs { const resourcesInStoringStructures = room.roomManager.resourcesInStoringStructures const storedEnergy = resourcesInStoringStructures[RESOURCE_ENERGY] const budget = Math.min( - storedEnergy - room.communeManager.minStoredEnergy, + storedEnergy - CommuneUtils.minStoredEnergy(room), room.terminal.store.getUsedCapacity(RESOURCE_ENERGY), ) @@ -180,7 +181,7 @@ export class TerminalProcs { private static respondToTerminalRequests(room: Room, resourceTargets: ResourceTargets) { // We don't have enough energy to help other rooms - if (room.roomManager.resourcesInStoringStructures.energy < room.communeManager.minStoredEnergy) + if (room.roomManager.resourcesInStoringStructures.energy < CommuneUtils.minStoredEnergy(room)) return Result.noAction const [request, ID, amount] = this.findBestTerminalRequest(room, resourceTargets) @@ -249,7 +250,7 @@ export class TerminalProcs { // We don't have enough energy to help other rooms - if (room.roomManager.resourcesInStoringStructures.energy < room.communeManager.minStoredEnergy) + if (room.roomManager.resourcesInStoringStructures.energy < CommuneUtils.minStoredEnergy(room)) return false const [request, amount] = this.findBestAllyRequest(room, resourceTargets) diff --git a/src/room/commune/workRequest.ts b/src/room/commune/workRequest.ts index 708d3850a..bf96be90a 100644 --- a/src/room/commune/workRequest.ts +++ b/src/room/commune/workRequest.ts @@ -10,6 +10,7 @@ import { CollectiveManager } from 'international/collective' import { CommuneManager } from './commune' import { StatsManager } from 'international/stats' import { WorkRequest } from 'types/internationalRequests' +import { CommuneProcs } from './communeProcs' const checkRoomStatusInverval = randomIntRange(200, 500) @@ -191,7 +192,8 @@ export class WorkRequestManager { if (combatRequest[CombatRequestKeys.responder]) { const combatRequestResponder = Game.rooms[combatRequest[CombatRequestKeys.responder]] - combatRequestResponder.communeManager.deleteCombatRequest( + CommuneProcs.deleteCombatRequest( + combatRequestResponder, combatRequest[CombatRequestKeys.responder], combatRequestResponder.memory[RoomMemoryKeys.combatRequests].indexOf(workRequestName), ) diff --git a/src/room/construction/construction.ts b/src/room/construction/construction.ts index 857165ad5..b70bb63fe 100644 --- a/src/room/construction/construction.ts +++ b/src/room/construction/construction.ts @@ -15,6 +15,7 @@ import { BasePlans } from './basePlans' import { RampartPlans } from './rampartPlans' import { CollectiveManager } from 'international/collective' import { Sleepable } from 'utils/sleepable' +import { CommuneUtils } from 'room/commune/communeUtils' const generalMigrationStructures: BuildableStructureConstant[] = [ STRUCTURE_EXTENSION, @@ -114,7 +115,7 @@ export class ConstructionManager { } private placeRamparts(RCL: number, maxCSites: number) { const rampartPlans = this.communeManager.room.roomManager.rampartPlans - const hasStoringStructure = !!this.room.communeManager.storingStructures.length + const hasStoringStructure = !!CommuneUtils.storingStructures(this.communeManager.room).length for (const packedCoord in rampartPlans.map) { const coord = unpackCoord(packedCoord) diff --git a/src/room/creeps/creepProcs.ts b/src/room/creeps/creepProcs.ts index c43f6cfbe..b50d3581b 100644 --- a/src/room/creeps/creepProcs.ts +++ b/src/room/creeps/creepProcs.ts @@ -278,7 +278,7 @@ export class CreepProcs { static repairCommune(creep: Creep) { if (creep.needsResources()) { if ( - creep.room.communeManager.storingStructures.length && + CommuneUtils.storingStructures(creep.room).length && creep.room.roomManager.resourcesInStoringStructures.energy < 3000 ) return Result.fail diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index 354604d3d..55e6cf37f 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -176,7 +176,7 @@ Creep.prototype.builderGetEnergy = function () { if (this.room.communeManager.buildersMakeRequests) return Result.noAction if (!this.needsResources()) return Result.noAction - if (this.room.communeManager && this.room.communeManager.storingStructures.length) { + if (this.room.communeManager && CommuneUtils.storingStructures(this.room).length) { if (this.room.roomManager.resourcesInStoringStructures.energy < 1000) { return Result.noAction } diff --git a/src/room/creeps/creepUtils.ts b/src/room/creeps/creepUtils.ts index 3ff32c871..ba2322766 100644 --- a/src/room/creeps/creepUtils.ts +++ b/src/room/creeps/creepUtils.ts @@ -422,13 +422,13 @@ export class CreepUtils { if (request.resourceType === RESOURCE_ENERGY) { const minAmount = creep.freeNextStore - storingStructure = creep.commune.communeManager.storingStructures.find( + storingStructure = CommuneUtils.storingStructures(creep.commune).find( structure => structure.reserveStore[request.resourceType] >= minAmount, ) } else { const minAmount = Math.min(creep.freeNextStore, request.amount) - storingStructure = creep.commune.communeManager.storingStructures.find( + storingStructure = CommuneUtils.storingStructures(creep.commune).find( structure => structure.reserveStore[request.resourceType] >= minAmount, ) } @@ -495,7 +495,7 @@ export class CreepUtils { } static createBackupStoringStructuresRoomLogisticsRequestTransfer(creep: Creep) { - const storingStructures = creep.commune.communeManager.storingStructures + const storingStructures = CommuneUtils.storingStructures(creep.commune) if (!storingStructures.length) return Result.fail const nextStore = creep.nextStore @@ -528,7 +528,7 @@ export class CreepUtils { creep: Creep, resourceTypes: Set = new Set([RESOURCE_ENERGY]), ) { - const storingStructures = creep.commune.communeManager.storingStructures + const storingStructures = CommuneUtils.storingStructures(creep.commune) if (!storingStructures.length) return Result.fail let resourceType: ResourceConstant diff --git a/src/room/creeps/powerCreeps/operator.ts b/src/room/creeps/powerCreeps/operator.ts index 81ae2419b..b59be455b 100644 --- a/src/room/creeps/powerCreeps/operator.ts +++ b/src/room/creeps/powerCreeps/operator.ts @@ -1,4 +1,5 @@ import { Result, customColors, PowerCreepMemoryKeys, PowerCreepTasks } from 'international/constants' +import { CommuneUtils } from 'room/commune/communeUtils' import { PowerTask } from 'types/roomRequests' import { customLog } from 'utils/logging' import { findObjectWithID, getRange } from 'utils/utils' @@ -146,7 +147,7 @@ export class Operator extends PowerCreep { // We are sufficiently full of ops - const storingStructure = this.room.communeManager.storingStructures[0] + const storingStructure = CommuneUtils.storingStructures(this.room)[0] if (!storingStructure) return false this.memory[PowerCreepMemoryKeys.task] = PowerCreepTasks.transferOps @@ -157,7 +158,7 @@ export class Operator extends PowerCreep { // We are sufficiently full of ops - const storingStructure = this.room.communeManager.storingStructures[0] + const storingStructure = CommuneUtils.storingStructures(this.room)[0] if (!storingStructure) return false const transferAmount = this.store.getUsedCapacity(RESOURCE_OPS) * 0.5 diff --git a/src/room/creeps/roleManagers/commune/hubHauler.ts b/src/room/creeps/roleManagers/commune/hubHauler.ts index c5f7b88ba..d57308852 100644 --- a/src/room/creeps/roleManagers/commune/hubHauler.ts +++ b/src/room/creeps/roleManagers/commune/hubHauler.ts @@ -9,6 +9,7 @@ import { powerSpawnRefillThreshold, } from 'international/constants' import { packCoord, unpackCoord } from 'other/codec' +import { CommuneUtils } from 'room/commune/communeUtils' import { CreepProcs } from 'room/creeps/creepProcs' import { findObjectWithID, getRange, unpackNumAsPos } from 'utils/utils' @@ -500,7 +501,7 @@ export class HubHauler extends Creep { if ( resource === RESOURCE_ENERGY && - room.roomManager.resourcesInStoringStructures.energy < room.communeManager.minStoredEnergy + room.roomManager.resourcesInStoringStructures.energy < CommuneUtils.minStoredEnergy(room) ) continue diff --git a/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts b/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts index 882b8ea67..f3966038e 100644 --- a/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts +++ b/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts @@ -23,6 +23,7 @@ import { indexOf } from 'lodash' import { CreepUtils } from 'room/creeps/creepUtils' import { MyCreepUtils } from 'room/creeps/myCreepUtils' import { CreepProcs } from 'room/creeps/creepProcs' +import { CommuneUtils } from 'room/commune/communeUtils' export class RemoteHarvester extends Creep { constructor(creepID: Id) { @@ -370,7 +371,7 @@ export class RemoteHarvester extends Creep { buildContainer(): number { // Don't build new remote containers until we can reserve the room - if (!this.commune.communeManager.shouldRemoteContainers) return Result.noAction + if (!CommuneUtils.shouldRemoteContainers(this.room)) return Result.noAction // Make sure we're a bit ahead source regen time diff --git a/src/room/room.ts b/src/room/room.ts index 9ec8593c8..97d336b99 100644 --- a/src/room/room.ts +++ b/src/room/room.ts @@ -65,6 +65,7 @@ import { CollectiveManager } from 'international/collective' import { customLog } from 'utils/logging' import { StructureUtils } from './structureUtils' import { LogisticsProcs } from './logisticsProcs' +import { CommuneProcs } from './commune/communeProcs' export interface InterpretedRoomEvent { eventType: EventConstant @@ -125,189 +126,6 @@ export class RoomManager { reservedCoords: Map roomLogisticsBlacklistCoords: Set = new Set() - update(room: Room) { - delete this._structureUpdate - delete this.checkedCSiteUpdate - delete this._communeSources - delete this._remoteSources - delete this._mineral - delete this.checkedCSiteUpdate - delete this._structures - delete this._cSites - delete this._notMyCreeps - delete this._enemyAttackers - delete this._myDamagedCreeps - delete this._myDamagedPowerCreeps - delete this._allyDamagedCreeps - this._enemyCreepPositions = undefined - delete this._notMyConstructionSites - delete this._allyConstructionSitesByType - delete this._dismantleTargets - delete this._destructibleStructures - delete this._combatStructureTargets - delete this._remoteNamesByEfficacy - delete this._remoteSourceIndexesByEfficacy - - this._sourceContainers = undefined - this._fastFillerContainers = undefined - this._controllerContainer = undefined - this._mineralContainer = undefined - this._fastFillerLink = undefined - this._hubLink = undefined - this._droppedEnergy = undefined - this._droppedResources = undefined - this._actionableWalls = undefined - this._quadCostMatrix = undefined - this._quadBulldozeCostMatrix = undefined - this._enemyDamageThreat = undefined - this._enemyThreatCoords = undefined - this._enemyThreatGoals = undefined - /* this._flags = undefined */ - this._resourcesInStoringStructures = undefined - this._unprotectedEnemyCreeps = undefined - this._exitCoords = undefined - this._advancedLogistics = undefined - this._defaultCostMatrix = undefined - this._totalEnemyCombatStrength = undefined - this._factory = undefined - this._powerSpawn = undefined - this._nuker = undefined - this._observer = undefined - - if (randomTick()) { - delete this._nukeTargetCoords - this.roomLogisticsBlacklistCoords = new Set() - } - - this.reservedCoords = new Map() - - this.room = room - const roomMemory = room.memory - - // If it hasn't been scouted for 100~ ticks - if (Game.time - roomMemory[RoomMemoryKeys.lastScout] > Math.floor(Math.random() * 200)) { - room.basicScout() - RoomNameUtils.cleanMemory(room.name) - } - - const roomType = roomMemory[RoomMemoryKeys.type] - if (roomTypesUsedForStats.includes(roomType)) { - StatsManager.roomInitialRun(room.name, roomType) - } - - room.moveRequests = {} - room.creepPositions = {} - room.powerCreepPositions = {} - - // Single tick properties - - room.myCreeps = [] - room.myPowerCreeps = [] - - room.myCreepsByRole = {} - for (const role of creepRoles) room.myCreepsByRole[role] = [] - - room.myPowerCreepsByRole = {} - for (const className of powerCreepClassNames) room.myPowerCreepsByRole[className] = [] - - room.powerTasks = {} - - room.creepsOfSource = [] - for (const index in room.find(FIND_SOURCES)) room.creepsOfSource.push([]) - - room.squadRequests = new Set() - - room.roomLogisticsRequests = { - [RoomLogisticsRequestTypes.transfer]: {}, - [RoomLogisticsRequestTypes.withdraw]: {}, - [RoomLogisticsRequestTypes.offer]: {}, - [RoomLogisticsRequestTypes.pickup]: {}, - } - - if (!room.controller) return - - // There is a controller - - if (this.updatePotentialCommune(room) === true) return - - // The room isn't a commune - } - - /** - * - * @returns wether or not the room is a commune - */ - private updatePotentialCommune(room: Room): boolean { - const roomMemory = Memory.rooms[room.name] - - if (!this.room.controller.my) { - if (roomMemory[RoomMemoryKeys.type] === RoomTypes.commune) { - roomMemory[RoomMemoryKeys.type] = RoomTypes.neutral - RoomNameUtils.cleanMemory(room.name) - } - return false - } - - // If the type isn't a commune, make it so and clean its memory - - if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.commune) { - roomMemory[RoomMemoryKeys.type] = RoomTypes.commune - RoomNameUtils.cleanMemory(room.name) - } - - // If there is no communeManager for the room yet, make one and assign them together - - room.communeManager = CommuneManager.communeManagers[room.name] - if (!room.communeManager) { - room.communeManager = new CommuneManager() - CommuneManager.communeManagers[room.name] = room.communeManager - } - - room.communeManager.update(room) - return true - } - - initRun() { - if (this.room.communeManager) { - this.room.communeManager.initRun() - return - } - } - - run() { - this.test() - - if (this.room.communeManager) { - this.room.communeManager.run() - return - } - - if (this.room.memory[RoomMemoryKeys.type] === RoomTypes.remote) { - LogisticsProcs.createRemoteContainerLogisticsRequests(this.room) - LogisticsProcs.createRemoteDroppedResourceLogisticsRequests(this.room) - LogisticsProcs.createRemoteTombstoneLogisticsRequests(this.room) - LogisticsProcs.createRemoteRuinLogisticsRequests(this.room) - } - - this.creepRoleManager.run() - this.powerCreepRoleManager.run() - this.endTickCreepManager.run() - this.roomVisualsManager.run() - } - - private test() {} - - /** - * Debug - */ - private visualizeReservedCoords() { - customLog('reservedCoords', JSON.stringify([...this.reservedCoords])) - for (const [packedCoord, reserveType] of this.reservedCoords) { - const coord = unpackCoord(packedCoord) - this.room.coordVisual(coord.x, coord.y, `hsl(${200}${reserveType * 50}, 100%, 60%)`) - } - } - findRemoteSources(commune: Room) { const anchor = commune.roomManager.anchor if (!anchor) throw Error('No anchor for remote source harvest positions ' + this.room.name) diff --git a/src/room/roomProcs.ts b/src/room/roomProcs.ts index 8725f0517..cb62ab3cd 100644 --- a/src/room/roomProcs.ts +++ b/src/room/roomProcs.ts @@ -1,6 +1,214 @@ -import { Dashboard, Rectangle, Table } from "screeps-viz" +import { + RoomMemoryKeys, + roomTypesUsedForStats, + creepRoles, + powerCreepClassNames, + RoomLogisticsRequestTypes, + RoomTypes, +} from 'international/constants' +import { StatsManager } from 'international/stats' +import { Dashboard, Rectangle, Table } from 'screeps-viz' +import { randomTick } from 'utils/utils' +import { RoomNameUtils } from './roomNameUtils' +import { CommuneManager } from './commune/commune' +import { CommuneProcs } from './commune/communeProcs' +import { LogisticsProcs } from './logisticsProcs' +import { customLog } from 'utils/logging' +import { unpackCoord } from 'other/codec' export class RoomProcs { + static update(room: Room) { + const roomManager = room.roomManager + + delete roomManager._structureUpdate + delete roomManager.checkedCSiteUpdate + delete roomManager._communeSources + delete roomManager._remoteSources + delete roomManager._mineral + delete roomManager.checkedCSiteUpdate + delete roomManager._structures + delete roomManager._cSites + delete roomManager._notMyCreeps + delete roomManager._enemyAttackers + delete roomManager._myDamagedCreeps + delete roomManager._myDamagedPowerCreeps + delete roomManager._allyDamagedCreeps + roomManager._enemyCreepPositions = undefined + delete roomManager._notMyConstructionSites + delete roomManager._allyConstructionSitesByType + delete roomManager._dismantleTargets + delete roomManager._destructibleStructures + delete roomManager._combatStructureTargets + delete roomManager._remoteNamesByEfficacy + delete roomManager._remoteSourceIndexesByEfficacy + + roomManager._sourceContainers = undefined + roomManager._fastFillerContainers = undefined + roomManager._controllerContainer = undefined + roomManager._mineralContainer = undefined + roomManager._fastFillerLink = undefined + roomManager._hubLink = undefined + roomManager._droppedEnergy = undefined + roomManager._droppedResources = undefined + roomManager._actionableWalls = undefined + roomManager._quadCostMatrix = undefined + roomManager._quadBulldozeCostMatrix = undefined + roomManager._enemyDamageThreat = undefined + roomManager._enemyThreatCoords = undefined + roomManager._enemyThreatGoals = undefined + /* this._flags = undefined */ + roomManager._resourcesInStoringStructures = undefined + roomManager._unprotectedEnemyCreeps = undefined + roomManager._exitCoords = undefined + roomManager._advancedLogistics = undefined + roomManager._defaultCostMatrix = undefined + roomManager._totalEnemyCombatStrength = undefined + roomManager._factory = undefined + roomManager._powerSpawn = undefined + roomManager._nuker = undefined + roomManager._observer = undefined + + if (randomTick()) { + delete roomManager._nukeTargetCoords + roomManager.roomLogisticsBlacklistCoords = new Set() + } + + roomManager.reservedCoords = new Map() + + roomManager.room = room + const roomMemory = room.memory + + // If it hasn't been scouted for 100~ ticks + if (Game.time - roomMemory[RoomMemoryKeys.lastScout] > Math.floor(Math.random() * 200)) { + room.basicScout() + RoomNameUtils.cleanMemory(room.name) + } + + const roomType = roomMemory[RoomMemoryKeys.type] + if (roomTypesUsedForStats.includes(roomType)) { + StatsManager.roomInitialRun(room.name, roomType) + } + + room.moveRequests = {} + room.creepPositions = {} + room.powerCreepPositions = {} + + // Single tick properties + + room.myCreeps = [] + room.myPowerCreeps = [] + + room.myCreepsByRole = {} + for (const role of creepRoles) room.myCreepsByRole[role] = [] + + room.myPowerCreepsByRole = {} + for (const className of powerCreepClassNames) room.myPowerCreepsByRole[className] = [] + + room.powerTasks = {} + + room.creepsOfSource = [] + for (const index in room.find(FIND_SOURCES)) room.creepsOfSource.push([]) + + room.squadRequests = new Set() + + room.roomLogisticsRequests = { + [RoomLogisticsRequestTypes.transfer]: {}, + [RoomLogisticsRequestTypes.withdraw]: {}, + [RoomLogisticsRequestTypes.offer]: {}, + [RoomLogisticsRequestTypes.pickup]: {}, + } + + if (!room.controller) return + + // There is a controller + + if (this.updatePotentialCommune(room) === true) return + + // The room isn't a commune + } + + /** + * + * @returns wether or not the room is a commune + */ + private static updatePotentialCommune(room: Room): boolean { + const roomMemory = Memory.rooms[room.name] + + if (!room.controller.my) { + if (roomMemory[RoomMemoryKeys.type] === RoomTypes.commune) { + roomMemory[RoomMemoryKeys.type] = RoomTypes.neutral + RoomNameUtils.cleanMemory(room.name) + } + return false + } + + // If the type isn't a commune, make it so and clean its memory + + if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.commune) { + roomMemory[RoomMemoryKeys.type] = RoomTypes.commune + RoomNameUtils.cleanMemory(room.name) + } + + // If there is no communeManager for the room yet, make one and assign them together + + room.communeManager = CommuneManager.communeManagers[room.name] + if (!room.communeManager) { + room.communeManager = new CommuneManager() + CommuneManager.communeManagers[room.name] = room.communeManager + } + + CommuneProcs.update(room) + return true + } + + static initRun(room: Room) { + if (room.communeManager) { + CommuneProcs.initRun(room) + return + } + } + + static run(room: Room) { + + const roomMemory = Memory.rooms[room.name] + if (roomMemory[RoomMemoryKeys.type] === RoomTypes.commune) { + CommuneProcs.run(room) + return + } + + if (roomMemory[RoomMemoryKeys.type] === RoomTypes.remote) { + LogisticsProcs.createRemoteContainerLogisticsRequests(room) + LogisticsProcs.createRemoteDroppedResourceLogisticsRequests(room) + LogisticsProcs.createRemoteTombstoneLogisticsRequests(room) + LogisticsProcs.createRemoteRuinLogisticsRequests(room) + } + + const roomManager = room.roomManager + + roomManager.creepRoleManager.run() + roomManager.powerCreepRoleManager.run() + roomManager.endTickCreepManager.run() + roomManager.roomVisualsManager.run() + + this.test(room) + } + + private static test(room: Room) {} + + /** + * Debug + */ + visualizeReservedCoords(room: Room) { + + const roomManager = room.roomManager + + customLog('reservedCoords', JSON.stringify([...roomManager.reservedCoords])) + for (const [packedCoord, reserveType] of roomManager.reservedCoords) { + const coord = unpackCoord(packedCoord) + room.coordVisual(coord.x, coord.y, `hsl(${200}${reserveType * 50}, 100%, 60%)`) + } + } + static tableVisual(room: Room, title: string, headers: string[], data: string[][]) { Dashboard({ config: { diff --git a/src/room/roomVisuals.ts b/src/room/roomVisuals.ts index 1d711297d..21f559f32 100644 --- a/src/room/roomVisuals.ts +++ b/src/room/roomVisuals.ts @@ -18,6 +18,7 @@ import { simpleAllies } from 'international/simpleAllies/simpleAllies' import { CollectiveManager } from 'international/collective' import { PlayerManager } from 'international/players' import { unpackCoord } from 'other/codec' +import { CommuneUtils } from './commune/communeUtils' export class RoomVisualsManager { roomManager: RoomManager @@ -623,11 +624,11 @@ export class RoomVisualsManager { const data: any[][] = [ [ this.roomManager.resourcesInStoringStructures.energy || 0, - this.roomManager.room.communeManager.minStoredEnergy, + CommuneUtils.minStoredEnergy(this.roomManager.room), this.roomManager.room.communeManager.minRampartHits, roomMemory[RoomMemoryKeys.threatened].toFixed(2), roomMemory[RoomMemoryKeys.lastAttackedBy], - this.roomManager.room.communeManager.storedEnergyUpgradeThreshold, + CommuneUtils.storedEnergyUpgradeThreshold(this.roomManager.room), this.roomManager.room.communeManager.storedEnergyBuildThreshold, this.roomManager.room.towerInferiority || 'false', ], diff --git a/src/room/rooms.ts b/src/room/rooms.ts index 1b98c9f20..ec835a7e3 100644 --- a/src/room/rooms.ts +++ b/src/room/rooms.ts @@ -20,6 +20,7 @@ import './creeps/endTickCreepManager' import { CommuneManager } from './commune/commune' import { RoomManager } from './room' import { LogTypes, customLog } from 'utils/logging' +import { RoomProcs } from './roomProcs' export class RoomsManager { static updateRun() { @@ -33,14 +34,15 @@ export class RoomsManager { RoomManager.roomManagers[room.name] = room.roomManager } - room.roomManager.update(room) + RoomProcs.update(room) } } static initRun() { for (const roomName in Game.rooms) { const room = Game.rooms[roomName] - room.roomManager.initRun() + + RoomProcs.initRun(room) } } @@ -54,7 +56,7 @@ export class RoomsManager { const startCPU = Game.cpu.generatePixel() const room = Game.rooms[roomName] - room.roomManager.run() + RoomProcs.run(room) // Log room stats diff --git a/src/types.d.ts b/src/types.d.ts index 9febb6243..ef4ed8584 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -520,6 +520,8 @@ declare global { organizedSpawns: OrganizedSpawns | false fastFillerCoords: Coord[] + storingStructuresCapacity: number + storingStructures: (StructureStorage | StructureTerminal)[] // Commune @@ -1379,6 +1381,7 @@ declare global { // Command functions stringify(v: any, maxDepth: number): void + roughSizeOfObject(object: any): void /** * Deletes all properties of global diff --git a/src/utils/utils.ts b/src/utils/utils.ts index f68f9c404..18e433bc1 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -805,4 +805,40 @@ export class Utils { static getInterRange(coord1: Coord, roomName1: string, coord2: Coord, roomName2: string) { return this.getInterRangeXY(coord1.x, coord1.y, roomName1, coord2.x, coord2.y, roomName2) } + + static findMinRangedAttackCost(minDamage: number = 10) { + const rawCost = + (minDamage / RANGED_ATTACK_POWER) * BODYPART_COST[RANGED_ATTACK] + + (minDamage / RANGED_ATTACK_POWER) * BODYPART_COST[MOVE] + const combinedCost = BODYPART_COST[RANGED_ATTACK] + BODYPART_COST[MOVE] + + return Math.ceil(rawCost / combinedCost) * combinedCost + } + + static findMinMeleeAttackCost(minDamage: number = 30) { + const rawCost = + (minDamage / ATTACK_POWER) * BODYPART_COST[ATTACK] + + (minDamage / ATTACK_POWER) * BODYPART_COST[MOVE] + const combinedCost = BODYPART_COST[ATTACK] + BODYPART_COST[MOVE] + + return Math.ceil(rawCost / combinedCost) * combinedCost + } + + /** + * Finds how expensive it will be to provide enough heal parts to withstand attacks + */ + static findMinHealCost(minHeal: number = 12) { + const rawCost = + (minHeal / HEAL_POWER) * BODYPART_COST[HEAL] + (minHeal / HEAL_POWER) * BODYPART_COST[MOVE] + const combinedCost = BODYPART_COST[HEAL] + BODYPART_COST[MOVE] + + return Math.ceil(rawCost / combinedCost) * combinedCost + } + + static findMinDismantleCost(minDismantle: number = 0) { + const rawCost = minDismantle * BODYPART_COST[WORK] + minDismantle * BODYPART_COST[MOVE] + const combinedCost = BODYPART_COST[WORK] + BODYPART_COST[MOVE] + + return Math.ceil(rawCost / combinedCost) * combinedCost + } } From 52ed93aa20fa9f0c431902c90f1fc69a5d9ac079 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 27 Jan 2024 18:01:26 -0800 Subject: [PATCH 109/190] (migration) creep task improvements, fastFillerCoords new usage, general improvements --- design.md => DESIGN.md | 8 + src/international/constants.ts | 50 +- src/international/creepOrganizer.ts | 2 +- src/international/customPathFinder.ts | 4 +- src/international/flags/flags.ts | 6 +- src/international/migration.ts | 5 + src/international/roomPruning.ts | 12 +- src/room/commune/commune.ts | 9 +- src/room/commune/powerSpawnProcs.ts | 3 +- src/room/commune/spawning/spawnRequests.ts | 8 +- .../spawning/spawningStructureProcs.ts | 3 +- src/room/creeps/creepAdditions.ts | 11 +- src/room/creeps/creepProcs.ts | 2 +- .../creeps/creepPrototypes/creepFunctions.ts | 2 +- src/room/creeps/creepUtils.ts | 97 +++- src/room/creeps/powerCreeps/operator.ts | 445 ++++++++++-------- .../creeps/roleManagers/commune/fastFiller.ts | 41 +- src/room/room.ts | 66 +-- src/settingsDefault.ts | 2 +- src/types.d.ts | 30 +- src/types/creepTasks.ts | 29 ++ .../{roomRequests.ts => roomLogistics.ts} | 21 +- 22 files changed, 445 insertions(+), 411 deletions(-) rename design.md => DESIGN.md (86%) create mode 100644 src/types/creepTasks.ts rename src/types/{roomRequests.ts => roomLogistics.ts} (82%) diff --git a/design.md b/DESIGN.md similarity index 86% rename from design.md rename to DESIGN.md index 891080a5c..b99cda052 100644 --- a/design.md +++ b/DESIGN.md @@ -53,3 +53,11 @@ Classes should be static, and static classes should not be instantiated. If a cl Inherence of classes should be avoided. Mixing state and state modifiers (functions) in classes should be avoided. + +# Creep Tasks + +Allows creeps to track general inter-tick actions that are desired for fulfillment + +## Task Runners + +Task runners decide what actions to take based on the task data provided. Besides running tasks, runners may delete tasks, stop additional tasks to be ran, and more diff --git a/src/international/constants.ts b/src/international/constants.ts index 336c56717..3bdd132df 100644 --- a/src/international/constants.ts +++ b/src/international/constants.ts @@ -150,6 +150,7 @@ export enum SleepFor { } export enum CreepMemoryKeys { + commune, preferRoads, sourceIndex, dying, @@ -188,26 +189,38 @@ export enum CreepMemoryKeys { stationary, defaultParts, cost, + task, + + // Power Creep + + powerTask, } -export enum PowerCreepMemoryKeys { - commune, - /** - * The name of the method queued for operation - */ - task, - taskTarget, - /** - * The type of power the creep should use - */ - taskPower, - taskRoom, +export enum CreepTaskKeys { + taskName, + target, + roomName, } -export enum PowerRequestKeys { +export enum CreepTaskNames { + + // Creep + + harvestMineral, + + // Power Creep + + advancedGenerateOps, + advancedEnablePower, + advancedRenew, + transferOps, +} + +export enum CreepPowerTaskKeys { + taskName, target, - type, - cooldown, + power, + roomName, } export enum RoomTypes { @@ -539,13 +552,6 @@ export const communeCreepRoles: Set = new Set([ 'rangedDefender', ]) -export enum PowerCreepTasks { - advancedEnablePower, - advancedGenerateOps, - advancedRenew, - transferOps, -} - export const powerCreepClassNames: PowerClassConstant[] = ['operator'] /** diff --git a/src/international/creepOrganizer.ts b/src/international/creepOrganizer.ts index 09d5d537c..b8bb238bc 100644 --- a/src/international/creepOrganizer.ts +++ b/src/international/creepOrganizer.ts @@ -65,7 +65,7 @@ export class CreepOrganizer { creep.room.myCreeps.push(creep) creep.room.myCreepsByRole[role].push(creepName) - const customID = CreepUtils.customIDCreep(creep) + const customID = CreepUtils.customIDName(creepName) CollectiveManager.customCreepIDs[customID] = true // Add the creep's name to the position in its room diff --git a/src/international/customPathFinder.ts b/src/international/customPathFinder.ts index b6eee9095..d53fb13f9 100644 --- a/src/international/customPathFinder.ts +++ b/src/international/customPathFinder.ts @@ -16,6 +16,7 @@ import { import { packCoord, unpackCoord, unpackCoordList, unpackPosAt, unpackPosList } from 'other/codec' import { LogTypes, customLog } from 'utils/logging' import { forCoordsAroundRange, unpackNumAsCoord, visualizePath } from '../utils/utils' +import { RoomUtils } from 'room/roomUtils' export interface PathGoal { pos: RoomPosition @@ -326,7 +327,8 @@ export class CustomPathFinder { // Loop through each position of fastFillerPositions, have creeps prefer to avoid - for (const pos of room.roomManager.fastFillerPositions) { + const fastFillerCoords = RoomUtils.getFastFillerCoords(room) + for (const pos of fastFillerCoords) { const packedCoord = packCoord(pos) const currentWeight = args.weightCoords[roomName][packedCoord] || 0 diff --git a/src/international/flags/flags.ts b/src/international/flags/flags.ts index 02e158747..a168f70c8 100644 --- a/src/international/flags/flags.ts +++ b/src/international/flags/flags.ts @@ -992,7 +992,7 @@ export class FlagManager { }) } - private fastFillerPositions(flagName: string, flagNameParts: string[]) { + private fastFillerCoords(flagName: string, flagNameParts: string[]) { const flag = Game.flags[flagName] const roomName = flagNameParts[1] || flag.pos.roomName const room = Game.rooms[roomName] @@ -1001,8 +1001,8 @@ export class FlagManager { return } - const fastFillerPositions = room.roomManager.fastFillerPositions - for (const pos of fastFillerPositions) { + const fastFillerCoords = RoomUtils.getFastFillerCoords(room) + for (const pos of fastFillerCoords) { room.coordVisual(pos.x, pos.y) } } diff --git a/src/international/migration.ts b/src/international/migration.ts index 68c8a0663..5e79266d2 100644 --- a/src/international/migration.ts +++ b/src/international/migration.ts @@ -78,6 +78,11 @@ export class MigrationManager { } Memory.breakingVersion += 1 } + if (Memory.breakingVersion === 127) { + global.killCreeps() + global.killPowerCreeps() + Memory.breakingVersion += 1 + } } private static hardMigration() { diff --git a/src/international/roomPruning.ts b/src/international/roomPruning.ts index 55766d406..02b8405c3 100644 --- a/src/international/roomPruning.ts +++ b/src/international/roomPruning.ts @@ -8,10 +8,9 @@ export class RoomPruningManager extends StaticSleepable { static run() { if (this.isSleepingResponsive()) return - // Make sure all rooms are max RCL - // Temple rooms? + // Find the highest scoring commune. Remember that higher score is less preferable. - let rooms = 0 + let maxRCLRooms = 0 let highestCommuneScore = 0 let highestCommuneScoreCommuneName: string @@ -19,7 +18,7 @@ export class RoomPruningManager extends StaticSleepable { const room = Game.rooms[roomName] if (room.controller.level < maxControllerLevel) return - rooms += 1 + maxRCLRooms += 1 const roomMemory = Memory.rooms[roomName] const score = roomMemory[RoomMemoryKeys.score] + roomMemory[RoomMemoryKeys.dynamicScore] @@ -30,8 +29,9 @@ export class RoomPruningManager extends StaticSleepable { highestCommuneScoreCommuneName = roomName } - // Have multiple rooms before we unclaim - if (rooms <= 1) return + // Ensure that every room is max RCL + // What about temple rooms? + if (maxRCLRooms !== CollectiveManager.communes.size) return // Find the lowest scoring workRequest const lowestWorkRequestScore = findLowestScore( diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index f48e3361a..f66056f3a 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -47,6 +47,7 @@ import { SpawningStructureProcs } from './spawning/spawningStructureProcs' import { ObserverProcs } from './observerProcs' import { PowerSpawnProcs } from './powerSpawnProcs' import { CommuneUtils } from './communeUtils' +import { RoomUtils } from 'room/roomUtils' export type ResourceTargets = { min: Partial<{ [key in ResourceConstant]: number }> @@ -557,16 +558,16 @@ export class CommuneManager { } findFastFillerIgnoreCoords(ignoreCoords: Set) { - const fastFillerPositions = this.room.roomManager.fastFillerPositions - for (const pos of fastFillerPositions) { + const fastFillerCoords = RoomUtils.getFastFillerCoords(this.room) + for (const coord of fastFillerCoords) { // Make sure the position is reserved (presumably by a fastFiller) - const reserveType = this.room.roomManager.reservedCoords.get(packCoord(pos)) + const reserveType = this.room.roomManager.reservedCoords.get(packCoord(coord)) if (!reserveType) continue if (reserveType < ReservedCoordTypes.dying) continue // register structures the fastFiller should be able to fill - forCoordsAroundRange(pos, 1, coord => { + forCoordsAroundRange(coord, 1, coord => { ignoreCoords.add(packAsNum(coord)) }) } diff --git a/src/room/commune/powerSpawnProcs.ts b/src/room/commune/powerSpawnProcs.ts index 40b2ce952..833eac7e9 100644 --- a/src/room/commune/powerSpawnProcs.ts +++ b/src/room/commune/powerSpawnProcs.ts @@ -11,6 +11,7 @@ export class PowerSpawnProcs { this.advancedProcessPower(powerSpawn) this.advancedSpawn(powerSpawn) + this.createRoomLogisticsRequests(room, powerSpawn) } /** @@ -74,7 +75,7 @@ export class PowerSpawnProcs { /* onlyFull: true, */ type: RoomLogisticsRequestTypes.transfer, priority: scalePriority( - powerSpawn.store.getCapacity(RESOURCE_ENERGY), + powerSpawn.store.getCapacity(RESOURCE_POWER), powerSpawn.usedReserveStore, 10, true, diff --git a/src/room/commune/spawning/spawnRequests.ts b/src/room/commune/spawning/spawnRequests.ts index a2c903168..9117500b9 100644 --- a/src/room/commune/spawning/spawnRequests.ts +++ b/src/room/commune/spawning/spawnRequests.ts @@ -14,6 +14,7 @@ import { CommuneUtils } from '../communeUtils' import { StructureUtils } from 'room/structureUtils' import { CommuneProcs } from '../communeProcs' import { Utils } from 'utils/utils' +import { RoomUtils } from 'room/roomUtils' export class SpawnRequestsManager { communeManager: CommuneManager @@ -373,9 +374,8 @@ export class SpawnRequestsManager { ((): SpawnRequestArgs | false => { // Get the fastFiller positions, if there are none, inform false - const fastFillerPositionsCount = - this.communeManager.room.roomManager.fastFillerPositions.length - if (!fastFillerPositionsCount) return false + const fastFillerCoordsCount = RoomUtils.getFastFillerCoords(this.communeManager.room).length + if (!fastFillerCoordsCount) return false const anchor = this.communeManager.room.roomManager.anchor if (!anchor) throw Error('no anchor for room ' + this.communeManager.room.name) @@ -402,7 +402,7 @@ export class SpawnRequestsManager { defaultParts, extraParts: [], partsMultiplier: 1, - creepsQuota: fastFillerPositionsCount, + creepsQuota: fastFillerCoordsCount, minCostPerCreep: 150, priority, spawnTarget: anchor, diff --git a/src/room/commune/spawning/spawningStructureProcs.ts b/src/room/commune/spawning/spawningStructureProcs.ts index 0c3d7fc68..c08cab7ce 100644 --- a/src/room/commune/spawning/spawningStructureProcs.ts +++ b/src/room/commune/spawning/spawningStructureProcs.ts @@ -281,10 +281,11 @@ export class SpawningStructureProcs { body: BodyPartConstant[], requestID: number, ) { - const creepName = `${creepRoles.indexOf(spawnRequest.role)}_${spawn.room.name}_${requestID}` + const creepName = `${creepRoles.indexOf(spawnRequest.role)}_${requestID}` spawnRequest.extraOpts.energyStructures = spawn.room.communeManager.spawningStructuresByPriority + spawnRequest.extraOpts.memory[CreepMemoryKeys.commune] = spawn.room.name spawnRequest.extraOpts.memory[CreepMemoryKeys.defaultParts] = spawnRequest.defaultParts spawnRequest.extraOpts.memory[CreepMemoryKeys.cost] = spawnRequest.cost diff --git a/src/room/creeps/creepAdditions.ts b/src/room/creeps/creepAdditions.ts index 9e5889cbc..621b307d4 100644 --- a/src/room/creeps/creepAdditions.ts +++ b/src/room/creeps/creepAdditions.ts @@ -14,25 +14,18 @@ import { StructureUtils } from 'room/structureUtils' import { TowerUtils } from 'room/commune/towerUtils' Object.defineProperties(Creep.prototype, { - nameData: { - get() { - if (this._nameData) return this._nameData - - return (this._nameData = CreepUtils.expandName(this.name)) - }, - }, role: { get() { if (this._role) return this._role - return (this._role = creepRoles[parseInt(this.nameData[0])]) + return (this._role = creepRoles[parseInt(CreepUtils.expandName(this.name)[0])]) }, }, commune: { get() { if (this._commune) return this._commune - return (this._commune = Game.rooms[this.nameData[1]]) + return (this._commune = Game.rooms[Memory.creeps[this.name][CreepMemoryKeys.commune]]) }, }, strength: { diff --git a/src/room/creeps/creepProcs.ts b/src/room/creeps/creepProcs.ts index b50d3581b..18c67e7dc 100644 --- a/src/room/creeps/creepProcs.ts +++ b/src/room/creeps/creepProcs.ts @@ -23,7 +23,7 @@ import { FindNewRoomLogisticsRequestArgs, RoomLogisticsRequest, RoomLogisticsTargets, -} from 'types/roomRequests' +} from '../../types/roomLogistics' import { customLog, stringifyLog } from 'utils/logging' import { RoomObjectUtils } from 'room/roomObjectUtils' import { StructureUtils } from 'room/structureUtils' diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index 55e6cf37f..a9b0b2f9c 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -19,7 +19,7 @@ import { import { StatsManager } from 'international/stats' import { CreepUtils } from '../creepUtils' import { RoomManager } from 'room/room' -import { RoomLogisticsRequest } from 'types/roomRequests' +import { RoomLogisticsRequest } from 'types/roomLogistics' import { CustomPathFinder } from 'international/customPathFinder' import { CommuneUtils } from 'room/commune/communeUtils' import { MyCreepUtils } from '../myCreepUtils' diff --git a/src/room/creeps/creepUtils.ts b/src/room/creeps/creepUtils.ts index ba2322766..bd09ce8ec 100644 --- a/src/room/creeps/creepUtils.ts +++ b/src/room/creeps/creepUtils.ts @@ -16,7 +16,7 @@ import { import { StatsManager } from 'international/stats' import { arePositionsEqual, findObjectWithID, findWithLowestScore, getRange } from 'utils/utils' import { CreepRoleManager } from './creepRoleManager' -import { packCoord, unpackCoordAsPos, unpackPosAt } from 'other/codec' +import { packCoord, unpackCoord, unpackCoordAsPos, unpackPosAt } from 'other/codec' import { RoomManager } from 'room/room' import { CollectiveManager } from 'international/collective' import { creepClasses } from './creepClasses' @@ -26,7 +26,10 @@ import { CreepLogisticsRequest, FindNewRoomLogisticsRequestArgs, RoomLogisticsRequest, -} from 'types/roomRequests' +} from 'types/roomLogistics' +import { RoomObjectUtils } from 'room/roomObjectUtils' +import { RoomUtils } from 'room/roomUtils' +import { roomData } from 'room/roomData' export class CreepUtils { static expandName(creepName: string) { @@ -44,18 +47,9 @@ export class CreepUtils { return (creep._role = this.roleName(creep.name)) } - static communeCreep(creep: Creep) { - if (creep._commune !== undefined) return creep._commune - - const expandedName = this.expandName(creep.name) - return (creep._commune = Game.rooms[expandedName[1]]) - } - - static customIDCreep(creep: Creep) { - if (creep._customID !== undefined) return creep._customID - - const expandedName = this.expandName(creep.name) - return (creep._customID = parseInt(expandedName[2])) + static customIDName(creepName: string) { + const expandedName = this.expandName(creepName) + return parseInt(expandedName[1]) } static findEnergySpentOnConstruction( @@ -558,25 +552,29 @@ export class CreepUtils { // Pickup type if (target instanceof Resource) { - return Math.min(creep.freeNextStore, request.amount) + const creepFreeNextStore = RoomObjectUtils.freeNextStoreOf(creep, request.resourceType) + return Math.min(creepFreeNextStore, request.amount) } if (request.type === RoomLogisticsRequestTypes.transfer) { + const creepFreeNextStore = RoomObjectUtils.freeNextStoreOf(creep, request.resourceType) + if (request.delivery) { // Take extra energy in case its needed if (request.resourceType === RESOURCE_ENERGY) { - return creep.nextStore[request.resourceType] + creep.freeNextStore + return creep.nextStore[request.resourceType] + creepFreeNextStore } - return Math.min(request.amount, creep.nextStore[request.resourceType] + creep.freeNextStore) + return Math.min(request.amount, creep.nextStore[request.resourceType] + creepFreeNextStore) } return Math.min(creep.nextStore[request.resourceType], request.amount) } // Withdraw or offer type - return Math.min(creep.freeNextStore, request.amount) + const creepFreeNextStore = RoomObjectUtils.freeNextStoreOf(creep, request.resourceType) + return Math.min(creepFreeNextStore, request.amount) } static findNewRampartRepairTarget(creep: Creep) { @@ -634,4 +632,67 @@ export class CreepUtils { return this.findNewRepairTarget(creep) || this.findNewRampartRepairTarget(creep) } + + static findFastFillerCoord(creep: Creep) { + const creepMemory = Memory.creeps[creep.name] + if (creepMemory[CreepMemoryKeys.packedCoord]) { + return unpackCoord(creepMemory[CreepMemoryKeys.packedCoord]) + } + + return this.findNewFastFillerCoord(creep, creepMemory) + } + + /** + * Find the closest open fast filler coord, if exists. Then assign it to the creep + */ + static findNewFastFillerCoord(creep: Creep, creepMemory = Memory.creeps[creep.name]) { + + const fastFillerCoords = RoomUtils.getFastFillerCoords(creep.room) + if (!fastFillerCoords.length) return false + + const reservedCoords = creep.room.roomManager.reservedCoords + + const result = this.findOpenFastFillerCoord(creep, reservedCoords) + if (result === Result.fail) return false + + creepMemory[CreepMemoryKeys.packedCoord] = result.packedCoord + reservedCoords.set(result.packedCoord, ReservedCoordTypes.important) + + return result.coord + } + + private static findOpenFastFillerCoord(creep: Creep, reservedCoords: Map) { + + const packedFastFillerCoords = roomData[creep.room.name].fastFillerCoords + + let lowestScore = Infinity + let bestCoord: Coord + let bestPackedCoord: string + let bestIndex: number + + for (let i = 0; i < packedFastFillerCoords.length; i++) { + const packedCoord = packedFastFillerCoords[i] + + if (reservedCoords.get(packedCoord) === ReservedCoordTypes.important) { + continue + } + + const coord = unpackCoord(packedCoord) + + const score = getRange(coord, creep.pos) + if (score >= lowestScore) continue + + lowestScore = score + bestCoord = coord + bestPackedCoord = packedCoord + bestIndex = i + } + if (!bestCoord) return Result.fail + + return { + coord: bestCoord, + packedCoord: bestPackedCoord, + index: bestIndex, + } + } } diff --git a/src/room/creeps/powerCreeps/operator.ts b/src/room/creeps/powerCreeps/operator.ts index b59be455b..6e4d45e4e 100644 --- a/src/room/creeps/powerCreeps/operator.ts +++ b/src/room/creeps/powerCreeps/operator.ts @@ -1,289 +1,322 @@ -import { Result, customColors, PowerCreepMemoryKeys, PowerCreepTasks } from 'international/constants' +import { + Result, + customColors, + CreepMemoryKeys, + CreepPowerTaskKeys, + CreepTaskKeys, + CreepTaskNames, +} from 'international/constants' import { CommuneUtils } from 'room/commune/communeUtils' -import { PowerTask } from 'types/roomRequests' +import { CreepPowerTask, PowerRequest } from 'types/creepTasks' import { customLog } from 'utils/logging' import { findObjectWithID, getRange } from 'utils/utils' export class Operator extends PowerCreep { - constructor(creepID: Id) { - super(creepID) + constructor(creepID: Id) { + super(creepID) + } + + initRun() { + this.managePowerTask() + this.avoidEnemyThreatCoords() + } + + managePowerTask?() { + const creepMemory = Memory.creeps[this.name] + const task = creepMemory[CreepMemoryKeys.powerTask] + if (!task) return + + const taskTarget = findObjectWithID(task[CreepPowerTaskKeys.target]) + if (!taskTarget) { + delete creepMemory[CreepMemoryKeys.task] + return } - initRun() { - this.managePowerTask() - this.avoidEnemyThreatCoords() - } + // Don't have the taskTarget thinking it needs a new task - managePowerTask?() { - if (!this.memory[PowerCreepMemoryKeys.taskTarget]) return + taskTarget.reservePowers + taskTarget._reservePowers.add(task[CreepPowerTaskKeys.power]) + } - const taskTarget = findObjectWithID(this.memory[PowerCreepMemoryKeys.taskTarget]) - if (!taskTarget) { - delete this.memory[PowerCreepMemoryKeys.taskTarget] - return - } + endRun() {} - // Don't have the taskTarget thinking it needs a new task + // Basic tasks - taskTarget.reservePowers - taskTarget._reservePowers.add(this.memory[PowerCreepMemoryKeys.taskPower]) - } + runTask?() { + const creepMemory = Memory.creeps[this.name] + const task = creepMemory[CreepMemoryKeys.task] + if (!task && !this.findTask()) return Result.fail - endRun() {} + const taskResult = (this as any)[task[CreepTaskKeys.taskName]]() + if (!taskResult) return taskResult === Result.fail - // Basic tasks + delete creepMemory[CreepMemoryKeys.task] + return Result.success + } - runTask?() { - if (!this.memory[PowerCreepMemoryKeys.task] && !this.findTask()) return Result.fail + findTask?() { + if (this.findRenewTask()) return true + if (this.findEnablePowerTask()) return true + if (this.findGenerateOpsTask()) return true + if (this.findTransferOpsTask()) return true + return false + } - const taskResult = (this as any)[this.memory[PowerCreepMemoryKeys.task]]() - if (!taskResult) return taskResult === Result.fail + findRenewTask?() { + if (this.ticksToLive > POWER_CREEP_LIFE_TIME * 0.1) return false - delete this.memory[PowerCreepMemoryKeys.task] - return Result.success - } + const powerSpawn = this.room.roomManager.powerSpawn + if (!powerSpawn) return false - findTask?() { - if (this.findRenewTask()) return true - if (this.findEnablePowerTask()) return true - if (this.findGenerateOpsTask()) return true - if (this.findTransferOpsTask()) return true - return false + const creepMemory = Memory.creeps[this.name] + creepMemory[CreepMemoryKeys.task] = { + [CreepTaskKeys.taskName]: CreepTaskNames.advancedRenew, + [CreepTaskKeys.target]: powerSpawn.id, } - - findRenewTask?() { - if (this.ticksToLive > POWER_CREEP_LIFE_TIME * 0.1) return false - - if (!this.room.roomManager.powerSpawn) return false - - this.memory[PowerCreepMemoryKeys.task] = PowerCreepTasks.advancedRenew - return true + return true + } + + [CreepTaskNames.advancedRenew]?() { + const powerSpawn = this.room.roomManager.powerSpawn + if (!powerSpawn) return Result.fail + + const minRange = 1 + if (getRange(this.pos, powerSpawn.pos) > minRange) { + this.createMoveRequest({ + origin: this.pos, + goals: [ + { + pos: powerSpawn.pos, + range: minRange, + }, + ], + avoidEnemyRanges: true, + }) + + return false } - [PowerCreepTasks.advancedRenew]?() { - const powerSpawn = this.room.roomManager.powerSpawn - if (!powerSpawn) return Result.fail - - const minRange = 1 - if (getRange(this.pos, powerSpawn.pos) > minRange) { - this.createMoveRequest({ - origin: this.pos, - goals: [ - { - pos: powerSpawn.pos, - range: minRange, - }, - ], - avoidEnemyRanges: true, - }) - - return false - } - - this.renew(powerSpawn) - return true - } + this.renew(powerSpawn) + return true + } - findEnablePowerTask?() { - const { controller } = this.room - if (!controller) return false + findEnablePowerTask?() { + const { controller } = this.room + if (!controller) return false - if (controller.isPowerEnabled) return false + if (controller.isPowerEnabled) return false - this.memory[PowerCreepMemoryKeys.task] = PowerCreepTasks.advancedEnablePower - return true + const creepMemory = Memory.creeps[this.name] + creepMemory[CreepMemoryKeys.task] = { + [CreepTaskKeys.taskName]: CreepTaskNames.advancedEnablePower, } - - [PowerCreepTasks.advancedEnablePower]?() { - const { controller } = this.room - if (!controller || controller.isPowerEnabled) return Result.noAction - - const minRange = 1 - if (getRange(this.pos, controller.pos) > minRange) { - this.createMoveRequest({ - origin: this.pos, - goals: [ - { - pos: controller.pos, - range: minRange, - }, - ], - avoidEnemyRanges: true, - }) - - return Result.action - } - - this.enableRoom(controller) - return Result.success + return true + } + + [CreepTaskNames.advancedEnablePower]?() { + const { controller } = this.room + if (!controller || controller.isPowerEnabled) return Result.noAction + + const minRange = 1 + if (getRange(this.pos, controller.pos) > minRange) { + this.createMoveRequest({ + origin: this.pos, + goals: [ + { + pos: controller.pos, + range: minRange, + }, + ], + avoidEnemyRanges: true, + }) + + return Result.action } - findGenerateOpsTask?() { - if (this.powered) return false + this.enableRoom(controller) + return Result.success + } - const power = this.powers[PWR_GENERATE_OPS] - if (!power) return false + findGenerateOpsTask?() { + if (this.powered) return false - if (power.cooldown) return false + const power = this.powers[PWR_GENERATE_OPS] + if (!power) return false - this.memory[PowerCreepMemoryKeys.task] = PowerCreepTasks.advancedGenerateOps - return true - } + if (power.cooldown) return false - [PowerCreepTasks.advancedGenerateOps]?() { - this.message = 'AGO' + const creepMemory = Memory.creeps[this.name] + creepMemory[CreepMemoryKeys.task] = { + [CreepTaskKeys.taskName]: CreepTaskNames.advancedGenerateOps, + } + return true + } - if (this.powered) return false + [CreepTaskNames.advancedGenerateOps]?() { + this.message = 'AGO' - this.usePower(PWR_GENERATE_OPS) - this.powered = true - return true - } + if (this.powered) return false - findTransferOpsTask?() { + this.usePower(PWR_GENERATE_OPS) + this.powered = true + return true + } - const storedOps = this.store.getUsedCapacity(RESOURCE_OPS) - if (storedOps <= this.store.getCapacity() * 0.8) return false + findTransferOpsTask?() { + const storedOps = this.store.getUsedCapacity(RESOURCE_OPS) + if (storedOps <= this.store.getCapacity() * 0.8) return false - // We are sufficiently full of ops + // We are sufficiently full of ops - const storingStructure = CommuneUtils.storingStructures(this.room)[0] - if (!storingStructure) return false + const storingStructure = CommuneUtils.storingStructures(this.room)[0] + if (!storingStructure) return false - this.memory[PowerCreepMemoryKeys.task] = PowerCreepTasks.transferOps - return true + const creepMemory = Memory.creeps[this.name] + creepMemory[CreepMemoryKeys.task] = { + [CreepTaskKeys.taskName]: CreepTaskNames.transferOps, + [CreepTaskKeys.target]: storingStructure.id, } + return true + } + + [CreepTaskNames.transferOps]?() { + // We are sufficiently full of ops - [PowerCreepTasks.transferOps]?() { + const storingStructure = CommuneUtils.storingStructures(this.room)[0] + if (!storingStructure) return false - // We are sufficiently full of ops + const transferAmount = this.store.getUsedCapacity(RESOURCE_OPS) * 0.5 - const storingStructure = CommuneUtils.storingStructures(this.room)[0] - if (!storingStructure) return false + this.advancedTransfer(storingStructure, RESOURCE_OPS, transferAmount) + return true + } - const transferAmount = this.store.getUsedCapacity(RESOURCE_OPS) * 0.5 + // Complex power tasks - this.advancedTransfer(storingStructure, RESOURCE_OPS, transferAmount) - return true + findPowerTask?() { + const creepMemory = Memory.creeps[this.name] + let task = creepMemory[CreepMemoryKeys.powerTask] + if (task) { + return task } - // Complex power tasks + const request = this.findNewBestPowerTask() + if (request === Result.fail) return Result.fail - findPowerTask?() { - if (this.memory[PowerCreepMemoryKeys.taskTarget]) - return findObjectWithID(this.memory[PowerCreepMemoryKeys.taskTarget]) + const target = findObjectWithID(request.targetID) + target.reservePowers + target._reservePowers.add(request.power) - const task = this.findNewBestPowerTask() - if (!task) return Result.fail + task = creepMemory[CreepMemoryKeys.powerTask] = { + [CreepPowerTaskKeys.target]: request.targetID, + [CreepPowerTaskKeys.power]: request.power, + } + delete this.room.powerTasks[request.taskID] - customLog('FIND TASK', findObjectWithID(task.targetID)) + return task + } - const taskTarget = findObjectWithID(task.targetID) - taskTarget.reservePowers - taskTarget._reservePowers.add(this.memory[PowerCreepMemoryKeys.taskPower]) + findNewBestPowerTask?() { + let lowestScore = Infinity + let bestTask: PowerRequest - this.memory[PowerCreepMemoryKeys.taskTarget] = task.targetID - this.memory[PowerCreepMemoryKeys.taskPower] = task.powerType - delete this.room.powerTasks[task.taskID] + for (const ID in this.room.powerTasks) { + const task = this.room.powerTasks[ID] - return findObjectWithID(task.targetID) - } + // We don't have the requested power - findNewBestPowerTask?() { - let lowestScore = Infinity - let bestTask: PowerTask + const power = this.powers[task.powerType] + if (!power) continue - for (const ID in this.room.powerTasks) { - const task = this.room.powerTasks[ID] + // We don't have enough ops for the task - // We don't have the requested power + if ((POWER_INFO[task.powerType] as any).ops > this.nextStore.ops) continue - const power = this.powers[task.powerType] - if (!power) continue + const taskTargetPos = findObjectWithID(task.targetID).pos + const range = getRange(this.pos, taskTargetPos) - // We don't have enough ops for the task + // The target doesn't need us yet or we can't yet provide - if ((POWER_INFO[task.powerType] as any).ops > this.nextStore.ops) continue + if ( + Math.max(task.cooldown, this.powerCooldowns.get(task.powerType) || 0) > + range + (POWER_INFO[task.powerType] as any).range + 3 + ) + continue - const taskTargetPos = findObjectWithID(task.targetID).pos - const range = getRange(this.pos, taskTargetPos) + const score = task.priority + range / 100 - // The target doesn't need us yet or we can't yet provide + if (score >= lowestScore) continue - if ( - Math.max(task.cooldown, this.powerCooldowns.get(task.powerType) || 0) > - range + (POWER_INFO[task.powerType] as any).range + 3 - ) - continue + lowestScore = score + bestTask = task + } - const score = task.priority + range / 100 + if (!bestTask) return Result.fail - if (score >= lowestScore) continue + return bestTask + } - lowestScore = score - bestTask = task - } + runPowerTask?() { + const task = this.findPowerTask() + if (task === Result.fail) return Result.fail - return bestTask - } + const target = findObjectWithID(task[CreepPowerTaskKeys.target]) - runPowerTask?() { - const taskTarget = this.findPowerTask() - if (!taskTarget) return Result.fail + // We aren't in range, get closer + customLog('TRY TASK', target) + const minRange = (POWER_INFO[task[CreepPowerTaskKeys.power]] as any).range + if (minRange && getRange(this.pos, target.pos) > minRange) { + this.createMoveRequest({ + origin: this.pos, + goals: [{ pos: target.pos, range: minRange }], + }) + return Result.action + } - // We aren't in range, get closer - customLog('TRY TASK', taskTarget) - const minRange = (POWER_INFO[this.memory[PowerCreepMemoryKeys.taskPower]] as any).range - if (minRange && getRange(this.pos, taskTarget.pos) > minRange) { - this.createMoveRequest({ - origin: this.pos, - goals: [{ pos: taskTarget.pos, range: minRange }], - }) - return Result.action - } + // We can't or failed the power - // We can't or failed the power + if (this.powered) return Result.fail - if (this.powered) return Result.fail + const effect = target.effectsData.get(task[CreepPowerTaskKeys.power]) + if (effect && effect.ticksRemaining > 0) return Result.fail + /* if (this.usePower(this.memory[CreepMemoryKeys.taskPower], taskTarget) !== OK) return Result.fail */ - const effect = taskTarget.effectsData.get(this.memory[PowerCreepMemoryKeys.taskPower]) - if (effect && effect.ticksRemaining > 0) return Result.fail - /* if (this.usePower(this.memory[PowerCreepMemoryKeys.taskPower], taskTarget) !== OK) return Result.fail */ + this.usePower(task[CreepPowerTaskKeys.power], target) - this.usePower(this.memory[PowerCreepMemoryKeys.taskPower], taskTarget) + // We did the power + customLog('WE DID THE POWA', target) - // We did the power - customLog('WE DID THE POWA', taskTarget) + // Assume the power consumed ops if it does so - // Assume the power consumed ops if it does so + const ops = (POWER_INFO[task[CreepPowerTaskKeys.power]] as any).ops + if (ops) this.nextStore.ops -= ops - const ops = (POWER_INFO[this.memory[PowerCreepMemoryKeys.taskPower]] as any).ops - if (ops) this.nextStore.ops -= ops + // Define the cooldown so we don't assume the creep can still do this power immediately - this.powered = true - delete this.memory[PowerCreepMemoryKeys.taskTarget] + this.powerCooldowns + this._powerCooldowns.set( + task[CreepPowerTaskKeys.power], + POWER_INFO[task[CreepPowerTaskKeys.power]].cooldown, + ) - // Define the cooldown so we don't assume the creep can still do this power immediately + // - this.powerCooldowns - this._powerCooldowns.set( - this.memory[PowerCreepMemoryKeys.taskPower], - POWER_INFO[this.memory[PowerCreepMemoryKeys.taskPower]].cooldown, - ) + this.powered = true + delete Memory.creeps[CreepMemoryKeys.powerTask] - return Result.success - } + return Result.success + } - static operatorManager(room: Room, creepsOfRole: string[]) { - // Loop through creep names of this role + static operatorManager(room: Room, creepsOfRole: string[]) { + // Loop through creep names of this role - for (const creepName of creepsOfRole) { - // Get the creep using its name + for (const creepName of creepsOfRole) { + // Get the creep using its name - const creep: Operator = Game.powerCreeps[creepName] + const creep: Operator = Game.powerCreeps[creepName] - if (creep.runTask()) continue - if (creep.runPowerTask() === Result.success) creep.runPowerTask() - } + if (creep.runTask()) continue + if (creep.runPowerTask() === Result.success) creep.runPowerTask() } + } } diff --git a/src/room/creeps/roleManagers/commune/fastFiller.ts b/src/room/creeps/roleManagers/commune/fastFiller.ts index 1a95c997b..5d28de8f1 100644 --- a/src/room/creeps/roleManagers/commune/fastFiller.ts +++ b/src/room/creeps/roleManagers/commune/fastFiller.ts @@ -3,6 +3,9 @@ import { findClosestPos, getRangeXY, getRange } from 'utils/utils' import { packCoord, packPos, unpackCoord, unpackCoordAsPos, unpackPos } from 'other/codec' import { StructureUtils } from 'room/structureUtils' import { CreepProcs } from 'room/creeps/creepProcs' +import { RoomUtils } from 'room/roomUtils' +import { roomData } from 'room/roomData' +import { CreepUtils } from 'room/creeps/creepUtils' export class FastFiller extends Creep { update() { @@ -17,11 +20,11 @@ export class FastFiller extends Creep { } travelToFastFiller?(): boolean { - const fastFillerPos = this.findFastFillerPos() - if (!fastFillerPos) return true + const fastFillerCoord = CreepUtils.findFastFillerCoord(this) + if (!fastFillerCoord) return true // If the this is standing on the fastFillerPos, we didn't travel - if (getRange(this.pos, fastFillerPos) === 0) return false + if (getRange(this.pos, fastFillerCoord) === 0) return false // Otherwise, make a move request to it @@ -29,7 +32,7 @@ export class FastFiller extends Creep { this.createMoveRequest({ origin: this.pos, - goals: [{ pos: fastFillerPos, range: 0 }], + goals: [{ pos: new RoomPosition(fastFillerCoord.x, fastFillerCoord.y, this.room.name), range: 0 }], }) // And inform true @@ -37,36 +40,6 @@ export class FastFiller extends Creep { return true } - findFastFillerPos?() { - const { room } = this - - this.message = 'FFP' - - const creepMemory = Memory.creeps[this.name] - - // Stop if the creep already has a packedFastFillerPos - if (creepMemory[CreepMemoryKeys.packedCoord]) { - return unpackCoordAsPos(creepMemory[CreepMemoryKeys.packedCoord], room.name) - } - - // Get usedFastFillerPositions - - const reservedCoords = room.roomManager.reservedCoords - - const openFastFillerPositions = room.roomManager.fastFillerPositions.filter(pos => { - return reservedCoords.get(packCoord(pos)) !== ReservedCoordTypes.important - }) - if (!openFastFillerPositions.length) return false - - const fastFillerPos = findClosestPos(this.pos, openFastFillerPositions) - const packedCoord = packCoord(fastFillerPos) - - creepMemory[CreepMemoryKeys.packedCoord] = packedCoord - reservedCoords.set(packedCoord, ReservedCoordTypes.important) - - return fastFillerPos - } - fillFastFiller?(): boolean { const { room } = this diff --git a/src/room/room.ts b/src/room/room.ts index 97d336b99..7ef9fba69 100644 --- a/src/room/room.ts +++ b/src/room/room.ts @@ -66,6 +66,7 @@ import { customLog } from 'utils/logging' import { StructureUtils } from './structureUtils' import { LogisticsProcs } from './logisticsProcs' import { CommuneProcs } from './commune/communeProcs' +import { roomData } from './roomData' export interface InterpretedRoomEvent { eventType: EventConstant @@ -740,6 +741,9 @@ export class RoomManager { this._structureCoords = undefined this.sourceContainerIDs = undefined + const data = roomData[this.room.name] + data.fastFillerCoords = undefined + const communeManager = this.room.communeManager if (communeManager) { communeManager.actionableSpawningStructuresIDs = undefined @@ -749,7 +753,6 @@ export class RoomManager { this.fastFillerContainerIDs = undefined this._upgradePositions = undefined - this._fastFillerPositions = undefined } if (!newAllStructures) newAllStructures = this.room.find(FIND_STRUCTURES) @@ -1175,67 +1178,6 @@ export class RoomManager { return (this._combatStructureTargets = combatStructureTargets) } - _fastFillerPositions: RoomPosition[] - /** - * To make this more efficient, reverse the way it is calculated. For each potential source, record potential fast filler positions that are adjacent. Then have each potential position search for adjacent spawning structures - */ - get fastFillerPositions() { - if (this._fastFillerPositions && !this.structureUpdate) return this._fastFillerPositions - - const anchor = this.anchor - if (!anchor) throw Error('no anchor') - - const fastFillerPositions: RoomPosition[] = [] - let rawFastFillerPositions = [ - new RoomPosition(anchor.x - 1, anchor.y - 1, this.room.name), - new RoomPosition(anchor.x - 1, anchor.y + 1, this.room.name), - new RoomPosition(anchor.x + 1, anchor.y - 1, this.room.name), - new RoomPosition(anchor.x + 1, anchor.y + 1, this.room.name), - ] - const structureCoords = this.structureCoords - - const fastFillerLink = this.fastFillerLink - const sufficientLink = fastFillerLink && StructureUtils.isRCLActionable(fastFillerLink) - - for (const pos of rawFastFillerPositions) { - const adjacentStructuresOfTypes: Partial> = { - [STRUCTURE_SPAWN]: 0, - [STRUCTURE_EXTENSION]: 0, - [STRUCTURE_CONTAINER]: 0, - } - - forAdjacentCoords(pos, adjacentCoord => { - const structuresAtCoord = structureCoords.get(packCoord(adjacentCoord)) - if (!structuresAtCoord) return - - for (const ID of structuresAtCoord) { - const structure = findObjectWithID(ID) - - if (adjacentStructuresOfTypes[structure.structureType] === undefined) continue - - // Increase structure amount for this structureType on the adjacentPos - - adjacentStructuresOfTypes[structure.structureType] += 1 - } - }) - - // If there is containers and spawning structures, make it an offial fastFillerPosition - - if (!sufficientLink && adjacentStructuresOfTypes[STRUCTURE_CONTAINER] === 0) continue - - if ( - adjacentStructuresOfTypes[STRUCTURE_SPAWN] + - adjacentStructuresOfTypes[STRUCTURE_EXTENSION] === - 0 - ) - continue - - fastFillerPositions.push(pos) - } - - return (this._fastFillerPositions = fastFillerPositions) - } - _remoteNamesByEfficacy: string[] /** * Some rooms may no longer be remotes when accesed later in the code diff --git a/src/settingsDefault.ts b/src/settingsDefault.ts index e9f0830b1..72c22dd76 100644 --- a/src/settingsDefault.ts +++ b/src/settingsDefault.ts @@ -4,7 +4,7 @@ import { Settings } from 'types/settings' * Default global.settings. DO NOT MODIFY for personal use; instead, include your preferences in global.settings.ts */ export const defaultSettings: Settings = { - breakingVersion: 127, + breakingVersion: 128, roomVisuals: false, mapVisuals: false, allies: ['MarvinTMB'], diff --git a/src/types.d.ts b/src/types.d.ts index ef4ed8584..1b380614f 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -12,7 +12,7 @@ import { NukeRequestKeys, PlayerMemoryKeys, PowerCreepMemoryKeys, - PowerRequestKeys, + PowerTaskKeys, RoomMemoryKeys, RoomTypes, SleepFor, @@ -21,7 +21,7 @@ import { ReservedCoordTypes, WorkTypes, creepRoles, - PowerCreepTasks, + CreepPowerTaskNames, RoomLogisticsRequestTypes, MovedTypes, RoomStatsKeys, @@ -37,15 +37,16 @@ import { CombatRequest, HaulRequest, NukeRequest, WorkRequest } from 'types/inte import { PlayerMemory } from 'types/players' import { CreepLogisticsRequest, - PowerTask, + CreepPowerRequest, RoomLogisticsRequest, FindNewRoomLogisticsRequestArgs, CreateRoomLogisticsRequestArgs, -} from 'types/roomRequests' +} from 'types/roomLogistics' import { UserScriptTemplate } from 'other/userScript/userScript.example' import { StatsMemory } from 'types/stats' import { WeightLayers, WeightsByID } from 'room/construction/neuralNetwork/network' import { OrganizedSpawns } from 'room/commune/spawning/spawningStructureProcs' +import { CreepTask, CreepPowerTask } from 'types/creepTasks' declare global { interface ProfilerData { @@ -506,7 +507,7 @@ declare global { roomLogisticsRequests: { [key in RoomLogisticsRequestTypes]: { [ID: string]: RoomLogisticsRequest } } - powerTasks: { [ID: string]: PowerTask } + powerTasks: { [ID: string]: CreepPowerRequest } attackingDefenderIDs: Set> defenderEnemyTargetsWithDamage: Map, number> @@ -666,7 +667,7 @@ declare global { target: Structure | Source, powerType: PowerConstant, priority: number, - ): PowerTask | false + ): CreepPowerRequest | false highestWeightedStoringStructures(resourceType: ResourceConstant): AnyStoreStructure | false @@ -959,9 +960,6 @@ declare global { // Creep Getters - _nameData: string[] - nameData: string[] - _role: CreepRoles /** * The lifetime designation that broadly describes what the creep should do @@ -1272,6 +1270,7 @@ declare global { } interface CreepMemory { + [CreepMemoryKeys.commune]: string [CreepMemoryKeys.preferRoads]: boolean [CreepMemoryKeys.sourceIndex]: number [CreepMemoryKeys.dying]: boolean @@ -1320,16 +1319,15 @@ declare global { [CreepMemoryKeys.stationary]: boolean [CreepMemoryKeys.defaultParts]: number [CreepMemoryKeys.cost]: number - } + [CreepMemoryKeys.task]: CreepTask - interface PowerCreepMemory extends CreepMemory { - [PowerCreepMemoryKeys.commune]: string - [PowerCreepMemoryKeys.task]: PowerCreepTasks - [PowerCreepMemoryKeys.taskTarget]: Id - [PowerCreepMemoryKeys.taskPower]: PowerConstant - [PowerCreepMemoryKeys.taskRoom]: string + // Power Creep + + [CreepMemoryKeys.powerTask]: CreepPowerTask } + interface PowerCreepMemory extends CreepMemory {} + interface UserScriptTemplate { /** * Run at the start of the tick diff --git a/src/types/creepTasks.ts b/src/types/creepTasks.ts new file mode 100644 index 000000000..e78e38f38 --- /dev/null +++ b/src/types/creepTasks.ts @@ -0,0 +1,29 @@ +import { CreepPowerTaskKeys, CreepTaskKeys, CreepTaskNames } from '../international/constants' + +export type CreepTaskTargets = Structure | Creep | Tombstone | Ruin | Resource + +export interface CreepTask { + [CreepTaskKeys.taskName]: CreepTaskNames + [CreepTaskKeys.target]?: Id + [CreepTaskKeys.roomName]?: string +} + +export type CreepPowerTaskTargets = Source | Creep | Structure + +export interface CreepPowerTask { + [CreepPowerTaskKeys.target]: Id + [CreepPowerTaskKeys.power]: PowerConstant + [CreepPowerTaskKeys.roomName]?: string +} + +/** + * A request for a power creep to fulfill + */ +export interface PowerRequest { + taskID: string + targetID: Id + power: PowerConstant + packedCoord: string + cooldown: number + priority: number +} diff --git a/src/types/roomRequests.ts b/src/types/roomLogistics.ts similarity index 82% rename from src/types/roomRequests.ts rename to src/types/roomLogistics.ts index ebea40363..eac2217d8 100644 --- a/src/types/roomRequests.ts +++ b/src/types/roomLogistics.ts @@ -1,8 +1,4 @@ -import { - CreepLogisticsRequestKeys, - PowerRequestKeys, - RoomLogisticsRequestTypes, -} from 'international/constants' +import { CreepLogisticsRequestKeys, RoomLogisticsRequestTypes } from 'international/constants' export type RoomLogisticsTargets = AnyStoreStructure | Creep | Tombstone | Ruin | Resource @@ -76,18 +72,3 @@ export interface FindNewRoomLogisticsRequestArgs { */ conditions?(request: RoomLogisticsRequest): any } - -export interface PowerRequest { - [PowerRequestKeys.target]: Id - [PowerRequestKeys.type]: PowerConstant - [PowerRequestKeys.cooldown]: number -} - -export interface PowerTask { - taskID: string - targetID: Id - powerType: PowerConstant - packedCoord: string - cooldown: number - priority: number -} From 3533a3beeeb9733aa2da25b02499f0cf2ebe0cad Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 27 Jan 2024 18:15:42 -0800 Subject: [PATCH 110/190] clean up CustomPathFinder room weights --- src/international/customPathFinder.ts | 1007 ++++++++--------- .../creeps/creepPrototypes/creepFunctions.ts | 2 +- src/room/creeps/roleManagers/antifa/quad.ts | 2 +- 3 files changed, 502 insertions(+), 509 deletions(-) diff --git a/src/international/customPathFinder.ts b/src/international/customPathFinder.ts index d53fb13f9..fe984b245 100644 --- a/src/international/customPathFinder.ts +++ b/src/international/customPathFinder.ts @@ -1,17 +1,17 @@ import { BasePlans } from 'room/construction/basePlans' import { - CreepMemoryKeys, - RemoteResourcePathTypes, - ReservedCoordTypes, - Result, - RoomMemoryKeys, - RoomTypes, - customColors, - defaultPlainCost, - defaultSwampCost, - impassibleStructureTypes, - impassibleStructureTypesSet, - roomDimensions, + CreepMemoryKeys, + RemoteResourcePathTypes, + ReservedCoordTypes, + Result, + RoomMemoryKeys, + RoomTypes, + customColors, + defaultPlainCost, + defaultSwampCost, + impassibleStructureTypes, + impassibleStructureTypesSet, + roomDimensions, } from './constants' import { packCoord, unpackCoord, unpackCoordList, unpackPosAt, unpackPosList } from 'other/codec' import { LogTypes, customLog } from 'utils/logging' @@ -19,667 +19,660 @@ import { forCoordsAroundRange, unpackNumAsCoord, visualizePath } from '../utils/ import { RoomUtils } from 'room/roomUtils' export interface PathGoal { - pos: RoomPosition - range: number + pos: RoomPosition + range: number } export type RoomRoute = { - exit: ExitConstant - room: string + exit: ExitConstant + room: string }[] export interface CustomPathFinderArgs { - /** - * Not required when pathing for creeps - */ - origin?: RoomPosition - goals: PathGoal[] - /** - * room types as keys to weight based on properties - */ - typeWeights?: Partial<{ [key in RoomTypes]: number }> - plainCost?: number - swampCost?: number - maxRooms?: number - /** - * Default is false - */ - flee?: boolean - creep?: Creep - /** - * Default is true - */ - avoidDanger?: boolean - - weightStructures?: Partial<{ [key in StructureConstant]: number }> - - /** - * An object with keys of weights and values of positions - */ - - weightCoords?: { [roomName: string]: { [packedCoord: string]: number } } - - /** - * The the costMatrix to begin with. Will apply minimal alterations in use - */ - defaultCostMatrix?(roomName: string): CostMatrix | false - - /** - * The names of the costMatrixes to weight. Will apply onto cost matrix in use - */ - defaultCostMatrixes?(roomName: string): CostMatrix[] - - weightCoordMapsForRoomName?(roomName: string): Uint8Array - - weightCoordMaps?: CoordMap[] - - /** - * - */ - avoidEnemyRanges?: boolean - - avoidKeeperLairs?: boolean - - avoidStationaryPositions?: boolean - - /** - * - */ - avoidImpassibleStructures?: boolean - - /** - * Marks creeps not owned by the bot as avoid - */ - avoidNotMyCreeps?: boolean - - /** - * Weight my ramparts by this value - */ - myRampartWeight?: number - - weightCommuneStructurePlans?: boolean - weightRemoteStructurePlans?: { - remoteResourcePathType: RemoteResourcePathTypes - } - - minReservedCoordType?: ReservedCoordTypes + /** + * Not required when pathing for creeps + */ + origin?: RoomPosition + goals: PathGoal[] + /** + * room types as keys to weight based on properties + */ + typeWeights?: Partial<{ [key in RoomTypes]: number }> + plainCost?: number + swampCost?: number + maxRooms?: number + /** + * Default is false + */ + flee?: boolean + creep?: Creep + /** + * Default is true + */ + avoidDanger?: boolean + + weightStructures?: Partial<{ [key in StructureConstant]: number }> + + /** + * An object with keys of weights and values of positions + */ + + weightCoords?: { [roomName: string]: { [packedCoord: string]: number } } + + /** + * The the costMatrix to begin with. Will apply minimal alterations in use + */ + defaultCostMatrix?(roomName: string): CostMatrix | false + + /** + * The names of the costMatrixes to weight. Will apply onto cost matrix in use + */ + overrideCostMatrixes?(roomName: string): CostMatrix[] + + weightCoordMapsForRoomName?(roomName: string): Uint8Array + + weightCoordMaps?: CoordMap[] + + /** + * + */ + avoidEnemyRanges?: boolean + + avoidKeeperLairs?: boolean + + avoidStationaryPositions?: boolean + + /** + * + */ + avoidImpassibleStructures?: boolean + + /** + * Marks creeps not owned by the bot as avoid + */ + avoidNotMyCreeps?: boolean + + /** + * Weight my ramparts by this value + */ + myRampartWeight?: number + + weightCommuneStructurePlans?: boolean + weightRemoteStructurePlans?: { + remoteResourcePathType: RemoteResourcePathTypes + } + + minReservedCoordType?: ReservedCoordTypes } /** * stateless */ export class CustomPathFinder { + static findPath(args: CustomPathFinderArgs) { + const allowedRoomNames = this.findAllowedRooms(args) + if (allowedRoomNames === Result.fail) return [] - static findPath(args: CustomPathFinderArgs) { + this.weightStructurePlans(args, allowedRoomNames) - const allowedRoomNames = this.findAllowedRooms(args) - if (allowedRoomNames === Result.fail) return [] + const result = this.generatePath(args, allowedRoomNames) + return result + } - this.weightStructurePlans(args, allowedRoomNames) + private static findAllowedRooms(args: CustomPathFinderArgs) { + const allowedRoomNames = new Set([args.origin.roomName]) - const result = this.generatePath(args, allowedRoomNames) - return result + // If there is one goal + if (args.goals.length === 1) { + return this.singleGoalRoute(args, allowedRoomNames) } - private static findAllowedRooms(args: CustomPathFinderArgs) { + // There are multiple goals - const allowedRoomNames = new Set([args.origin.roomName]) + return this.multiGoalRoute(args, allowedRoomNames) + } - // If there is one goal - if (args.goals.length === 1) { - return this.singleGoalRoute(args, allowedRoomNames) - } - - // There are multiple goals + private static singleGoalRoute(args: CustomPathFinderArgs, allowedRoomNames: Set) { + const goal = args.goals[0] + // If the goal is in the same room as the origin + if (args.origin.roomName === goal.pos.roomName) return allowedRoomNames - return this.multiGoalRoute(args, allowedRoomNames) - } + // Construct route by searching through rooms - private static singleGoalRoute(args: CustomPathFinderArgs, allowedRoomNames: Set) { + const route = Game.map.findRoute(args.origin.roomName, goal.pos.roomName, { + // Essentially a costMatrix for the rooms, priority is for the lower values. Infinity is impassible - const goal = args.goals[0] - // If the goal is in the same room as the origin - if (args.origin.roomName === goal.pos.roomName) return allowedRoomNames + routeCallback: () => this.weightRoom(args.origin.roomName, args, goal), + }) - // Construct route by searching through rooms + // If a route can't be found + if (route === ERR_NO_PATH) return Result.fail - const route = Game.map.findRoute(args.origin.roomName, goal.pos.roomName, { - // Essentially a costMatrix for the rooms, priority is for the lower values. Infinity is impassible + // A viable route was found - routeCallback: () => this.weightRoom(args.origin.roomName, args, goal), - }) + this.recordRoutesAllowedRooms(route, allowedRoomNames, args, goal) + return allowedRoomNames + } - // If a route can't be found - if (route === ERR_NO_PATH) return Result.fail - - // A viable route was found + private static multiGoalRoute(args: CustomPathFinderArgs, allowedRoomNames: Set) { + /** + * Room names for goals that have already been searched and thus don't require another one + */ + const searchedGoalRoomNames: Set = new Set() + let shortestRoute = Infinity - this.recordRoutesAllowedRooms(route, allowedRoomNames, args, goal) + for (const goal of args.goals) { + // If the goal is in the same room as the origin + if (args.origin.roomName === goal.pos.roomName) { return allowedRoomNames - } - - private static multiGoalRoute(args: CustomPathFinderArgs, allowedRoomNames: Set) { + } - /** - * Room names for goals that have already been searched and thus don't require another one - */ - const searchedGoalRoomNames: Set = new Set() - let shortestRoute = Infinity - - for (const goal of args.goals) { - // If the goal is in the same room as the origin - if (args.origin.roomName === goal.pos.roomName) { - return allowedRoomNames - } + if (searchedGoalRoomNames.has(goal.pos.roomName)) continue + searchedGoalRoomNames.add(goal.pos.roomName) - if (searchedGoalRoomNames.has(goal.pos.roomName)) continue - searchedGoalRoomNames.add(goal.pos.roomName) + const minDistance = Game.map.getRoomLinearDistance(args.origin.roomName, goal.pos.roomName) + if (minDistance >= shortestRoute) continue - const minDistance = Game.map.getRoomLinearDistance(args.origin.roomName, goal.pos.roomName) - if (minDistance >= shortestRoute) continue + // Construct route by searching through rooms - // Construct route by searching through rooms + const route = Game.map.findRoute(args.origin.roomName, goal.pos.roomName, { + // Essentially a costMatrix for the rooms, priority is for the lower values. Infinity is impassible - const route = Game.map.findRoute(args.origin.roomName, goal.pos.roomName, { - // Essentially a costMatrix for the rooms, priority is for the lower values. Infinity is impassible + routeCallback: () => this.weightRoom(args.origin.roomName, args, goal), + }) - routeCallback: () => this.weightRoom(args.origin.roomName, args, goal), - }) + // If a route can't be found + if (route === ERR_NO_PATH) continue - // If a route can't be found - if (route === ERR_NO_PATH) continue - - this.recordRoutesAllowedRooms(route, allowedRoomNames, args, goal) - - shortestRoute = route.length - } + this.recordRoutesAllowedRooms(route, allowedRoomNames, args, goal) - // If no viable routes were found - if (shortestRoute === Infinity) { - return Result.fail - } - // Otherwise, viable routes were found - return allowedRoomNames + shortestRoute = route.length } - private static recordRoutesAllowedRooms(route: RoomRoute, allowedRoomNames: Set, args: CustomPathFinderArgs, goal: PathGoal) { - - for (const roomRoute of route) { - allowedRoomNames.add(roomRoute.room) - - const exits = Game.map.describeExits(roomRoute.room) - for (const exit in exits) { - const roomName = exits[exit as ExitKey] - - if (allowedRoomNames.has(roomName)) continue - - const weight = this.weightRoom(roomName, args, goal) - if (weight === Infinity) continue - - allowedRoomNames.add(roomName) - } - } + // If no viable routes were found + if (shortestRoute === Infinity) { + return Result.fail } + // Otherwise, viable routes were found + return allowedRoomNames + } + + private static recordRoutesAllowedRooms( + route: RoomRoute, + allowedRoomNames: Set, + args: CustomPathFinderArgs, + goal: PathGoal, + ) { + for (const roomRoute of route) { + allowedRoomNames.add(roomRoute.room) + + const exits = Game.map.describeExits(roomRoute.room) + for (const exit in exits) { + const roomName = exits[exit as ExitKey] + + if (allowedRoomNames.has(roomName)) continue + + const weight = this.weightRoom(roomName, args, goal) + if (weight === Infinity) continue + + allowedRoomNames.add(roomName) + } + } + } - private static weightRoom(roomName: string, args: CustomPathFinderArgs, goal: PathGoal) { - const roomMemory = Memory.rooms[roomName] - if (!roomMemory) { - if (roomName === goal.pos.roomName) return 1 - return Infinity - } - - // Avoid dangerous rooms if we are told to and the danger is persistent - if ( - args.avoidDanger && - roomMemory[RoomMemoryKeys.danger] && - roomMemory[RoomMemoryKeys.danger] >= Game.time - ) - return Infinity + private static weightRoom(roomName: string, args: CustomPathFinderArgs, goal: PathGoal) { + const roomMemory = Memory.rooms[roomName] + if (!roomMemory) { + if (roomName === goal.pos.roomName) return 1 + return Infinity + } - // If the goal is in the room - if (roomName === goal.pos.roomName) return 1 + // Avoid dangerous rooms if we are told to and the danger is persistent + if ( + args.avoidDanger && + roomMemory[RoomMemoryKeys.danger] && + roomMemory[RoomMemoryKeys.danger] >= Game.time + ) + return Infinity - // If the type is in typeWeights, inform the weight for the type - if (args.typeWeights && args.typeWeights[roomMemory[RoomMemoryKeys.type] as 0]) - return args.typeWeights[roomMemory[RoomMemoryKeys.type] as 0] + // If the goal is in the room + if (roomName === goal.pos.roomName) return 1 - return 1 - } + // If the type is in typeWeights, inform the weight for the type + if (args.typeWeights && args.typeWeights[roomMemory[RoomMemoryKeys.type] as 0]) + return args.typeWeights[roomMemory[RoomMemoryKeys.type] as 0] + return 1 + } - private static weightStructurePlans(args: CustomPathFinderArgs, allowedRoomNames: Set) { - if (!args.weightCommuneStructurePlans) return + private static weightStructurePlans(args: CustomPathFinderArgs, allowedRoomNames: Set) { + if (!args.weightCommuneStructurePlans) return - if (!args.weightCoords) args.weightCoords = {} + if (!args.weightCoords) args.weightCoords = {} - for (const roomName of allowedRoomNames) { - if (!args.weightCoords[roomName]) args.weightCoords[roomName] = {} - } + for (const roomName of allowedRoomNames) { + if (!args.weightCoords[roomName]) args.weightCoords[roomName] = {} + } - for (const roomName of allowedRoomNames) { - if (this.weightCommuneStructurePlans(args, roomName)) continue - if (this.weightRemoteStructurePlans(args, roomName)) continue - } + for (const roomName of allowedRoomNames) { + if (this.weightCommuneStructurePlans(args, roomName)) continue + if (this.weightRemoteStructurePlans(args, roomName)) continue } + } - private static weightCommuneStructurePlans(args: CustomPathFinderArgs, roomName: string) { - if (!args.weightCommuneStructurePlans) return false + private static weightCommuneStructurePlans(args: CustomPathFinderArgs, roomName: string) { + if (!args.weightCommuneStructurePlans) return false - const roomMemory = Memory.rooms[roomName] - if (!roomMemory) return false - if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.commune) return false + const roomMemory = Memory.rooms[roomName] + if (!roomMemory) return false + if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.commune) return false - const room = Game.rooms[roomName] - if (!room) return false - - // Weight structures + const room = Game.rooms[roomName] + if (!room) return false - const basePlans = room.roomManager.basePlans + // Weight structures - for (const packedCoord in basePlans.map) { - const coordData = basePlans.map[packedCoord] + const basePlans = room.roomManager.basePlans - for (const data of coordData) { - const weight = impassibleStructureTypesSet.has(data.structureType) ? 255 : 1 + for (const packedCoord in basePlans.map) { + const coordData = basePlans.map[packedCoord] - const currentWeight = args.weightCoords[roomName][packedCoord] || 0 - args.weightCoords[roomName][packedCoord] = Math.max(weight, currentWeight) - } - } + for (const data of coordData) { + const weight = impassibleStructureTypesSet.has(data.structureType) ? 255 : 1 - // Weight potential and actual stationary positions + const currentWeight = args.weightCoords[roomName][packedCoord] || 0 + args.weightCoords[roomName][packedCoord] = Math.max(weight, currentWeight) + } + } - for (const index in room.find(FIND_SOURCES)) { - // Loop through each position of harvestPositions, have creeps prefer to avoid + // Weight potential and actual stationary positions - for (const pos of room.roomManager.sourceHarvestPositions[index]) { - const packedCoord = packCoord(pos) + for (const index in room.find(FIND_SOURCES)) { + // Loop through each position of harvestPositions, have creeps prefer to avoid - const currentWeight = args.weightCoords[roomName][packedCoord] || 0 - args.weightCoords[roomName][packedCoord] = Math.max(20, currentWeight) - } - } + for (const pos of room.roomManager.sourceHarvestPositions[index]) { + const packedCoord = packCoord(pos) - if (room.roomManager.anchor) { - // The last upgrade position should be the deliver pos, which we want to weight normal + const currentWeight = args.weightCoords[roomName][packedCoord] || 0 + args.weightCoords[roomName][packedCoord] = Math.max(20, currentWeight) + } + } - for (const pos of room.roomManager.upgradePositions) { - const packedCoord = packCoord(pos) + if (room.roomManager.anchor) { + // The last upgrade position should be the deliver pos, which we want to weight normal - const currentWeight = args.weightCoords[roomName][packedCoord] || 0 - args.weightCoords[roomName][packedCoord] = Math.max(20, currentWeight) - } + for (const pos of room.roomManager.upgradePositions) { + const packedCoord = packCoord(pos) - for (const pos of room.roomManager.mineralHarvestPositions) { - const packedCoord = packCoord(pos) + const currentWeight = args.weightCoords[roomName][packedCoord] || 0 + args.weightCoords[roomName][packedCoord] = Math.max(20, currentWeight) + } - const currentWeight = args.weightCoords[roomName][packedCoord] || 0 - args.weightCoords[roomName][packedCoord] = Math.max(20, currentWeight) - } + for (const pos of room.roomManager.mineralHarvestPositions) { + const packedCoord = packCoord(pos) - const stampAnchors = room.roomManager.stampAnchors - if (stampAnchors) { - const packedCoord = packCoord(stampAnchors.hub[0]) + const currentWeight = args.weightCoords[roomName][packedCoord] || 0 + args.weightCoords[roomName][packedCoord] = Math.max(20, currentWeight) + } - const currentWeight = args.weightCoords[roomName][packedCoord] || 0 - args.weightCoords[roomName][packedCoord] = Math.max(20, currentWeight) - } + const stampAnchors = room.roomManager.stampAnchors + if (stampAnchors) { + const packedCoord = packCoord(stampAnchors.hub[0]) - // Loop through each position of fastFillerPositions, have creeps prefer to avoid + const currentWeight = args.weightCoords[roomName][packedCoord] || 0 + args.weightCoords[roomName][packedCoord] = Math.max(20, currentWeight) + } - const fastFillerCoords = RoomUtils.getFastFillerCoords(room) - for (const pos of fastFillerCoords) { - const packedCoord = packCoord(pos) + // Loop through each position of fastFillerPositions, have creeps prefer to avoid - const currentWeight = args.weightCoords[roomName][packedCoord] || 0 - args.weightCoords[roomName][packedCoord] = Math.max(20, currentWeight) - } - } + const fastFillerCoords = RoomUtils.getFastFillerCoords(room) + for (const pos of fastFillerCoords) { + const packedCoord = packCoord(pos) - return true + const currentWeight = args.weightCoords[roomName][packedCoord] || 0 + args.weightCoords[roomName][packedCoord] = Math.max(20, currentWeight) + } } - private static weightRemoteStructurePlans(args: CustomPathFinderArgs, roomName: string) { - if (!args.weightRemoteStructurePlans.remoteResourcePathType) return false + return true + } - const roomMemory = Memory.rooms[roomName] - if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.remote) return false + private static weightRemoteStructurePlans(args: CustomPathFinderArgs, roomName: string) { + if (!args.weightRemoteStructurePlans.remoteResourcePathType) return false - for (const packedPath of roomMemory[args.weightRemoteStructurePlans.remoteResourcePathType]) { - const path = unpackPosList(packedPath) - - for (const pos of path) { - if (!args.weightCoords[pos.roomName]) args.weightCoords[pos.roomName] = {} - args.weightCoords[pos.roomName][packCoord(pos)] = 1 - } - } + const roomMemory = Memory.rooms[roomName] + if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.remote) return false - // Prefer to avoid the best source harvest pos - for (const packedPositions of roomMemory[RoomMemoryKeys.remoteSourceHarvestPositions]) { - const pos = unpackPosAt(packedPositions, 0) - const packedCoord = packCoord(pos) + for (const packedPath of roomMemory[args.weightRemoteStructurePlans.remoteResourcePathType]) { + const path = unpackPosList(packedPath) - const currentWeight = args.weightCoords[roomName][packedCoord] || 0 - args.weightCoords[roomName][packedCoord] = Math.max(20, currentWeight) - } - - // Prefer to avoid all potential reservation positions - - const positions = unpackPosList(roomMemory[RoomMemoryKeys.remoteControllerPositions]) + for (const pos of path) { + if (!args.weightCoords[pos.roomName]) args.weightCoords[pos.roomName] = {} + args.weightCoords[pos.roomName][packCoord(pos)] = 1 + } + } - for (const pos of positions) { - const packedCoord = packCoord(pos) - const currentWeight = args.weightCoords[roomName][packedCoord] || 0 - args.weightCoords[roomName][packedCoord] = Math.max(20, currentWeight) - } + // Prefer to avoid the best source harvest pos + for (const packedPositions of roomMemory[RoomMemoryKeys.remoteSourceHarvestPositions]) { + const pos = unpackPosAt(packedPositions, 0) + const packedCoord = packCoord(pos) - return true + const currentWeight = args.weightCoords[roomName][packedCoord] || 0 + args.weightCoords[roomName][packedCoord] = Math.max(20, currentWeight) } - private static generatePath(args: CustomPathFinderArgs, allowedRoomNames: Set) { - args.plainCost = args.plainCost || defaultPlainCost - args.swampCost = args.swampCost || defaultSwampCost - if (args.avoidKeeperLairs === undefined) args.avoidKeeperLairs = true - - const originRoom: undefined | Room = Game.rooms[args.origin.roomName] - const maxRooms = args.maxRooms - ? Math.min(allowedRoomNames.size, args.maxRooms) - : allowedRoomNames.size - const pathFinderResult = PathFinder.search(args.origin, args.goals, { - plainCost: args.plainCost, - swampCost: args.swampCost, - maxRooms, - maxOps: Math.min(100000, (1 + maxRooms) * 2000), - heuristicWeight: 1, - flee: args.flee, + // Prefer to avoid all potential reservation positions - // Create costMatrixes for room tiles, where lower values are priority, and 255 or more is considered impassible + const positions = unpackPosList(roomMemory[RoomMemoryKeys.remoteControllerPositions]) - roomCallback(roomName) { - // If the room is not allowed + for (const pos of positions) { + const packedCoord = packCoord(pos) + const currentWeight = args.weightCoords[roomName][packedCoord] || 0 + args.weightCoords[roomName][packedCoord] = Math.max(20, currentWeight) + } - if (!allowedRoomNames.has(roomName)) return false + return true + } - const room = Game.rooms[roomName] - const roomMemory = Memory.rooms[roomName] - let costs: CostMatrix - if (args.defaultCostMatrix) { - const defaultCosts = args.defaultCostMatrix(roomName) - if (defaultCosts) costs = defaultCosts - } else costs = new PathFinder.CostMatrix() + private static generatePath(args: CustomPathFinderArgs, allowedRoomNames: Set) { + args.plainCost = args.plainCost || defaultPlainCost + args.swampCost = args.swampCost || defaultSwampCost + if (args.avoidKeeperLairs === undefined) args.avoidKeeperLairs = true - // If there is no route + const originRoom: undefined | Room = Game.rooms[args.origin.roomName] + const maxRooms = args.maxRooms + ? Math.min(allowedRoomNames.size, args.maxRooms) + : allowedRoomNames.size + const pathFinderResult = PathFinder.search(args.origin, args.goals, { + plainCost: args.plainCost, + swampCost: args.swampCost, + maxRooms, + maxOps: Math.min(100000, (1 + maxRooms) * 2000), + heuristicWeight: 1, + flee: args.flee, - if (allowedRoomNames.size <= 1) { - // Configure y and loop through top exits + // Create costMatrixes for room tiles, where lower values are priority, and 255 or more is considered impassible - let x - let y = 0 - for (x = 0; x < roomDimensions; x += 1) costs.set(x, y, 255) + roomCallback(roomName) { + // If the room is not allowed - // Configure x and loop through left exits + if (!allowedRoomNames.has(roomName)) return false - x = 0 - for (y = 0; y < roomDimensions; y += 1) costs.set(x, y, 255) + const room = Game.rooms[roomName] + const roomMemory = Memory.rooms[roomName] + let costs: CostMatrix + if (args.defaultCostMatrix) { + const defaultCosts = args.defaultCostMatrix(roomName) + if (defaultCosts) costs = defaultCosts + } else costs = new PathFinder.CostMatrix() - // Configure y and loop through bottom exits + // If there is no route - y = roomDimensions - 1 - for (x = 0; x < roomDimensions; x += 1) costs.set(x, y, 255) + if (allowedRoomNames.size <= 1) { + // Configure y and loop through top exits - // Configure x and loop through right exits + let x + let y = 0 + for (x = 0; x < roomDimensions; x += 1) costs.set(x, y, 255) - x = roomDimensions - 1 - for (y = 0; y < roomDimensions; y += 1) costs.set(x, y, 255) - } + // Configure x and loop through left exits - if (args.defaultCostMatrix) return costs + x = 0 + for (y = 0; y < roomDimensions; y += 1) costs.set(x, y, 255) - if (args.weightCoordMapsForRoomName) { + // Configure y and loop through bottom exits - const coordMap = args.weightCoordMapsForRoomName(roomName) - if (coordMap) { + y = roomDimensions - 1 + for (x = 0; x < roomDimensions; x += 1) costs.set(x, y, 255) - for (const index in coordMap) { - const packedCoord = parseInt(index) + // Configure x and loop through right exits - if (coordMap[packedCoord] === 0) continue + x = roomDimensions - 1 + for (y = 0; y < roomDimensions; y += 1) costs.set(x, y, 255) + } - const coord = unpackNumAsCoord(packedCoord) - if (costs.get(coord.x, coord.y) === 255) continue + if (args.defaultCostMatrix) return costs - costs.set(coord.x, coord.y, coordMap[packedCoord]) - } - } - } + if (args.weightCoordMapsForRoomName) { + const coordMap = args.weightCoordMapsForRoomName(roomName) + if (coordMap) { + for (const index in coordMap) { + const packedCoord = parseInt(index) - // Weight positions + if (coordMap[packedCoord] === 0) continue - if (args.weightCoords && args.weightCoords[roomName]) { - for (const packedCoord in args.weightCoords[roomName]) { - const coord = unpackCoord(packedCoord) + const coord = unpackNumAsCoord(packedCoord) + if (costs.get(coord.x, coord.y) === 255) continue - costs.set(coord.x, coord.y, args.weightCoords[roomName][packedCoord]) - } - } + costs.set(coord.x, coord.y, coordMap[packedCoord]) + } + } + } - // Weight coord maps + // Weight positions - if (args.weightCoordMaps) { - for (const coordMap of args.weightCoordMaps) { - for (const index in coordMap) { - const packedCoord = parseInt(index) + if (args.weightCoords && args.weightCoords[roomName]) { + for (const packedCoord in args.weightCoords[roomName]) { + const coord = unpackCoord(packedCoord) - if (coordMap[packedCoord] === 0) continue + costs.set(coord.x, coord.y, args.weightCoords[roomName][packedCoord]) + } + } - const coord = unpackNumAsCoord(packedCoord) - if (costs.get(coord.x, coord.y) === 255) continue + // Weight coord maps - costs.set(coord.x, coord.y, coordMap[packedCoord]) - } - } - } + if (args.weightCoordMaps) { + for (const coordMap of args.weightCoordMaps) { + for (const index in coordMap) { + const packedCoord = parseInt(index) - // If we have no vision in the room + if (coordMap[packedCoord] === 0) continue - if (!room) return costs + const coord = unpackNumAsCoord(packedCoord) + if (costs.get(coord.x, coord.y) === 255) continue - // The pather is a creep, it isn't in a quad, and it hasn't already weighted roads + costs.set(coord.x, coord.y, coordMap[packedCoord]) + } + } + } - if (args.creep) { + // If we have no vision in the room - const creepMemory = Memory.creeps[args.creep.name] || Memory.powerCreeps[args.creep.name] + if (!room) return costs - if ( - (!creepMemory[CreepMemoryKeys.squadMembers] || - creepMemory[CreepMemoryKeys.squadMembers].length < 3) && - (!args.weightStructures || !args.weightStructures.road) - ) { - let roadCost = 1 - if (!creepMemory[CreepMemoryKeys.preferRoads]) roadCost = args.plainCost + CustomPathFinder.weightCreep(costs, args, room) + CustomPathFinder.avoidStationaryPositions(costs, args, room) - for (const road of room.roomManager.structures.road) - costs.set(road.pos.x, road.pos.y, roadCost) - } - } + // Weight structures - // If avoidStationaryPositions is requested + for (const key in args.weightStructures) { + // Get the numeric value of the weight - if (args.avoidStationaryPositions) { - for (const [packedCoord, reserveType] of room.roomManager.reservedCoords) { - if (args.minReservedCoordType && reserveType < args.minReservedCoordType) - continue + const structureType = key as StructureConstant - const coord = unpackCoord(packedCoord) - costs.set(coord.x, coord.y, reserveType * 5 + 5) - } - } + for (const structure of room.roomManager.structures[structureType]) + costs.set(structure.pos.x, structure.pos.y, args.weightStructures[structureType]) + } - // Weight structures + for (const portal of room.roomManager.structures.portal) + costs.set(portal.pos.x, portal.pos.y, 255) - for (const key in args.weightStructures) { - // Get the numeric value of the weight + // Loop trough each construction site belonging to an ally - const structureType = key as StructureConstant + for (const cSite of room.roomManager.notMyConstructionSites.ally) + costs.set(cSite.pos.x, cSite.pos.y, 255) - for (const structure of room.roomManager.structures[structureType]) - costs.set( - structure.pos.x, - structure.pos.y, - args.weightStructures[structureType], - ) - } + CustomPathFinder.avoidEnemyRanges(costs, args, room) + CustomPathFinder.avoidKeeperLairs(costs, args, roomMemory) + CustomPathFinder.avoidNotMyCreeps(costs, args, room) + CustomPathFinder.avoidImpassibleStructures(costs, args, room) - for (const portal of room.roomManager.structures.portal) - costs.set(portal.pos.x, portal.pos.y, 255) + // Stop if there are no cost matrixes to weight - // Loop trough each construction site belonging to an ally + if (args.overrideCostMatrixes) { + // Otherwise iterate through each x and y in the room - for (const cSite of room.roomManager.notMyConstructionSites.ally) - costs.set(cSite.pos.x, cSite.pos.y, 255) + for (let x = 0; x < roomDimensions; x += 1) { + for (let y = 0; y < roomDimensions; y += 1) { + // Loop through each costMatrix - // If there is a request to avoid enemy ranges + for (const costMatrix of args.overrideCostMatrixes(roomName)) { + costs.set(x, y, costMatrix.get(x, y)) + } + } + } + } - avoidEnemyRanges() + // Inform the CostMatrix - function avoidEnemyRanges() { - // Stop if avoidEnemyRanges isn't specified + return costs + }, + }) - if (!args.avoidEnemyRanges) return - if (room.controller && room.controller.safeMode && room.controller.my) return + // If the pathFindResult is incomplete, inform an empty array - for (const packedCoord of room.roomManager.enemyThreatCoords) { - const coord = unpackCoord(packedCoord) - costs.set(coord.x, coord.y, 255) - } - } + if (pathFinderResult.incomplete) { + customLog( + 'Incomplete Path', + `${args.origin} -> ${args.goals[0].pos} range: ${args.goals[0].range} goals: ${ + args.goals.length + } path len: ${pathFinderResult.path.length} allowed: ${Array.from(allowedRoomNames)}`, + { + type: LogTypes.warning, + }, + ) - if (args.avoidKeeperLairs) { - if (roomMemory[RoomMemoryKeys.type] === RoomTypes.sourceKeeper) { - const lairCoords = unpackCoordList(roomMemory[RoomMemoryKeys.keeperLairCoords]) - for (const lairCoord of lairCoords) { - forCoordsAroundRange(lairCoord, 4, coord => { - costs.set(coord.x, coord.y, 255) - }) - } - } - } + visualizePath(pathFinderResult.path, customColors.red) + originRoom.errorVisual(args.origin) - if (args.avoidNotMyCreeps && (!room.controller || !room.controller.safeMode)) { - for (const creep of room.roomManager.notMyCreeps.enemy) - costs.set(creep.pos.x, creep.pos.y, 255) - for (const creep of room.roomManager.notMyCreeps.ally) - costs.set(creep.pos.x, creep.pos.y, 255) + let lastPos = args.origin - for (const creep of room.find(FIND_HOSTILE_POWER_CREEPS)) - costs.set(creep.pos.x, creep.pos.y, 255) - } + for (const goal of args.goals) { + // Ensure no visuals are generated outside of the origin room - // If avoiding structures that can't be walked on is enabled + if (lastPos.roomName !== goal.pos.roomName) continue - if (args.avoidImpassibleStructures) { - for (const rampart of room.roomManager.structures.rampart) { - // If the rampart is mine + originRoom.visual.line(lastPos, goal.pos, { + color: customColors.red, + width: 0.15, + opacity: 0.3, + lineStyle: 'solid', + }) - if (rampart.my) { - // If there is no weight for my ramparts, iterate + lastPos = goal.pos + } - if (!args.myRampartWeight) continue + return [] + } - // Otherwise, record rampart by the weight and iterate + // Otherwise inform the path from pathFinderResult - costs.set(rampart.pos.x, rampart.pos.y, args.myRampartWeight) - continue - } + return pathFinderResult.path + } - // If the rampart is public and owned by an ally - // We don't want to try to walk through enemy public ramparts as it could trick our pathing + static weightCreep(costs: CostMatrix, args: CustomPathFinderArgs, room: Room) { + if (!args.creep) return - if (rampart.isPublic && global.settings.allies.includes(rampart.owner.username)) - continue + const creepMemory = Memory.creeps[args.creep.name] || Memory.powerCreeps[args.creep.name] - // Otherwise set the rampart's pos as impassible + if ( + (!creepMemory[CreepMemoryKeys.squadMembers] || + creepMemory[CreepMemoryKeys.squadMembers].length < 3) && + (!args.weightStructures || !args.weightStructures.road) + ) { + let roadCost = 1 + if (!creepMemory[CreepMemoryKeys.preferRoads]) roadCost = args.plainCost - costs.set(rampart.pos.x, rampart.pos.y, 255) - } + for (const road of room.roomManager.structures.road) + costs.set(road.pos.x, road.pos.y, roadCost) + } + } - // Loop through structureTypes of impassibleStructureTypes + static avoidStationaryPositions(costs: CostMatrix, args: CustomPathFinderArgs, room: Room) { + // If avoidStationaryPositions is requested - for (const structureType of impassibleStructureTypes) { - for (const structure of room.roomManager.structures[structureType]) { - // Set pos as impassible + if (!args.avoidStationaryPositions) return - costs.set(structure.pos.x, structure.pos.y, 255) - } + for (const [packedCoord, reserveType] of room.roomManager.reservedCoords) { + if (args.minReservedCoordType && reserveType < args.minReservedCoordType) continue - for (const cSite of room.roomManager.cSites[structureType]) { - // Set pos as impassible + const coord = unpackCoord(packedCoord) + costs.set(coord.x, coord.y, reserveType * 5 + 5) + } + } - costs.set(cSite.pos.x, cSite.pos.y, 255) - } - } - } + static avoidEnemyRanges(costs: CostMatrix, args: CustomPathFinderArgs, room: Room) { + // Stop if avoidEnemyRanges isn't specified + if (!args.avoidEnemyRanges) return + if (room.controller && room.controller.safeMode && room.controller.my) return - // Stop if there are no cost matrixes to weight + for (const packedCoord of room.roomManager.enemyThreatCoords) { + const coord = unpackCoord(packedCoord) + costs.set(coord.x, coord.y, 255) + } + } - if (args.defaultCostMatrixes) { - // Otherwise iterate through each x and y in the room + static avoidKeeperLairs(costs: CostMatrix, args: CustomPathFinderArgs, roomMemory: RoomMemory) { + if (!args.avoidKeeperLairs) return + if (roomMemory[RoomMemoryKeys.type] !== RoomTypes.sourceKeeper) return - for (let x = 0; x < roomDimensions; x += 1) { - for (let y = 0; y < roomDimensions; y += 1) { - // Loop through each costMatrix + const lairCoords = unpackCoordList(roomMemory[RoomMemoryKeys.keeperLairCoords]) + for (const lairCoord of lairCoords) { + forCoordsAroundRange(lairCoord, 4, coord => { + costs.set(coord.x, coord.y, 255) + }) + } + } - for (const costMatrix of args.defaultCostMatrixes(roomName)) { - costs.set(x, y, costMatrix.get(x, y)) - } - } - } - } + static avoidNotMyCreeps(costs: CostMatrix, args: CustomPathFinderArgs, room: Room) { + if (!args.avoidNotMyCreeps) return + // If the room is in safemode, there is no point in avoiding enemy creeps + if (room.controller && room.controller.safeMode) return - // Inform the CostMatrix + for (const creep of room.roomManager.notMyCreeps.enemy) costs.set(creep.pos.x, creep.pos.y, 255) + for (const creep of room.roomManager.notMyCreeps.ally) costs.set(creep.pos.x, creep.pos.y, 255) - return costs - }, - }) + for (const creep of room.find(FIND_HOSTILE_POWER_CREEPS)) + costs.set(creep.pos.x, creep.pos.y, 255) + } - // If the pathFindResult is incomplete, inform an empty array + static avoidImpassibleStructures(costs: CostMatrix, args: CustomPathFinderArgs, room: Room) { + if (!args.avoidImpassibleStructures) return - if (pathFinderResult.incomplete) { - customLog( - 'Incomplete Path', - `${args.origin} -> ${args.goals[0].pos} range: ${args.goals[0].range} goals: ${ - args.goals.length - } path len: ${pathFinderResult.path.length} allowed: ${Array.from(allowedRoomNames)}`, - { - type: LogTypes.warning, - }, - ) + for (const rampart of room.roomManager.structures.rampart) { + // If the rampart is mine - visualizePath(pathFinderResult.path, customColors.red) - originRoom.errorVisual(args.origin) + if (rampart.my) { + // If there is no weight for my ramparts, iterate + if (!args.myRampartWeight) continue - let lastPos = args.origin + // Otherwise, record rampart by the weight and iterate - for (const goal of args.goals) { - // Ensure no visuals are generated outside of the origin room + costs.set(rampart.pos.x, rampart.pos.y, args.myRampartWeight) + continue + } - if (lastPos.roomName !== goal.pos.roomName) continue + // If the rampart is public and owned by an ally + // We don't want to try to walk through enemy public ramparts as it could trick our pathing - originRoom.visual.line(lastPos, goal.pos, { - color: customColors.red, - width: 0.15, - opacity: 0.3, - lineStyle: 'solid', - }) + if (rampart.isPublic && global.settings.allies.includes(rampart.owner.username)) continue - lastPos = goal.pos - } + // Otherwise set the rampart's pos as impassible + costs.set(rampart.pos.x, rampart.pos.y, 255) + } - return [] - } + // Loop through structureTypes of impassibleStructureTypes - // Otherwise inform the path from pathFinderResult + for (const structureType of impassibleStructureTypes) { + for (const structure of room.roomManager.structures[structureType]) { + // Set pos as impassible + costs.set(structure.pos.x, structure.pos.y, 255) + } - return pathFinderResult.path + for (const cSite of room.roomManager.cSites[structureType]) { + // Set pos as impassible + costs.set(cSite.pos.x, cSite.pos.y, 255) + } } + } } diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index a9b0b2f9c..574f99693 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -923,7 +923,7 @@ Creep.prototype.findQuadBulldozeTargets = function (goalPos) { range: 0, }, ], - defaultCostMatrixes(roomName) { + overrideCostMatrixes(roomName) { return [RoomManager.roomManagers[roomName].quadBulldozeCostMatrix] }, }) diff --git a/src/room/creeps/roleManagers/antifa/quad.ts b/src/room/creeps/roleManagers/antifa/quad.ts index d8952d021..dfbe46966 100644 --- a/src/room/creeps/roleManagers/antifa/quad.ts +++ b/src/room/creeps/roleManagers/antifa/quad.ts @@ -357,7 +357,7 @@ export class Quad { // Attack mode - opts.defaultCostMatrixes = function (roomName) { + opts.overrideCostMatrixes = function (roomName) { return [RoomManager.roomManagers[roomName].quadCostMatrix] } moveLeader.createMoveRequest(opts) From a3608461bb329d777d419fc0fa66e36054ab267a Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sat, 27 Jan 2024 20:00:17 -0800 Subject: [PATCH 111/190] more CustomPathFinder cleaning --- src/international/customPathFinder.ts | 203 ++++++++++++++------------ 1 file changed, 110 insertions(+), 93 deletions(-) diff --git a/src/international/customPathFinder.ts b/src/international/customPathFinder.ts index fe984b245..c17d6aec1 100644 --- a/src/international/customPathFinder.ts +++ b/src/international/customPathFinder.ts @@ -406,75 +406,13 @@ export class CustomPathFinder { if (defaultCosts) costs = defaultCosts } else costs = new PathFinder.CostMatrix() - // If there is no route - - if (allowedRoomNames.size <= 1) { - // Configure y and loop through top exits - - let x - let y = 0 - for (x = 0; x < roomDimensions; x += 1) costs.set(x, y, 255) - - // Configure x and loop through left exits - - x = 0 - for (y = 0; y < roomDimensions; y += 1) costs.set(x, y, 255) - - // Configure y and loop through bottom exits - - y = roomDimensions - 1 - for (x = 0; x < roomDimensions; x += 1) costs.set(x, y, 255) - - // Configure x and loop through right exits - - x = roomDimensions - 1 - for (y = 0; y < roomDimensions; y += 1) costs.set(x, y, 255) - } + CustomPathFinder.weightExits(costs, allowedRoomNames) if (args.defaultCostMatrix) return costs - if (args.weightCoordMapsForRoomName) { - const coordMap = args.weightCoordMapsForRoomName(roomName) - if (coordMap) { - for (const index in coordMap) { - const packedCoord = parseInt(index) - - if (coordMap[packedCoord] === 0) continue - - const coord = unpackNumAsCoord(packedCoord) - if (costs.get(coord.x, coord.y) === 255) continue - - costs.set(coord.x, coord.y, coordMap[packedCoord]) - } - } - } - - // Weight positions - - if (args.weightCoords && args.weightCoords[roomName]) { - for (const packedCoord in args.weightCoords[roomName]) { - const coord = unpackCoord(packedCoord) - - costs.set(coord.x, coord.y, args.weightCoords[roomName][packedCoord]) - } - } - - // Weight coord maps - - if (args.weightCoordMaps) { - for (const coordMap of args.weightCoordMaps) { - for (const index in coordMap) { - const packedCoord = parseInt(index) - - if (coordMap[packedCoord] === 0) continue - - const coord = unpackNumAsCoord(packedCoord) - if (costs.get(coord.x, coord.y) === 255) continue - - costs.set(coord.x, coord.y, coordMap[packedCoord]) - } - } - } + CustomPathFinder.weightCoordMapsForRoomName(costs, args, roomName) + CustomPathFinder.weightCoords(costs, args, roomName) + CustomPathFinder.weightCoordMaps(costs, args, roomName) // If we have no vision in the room @@ -482,17 +420,7 @@ export class CustomPathFinder { CustomPathFinder.weightCreep(costs, args, room) CustomPathFinder.avoidStationaryPositions(costs, args, room) - - // Weight structures - - for (const key in args.weightStructures) { - // Get the numeric value of the weight - - const structureType = key as StructureConstant - - for (const structure of room.roomManager.structures[structureType]) - costs.set(structure.pos.x, structure.pos.y, args.weightStructures[structureType]) - } + CustomPathFinder.weightStructures(costs, args, room) for (const portal of room.roomManager.structures.portal) costs.set(portal.pos.x, portal.pos.y, 255) @@ -506,22 +434,7 @@ export class CustomPathFinder { CustomPathFinder.avoidKeeperLairs(costs, args, roomMemory) CustomPathFinder.avoidNotMyCreeps(costs, args, room) CustomPathFinder.avoidImpassibleStructures(costs, args, room) - - // Stop if there are no cost matrixes to weight - - if (args.overrideCostMatrixes) { - // Otherwise iterate through each x and y in the room - - for (let x = 0; x < roomDimensions; x += 1) { - for (let y = 0; y < roomDimensions; y += 1) { - // Loop through each costMatrix - - for (const costMatrix of args.overrideCostMatrixes(roomName)) { - costs.set(x, y, costMatrix.get(x, y)) - } - } - } - } + CustomPathFinder.overrideCostMatrixes(costs, args, roomName) // Inform the CostMatrix @@ -570,6 +483,84 @@ export class CustomPathFinder { return pathFinderResult.path } + static weightExits(costs: CostMatrix, allowedRoomNames: Set) { + // If there i + if (allowedRoomNames.size > 1) return + + // There is no route + + // Configure y and loop through top exits + + let x + let y = 0 + for (x = 0; x < roomDimensions; x += 1) costs.set(x, y, 255) + + // Configure x and loop through left exits + + x = 0 + for (y = 0; y < roomDimensions; y += 1) costs.set(x, y, 255) + + // Configure y and loop through bottom exits + + y = roomDimensions - 1 + for (x = 0; x < roomDimensions; x += 1) costs.set(x, y, 255) + + // Configure x and loop through right exits + + x = roomDimensions - 1 + for (y = 0; y < roomDimensions; y += 1) costs.set(x, y, 255) + } + + static weightCoordMapsForRoomName( + costs: CostMatrix, + args: CustomPathFinderArgs, + roomName: string, + ) { + if (!args.weightCoordMapsForRoomName) return + + const coordMap = args.weightCoordMapsForRoomName(roomName) + if (!coordMap) return + + for (const index in coordMap) { + const packedCoord = parseInt(index) + + if (coordMap[packedCoord] === 0) continue + + const coord = unpackNumAsCoord(packedCoord) + if (costs.get(coord.x, coord.y) === 255) continue + + costs.set(coord.x, coord.y, coordMap[packedCoord]) + } + } + + static weightCoords(costs: CostMatrix, args: CustomPathFinderArgs, roomName: string) { + if (!args.weightCoords) return + if (!args.weightCoords[roomName]) return + + for (const packedCoord in args.weightCoords[roomName]) { + const coord = unpackCoord(packedCoord) + + costs.set(coord.x, coord.y, args.weightCoords[roomName][packedCoord]) + } + } + + static weightCoordMaps(costs: CostMatrix, args: CustomPathFinderArgs, roomName: string) { + if (!args.weightCoordMaps) return + + for (const coordMap of args.weightCoordMaps) { + for (const index in coordMap) { + const packedCoord = parseInt(index) + + if (coordMap[packedCoord] === 0) continue + + const coord = unpackNumAsCoord(packedCoord) + if (costs.get(coord.x, coord.y) === 255) continue + + costs.set(coord.x, coord.y, coordMap[packedCoord]) + } + } + } + static weightCreep(costs: CostMatrix, args: CustomPathFinderArgs, room: Room) { if (!args.creep) return @@ -601,6 +592,17 @@ export class CustomPathFinder { } } + static weightStructures(costs: CostMatrix, args: CustomPathFinderArgs, room: Room) { + for (const key in args.weightStructures) { + // Get the numeric value of the weight + + const structureType = key as StructureConstant + + for (const structure of room.roomManager.structures[structureType]) + costs.set(structure.pos.x, structure.pos.y, args.weightStructures[structureType]) + } + } + static avoidEnemyRanges(costs: CostMatrix, args: CustomPathFinderArgs, room: Room) { // Stop if avoidEnemyRanges isn't specified if (!args.avoidEnemyRanges) return @@ -675,4 +677,19 @@ export class CustomPathFinder { } } } + + static overrideCostMatrixes(costs: CostMatrix, args: CustomPathFinderArgs, roomName: string) { + if (!args.overrideCostMatrixes) return + // Otherwise iterate through each x and y in the room + + for (let x = 0; x < roomDimensions; x += 1) { + for (let y = 0; y < roomDimensions; y += 1) { + // Loop through each costMatrix + + for (const costMatrix of args.overrideCostMatrixes(roomName)) { + costs.set(x, y, costMatrix.get(x, y)) + } + } + } + } } From 0812f2b0ac6adda1306623b2407099076a5c1dc7 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Sun, 28 Jan 2024 21:25:24 -0800 Subject: [PATCH 112/190] powerTasks, internal garbage collection fixes --- package.json | 2 +- src/international/commands.ts | 4 +- src/international/constants.ts | 5 + src/international/flags/flags.ts | 4 +- src/international/garbageCollector.ts | 4 +- src/international/init.ts | 12 +- src/international/mapVisuals.ts | 3 +- src/international/migration.ts | 4 +- src/room/commune/commune.ts | 26 +- src/room/commune/communeProcs.ts | 10 +- .../spawning/spawningStructureProcs.ts | 2 +- src/room/commune/towerProcs.ts | 2 +- src/room/construction/communePlanner.ts | 239 +++++++++--------- src/room/construction/construction.ts | 2 +- src/room/creeps/powerCreeps/operator.ts | 20 +- src/room/remotePlanner.ts | 1 - src/room/roomFunctions.ts | 17 +- src/room/roomNameProcs.ts | 4 +- src/room/roomNameUtils.ts | 72 ++++-- src/room/roomProcs.ts | 2 +- src/room/rooms.ts | 4 +- src/room/sourceProcs.ts | 2 +- src/settings.example.ts | 4 +- src/settingsDefault.ts | 2 +- src/types.d.ts | 15 +- src/types/settings.ts | 9 +- 26 files changed, 260 insertions(+), 211 deletions(-) diff --git a/package.json b/package.json index e1da5e688..ea00a8d7e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "the-international-screeps-bot", - "version": "2.118.0", + "version": "2.119.0", "description": "", "files": [ "dist" diff --git a/src/international/commands.ts b/src/international/commands.ts index 561b48788..6ebc184db 100644 --- a/src/international/commands.ts +++ b/src/international/commands.ts @@ -6,6 +6,7 @@ import { CombatRequestKeys, RoomMemoryKeys, RoomTypes, + Result, } from './constants' const importantStructures: StructureConstant[] = [STRUCTURE_SPAWN] @@ -175,8 +176,9 @@ global.destroyCommuneStructures = function (types?) { global.claim = function (requestName, communeName, priority = 0, override?: boolean) { if (!Memory.rooms[requestName]) return 'No roomMemory for ' + requestName - if (Memory.rooms[requestName][RoomMemoryKeys.communePlanned] !== true) + if (Memory.rooms[requestName][RoomMemoryKeys.communePlanned] !== Result.success) { return 'Planning not completed for ' + requestName + } if (!Memory.workRequests[requestName]) { Memory.workRequests[requestName] = { diff --git a/src/international/constants.ts b/src/international/constants.ts index 3bdd132df..43c9ebcc6 100644 --- a/src/international/constants.ts +++ b/src/international/constants.ts @@ -427,6 +427,11 @@ export const roomTypes: Record> = { RoomMemoryKeys.dynamicScore, RoomMemoryKeys.dynamicScoreUpdate, RoomMemoryKeys.clearedEnemyStructures, + RoomMemoryKeys.workRequest, + RoomMemoryKeys.combatRequests, + RoomMemoryKeys.haulRequests, + RoomMemoryKeys.mineral, + RoomMemoryKeys.greatestRCL, ]), [RoomTypes.remote]: new Set([ RoomMemoryKeys.commune, diff --git a/src/international/flags/flags.ts b/src/international/flags/flags.ts index a168f70c8..c332ed86a 100644 --- a/src/international/flags/flags.ts +++ b/src/international/flags/flags.ts @@ -212,7 +212,7 @@ export class FlagManager { flag.setColor(COLOR_RED) return } - if (roomMemory[RoomMemoryKeys.communePlanned] !== true) { + if (roomMemory[RoomMemoryKeys.communePlanned] !== Result.success) { flag.setColor(COLOR_RED) return } @@ -889,7 +889,7 @@ export class FlagManager { flag.setColor(COLOR_RED) return } - if (!roomMemory[RoomMemoryKeys.communePlanned]) { + if (roomMemory[RoomMemoryKeys.communePlanned] !== Result.success) { flag.setColor(COLOR_RED) return } diff --git a/src/international/garbageCollector.ts b/src/international/garbageCollector.ts index 963be7172..763e7be1b 100644 --- a/src/international/garbageCollector.ts +++ b/src/international/garbageCollector.ts @@ -17,7 +17,9 @@ export class GarbageCollector extends StaticSleepable { static cleanRooms() { for (const roomName in Memory.rooms) { const roomMemory = Memory.rooms[roomName] - if (Game.time - roomMemory[RoomMemoryKeys.lastScout] < this.cleanRoomThreshold) continue + if (roomMemory[RoomMemoryKeys.lastScout] && Game.time - roomMemory[RoomMemoryKeys.lastScout] < this.cleanRoomThreshold) { + continue + } delete Memory.rooms[roomName] } diff --git a/src/international/init.ts b/src/international/init.ts index c3c061920..f69bf0e32 100644 --- a/src/international/init.ts +++ b/src/international/init.ts @@ -3,6 +3,7 @@ import { PlayerManager } from './players' import { StatsManager } from './stats' import { PlayerMemoryKeys, SegmentIDs } from './constants' import { PlayerRelationships } from './constants' +import { RoomNameUtils } from 'room/roomNameUtils' /** * Configures variables to align with the bot's expectations, to ensure proper function @@ -17,7 +18,7 @@ export class InitManager { * Construct Memory if it isn't constructed yet */ private static initMemory() { - if (Memory.breakingVersion) return + if (Memory.breakingVersion !== undefined) return this.initSegments() @@ -42,6 +43,7 @@ export class InitManager { Memory.nukeRequests = {} StatsManager.internationalConfig() } + /** * Construct global if it isn't constructed yet */ @@ -50,10 +52,12 @@ export class InitManager { global.constructed = true - global.packedRoomNames = {} - global.unpackedRoomNames = {} - this.initPlayers() + + for (const roomName in Memory.rooms) { + + RoomNameUtils.basicScout(roomName) + } } private static initPlayers() { diff --git a/src/international/mapVisuals.ts b/src/international/mapVisuals.ts index 0fd56b617..cb327e09a 100644 --- a/src/international/mapVisuals.ts +++ b/src/international/mapVisuals.ts @@ -7,6 +7,7 @@ import { roomDimensions, packedPosLength, FlagNames, + Result, } from './constants' import { CommuneUtils } from 'room/commune/communeUtils' @@ -184,7 +185,7 @@ export class MapVisualsManager { continue } - if (roomMemory[RoomMemoryKeys.communePlanned] === false) { + if (roomMemory[RoomMemoryKeys.communePlanned] === Result.fail) { Game.map.visual.circle(new RoomPosition(25, 25, roomName), { stroke: customColors.red, strokeWidth: 2, diff --git a/src/international/migration.ts b/src/international/migration.ts index 5e79266d2..6a785fbdd 100644 --- a/src/international/migration.ts +++ b/src/international/migration.ts @@ -8,7 +8,9 @@ import { RoomNameProcs } from 'room/roomNameProcs' export class MigrationManager { public static tryMigrate() { // We are at the right version, no need to migrate - if (Memory.breakingVersion === global.settings.breakingVersion) return + if (Memory.breakingVersion === global.settings.breakingVersion) { + return + } // Try to do a soft migration this.trySoftMigrations() diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index f66056f3a..6c22d922a 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -1,24 +1,17 @@ import { findObjectWithID, getRange, - packAsNum, - randomTick, - findLowestScore, + packAsNum, findLowestScore, roundTo, - forCoordsAroundRange, - Utils, + forCoordsAroundRange } from 'utils/utils' -import './defence' import './workRequest' import './combatRequest' import { - creepRoles, - RoomMemoryKeys, - RoomTypes, - rampartUpkeepCost, + RoomMemoryKeys, rampartUpkeepCost, RemoteResourcePathTypes, ReservedCoordTypes, - RoomStatsKeys, + RoomStatsKeys } from 'international/constants' import './factory' import { LabManager } from './labs' @@ -26,26 +19,15 @@ import './links' import { RemotesManager } from './remotesManager' import { WorkRequestManager } from './workRequest' import { CombatRequestManager } from './combatRequest' -import { DefenceProcs } from './defenceProcs' import { HaulRequestManager } from './haulRequestManager' import { HaulerNeedManager } from './haulerNeed' import { packCoord, unpackPosAt } from 'other/codec' import { LinkManager } from './links' import { FactoryManager } from './factory' import { SpawnRequestsManager } from './spawning/spawnRequests' -import { CollectiveManager } from 'international/collective' import { ConstructionManager } from 'room/construction/construction' import { RoomNameUtils } from 'room/roomNameUtils' -import { LogTypes, customLog } from 'utils/logging' -import { CommuneProcs } from './communeProcs' import { StructureUtils } from 'room/structureUtils' -import { LogisticsProcs } from 'room/logisticsProcs' -import { TowerProcs } from './towerProcs' -import { SourceProcs } from 'room/sourceProcs' -import { TerminalProcs } from './terminal/terminalProcs' -import { SpawningStructureProcs } from './spawning/spawningStructureProcs' -import { ObserverProcs } from './observerProcs' -import { PowerSpawnProcs } from './powerSpawnProcs' import { CommuneUtils } from './communeUtils' import { RoomUtils } from 'room/roomUtils' diff --git a/src/room/commune/communeProcs.ts b/src/room/commune/communeProcs.ts index 3089143b2..be0e9fafb 100644 --- a/src/room/commune/communeProcs.ts +++ b/src/room/commune/communeProcs.ts @@ -2,6 +2,7 @@ import { RoomUtils } from 'room/roomUtils' import { CommuneDataProcs, communeData } from './communeData' import { CommuneUtils } from './communeUtils' import { + Result, RoomLogisticsRequestTypes, RoomMemoryKeys, RoomTypes, @@ -88,7 +89,6 @@ export class CommuneProcs { roomMemory[RoomMemoryKeys.greatestRCL] = room.controller.level } - room.roomManager.communePlanner.attemptPlan(room) CommuneProcs.getRCLUpdate(room) if (!roomMemory[RoomMemoryKeys.combatRequests]) roomMemory[RoomMemoryKeys.combatRequests] = [] @@ -99,7 +99,7 @@ export class CommuneProcs { communeManager.communeHaulerNeed = 0 communeManager.nextSpawnEnergyAvailable = room.energyAvailable - if (!roomMemory[RoomMemoryKeys.remotes]) roomMemory[RoomMemoryKeys.remotes] = [] + if (roomMemory[RoomMemoryKeys.remotes] == undefined) roomMemory[RoomMemoryKeys.remotes] = [] if (roomMemory[RoomMemoryKeys.threatened] == undefined) { roomMemory[RoomMemoryKeys.threatened] = 0 } @@ -139,8 +139,10 @@ export class CommuneProcs { static initRun(room: Room) { this.preTickTest(room) + room.roomManager.communePlanner.attemptPlan(room) + const roomMemory = Memory.rooms[room.name] - if (!roomMemory[RoomMemoryKeys.communePlanned]) return + if (roomMemory[RoomMemoryKeys.communePlanned] !== Result.success) return const communeManager = room.communeManager @@ -164,7 +166,7 @@ export class CommuneProcs { static run(room: Room) { const roomMemory = Memory.rooms[room.name] - if (!roomMemory[RoomMemoryKeys.communePlanned]) return + if (roomMemory[RoomMemoryKeys.communePlanned] !== Result.success) return const communeManager = room.communeManager diff --git a/src/room/commune/spawning/spawningStructureProcs.ts b/src/room/commune/spawning/spawningStructureProcs.ts index c08cab7ce..6e570a551 100644 --- a/src/room/commune/spawning/spawningStructureProcs.ts +++ b/src/room/commune/spawning/spawningStructureProcs.ts @@ -305,7 +305,7 @@ export class SpawningStructureProcs { if (organizedSpawns.inactiveSpawns.length) return for (const spawn of organizedSpawns.activeSpawns) { - room.createPowerTask(spawn, PWR_OPERATE_SPAWN, 2) + room.createPowerRequest(spawn, PWR_OPERATE_SPAWN, 2) } } diff --git a/src/room/commune/towerProcs.ts b/src/room/commune/towerProcs.ts index a839f37e3..3fe013e57 100644 --- a/src/room/commune/towerProcs.ts +++ b/src/room/commune/towerProcs.ts @@ -209,7 +209,7 @@ export class TowerProcs { if (!room.myPowerCreeps.length) return for (const tower of room.roomManager.structures.tower) { - room.createPowerTask(tower, PWR_OPERATE_TOWER, 1) + room.createPowerRequest(tower, PWR_OPERATE_TOWER, 1) } } diff --git a/src/room/construction/communePlanner.ts b/src/room/construction/communePlanner.ts index 49fd3c4f7..671231c85 100644 --- a/src/room/construction/communePlanner.ts +++ b/src/room/construction/communePlanner.ts @@ -218,76 +218,28 @@ export class CommunePlanner { } attemptPlan(room: Room) { - this.roomManager = room.roomManager this.room = room - if (Memory.rooms[room.name][RoomMemoryKeys.communePlanned] !== undefined) return Result.noAction + if (Memory.rooms[room.name][RoomMemoryKeys.communePlanned] !== undefined) { + return Result.noAction + } // Stop if there isn't sufficient CPU if (Game.cpu.bucket < CPUMaxPerTick) return Result.noAction - if (CollectiveManager.communes.size <= 1 && Game.cpu.bucket < basePlanCPUBucketThreshold) { + // If we have more than one commune, make sure we have extra CPU before trying to plan for more + if (CollectiveManager.communes.size > 1 && Game.cpu.bucket < basePlanCPUBucketThreshold) { return Result.noAction } if (this.recording) this.record() - // If planning is complete, choose the best plan using a scoring system - if ( - this.fastFillerStartCoords && - this.planAttempts.length === this.fastFillerStartCoords.length - ) { - // Filter and make sure we have at least one completed plan, if not, mark the room as failed - const planAttempts = this.planAttempts.filter( - (plan): plan is BasePlanAttempt => plan !== false, - ) - if (!planAttempts.length) return Result.fail - - /* this.visualizeBestPlan() */ - this.choosePlan(planAttempts) - - return Result.success - } - - // Initial configuration - - if (!this.terrainCoords) { - this.planAttempts = [] - this.terrainCoords = CollectiveManager.getTerrainBinary(this.room.name) + const tryChoosePlanResult = this.tryChoosePlan() + if (tryChoosePlanResult !== Result.noAction) { + return tryChoosePlanResult } - // Plan attempt / configuration - - if (!this.planConfiged) { - this.baseCoords = new Uint8Array(this.terrainCoords) - this.roadCoords = new Uint8Array(this.terrainCoords) - this.rampartCoords = new Uint8Array(2500) - this.byPlannedRoad = new Uint8Array(2500) - - this.byExitCoords = new Uint8Array(2500) - this.exitCoords = [] - this.recordExits() - - this.basePlans = new BasePlans() - this.rampartPlans = new RampartPlans() - this.stampAnchors = {} - this.RCLPlannedStructureTypes = {} - for (const stampType in stamps) { - this.stampAnchors[stampType as StampTypes] = [] - } - for (const structureType of buildableStructureTypes) { - this.RCLPlannedStructureTypes[structureType] = { - structures: 0, - minRCL: 1, - } - } - this.roadQuota = [] - for (let level = 0; level < 8; level += 1) { - this.roadQuota.push(0) - } - - this.score = 0 - this.planConfiged = true - } + this.tryConfigurePlanner() + this.tryConfigurePlan() this.avoidSources() this.avoidMineral() @@ -467,6 +419,92 @@ export class CommunePlanner { needsStoringStructure: +needsStoringStructure, } } + private tryConfigurePlanner() { + if (this.terrainCoords) return + + this.planAttempts = [] + this.findFastFillerStartCoords() + + this.terrainCoords = CollectiveManager.getTerrainBinary(this.room.name) + } + private findFastFillerStartCoords() { + if (this.fastFillerStartCoords) return + + // Controller + + const startCoords: Coord[] = [this.room.controller.pos] + + // Both sources + + const sources = this.room.find(FIND_SOURCES) + for (const source of sources) startCoords.push(source.pos) + + // Find the closest source pos and its path to the controller + + let shortestPath: RoomPosition[] + + for (const source of sources) { + const path = CustomPathFinder.findPath({ + origin: source.pos, + goals: [{ pos: this.room.controller.pos, range: 1 }], + plainCost: defaultRoadPlanningPlainCost, + }) + if (shortestPath && path.length >= shortestPath.length) continue + + shortestPath = path + } + + let origin = shortestPath[Math.floor(shortestPath.length / 2)] + if (origin) startCoords.push(origin) + + // Avg path between sources, if more than 1 + + if (sources.length > 1) { + const path = CustomPathFinder.findPath({ + origin: sources[0].pos, + goals: [{ pos: sources[1].pos, range: 1 }], + plainCost: defaultRoadPlanningPlainCost, + }) + + origin = path[Math.floor(path.length / 2)] + if (origin) startCoords.push(origin) + } + + this.fastFillerStartCoords = startCoords + } + private tryConfigurePlan() { + if (this.planConfiged) return + + this.baseCoords = new Uint8Array(this.terrainCoords) + this.roadCoords = new Uint8Array(this.terrainCoords) + this.rampartCoords = new Uint8Array(2500) + this.byPlannedRoad = new Uint8Array(2500) + + this.byExitCoords = new Uint8Array(2500) + this.exitCoords = [] + this.recordExits() + + this.basePlans = new BasePlans() + this.rampartPlans = new RampartPlans() + this.stampAnchors = {} + this.RCLPlannedStructureTypes = {} + for (const stampType in stamps) { + this.stampAnchors[stampType as StampTypes] = [] + } + for (const structureType of buildableStructureTypes) { + this.RCLPlannedStructureTypes[structureType] = { + structures: 0, + minRCL: 1, + } + } + this.roadQuota = [] + for (let level = 0; level < 8; level += 1) { + this.roadQuota.push(0) + } + + this.score = 0 + this.planConfiged = true + } private recordExits() { for (const packedCoord of this.room.roomManager.exitCoords) { const coord = unpackCoord(packedCoord) @@ -1768,52 +1806,6 @@ export class CommunePlanner { return false } - private findFastFillerOrigin() { - if (this.fastFillerStartCoords) return this.fastFillerStartCoords[this.planAttempts.length] - - // Controller - - const origins: Coord[] = [this.room.controller.pos] - - // Both sources - - const sources = this.room.find(FIND_SOURCES) - for (const source of sources) origins.push(source.pos) - - // Find the closest source pos and its path to the controller - - let shortestPath: RoomPosition[] - - for (const source of sources) { - const path = CustomPathFinder.findPath({ - origin: source.pos, - goals: [{ pos: this.room.controller.pos, range: 1 }], - plainCost: defaultRoadPlanningPlainCost, - }) - if (shortestPath && path.length >= shortestPath.length) continue - - shortestPath = path - } - - let origin = shortestPath[Math.floor(shortestPath.length / 2)] - if (origin) origins.push(origin) - - // Avg path between sources, if more than 1 - - if (sources.length > 1) { - const path = CustomPathFinder.findPath({ - origin: sources[0].pos, - goals: [{ pos: sources[1].pos, range: 1 }], - plainCost: defaultRoadPlanningPlainCost, - }) - - origin = path[Math.floor(path.length / 2)] - if (origin) origins.push(origin) - } - - this.fastFillerStartCoords = origins - return this.fastFillerStartCoords[this.planAttempts.length] - } private fastFiller() { if (this.stampAnchors.fastFiller.length) return Result.noAction @@ -1824,7 +1816,7 @@ export class CommunePlanner { return this.planStamps({ stampType: 'fastFiller', count: 1, - startCoords: [this.findFastFillerOrigin()], + startCoords: [this.fastFillerStartCoords[this.planAttempts.length]], cardinalFlood: true, consequence: stampAnchor => { const stampOffset = stamps.fastFiller.offset @@ -3237,8 +3229,30 @@ export class CommunePlanner { return bestPlanIndex } + private tryChoosePlan() { + // Check if planning is completed + if (!this.fastFillerStartCoords || this.planAttempts.length < this.fastFillerStartCoords.length) + return Result.noAction + + // Planning is complete, choose the best plan using a scoring system + + // Filter and make sure we have at least one completed plan, if not, mark the room as failed + const planAttempts = this.planAttempts.filter( + (plan): plan is BasePlanAttempt => plan !== false, + ) + if (!planAttempts.length) { + return Result.fail + } + + /* this.visualizeBestPlan() */ + this.choosePlan(planAttempts) + return Result.success + } private choosePlan(planAttempts: BasePlanAttempt[]) { - const plan = planAttempts[this.findBestPlanIndex(planAttempts)] as BasePlanAttempt + const plan = Object.assign( + {}, + planAttempts[this.findBestPlanIndex(planAttempts)] as BasePlanAttempt, + ) const roomMemory = Memory.rooms[this.room.name] roomMemory[RoomMemoryKeys.mineralType] = this.room.roomManager.mineral.mineralType @@ -3258,15 +3272,14 @@ export class CommunePlanner { roomMemory[RoomMemoryKeys.centerUpgradePos] = plan.centerUpgradePos roomMemory[RoomMemoryKeys.upgradePath] = plan.upgradePath - roomMemory[RoomMemoryKeys.communePlanned] = true + roomMemory[RoomMemoryKeys.communePlanned] = Result.success // Delete uneeded plan data from global to free up space - /* delete this.planAttempts */ - for (var key in this) { - if (this.hasOwnProperty(key)) { - delete this[key] - } - } + + delete this.planAttempts + delete this.fastFillerStartCoords + delete this.terrainCoords + delete this._reverseExitFlood } private visualizeGrid() { for (let x = 0; x < roomDimensions; x++) { diff --git a/src/room/construction/construction.ts b/src/room/construction/construction.ts index b70bb63fe..1e53e9247 100644 --- a/src/room/construction/construction.ts +++ b/src/room/construction/construction.ts @@ -52,7 +52,7 @@ export class ConstructionManager { this.manageConstructionSites() - if (!this.room.memory[RoomMemoryKeys.communePlanned]) return + if (Memory.rooms[this.room.name][RoomMemoryKeys.communePlanned] !== Result.success) return // If it's not our first room, wait until RCL 2 before begining construction efforts if (!this.room.roomManager.isStartRoom() && this.room.controller.level < 2) return diff --git a/src/room/creeps/powerCreeps/operator.ts b/src/room/creeps/powerCreeps/operator.ts index 6e4d45e4e..43bff03b2 100644 --- a/src/room/creeps/powerCreeps/operator.ts +++ b/src/room/creeps/powerCreeps/operator.ts @@ -211,7 +211,7 @@ export class Operator extends PowerCreep { [CreepPowerTaskKeys.target]: request.targetID, [CreepPowerTaskKeys.power]: request.power, } - delete this.room.powerTasks[request.taskID] + delete this.room.powerRequests[request.taskID] return task } @@ -220,35 +220,35 @@ export class Operator extends PowerCreep { let lowestScore = Infinity let bestTask: PowerRequest - for (const ID in this.room.powerTasks) { - const task = this.room.powerTasks[ID] + for (const ID in this.room.powerRequests) { + const request = this.room.powerRequests[ID] // We don't have the requested power - const power = this.powers[task.powerType] + const power = this.powers[request.power] if (!power) continue // We don't have enough ops for the task - if ((POWER_INFO[task.powerType] as any).ops > this.nextStore.ops) continue + if ((POWER_INFO[request.power] as any).ops > this.nextStore.ops) continue - const taskTargetPos = findObjectWithID(task.targetID).pos + const taskTargetPos = findObjectWithID(request.targetID).pos const range = getRange(this.pos, taskTargetPos) // The target doesn't need us yet or we can't yet provide if ( - Math.max(task.cooldown, this.powerCooldowns.get(task.powerType) || 0) > - range + (POWER_INFO[task.powerType] as any).range + 3 + Math.max(request.cooldown, this.powerCooldowns.get(request.power) || 0) > + range + (POWER_INFO[request.power] as any).range + 3 ) continue - const score = task.priority + range / 100 + const score = request.priority + range / 100 if (score >= lowestScore) continue lowestScore = score - bestTask = task + bestTask = request } if (!bestTask) return Result.fail diff --git a/src/room/remotePlanner.ts b/src/room/remotePlanner.ts index b523dcfb3..5c230073b 100644 --- a/src/room/remotePlanner.ts +++ b/src/room/remotePlanner.ts @@ -3188,7 +3188,6 @@ export class RemotePlanner { roomMemory[RoomMemoryKeys.mineralPath] = plan.mineralPath roomMemory[RoomMemoryKeys.centerUpgradePos] = plan.centerUpgradePos roomMemory[RoomMemoryKeys.upgradePath] = plan.upgradePath - roomMemory[RoomMemoryKeys.communePlanned] = true } private visualizeGrid() { for (let x = 0; x < roomDimensions; x++) { diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index d2c0cc76e..be26437f0 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -684,7 +684,7 @@ Room.prototype.advancedScout = function (scoutingRoom: Room) { } const roomNameScoutType = RoomNameProcs.findAndRecordConstantType(this.name) - if (roomNameScoutType) { + if (roomNameScoutType !== Result.fail) { if (roomNameScoutType === RoomTypes.sourceKeeper) { // Record the positions of keeper lairs @@ -1459,13 +1459,14 @@ Room.prototype.createWorkRequest = function () { RoomNameUtils.findDynamicScore(this.name) - const communePlanned = Memory.rooms[this.name][RoomMemoryKeys.communePlanned] - if (communePlanned === false) return false + const roomMemory = Memory.rooms[this.name] + const communePlanned = roomMemory[RoomMemoryKeys.communePlanned] + if (communePlanned !== undefined) return false - if (communePlanned !== true) { + if (communePlanned !== Result.success) { const result = this.roomManager.communePlanner.attemptPlan(this) if (result === Result.fail) { - this.memory[RoomMemoryKeys.communePlanned] = false + roomMemory[RoomMemoryKeys.communePlanned] = Result.fail return false } @@ -1549,7 +1550,7 @@ Room.prototype.coordHasStructureTypes = function (coord, types) { return false } -Room.prototype.createPowerTask = function (target, powerType, priority) { +Room.prototype.createPowerRequest = function (target, powerType, priority) { // There is already has a power creep responding to this target with the power customLog('MADE POWER TASK FOR', target) if (target.reservePowers.has(powerType)) return false @@ -1561,10 +1562,10 @@ Room.prototype.createPowerTask = function (target, powerType, priority) { const ID = CollectiveManager.newTickID() - return (this.powerTasks[ID] = { + return (this.powerRequests[ID] = { taskID: ID, targetID: target.id, - powerType, + power: powerType, packedCoord: packCoord(target.pos), cooldown, priority, diff --git a/src/room/roomNameProcs.ts b/src/room/roomNameProcs.ts index e140f973f..c770c4838 100644 --- a/src/room/roomNameProcs.ts +++ b/src/room/roomNameProcs.ts @@ -1,4 +1,4 @@ -import { RoomMemoryKeys, RoomStatusKeys, RoomTypes } from 'international/constants' +import { Result, RoomMemoryKeys, RoomStatusKeys, RoomTypes } from 'international/constants' export class RoomNameProcs { static findAndRecordStatus(roomName: string, roomMemory = Memory.rooms[roomName]) { @@ -36,6 +36,6 @@ export class RoomNameProcs { return (roomMemory[RoomMemoryKeys.type] = RoomTypes.sourceKeeper) } - return false + return Result.fail } } diff --git a/src/room/roomNameUtils.ts b/src/room/roomNameUtils.ts index 9ba7ca3e4..ede9d2daf 100644 --- a/src/room/roomNameUtils.ts +++ b/src/room/roomNameUtils.ts @@ -1,16 +1,16 @@ import { - Result, - RoomMemoryKeys, - RoomStatusKeys, - RoomTypes, - defaultSwampCost, - dynamicScoreRoomRange, - maxControllerLevel, - preferredCommuneRange, - remoteRoles, - roomDimensions, - roomTypeProperties, - roomTypes, + Result, + RoomMemoryKeys, + RoomStatusKeys, + RoomTypes, + defaultSwampCost, + dynamicScoreRoomRange, + maxControllerLevel, + preferredCommuneRange, + remoteRoles, + roomDimensions, + roomTypeProperties, + roomTypes, } from 'international/constants' import { CollectiveManager } from 'international/collective' import { @@ -27,6 +27,7 @@ import { CommuneManager } from './commune/commune' import { customLog } from 'utils/logging' import { RoomProcs } from './roomProcs' import { RoomNameProcs } from './roomNameProcs' +import { RoomUtils } from './roomUtils' /** * considers a position being flooded @@ -339,13 +340,54 @@ export class RoomNameUtils { */ static getStatusForPotentialMemory(roomName: string) { const roomMemory = Memory.rooms[roomName] - if (!roomMemory) { - Memory.rooms[roomName] = {} as any - return RoomStatusKeys[RoomNameProcs.findAndRecordStatus(roomName)] + if (roomMemory === undefined) { + const roomMemory = Memory.rooms[roomName] = {} as RoomMemory + RoomNameUtils.basicScout(roomName) + + return roomMemory[RoomMemoryKeys.status] } // Otherwise there is room memory return roomMemory[RoomMemoryKeys.status] } + + static basicScout(roomName: string, room = Game.rooms[roomName]) { + const roomMemory = Memory.rooms[roomName] + + if (roomMemory[RoomMemoryKeys.lastScout] === undefined) { + RoomNameProcs.findAndRecordStatus(roomName, roomMemory) + } + + // Record that the room was scouted this tick + roomMemory[RoomMemoryKeys.lastScout] = Game.time + + if (!room) return roomMemory[RoomMemoryKeys.type] + if (!room.controller) return roomMemory[RoomMemoryKeys.type] + + // If the contoller is owned + if (room.controller.owner) { + // Stop if the controller is owned by me + + if (room.controller.my) return roomMemory[RoomMemoryKeys.type] + + const owner = room.controller.owner.username + roomMemory[RoomMemoryKeys.owner] = owner + + // If the controller is owned by an ally + + if (global.settings.allies.includes(owner)) + return (roomMemory[RoomMemoryKeys.type] = RoomTypes.ally) + + return room.scoutEnemyRoom() + } + + room.createWorkRequest() + + // There is no controller owner + + if (room.scoutRemote()) return roomMemory[RoomMemoryKeys.type] + + return (roomMemory[RoomMemoryKeys.type] = RoomTypes.neutral) + } } diff --git a/src/room/roomProcs.ts b/src/room/roomProcs.ts index cb62ab3cd..999e340df 100644 --- a/src/room/roomProcs.ts +++ b/src/room/roomProcs.ts @@ -104,7 +104,7 @@ export class RoomProcs { room.myPowerCreepsByRole = {} for (const className of powerCreepClassNames) room.myPowerCreepsByRole[className] = [] - room.powerTasks = {} + room.powerRequests = {} room.creepsOfSource = [] for (const index in room.find(FIND_SOURCES)) room.creepsOfSource.push([]) diff --git a/src/room/rooms.ts b/src/room/rooms.ts index ec835a7e3..7c7cffb80 100644 --- a/src/room/rooms.ts +++ b/src/room/rooms.ts @@ -53,7 +53,7 @@ export class RoomsManager { } private static runRoom(roomName: string) { - const startCPU = Game.cpu.generatePixel() + const startCPU = Game.cpu.getUsed() const room = Game.rooms[roomName] RoomProcs.run(room) @@ -73,6 +73,6 @@ export class RoomsManager { ) const usedCPU = Game.cpu.getUsed() - startCPU - StatsManager.updateCommuneStat(roomName, RoomStatsKeys.CpuUsed, usedCPU) + StatsManager.updateStat(roomName, RoomStatsKeys.CpuUsed, usedCPU) } } diff --git a/src/room/sourceProcs.ts b/src/room/sourceProcs.ts index 605289ae2..02d4f74e8 100644 --- a/src/room/sourceProcs.ts +++ b/src/room/sourceProcs.ts @@ -6,7 +6,7 @@ export class SourceProcs { const sources = RoomUtils.getSources(room) for (const source of sources) { - room.createPowerTask(source, PWR_REGEN_SOURCE, 10) + room.createPowerRequest(source, PWR_REGEN_SOURCE, 10) } } } diff --git a/src/settings.example.ts b/src/settings.example.ts index 68c558e59..3ee8e73d4 100644 --- a/src/settings.example.ts +++ b/src/settings.example.ts @@ -9,7 +9,7 @@ global.settingsExample = { // Assigns the default settings ...defaultSettings, // Your preferences here - roomVisuals: true, + publicRamparts: false, // etc... } @@ -38,7 +38,7 @@ if (Game.shard.name === 'shard2') { // etc... } } -else if (Game.shard.name === 'swc') { +else if (Game.shard.name === 'season') { global.settings = { // Assigns the default settings diff --git a/src/settingsDefault.ts b/src/settingsDefault.ts index 72c22dd76..1f5557269 100644 --- a/src/settingsDefault.ts +++ b/src/settingsDefault.ts @@ -45,8 +45,8 @@ export const defaultSettings: Settings = { allySegmentID: 90, errorExporting: true, structureMigration: true, - roomLogisticsVisuals: false, debugLogging: false, + season: false, /* relationships: { MarvinTMB: PlayerRelationships.ally, }, */ diff --git a/src/types.d.ts b/src/types.d.ts index 1b380614f..d120fb82d 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -37,7 +37,6 @@ import { CombatRequest, HaulRequest, NukeRequest, WorkRequest } from 'types/inte import { PlayerMemory } from 'types/players' import { CreepLogisticsRequest, - CreepPowerRequest, RoomLogisticsRequest, FindNewRoomLogisticsRequestArgs, CreateRoomLogisticsRequestArgs, @@ -46,7 +45,7 @@ import { UserScriptTemplate } from 'other/userScript/userScript.example' import { StatsMemory } from 'types/stats' import { WeightLayers, WeightsByID } from 'room/construction/neuralNetwork/network' import { OrganizedSpawns } from 'room/commune/spawning/spawningStructureProcs' -import { CreepTask, CreepPowerTask } from 'types/creepTasks' +import { CreepTask, CreepPowerTask, PowerRequest } from 'types/creepTasks' declare global { interface ProfilerData { @@ -507,7 +506,7 @@ declare global { roomLogisticsRequests: { [key in RoomLogisticsRequestTypes]: { [ID: string]: RoomLogisticsRequest } } - powerTasks: { [ID: string]: CreepPowerRequest } + powerRequests: { [ID: string]: PowerRequest } attackingDefenderIDs: Set> defenderEnemyTargetsWithDamage: Map, number> @@ -663,11 +662,11 @@ declare global { coordHasStructureTypes(coord: Coord, types: Set): boolean - createPowerTask( + createPowerRequest( target: Structure | Source, powerType: PowerConstant, priority: number, - ): CreepPowerRequest | false + ): PowerRequest | false highestWeightedStoringStructures(resourceType: ResourceConstant): AnyStoreStructure | false @@ -1185,7 +1184,7 @@ declare global { [RoomMemoryKeys.score]: number [RoomMemoryKeys.dynamicScore]: number [RoomMemoryKeys.dynamicScoreUpdate]: number - [RoomMemoryKeys.communePlanned]: boolean + [RoomMemoryKeys.communePlanned]: Result.success | Result.fail // Commune @@ -1368,10 +1367,6 @@ declare global { */ constructed: true | undefined - packedRoomNames: { [roomName: string]: string } - - unpackedRoomNames: { [roomName: string]: string } - lastReset: number DebugUtils: DebugUtils diff --git a/src/types/settings.ts b/src/types/settings.ts index 6e4743538..143a05e39 100644 --- a/src/types/settings.ts +++ b/src/types/settings.ts @@ -91,15 +91,14 @@ export interface Settings { * Wether or not to try to migrate existing structures to planned positions */ structureMigration: boolean - /** - * Wether or not to generate visuals for room logistics requests - */ - roomLogisticsVisuals: boolean /** * Wether or not to generate and display logs for debugging purposes */ debugLogging: boolean - + /** + * Wether or not the bot should run season logic + */ + season: boolean /* relationships: RelationshipSettings */ } From e016e371f8df9c4c7661ededbc74b827f5d1a28d Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Mon, 29 Jan 2024 19:40:30 -0800 Subject: [PATCH 113/190] fix operation spelling mistake --- src/international/schedule/schedule.ts | 6 +++--- src/international/schedule/schedule.types.ts | 4 ++-- src/types.d.ts | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/international/schedule/schedule.ts b/src/international/schedule/schedule.ts index 6dbcf34a5..6182cd824 100644 --- a/src/international/schedule/schedule.ts +++ b/src/international/schedule/schedule.ts @@ -12,7 +12,7 @@ export class ScheduleProcs { continue } - task.opperation() + task.operation() } } @@ -21,7 +21,7 @@ export class ScheduleProcs { // If the task hasn't been ran yet, run it if (task.sleepUntil === undefined) { - task.opperation() + task.operation() task.sleepUntil = Game.time + task.interval return } @@ -30,7 +30,7 @@ export class ScheduleProcs { // Otherwise we are ready to be ran - task.opperation() + task.operation() task.sleepUntil = Game.time + task.interval } diff --git a/src/international/schedule/schedule.types.ts b/src/international/schedule/schedule.types.ts index 72e76e50f..40efe941d 100644 --- a/src/international/schedule/schedule.types.ts +++ b/src/international/schedule/schedule.types.ts @@ -5,9 +5,9 @@ export type Schedule = (ScheduleTask | ScheduleIntervalTask)[] */ export interface ScheduleTask { /** - * The task's opperation to execute when it is allowed to do so + * The task's operation to execute when it is allowed to do so */ - opperation(): void + operation(): void } export interface ScheduleIntervalTask extends ScheduleTask { diff --git a/src/types.d.ts b/src/types.d.ts index d120fb82d..c33b42839 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -332,7 +332,7 @@ declare global { chantIndex: number /** - * the tick of the last holistic configuration opperation + * the tick of the last holistic configuration operation */ lastConfig: number From 068807c8788b0bc8fb52419c59fdde9514eca92f Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Mon, 29 Jan 2024 22:12:06 -0800 Subject: [PATCH 114/190] clean up code, introduce ops --- DESIGN.md | 24 ++++ src/international/stats.ts | 123 ++++-------------- src/main.ts | 2 +- src/other/profilerRegister.ts | 17 ++- src/room/commune/commune.ts | 3 - src/room/commune/communeProcs.ts | 3 +- .../{haulerNeed.ts => haulerNeedOps.ts} | 66 ++++------ src/room/creeps/myCreepProcs.ts | 3 + .../creeps/roleManager.new/commune/hauler.ts | 13 -- .../roleManager.new/commune/haulerProcs.ts | 8 ++ .../roleManager.new/commune/haulerServices.ts | 12 ++ src/room/roomProcs.ts | 19 +++ src/room/{rooms.ts => roomServices.ts} | 2 +- 13 files changed, 135 insertions(+), 160 deletions(-) rename src/room/commune/{haulerNeed.ts => haulerNeedOps.ts} (52%) create mode 100644 src/room/creeps/myCreepProcs.ts delete mode 100644 src/room/creeps/roleManager.new/commune/hauler.ts create mode 100644 src/room/creeps/roleManager.new/commune/haulerProcs.ts create mode 100644 src/room/creeps/roleManager.new/commune/haulerServices.ts rename src/room/{rooms.ts => roomServices.ts} (98%) diff --git a/DESIGN.md b/DESIGN.md index b99cda052..d8369531e 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -10,6 +10,7 @@ The bot intends to implement a primarily data-oriented style, with some aspects - a static class - does not contain any state - contains functions/methods +- acts on singular inputs Utils stands for utilities. These are functions that will generally take inputs and provide information in return. @@ -21,6 +22,7 @@ CommuneUtils contains utility functions that provide often cached information on - a static class - does not contain any state - contains functions/methods +- acts on singular inputs Procs stands for processors. These are functions that will generally run logic for specified things. @@ -28,6 +30,28 @@ Procs stands for processors. These are functions that will generally run logic f CommuneProc runs logic for the commune to update data, make intents, and run sub processes like towers, spawning, creeps, etc. +## Ops +- a static class +- does not contain any state +- contains functions/methods +- acts on singular inputs + +### Example + +HaulerNeedOps contians functions that provide cached information, carry out processes, or whatever else. + +## Services +- a static class +- does not contain any state +- contains function/methods +- acts on plural inputs + +Services run plural inputs, which in turn are generally ran through procs and utils. + +### Example + +RoomServices contains functions that runs logic for a list of rooms. + ## Manager - a static class - can contain state diff --git a/src/international/stats.ts b/src/international/stats.ts index 41f9962f4..8c06f9ed2 100644 --- a/src/international/stats.ts +++ b/src/international/stats.ts @@ -4,108 +4,33 @@ import { customLog, LogTypes } from 'utils/logging' import { CollectiveManager } from './collective' export interface RoomStats { - /** - * Game Time - */ - gt: number - /** - * Remote Count - */ - rc: number - /** - * Remote Energy Stored - */ - res: number - /** - * Remote Energy Input Harvest - */ - reih: number - /** - * Remote Energy Output Repair Other (non-barricade structures) - */ - reoro: number - /** - * Remote Energy Output Build - */ - reob: number + [RoomStatsKeys.GameTime]: number + [RoomStatsKeys.RemoteCount]: number + [RoomStatsKeys.RemoteEnergyStored]: number + [RoomStatsKeys.RemoteEnergyInputHarvest]: number + [RoomStatsKeys.RemoteEnergyOutputRepairOther]: number + [RoomStatsKeys.RemoteEnergyOutputBuild]: number } export interface CommuneStats extends RoomStats { - /** - * Controller Level - */ - cl: number - /** - * Energy Input Harvest - */ - eih: number - /** - * Energy Input Bought - */ - eib?: number - /** - * Energy Output Upgrade - */ - eou: number - /** - * Energy Output Repair Other (non-barricade structures) - */ - eoro: number - /** - * Energy Output Repair Wall or Rampart - */ - eorwr: number - /** - * Energy Output Build - */ - eob: number - /** - * Energy Output Sold - */ - eos: number - /** - * Energy Output Spawn - */ - eosp: number - /** - * Energy Output Power - */ - eop: number - /** - * Minerals Harvested - */ - mh: number - /** - * Energy Stored - */ - es: number - /** - * Creep Count - */ - cc: number - /** - * Total Creep Count - */ - tcc: number - /** - * Power Creep Count - */ - pcc: number - /** - * Spawn Usage as a decimal - */ - su: number - /** - * hauler size - */ - mhc: number - /** - * energy out transactions costs - */ - eotc: number - - // Better way to define shortform types - + [RoomStatsKeys.ControllerLevel]: number + [RoomStatsKeys.EnergyInputHarvest]: number + [RoomStatsKeys.EnergyInputBought]: number + [RoomStatsKeys.EnergyOutputUpgrade]: number + [RoomStatsKeys.EnergyOutputRepairOther]: number + [RoomStatsKeys.EnergyOutputRepairWallOrRampart]: number + [RoomStatsKeys.EnergyOutputSold]: number + [RoomStatsKeys.EnergyOutputBuild]: number + [RoomStatsKeys.EnergyOutputSpawn]: number + [RoomStatsKeys.EnergyOutputPower]: number + [RoomStatsKeys.MineralsHarvested]: number + [RoomStatsKeys.EnergyStored]: number + [RoomStatsKeys.CreepCount]: number + [RoomStatsKeys.TotalCreepCount]: number + [RoomStatsKeys.PowerCreepCount]: number + [RoomStatsKeys.SpawnUsagePercentage]: number + [RoomStatsKeys.MinHaulerCost]: number + [RoomStatsKeys.EnergyOutputTransactionCosts]: number [RoomStatsKeys.EnergyTerminalSentDomestic]: number [RoomStatsKeys.EnergyTerminalSentOther]: number [RoomStatsKeys.BatteriesStoredTimes10]: number diff --git a/src/main.ts b/src/main.ts index 18e1425c1..3d845739b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -3,7 +3,7 @@ import './other/userScript/userScript' import './international/commands' import './debug/debugUtils' import { CollectiveManager } from './international/collective' -import { RoomsManager } from 'room/rooms' +import { RoomsManager } from 'room/roomServoces' import './room/resourceAdditions' import './room/roomObjectFunctions' import './room/roomObjectAdditions' diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index 722a612f9..3bae4f794 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -29,7 +29,6 @@ import { GarbageCollector } from 'international/garbageCollector' import { EndTickManager } from 'international/endTick' import { EndTickCreepManager } from 'room/creeps/endTickCreepManager' import { PowerCreepOrganizer } from 'international/powerCreepOrganizer' -import { HaulerNeedManager } from 'room/commune/haulerNeed' import { LinkManager } from 'room/commune/links' import { CombatRequestManager } from 'room/commune/combatRequest' import { MapVisualsManager } from 'international/mapVisuals' @@ -104,7 +103,6 @@ import { ObserverProcs } from 'room/commune/observerProcs' import { PowerSpawnProcs } from 'room/commune/powerSpawnProcs' import { RoomProcs } from 'room/roomProcs' import { RoomNameProcs } from 'room/roomNameProcs' -import { RoomsManager } from 'room/rooms' import { SegmentsManager } from 'international/segments' import { wasm } from './wasmInit' import { initSync } from '../wasm/pkg/commiebot_wasm.js' @@ -113,6 +111,11 @@ import { TickInit } from 'international/tickInit' import { DebugUtils } from 'debug/debugUtils' import { DefenceProcs } from 'room/commune/defenceProcs' import { DefenceUtils } from 'room/commune/defenceUtils' +import { HaulerProcs } from 'room/creeps/roleManager.new/commune/haulerProcs' +import { HaulerServices } from 'room/creeps/roleManager.new/commune/haulerServices' +import { MyCreepProcs } from 'room/creeps/myCreepProcs' +import { RoomServices } from 'room/roomServices' +import { HaulerNeedOps } from 'room/commune/haulerNeedOps' export function profilerRegister() { // Classes @@ -149,7 +152,7 @@ export function profilerRegister() { // Room classes - profiler.registerClass(RoomsManager, 'RoomsManager') + profiler.registerClass(RoomServices, 'RoomServices') profiler.registerClass(CommuneManager, 'CommuneManager') profiler.registerClass(RoomManager, 'RoomManager') profiler.registerClass(SpawnRequestsManager, 'SpawnRequestsManager') @@ -161,7 +164,6 @@ export function profilerRegister() { profiler.registerClass(HaulRequestManager, 'HaulRequestManager') profiler.registerClass(WorkRequestManager, 'WorkRequestManager') profiler.registerClass(EndTickCreepManager, 'EndTickCreepManager') - profiler.registerClass(HaulerNeedManager, 'HaulerNeedManager') profiler.registerClass(LinkManager, 'LinkManager') profiler.registerClass(DefenceProcs, 'DefenceProcs') profiler.registerClass(DefenceUtils, 'DefenceUtils') @@ -192,6 +194,7 @@ export function profilerRegister() { profiler.registerClass(NukerProcs, 'NukerProcs') profiler.registerClass(ObserverProcs, 'ObserverProcs') profiler.registerClass(PowerSpawnProcs, 'PowerSpawnProcs') + profiler.registerClass(HaulerNeedOps, 'HaulerNeedOps') // Creep classes @@ -201,12 +204,18 @@ export function profilerRegister() { profiler.registerClass(CreepProcs, 'CreepProcs') profiler.registerClass(CreepMoveProcs, 'CreepMoveProcs') profiler.registerClass(CreepUtils, 'CreepUtils') + profiler.registerClass(MyCreepProcs, 'MyCreepProcs') profiler.registerClass(MyCreepUtils, 'MyCreepUtils') profiler.registerClass(Quad, 'Quad') profiler.registerClass(DynamicSquad, 'DynamicSquad') profiler.registerClass(Duo, 'Duo') + // Creep Roles + + profiler.registerClass(HaulerServices, 'HaulerServices') + profiler.registerClass(HaulerProcs, 'HaulerProcs') + // Objects profiler.registerObject(global.DebugUtils, 'DebugUtils') diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index 6c22d922a..5c0535fa5 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -20,7 +20,6 @@ import { RemotesManager } from './remotesManager' import { WorkRequestManager } from './workRequest' import { CombatRequestManager } from './combatRequest' import { HaulRequestManager } from './haulRequestManager' -import { HaulerNeedManager } from './haulerNeed' import { packCoord, unpackPosAt } from 'other/codec' import { LinkManager } from './links' import { FactoryManager } from './factory' @@ -52,7 +51,6 @@ export class CommuneManager { workRequestManager: WorkRequestManager combatRequestManager: CombatRequestManager haulRequestManager: HaulRequestManager - haulerNeedManager: HaulerNeedManager factoryManager: FactoryManager @@ -94,7 +92,6 @@ export class CommuneManager { this.workRequestManager = new WorkRequestManager(this) this.combatRequestManager = new CombatRequestManager(this) this.haulRequestManager = new HaulRequestManager(this) - this.haulerNeedManager = new HaulerNeedManager(this) this.factoryManager = new FactoryManager(this) } diff --git a/src/room/commune/communeProcs.ts b/src/room/commune/communeProcs.ts index be0e9fafb..48daa2029 100644 --- a/src/room/commune/communeProcs.ts +++ b/src/room/commune/communeProcs.ts @@ -21,6 +21,7 @@ import { DefenceProcs } from './defenceProcs' import { PowerSpawnProcs } from './powerSpawnProcs' import { SpawningStructureProcs } from './spawning/spawningStructureProcs' import { TowerProcs } from './towerProcs' +import { HaulerNeedOps } from './haulerNeedOps' /** * Minor processes for communes @@ -183,7 +184,7 @@ export class CommuneProcs { SourceProcs.createPowerTasks(room) communeManager.remotesManager.run() - communeManager.haulerNeedManager.run() + HaulerNeedOps.run(room) SpawningStructureProcs.createRoomLogisticsRequests(room) LogisticsProcs.createCommuneStoringStructureLogisticsRequests(room) diff --git a/src/room/commune/haulerNeed.ts b/src/room/commune/haulerNeedOps.ts similarity index 52% rename from src/room/commune/haulerNeed.ts rename to src/room/commune/haulerNeedOps.ts index 99995215b..2ae1ea2ef 100644 --- a/src/room/commune/haulerNeed.ts +++ b/src/room/commune/haulerNeedOps.ts @@ -1,27 +1,19 @@ -import { RoomMemoryKeys, packedPosLength, stamps } from 'international/constants' -import { customLog } from 'utils/logging' -import { findCarryPartsRequired } from 'utils/utils' -import { CommuneManager } from './commune' -import { CommuneUtils } from './communeUtils' -import { StructureUtils } from 'room/structureUtils' - -export class HaulerNeedManager { - communeManager: CommuneManager - constructor(communeManager: CommuneManager) { - this.communeManager = communeManager - } +import { RoomMemoryKeys, RoomStatsKeys, packedPosLength, stamps } from "international/constants" +import { StructureUtils } from "room/structureUtils" +import { findCarryPartsRequired } from "utils/utils" +import { CommuneUtils } from "./communeUtils" - run() { - const { room } = this.communeManager +export class HaulerNeedOps { + static run(room: Room) { - this.sourceNeed() - this.controllerNeed() + this.sourceNeed(room) + this.controllerNeed(room) - this.communeManager.communeHaulerNeed += findCarryPartsRequired( + room.communeManager.communeHaulerNeed += findCarryPartsRequired( room.memory[RoomMemoryKeys.mineralPath].length / packedPosLength + 3, - (this.communeManager.mineralHarvestStrength / EXTRACTOR_COOLDOWN) * 1.1, + (room.communeManager.mineralHarvestStrength / EXTRACTOR_COOLDOWN) * 1.1, ) - this.communeManager.communeHaulerNeed += room.roomManager.structures.lab.length + room.communeManager.communeHaulerNeed += room.roomManager.structures.lab.length const extensions = room.roomManager.structures.extension.length - stamps.fastFiller.structures.extension.length @@ -35,15 +27,14 @@ export class HaulerNeedManager { (room.controller.level >= 4 && room.storage) || (room.terminal && room.controller.level >= 6) ) { - this.communeManager.communeHaulerNeed += Memory.stats.rooms[room.name].eosp / 10 - this.communeManager.communeHaulerNeed += Memory.stats.rooms[room.name].su * 8 + room.communeManager.communeHaulerNeed += Memory.stats.rooms[room.name][RoomStatsKeys.EnergyOutputSpawn] / 10 + room.communeManager.communeHaulerNeed += Memory.stats.rooms[room.name][RoomStatsKeys.SpawnUsagePercentage] * 8 } - this.communeManager.communeHaulerNeed = Math.round(this.communeManager.communeHaulerNeed) + room.communeManager.communeHaulerNeed = Math.round(room.communeManager.communeHaulerNeed) } - private sourceNeed() { - const room = this.communeManager.room + private static sourceNeed(room: Room) { const packedSourcePaths = Memory.rooms[room.name][RoomMemoryKeys.communeSourcePaths] const estimatedSourceIncome = CommuneUtils.getEstimatedSourceIncome(room) @@ -55,7 +46,7 @@ export class HaulerNeedManager { const sourceLink = room.communeManager.sourceLinks[index] if (sourceLink && StructureUtils.isRCLActionable(sourceLink)) continue - this.communeManager.communeHaulerNeed += findCarryPartsRequired( + room.communeManager.communeHaulerNeed += findCarryPartsRequired( packedSourcePaths[index].length / packedPosLength + 3, estimatedSourceIncome[index] * 1.1, ) @@ -67,48 +58,47 @@ export class HaulerNeedManager { // There is no valid hubLink for (let index in room.find(FIND_SOURCES)) { - this.communeManager.communeHaulerNeed += findCarryPartsRequired( + room.communeManager.communeHaulerNeed += findCarryPartsRequired( packedSourcePaths[index].length / packedPosLength + 3, estimatedSourceIncome[index] * 1.1, ) } } - private controllerNeed() { - const { room } = this.communeManager + private static controllerNeed(room: Room) { if (room.controller.level < 2) return // There is a viable controllerContainer if (room.roomManager.controllerContainer) { - this.communeManager.communeHaulerNeed += findCarryPartsRequired( - Memory.rooms[this.communeManager.room.name][RoomMemoryKeys.upgradePath].length / + room.communeManager.communeHaulerNeed += findCarryPartsRequired( + Memory.rooms[room.name][RoomMemoryKeys.upgradePath].length / packedPosLength + 3, - this.communeManager.upgradeStrength * 1.1, + room.communeManager.upgradeStrength * 1.1, ) return } - this.controllerNeedLink() + this.controllerNeedLink(room) } - private controllerNeedLink() { - const controllerLink = this.communeManager.controllerLink + private static controllerNeedLink(room: Room) { + const controllerLink = room.communeManager.controllerLink if (!controllerLink || !StructureUtils.isRCLActionable(controllerLink)) return - const hubLink = this.communeManager.room.roomManager.hubLink + const hubLink = room.roomManager.hubLink // No need to haul if there is a valid hubLink if (hubLink && StructureUtils.isRCLActionable(hubLink)) return // There is a viable controllerLink but we need to haul to it - this.communeManager.communeHaulerNeed += findCarryPartsRequired( - Memory.rooms[this.communeManager.room.name][RoomMemoryKeys.upgradePath].length / + room.communeManager.communeHaulerNeed += findCarryPartsRequired( + Memory.rooms[room.name][RoomMemoryKeys.upgradePath].length / packedPosLength + 3, - this.communeManager.upgradeStrength * 1.1, + room.communeManager.upgradeStrength * 1.1, ) return } diff --git a/src/room/creeps/myCreepProcs.ts b/src/room/creeps/myCreepProcs.ts new file mode 100644 index 000000000..d91301a7a --- /dev/null +++ b/src/room/creeps/myCreepProcs.ts @@ -0,0 +1,3 @@ +export class MyCreepProcs { + +} diff --git a/src/room/creeps/roleManager.new/commune/hauler.ts b/src/room/creeps/roleManager.new/commune/hauler.ts deleted file mode 100644 index c0edaabf8..000000000 --- a/src/room/creeps/roleManager.new/commune/hauler.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { CreepProcs } from 'room/creeps/creepProcs' -import { DefaultRoleManager } from 'room/creeps/defaultRoleManager' - -class HaulerManager extends DefaultRoleManager { - role: CreepRoles = 'hauler' - - run(creep: Creep) { - CreepProcs.passiveRenew(creep) - CreepProcs.runRoomLogisticsRequestsAdvanced(creep) - } -} - -export const haulerManager = new HaulerManager() diff --git a/src/room/creeps/roleManager.new/commune/haulerProcs.ts b/src/room/creeps/roleManager.new/commune/haulerProcs.ts new file mode 100644 index 000000000..db3bf297b --- /dev/null +++ b/src/room/creeps/roleManager.new/commune/haulerProcs.ts @@ -0,0 +1,8 @@ +import { CreepProcs } from "room/creeps/creepProcs" + +export class HaulerProcs { + static runCreep(creep: Creep) { + CreepProcs.passiveRenew(creep) + CreepProcs.runRoomLogisticsRequestsAdvanced(creep) + } +} diff --git a/src/room/creeps/roleManager.new/commune/haulerServices.ts b/src/room/creeps/roleManager.new/commune/haulerServices.ts new file mode 100644 index 000000000..033562656 --- /dev/null +++ b/src/room/creeps/roleManager.new/commune/haulerServices.ts @@ -0,0 +1,12 @@ +import { HaulerProcs } from "./haulerProcs"; + +export class HaulerServices { + static runCreeps(creepNames: string[]) { + + for (const creepName of creepNames) { + + const creep = Game.creeps[creepName] + HaulerProcs.runCreep(creep) + } + } +} diff --git a/src/room/roomProcs.ts b/src/room/roomProcs.ts index 999e340df..0b43454b9 100644 --- a/src/room/roomProcs.ts +++ b/src/room/roomProcs.ts @@ -15,6 +15,8 @@ import { CommuneProcs } from './commune/communeProcs' import { LogisticsProcs } from './logisticsProcs' import { customLog } from 'utils/logging' import { unpackCoord } from 'other/codec' +import { HaulerServices } from './creeps/roleManager.new/commune/haulerServices' +import { HaulerProcs } from './creeps/roleManager.new/commune/haulerProcs' export class RoomProcs { static update(room: Room) { @@ -235,4 +237,21 @@ export class RoomProcs { ], }) } + + static runCreeps(room: Room) { + + for (const role in room.myCreepsByRole) { + + const creepNames = room.myCreepsByRole[role as CreepRoles] + if (!creepNames) continue + + switch (role) { + case 'hauler': + HaulerServices.runCreeps(creepNames) + break + default: + throw Error(`No service for role ${role}`) + } + } + } } diff --git a/src/room/rooms.ts b/src/room/roomServices.ts similarity index 98% rename from src/room/rooms.ts rename to src/room/roomServices.ts index 7c7cffb80..9a80a6628 100644 --- a/src/room/rooms.ts +++ b/src/room/roomServices.ts @@ -22,7 +22,7 @@ import { RoomManager } from './room' import { LogTypes, customLog } from 'utils/logging' import { RoomProcs } from './roomProcs' -export class RoomsManager { +export class RoomServices { static updateRun() { for (const roomName in Game.rooms) { const room = Game.rooms[roomName] From 7f39768d40764a7d0fe2fae0a5f5c01cfb768db5 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Mon, 29 Jan 2024 22:14:13 -0800 Subject: [PATCH 115/190] clarify ops purpose --- DESIGN.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DESIGN.md b/DESIGN.md index d8369531e..f5558d42f 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -36,6 +36,8 @@ CommuneProc runs logic for the commune to update data, make intents, and run sub - contains functions/methods - acts on singular inputs +Ops stands for Operations. These are functions that will run logic for specified things, sometimes retrieving values. + ### Example HaulerNeedOps contians functions that provide cached information, carry out processes, or whatever else. From 4971045913ac44d5ea0beed53309f5bdbe161821 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Mon, 29 Jan 2024 22:43:32 -0800 Subject: [PATCH 116/190] creep and power creep services --- src/other/profilerRegister.ts | 10 +++++++--- src/room/creeps/myCreepServices.ts | 20 +++++++++++++++++++ src/room/creeps/myPowerCreepServices.ts | 6 ++++++ .../creeps/roleManagers/commune/hauler.ts | 3 ++- src/room/roomProcs.ts | 19 ------------------ 5 files changed, 35 insertions(+), 23 deletions(-) create mode 100644 src/room/creeps/myCreepServices.ts create mode 100644 src/room/creeps/myPowerCreepServices.ts diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index 3bae4f794..71195f789 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -116,6 +116,8 @@ import { HaulerServices } from 'room/creeps/roleManager.new/commune/haulerServic import { MyCreepProcs } from 'room/creeps/myCreepProcs' import { RoomServices } from 'room/roomServices' import { HaulerNeedOps } from 'room/commune/haulerNeedOps' +import { MyCreepServices } from 'room/creeps/myCreepServices' +import { MyPowerCreepServices } from 'room/creeps/myPowerCreepServices' export function profilerRegister() { // Classes @@ -198,9 +200,7 @@ export function profilerRegister() { // Creep classes - profiler.registerClass(PowerCreepProcs, 'PowerCreepProcs') - profiler.registerClass(PowerCreepUtils, 'PowerCreepUtils') - + profiler.registerClass(MyCreepServices, 'MyCreepServices') profiler.registerClass(CreepProcs, 'CreepProcs') profiler.registerClass(CreepMoveProcs, 'CreepMoveProcs') profiler.registerClass(CreepUtils, 'CreepUtils') @@ -211,6 +211,10 @@ export function profilerRegister() { profiler.registerClass(DynamicSquad, 'DynamicSquad') profiler.registerClass(Duo, 'Duo') + profiler.registerClass(MyPowerCreepServices, 'MyPowerCreepServices') + profiler.registerClass(PowerCreepProcs, 'PowerCreepProcs') + profiler.registerClass(PowerCreepUtils, 'PowerCreepUtils') + // Creep Roles profiler.registerClass(HaulerServices, 'HaulerServices') diff --git a/src/room/creeps/myCreepServices.ts b/src/room/creeps/myCreepServices.ts new file mode 100644 index 000000000..3a748fe06 --- /dev/null +++ b/src/room/creeps/myCreepServices.ts @@ -0,0 +1,20 @@ +import { customLog } from 'utils/logging' +import { HaulerServices } from './roleManager.new/commune/haulerServices' + +export class MyCreepServices { + static runCreeps(room: Room) { + for (const role in room.myCreepsByRole) { + const creepNames = room.myCreepsByRole[role as CreepRoles] + if (!creepNames) continue + + switch (role) { + case 'hauler': + HaulerServices.runCreeps(creepNames) + break + default: + customLog('No server for role', role) + /* throw Error(`No service for role ${role}`) */ + } + } + } +} diff --git a/src/room/creeps/myPowerCreepServices.ts b/src/room/creeps/myPowerCreepServices.ts new file mode 100644 index 000000000..bcb795d9d --- /dev/null +++ b/src/room/creeps/myPowerCreepServices.ts @@ -0,0 +1,6 @@ +export class MyPowerCreepServices { + static runCreeps() { + + + } +} diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index e6c6a941b..f1f068b53 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -11,6 +11,7 @@ import { customColors, packedPosLength, relayOffsets, + RoomStatsKeys, } from 'international/constants' import { StatsManager } from 'international/stats' import { packCoord, reversePosList, unpackCoord, unpackPosAt } from 'other/codec' @@ -94,7 +95,7 @@ export class Hauler extends Creep { const result = spawn.renewCreep(this) if (result === OK) { - StatsManager.updateStat(this.room.name, 'eosp', energyCost) + StatsManager.updateStat(this.room.name, RoomStatsKeys.EnergyOutputSpawn, energyCost) spawn.renewed = true } } diff --git a/src/room/roomProcs.ts b/src/room/roomProcs.ts index 0b43454b9..57de71f4a 100644 --- a/src/room/roomProcs.ts +++ b/src/room/roomProcs.ts @@ -171,7 +171,6 @@ export class RoomProcs { } static run(room: Room) { - const roomMemory = Memory.rooms[room.name] if (roomMemory[RoomMemoryKeys.type] === RoomTypes.commune) { CommuneProcs.run(room) @@ -201,7 +200,6 @@ export class RoomProcs { * Debug */ visualizeReservedCoords(room: Room) { - const roomManager = room.roomManager customLog('reservedCoords', JSON.stringify([...roomManager.reservedCoords])) @@ -237,21 +235,4 @@ export class RoomProcs { ], }) } - - static runCreeps(room: Room) { - - for (const role in room.myCreepsByRole) { - - const creepNames = room.myCreepsByRole[role as CreepRoles] - if (!creepNames) continue - - switch (role) { - case 'hauler': - HaulerServices.runCreeps(creepNames) - break - default: - throw Error(`No service for role ${role}`) - } - } - } } From 247984eccd6d47f91aa1d9341a3d10ec0a0b3249 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Mon, 29 Jan 2024 22:54:29 -0800 Subject: [PATCH 117/190] new hauler role proc logic --- src/other/profilerRegister.ts | 4 +- src/room/creeps/myCreepServices.ts | 2 +- .../roleManager.new/commune/haulerProcs.ts | 8 - .../commune/builder.ts | 0 .../commune/controllerUpgrader.ts | 0 src/room/creeps/roles/commune/haulerProcs.ts | 1082 +++++++++++++++++ .../commune/haulerServices.ts | 0 src/room/roomProcs.ts | 4 +- 8 files changed, 1087 insertions(+), 13 deletions(-) delete mode 100644 src/room/creeps/roleManager.new/commune/haulerProcs.ts rename src/room/creeps/{roleManager.new => roles}/commune/builder.ts (100%) rename src/room/creeps/{roleManager.new => roles}/commune/controllerUpgrader.ts (100%) create mode 100644 src/room/creeps/roles/commune/haulerProcs.ts rename src/room/creeps/{roleManager.new => roles}/commune/haulerServices.ts (100%) diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index 71195f789..dbde1b859 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -111,8 +111,8 @@ import { TickInit } from 'international/tickInit' import { DebugUtils } from 'debug/debugUtils' import { DefenceProcs } from 'room/commune/defenceProcs' import { DefenceUtils } from 'room/commune/defenceUtils' -import { HaulerProcs } from 'room/creeps/roleManager.new/commune/haulerProcs' -import { HaulerServices } from 'room/creeps/roleManager.new/commune/haulerServices' +import { HaulerProcs } from 'room/creeps/roles/commune/haulerProcs' +import { HaulerServices } from 'room/creeps/roles/commune/haulerServices' import { MyCreepProcs } from 'room/creeps/myCreepProcs' import { RoomServices } from 'room/roomServices' import { HaulerNeedOps } from 'room/commune/haulerNeedOps' diff --git a/src/room/creeps/myCreepServices.ts b/src/room/creeps/myCreepServices.ts index 3a748fe06..ed3848ed2 100644 --- a/src/room/creeps/myCreepServices.ts +++ b/src/room/creeps/myCreepServices.ts @@ -1,5 +1,5 @@ import { customLog } from 'utils/logging' -import { HaulerServices } from './roleManager.new/commune/haulerServices' +import { HaulerServices } from './roles/commune/haulerServices' export class MyCreepServices { static runCreeps(room: Room) { diff --git a/src/room/creeps/roleManager.new/commune/haulerProcs.ts b/src/room/creeps/roleManager.new/commune/haulerProcs.ts deleted file mode 100644 index db3bf297b..000000000 --- a/src/room/creeps/roleManager.new/commune/haulerProcs.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { CreepProcs } from "room/creeps/creepProcs" - -export class HaulerProcs { - static runCreep(creep: Creep) { - CreepProcs.passiveRenew(creep) - CreepProcs.runRoomLogisticsRequestsAdvanced(creep) - } -} diff --git a/src/room/creeps/roleManager.new/commune/builder.ts b/src/room/creeps/roles/commune/builder.ts similarity index 100% rename from src/room/creeps/roleManager.new/commune/builder.ts rename to src/room/creeps/roles/commune/builder.ts diff --git a/src/room/creeps/roleManager.new/commune/controllerUpgrader.ts b/src/room/creeps/roles/commune/controllerUpgrader.ts similarity index 100% rename from src/room/creeps/roleManager.new/commune/controllerUpgrader.ts rename to src/room/creeps/roles/commune/controllerUpgrader.ts diff --git a/src/room/creeps/roles/commune/haulerProcs.ts b/src/room/creeps/roles/commune/haulerProcs.ts new file mode 100644 index 000000000..4ab26b6f4 --- /dev/null +++ b/src/room/creeps/roles/commune/haulerProcs.ts @@ -0,0 +1,1082 @@ +import { + CreepMemoryKeys, + packedPosLength, + RoomMemoryKeys, + RoomStatsKeys, + RoomTypes, + Result, + SleepFor, + RoomLogisticsRequestTypes, + MovedTypes, + customColors, + FlagNames, + relayOffsets, +} from 'international/constants' +import { StatsManager } from 'international/stats' +import { unpackPosAt, reversePosList, packCoord, unpackCoord } from 'other/codec' +import { CreepProcs } from 'room/creeps/creepProcs' +import { MyCreepUtils } from 'room/creeps/myCreepUtils' +import { Hauler } from 'room/creeps/roleManagers/commune/hauler' +import { StructureUtils } from 'room/structureUtils' +import { getRangeXY, Utils, randomIntRange, findObjectWithID, getRange } from 'utils/utils' + +export class HaulerProcs { + static isDying(creep: Creep) { + // Stop if creep is spawning + + if (creep.spawning) return false + /* + // If the creep's remaining ticks are more than the estimated spawn time, inform false + + if (creep.ticksToLive > creep.body.length * CREEP_SPAWN_TIME) return false + */ + const creepMemory = Memory.creeps[creep.name] + + if (creepMemory[CreepMemoryKeys.remote]) { + if (creepMemory[CreepMemoryKeys.sourceIndex] === undefined) + throw Error('has remote but no sourceIndex') + if ( + creep.ticksToLive > + creep.body.length * CREEP_SPAWN_TIME + + Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ + creep.commune.communeManager.remoteResourcePathType + ][creepMemory[CreepMemoryKeys.sourceIndex]].length / + packedPosLength + ) { + return false + } + } + if (creep.ticksToLive > creep.body.length * CREEP_SPAWN_TIME) return false + + return true + } + + static runSpawning(creep: Creep) {} + + static initRun(creep: Creep) { + if (Utils.isTickInterval(10) && creep.getActiveBodyparts(CARRY) === 0) { + creep.suicide() + return + } + + const creepMemory = Memory.creeps[creep.name] + if ( + creepMemory[CreepMemoryKeys.previousRelayer] && + Game.time > creepMemory[CreepMemoryKeys.previousRelayer][1] + 1 + ) { + creepMemory[CreepMemoryKeys.previousRelayer] = undefined + } + + const carryParts = MyCreepUtils.parts(creep).carry + creep.commune.communeManager.haulerCarryParts += carryParts + + if (this.hasValidRemote(creep)) { + this.applyRemote(creep) + return + } + + // We don't have a valid remote + this.removeRemote(creep) + + const commune = creep.commune + if (creepMemory[CreepMemoryKeys.taskRoom] === commune.name) { + commune.communeManager.communeHaulerCarryParts += carryParts + commune.communeManager.communeHaulers.push(creep.name) + } + } + + static runCreep(creep: Creep) { + if (this.runRestrictedCommuneLogistics(creep) === true) { + return + } + + if (!this.findRemote(creep)) { + if (this.travelToCommune(creep) !== Result.success) return + this.runCommuneLogistics(creep) + return + } + + const creepMemory = Memory.creeps[creep.name] + + if ( + creepMemory[CreepMemoryKeys.sleepFor] === SleepFor.any && + creepMemory[CreepMemoryKeys.sleepTime] > Game.time + ) { + creep.message = '😴' + return + } + + if (creep.needsResources() /* && creep.ticksToLive > returnTripTime */) { + this.getResources(creep) + return + } + + // Otherwise if the creep doesn't need resources + + if (this.deliverResources(creep)) { + this.relay(creep) + } + } + + private static passiveRenew(creep: Creep) { + const { room } = creep + + // If there is insufficient CPU to renew, inform false + + if (creep.body.length > 10) return + if (!room.myCreepsByRole.fastFiller.length) return + // only renew if we are the same as the desired hauler cost + const creepCost = Memory.creeps[creep.name][CreepMemoryKeys.cost] + if (creepCost !== Memory.rooms[room.name][RoomMemoryKeys.minHaulerCost]) return + + // If the creep's age is less than the benefit from renewing, inform false + + const energyCost = Math.ceil(creepCost / 2.5 / creep.body.length) + if (CREEP_LIFE_TIME - creep.ticksToLive < Math.floor(600 / creep.body.length)) return + + // Get the room's spawns, stopping if there are none + + const spawns = room.roomManager.structures.spawn + + // Get a spawn in range of 1, informing false if there are none + + const spawn = spawns.find( + spawn => + getRangeXY(creep.pos.x, spawn.pos.x, creep.pos.y, spawn.pos.y) === 1 && + !spawn.renewed && + !spawn.spawning && + StructureUtils.isRCLActionable(spawn), + ) + if (!spawn) return + + const result = spawn.renewCreep(creep) + if (result === OK) { + StatsManager.updateStat(creep.room.name, RoomStatsKeys.EnergyOutputSpawn, energyCost) + spawn.renewed = true + } + } + + private static hasValidRemote(creep: Creep) { + const remoteName = Memory.creeps[creep.name][CreepMemoryKeys.remote] + if (!remoteName) return false + + const remoteMemory = Memory.rooms[remoteName] + + if (remoteMemory[RoomMemoryKeys.disable]) return false + if (remoteMemory[RoomMemoryKeys.abandonRemote]) return false + if (remoteMemory[RoomMemoryKeys.enemyReserved]) return false + if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) return false + if (remoteMemory[RoomMemoryKeys.commune] !== creep.commune.name) return false + + return true + } + + /** + * Finds a remote to harvest in + */ + private static findRemote(creep: Creep) { + if (this.hasValidRemote(creep)) return true + + for (const remoteInfo of creep.commune.roomManager.remoteSourceIndexesByEfficacy) { + const splitRemoteInfo = remoteInfo.split(' ') + const remoteName = splitRemoteInfo[0] + const remoteMemory = Memory.rooms[remoteName] + + if (remoteMemory[RoomMemoryKeys.disable]) continue + if (remoteMemory[RoomMemoryKeys.abandonRemote]) continue + if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) continue + if (remoteMemory[RoomMemoryKeys.commune] !== creep.commune.name) continue + + const sourceIndex = parseInt(splitRemoteInfo[1]) + if (!this.isRemoteValid(creep, remoteName, sourceIndex)) continue + + this.assignRemote(creep, remoteName, sourceIndex) + return true + } + + return false + } + + private static isRemoteValid(creep: Creep, remoteName: string, sourceIndex: number) { + const remoteMemory = Memory.rooms[remoteName] + + // Ensure the creep and the remote have the same opinions on roads + if ( + !!remoteMemory[RoomMemoryKeys.roads][sourceIndex] != + !!Memory.creeps[creep.name][CreepMemoryKeys.preferRoads] + ) + return false + + const commune = creep.commune + + // Make sure we have enough life to get there + /* + const pathLength = + remoteMemory[commune.communeManager.remoteResourcePathType][sourceIndex].length / + packedPosLength + if (pathLength >= creep.ticksToLive) return false + */ + // Make sure we have enough free space to keep reservation below credit + if ( + remoteMemory[RoomMemoryKeys.remoteSourceCredit][sourceIndex] - + remoteMemory[RoomMemoryKeys.remoteSourceCreditReservation][sourceIndex] < + creep.freeNextStore + ) { + return false + } + + // If we do roads but the remote doesn't - change to be a low-priority search later + if (Memory.creeps[creep.name][CreepMemoryKeys.preferRoads]) { + const roadsQuota = + remoteMemory[commune.communeManager.remoteResourcePathType][sourceIndex].length / + packedPosLength + + // See if there are roads close enough or more than the quota + if (remoteMemory[RoomMemoryKeys.roads][sourceIndex] < roadsQuota * 0.9) return false + } + + return true + } + + private static isCurrentRemoteValid(creep: Creep) { + const creepMemory = Memory.creeps[creep.name] + return this.isRemoteValid( + creep, + creepMemory[CreepMemoryKeys.remote], + creepMemory[CreepMemoryKeys.sourceIndex], + ) + } + + private static assignRemote(creep: Creep, remoteName: string, sourceIndex: number) { + const creepMemory = Memory.creeps[creep.name] + + creepMemory[CreepMemoryKeys.remote] = remoteName + creepMemory[CreepMemoryKeys.sourceIndex] = sourceIndex + creepMemory[CreepMemoryKeys.taskRoom] = undefined + creepMemory[CreepMemoryKeys.roomLogisticsRequests] = [] + + this.applyRemote(creep) + } + + private static applyRemote(creep: Creep) { + if (creep.isDying()) return + if (!creep.needsResources()) return + + const creepMemory = Memory.creeps[creep.name] + + Memory.rooms[creepMemory[CreepMemoryKeys.remote]][RoomMemoryKeys.remoteSourceCreditReservation][ + creepMemory[CreepMemoryKeys.sourceIndex] + ] += creep.dataChange = creep.freeNextStore + } + + private static removeRemote(creep: Creep) { + const creepMemory = Memory.creeps[creep.name] + + if (!creep.isDying) { + Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ + RoomMemoryKeys.remoteSourceCreditReservation + ][creepMemory[CreepMemoryKeys.sourceIndex]] -= creep.dataChange + } + + delete creepMemory[CreepMemoryKeys.remote] + delete creepMemory[CreepMemoryKeys.sourceIndex] + } + + private static getResources(creep: Creep) { + const creepMemory = Memory.creeps[creep.name] + + // Try to find a remote + + if (!this.findRemote(creep)) { + creep.message = '❌ Remote' + + if (creep.room.name !== creep.commune.name) { + const anchor = creep.commune.roomManager.anchor + if (!anchor) throw Error('no anchor for hauler') + + if ( + creep.createMoveRequest({ + origin: creep.pos, + goals: [ + { + pos: anchor, + range: 25, + }, + ], + }) === Result.fail + ) { + creepMemory[CreepMemoryKeys.sleepFor] = SleepFor.any + creepMemory[CreepMemoryKeys.sleepTime] = Game.time + randomIntRange(10, 50) + } + } + + // If the room is the creep's commune + /* + if (creep.room.name === creep.commune.name) { + // Advanced recycle and iterate + + creep.advancedRecycle() + return false + } + + // Otherwise, have the creep make a moveRequest to its commune and iterate + + creep.createMoveRequest({ + origin: creep.pos, + goals: [ + { + pos: creep.commune.anchor, + range: 25, + }, + ], + }) + */ + return false + } + + // If the creep is in the remote + + if (creep.room.name === creep.memory[CreepMemoryKeys.remote]) { + if (!this.getRemoteSourceResources(creep)) return false + + // We have enough resources, return home + + delete creep.moved + + creep.message += creep.commune.name + + const anchor = creep.commune.roomManager.anchor + if (!anchor) throw Error('No anchor for hauler ' + creep.room.name) + + creep.createMoveRequestByPath( + { + origin: creep.pos, + goals: [ + { + pos: anchor, + range: 3, + }, + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + }, + { + packedPath: + Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ + creep.commune.communeManager.remoteResourcePathType + ][creepMemory[CreepMemoryKeys.sourceIndex]], + remoteName: creepMemory[CreepMemoryKeys.remote], + }, + ) + + return true + } + + if (creep.room.name !== creep.commune.name) { + // Fulfill requests near the hauler + + CreepProcs.runRoomLogisticsRequestsAdvanced(creep, { + types: new Set([RoomLogisticsRequestTypes.pickup, RoomLogisticsRequestTypes.withdraw]), + resourceTypes: new Set([RESOURCE_ENERGY]), + conditions: request => { + // If the target is near the creep + + const targetPos = findObjectWithID(request.targetID).pos + return getRange(targetPos, creep.pos) <= 0 + }, + }) + + if (!creep.needsResources()) { + // We have enough resources, return home + + delete creep.moved + + creep.message += creep.commune.name + + const anchor = creep.commune.roomManager.anchor + if (!anchor) throw Error('No anchor for hauler ' + creep.room.name) + + creep.createMoveRequestByPath( + { + origin: creep.pos, + goals: [ + { + pos: anchor, + range: 3, + }, + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + }, + { + packedPath: + Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ + creep.commune.communeManager.remoteResourcePathType + ][creepMemory[CreepMemoryKeys.sourceIndex]], + remoteName: creepMemory[CreepMemoryKeys.remote], + }, + ) + + return true + } + } + + // We aren't in the remote, go to the source + + const sourceHarvestPos = unpackPosAt( + Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ + RoomMemoryKeys.remoteSourceHarvestPositions + ][creepMemory[CreepMemoryKeys.sourceIndex]], + ) + + creep.message += creepMemory[CreepMemoryKeys.remote] + console.log(creepMemory[CreepMemoryKeys.remote]) + creep.createMoveRequestByPath( + { + origin: creep.pos, + goals: [ + { + pos: sourceHarvestPos, + range: 1, + }, + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + avoidDanger: true, + }, + { + packedPath: reversePosList( + Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ + creep.commune.communeManager.remoteResourcePathType + ][creepMemory[CreepMemoryKeys.sourceIndex]], + ), + remoteName: creepMemory[CreepMemoryKeys.remote], + }, + ) + + return true + } + + /** + * + * @returns If the creep no longer needs energy + */ + private static getRemoteSourceResources(creep: Creep) { + const creepMemory = Memory.creeps[creep.name] + const sourceHarvestPos = unpackPosAt( + Memory.rooms[creep.room.name][RoomMemoryKeys.remoteSourceHarvestPositions][ + creepMemory[CreepMemoryKeys.sourceIndex] + ], + ) + + // If we're ready to take on a request by the source or we already have one, perform it + + const isBySourceHarvestPos = getRange(creep.pos, sourceHarvestPos) <= 1 + if (isBySourceHarvestPos || creepMemory[CreepMemoryKeys.roomLogisticsRequests].length > 0) { + const freeNextStoreInitial = creep.freeNextStore + + CreepProcs.runRoomLogisticsRequestsAdvanced(creep, { + types: new Set([RoomLogisticsRequestTypes.pickup, RoomLogisticsRequestTypes.withdraw]), + resourceTypes: new Set([RESOURCE_ENERGY]), + conditions: request => { + // If the target is near the creep or source + + const targetPos = findObjectWithID(request.targetID).pos + return ( + getRange(targetPos, creep.pos) <= 1 || + getRange( + targetPos, + creep.room.roomManager.remoteSources[creepMemory[CreepMemoryKeys.sourceIndex]].pos, + ) <= 1 + ) + }, + }) + + // remove fulfilled reserved source credit from source credit + + // Should be a negative number, as we should have more used store than before + const freeNextStoreDifference = creep.freeNextStore - freeNextStoreInitial + if (freeNextStoreDifference !== 0) { + Memory.rooms[creep.room.name][RoomMemoryKeys.remoteSourceCredit][ + creepMemory[CreepMemoryKeys.sourceIndex] + ] += freeNextStoreDifference + Memory.rooms[creep.room.name][RoomMemoryKeys.remoteSourceCreditReservation][ + creepMemory[CreepMemoryKeys.sourceIndex] + ] += freeNextStoreDifference + } + + return !creep.needsResources() + } + + // Fulfill requests near the hauler + + CreepProcs.runRoomLogisticsRequestsAdvanced(creep, { + types: new Set([ + RoomLogisticsRequestTypes.pickup, + RoomLogisticsRequestTypes.withdraw, + ]), + resourceTypes: new Set([RESOURCE_ENERGY]), + conditions: request => { + // If the target is near the creep + + const targetPos = findObjectWithID(request.targetID).pos + return getRange(targetPos, creep.pos) <= 1 + }, + }) + + if (!creep.needsResources()) return true + + // We aren't by the sourceHarvestPos, get adjacent to it + + if (!isBySourceHarvestPos) { + creep.createMoveRequestByPath( + { + origin: creep.pos, + goals: [ + { + pos: sourceHarvestPos, + range: 1, + }, + ], + avoidEnemyRanges: true, + }, + { + packedPath: reversePosList( + Memory.rooms[creep.room.name][creep.commune.communeManager.remoteResourcePathType][ + creepMemory[CreepMemoryKeys.sourceIndex] + ], + ), + remoteName: creep.room.name, + }, + ) + + return false + } + + // We are next to the source + + creep.moved = MovedTypes.wait + + return !creep.needsResources() + } + + private static deliverResources(creep: Creep) { + const commune = creep.commune + + if (commune.communeManager.remoteResourcePathType === RoomMemoryKeys.remoteSourceHubPaths) { + if (creep.room.name === commune.name) { + this.passiveRenew(creep) + + CreepProcs.runRoomLogisticsRequestsAdvanced(creep, { + types: new Set([RoomLogisticsRequestTypes.transfer]), + resourceTypes: new Set([RESOURCE_ENERGY]), + noDelivery: true, + conditions: request => { + // If the target is near the creep + + const targetPos = findObjectWithID(request.targetID).pos + return getRange(targetPos, creep.pos) <= 1 + }, + }) + + // If we tried to respond but weren't able to do so in a single tick, then we should wait to try again next tick + if (Memory.creeps[creep.name][CreepMemoryKeys.roomLogisticsRequests].length) return true + + // We haven't emptied ourselves yet + if (!creep.needsResources()) { + if (getRange(creep.pos, commune.storage.pos) <= 1) return true + + creep.createMoveRequestByPath( + { + origin: creep.pos, + goals: [ + { + pos: commune.storage.pos, + range: 1, + }, + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + }, + { + packedPath: + Memory.rooms[creep.memory[CreepMemoryKeys.remote]][ + commune.communeManager.remoteResourcePathType + ][creep.memory[CreepMemoryKeys.sourceIndex]], + }, + ) + return true + } + this.removeRemote(creep) + if (!this.findRemote(creep)) return false + + creep.message += creep.memory[CreepMemoryKeys.remote] + + const sourceHarvestPos = unpackPosAt( + Memory.rooms[creep.memory[CreepMemoryKeys.remote]][ + RoomMemoryKeys.remoteSourceHarvestPositions + ][creep.memory[CreepMemoryKeys.sourceIndex]], + ) + + creep.createMoveRequestByPath( + { + origin: creep.pos, + goals: [ + { + pos: sourceHarvestPos, + range: 1, + }, + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + }, + { + packedPath: reversePosList( + Memory.rooms[creep.memory[CreepMemoryKeys.remote]][ + commune.communeManager.remoteResourcePathType + ][creep.memory[CreepMemoryKeys.sourceIndex]], + ), + remoteName: creep.memory[CreepMemoryKeys.remote], + }, + ) + + return false + } + + creep.message += commune.name + + creep.createMoveRequestByPath( + { + origin: creep.pos, + goals: [ + { + pos: commune.storage.pos, + range: 1, + }, + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + }, + { + packedPath: + Memory.rooms[creep.memory[CreepMemoryKeys.remote]][ + commune.communeManager.remoteResourcePathType + ][creep.memory[CreepMemoryKeys.sourceIndex]], + }, + ) + return true + } + + if (creep.room.name === commune.name) { + this.passiveRenew(creep) + + CreepProcs.runRoomLogisticsRequestAdvanced(creep, { + types: new Set([RoomLogisticsRequestTypes.transfer]), + resourceTypes: new Set([RESOURCE_ENERGY]), + }) + + // We haven't emptied ourselves yet + if (!creep.needsResources()) return true + this.removeRemote(creep) + if (!this.findRemote(creep)) return false + + creep.message += creep.memory[CreepMemoryKeys.remote] + + const sourceHarvestPos = unpackPosAt( + Memory.rooms[creep.memory[CreepMemoryKeys.remote]][ + RoomMemoryKeys.remoteSourceHarvestPositions + ][creep.memory[CreepMemoryKeys.sourceIndex]], + ) + + creep.createMoveRequestByPath( + { + origin: creep.pos, + goals: [ + { + pos: sourceHarvestPos, + range: 1, + }, + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + }, + { + packedPath: reversePosList( + Memory.rooms[creep.memory[CreepMemoryKeys.remote]][ + commune.communeManager.remoteResourcePathType + ][creep.memory[CreepMemoryKeys.sourceIndex]], + ), + remoteName: creep.memory[CreepMemoryKeys.remote], + }, + ) + + return false + } + + creep.message += commune.name + + const anchor = commune.roomManager.anchor + if (!anchor) throw Error('No anchor for hauler ' + creep.room.name) + + creep.createMoveRequestByPath( + { + origin: creep.pos, + goals: [ + { + pos: anchor, + range: 3, + }, + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + }, + { + packedPath: + Memory.rooms[creep.memory[CreepMemoryKeys.remote]][ + commune.communeManager.remoteResourcePathType + ][creep.memory[CreepMemoryKeys.sourceIndex]], + loose: true, + }, + ) + + return true + } + + private static relayCoord(creep: Creep, coord: Coord) { + if (global.settings.roomVisuals) { + creep.room.visual.circle(coord.x, coord.y, { fill: customColors.lightBlue }) + } + + const creepAtPosName = creep.room.creepPositions[packCoord(coord)] + if (!creepAtPosName) return false + + const creepAtPos = Game.creeps[creepAtPosName] + + if (creepAtPos.role !== 'hauler') return false + if (creepAtPos.movedResource) return false + + const creepMemory = Memory.creeps[creep.name] + // ensure we aren't relaying with the same creep as last tick + if ( + creepMemory[CreepMemoryKeys.previousRelayer] && + creepMemory[CreepMemoryKeys.previousRelayer][0] === creepAtPos.name + ) + return false + + // ensure the creep receiving creep is empty + /* if (creepAtPos.store.getUsedCapacity() > 0) return false */ + if (creepAtPos.store.getUsedCapacity() > 0) return false + + // Ensure that they have the same opinions on roads + if (creepMemory[CreepMemoryKeys.preferRoads] !== creepMemory[CreepMemoryKeys.preferRoads]) + return false + + /* const logisticsRequest = Memory.creeps[creep.name][CreepMemoryKeys.roomLogisticsRequests][0] + if (logisticsRequest) { + const target = findObjectWithID(logisticsRequest[CreepRoomLogisticsRequestKeys.target]) + // Don't relay if they are close to our logistics target + if (getRange(target.pos, creepAtPos.pos) <= 1) return false + } */ + if (creepAtPos.store.getFreeCapacity() !== creep.store.getUsedCapacity(RESOURCE_ENERGY)) + return false + + creep.transfer(creepAtPos, RESOURCE_ENERGY) + + creep.movedResource = true + creepAtPos.movedResource = true + /* + const nextEnergy = Math.min(creep.nextStore.energy, creepAtPos.freeNextStore) + creep.nextStore.energy -= nextEnergy + creepAtPos.nextStore.energy += nextEnergy + */ + /* + log('creepEnergy', creep.store.energy) + log('creepAtPos Energy', creepAtPos.freeNextStore) + log('nextEnergy', Math.min(creep.store.energy, creepAtPos.freeNextStore)) + */ + const transferAmount = Math.min( + creep.store.getUsedCapacity(RESOURCE_ENERGY), + creepAtPos.store.getFreeCapacity(), + ) + creep.reserveStore.energy -= transferAmount + creep.nextStore.energy -= transferAmount + creepAtPos.reserveStore.energy += transferAmount + creepAtPos.nextStore.energy += transferAmount + /* + log('creep needs res', creep.needsResources()) + log('creepAtPos need res', creepAtPos.needsResources()) + */ + // Stop previously attempted moveRequests as they do not account for a relay + + delete creep.moveRequest + delete creepAtPos.moveRequest + + delete creep.moved + delete creepAtPos.moved + + const creepAtPosMemory = Memory.creeps[creepAtPos.name] + + // Trade paths so they might reuse them + + const path = creepMemory[CreepMemoryKeys.path] + creepMemory[CreepMemoryKeys.path] = creepAtPosMemory[CreepMemoryKeys.path] + creepAtPosMemory[CreepMemoryKeys.path] = path + + // record relaying information to avoid swapping + + creepMemory[CreepMemoryKeys.previousRelayer] = [creepAtPos.name, Game.time] + creepAtPosMemory[CreepMemoryKeys.previousRelayer] = [creep.name, Game.time] + + // Trade room logistics requests + + const creepAtPosRequests = [...creepAtPosMemory[CreepMemoryKeys.roomLogisticsRequests]] + creepAtPosMemory[CreepMemoryKeys.roomLogisticsRequests] = [ + ...creepMemory[CreepMemoryKeys.roomLogisticsRequests], + ] + creepMemory[CreepMemoryKeys.roomLogisticsRequests] = creepAtPosRequests + + // Trade remotes and sourceIndexes + // Delete from creepAtPos because it is returning home, not responding to a remote + + const remote = creepMemory[CreepMemoryKeys.remote] + creepMemory[CreepMemoryKeys.remote] = creepAtPosMemory[CreepMemoryKeys.remote] + creepAtPosMemory[CreepMemoryKeys.remote] = remote + + const sourceIndex = creepMemory[CreepMemoryKeys.sourceIndex] + creepMemory[CreepMemoryKeys.sourceIndex] = creepAtPosMemory[CreepMemoryKeys.sourceIndex] + creepAtPosMemory[CreepMemoryKeys.sourceIndex] = sourceIndex + + const taskRoom = creepMemory[CreepMemoryKeys.taskRoom] + creepMemory[CreepMemoryKeys.taskRoom] = creepAtPosMemory[CreepMemoryKeys.taskRoom] + creepAtPosMemory[CreepMemoryKeys.taskRoom] = taskRoom + + // + + if (creepMemory[CreepMemoryKeys.taskRoom]) { + this.runCommuneLogistics(creep) + } else this.getResources(creep) + + const hauler = creepAtPos as Hauler + if (creepAtPosMemory[CreepMemoryKeys.taskRoom]) hauler.runCommuneLogistics() + else if (creepAtPosMemory[CreepMemoryKeys.remote]) hauler.deliverResources() + + if (Game.flags[FlagNames.debugRelay]) { + if (creep.moveRequest) + creep.room.targetVisual(creep.pos, unpackCoord(creep.moveRequest), true) + if (creepAtPos.moveRequest) { + creepAtPos.room.targetVisual(creepAtPos.pos, unpackCoord(creepAtPos.moveRequest), true) + } + } + + return true + } + + private static relayCardinal(creep: Creep, moveCoord: Coord) { + let offsets = relayOffsets.horizontal + if (creep.pos.y === moveCoord.y) offsets = relayOffsets.vertical + + for (const offset of offsets) { + const coord = { + x: moveCoord.x + offset.x, + y: moveCoord.y + offset.y, + } + + if (this.relayCoord(creep, coord)) return Result.action + } + + return Result.noAction + } + + private static relayDiagonal(creep: Creep, moveCoord: Coord) { + let offsets + + if (creep.pos.y > moveCoord.y) { + offsets = relayOffsets.topLeft + if (creep.pos.x < moveCoord.x) offsets = relayOffsets.topRight + } else { + offsets = relayOffsets.bottomLeft + if (creep.pos.x < moveCoord.x) offsets = relayOffsets.bottomRight + } + + for (const offset of offsets) { + const coord = { + x: moveCoord.x + offset.x, + y: moveCoord.y + offset.y, + } + /* + // If the x and y are dissimilar + + if (coord.x !== moveCoord.x && coord.y !== moveCoord.y) continue + */ + if (this.relayCoord(creep, coord)) return Result.action + } + + return Result.noAction + } + + private static relay(creep: Creep) { + // If there is no easy way to know what coord the creep is trying to go to next + + const creepMemory = Memory.creeps[creep.name] + if ( + !creep.moveRequest && + (!creepMemory[CreepMemoryKeys.path] || + creepMemory[CreepMemoryKeys.path].length / packedPosLength < 2) + ) + return Result.noAction + if (creep.movedResource) return Result.noAction + + const creepEnergy = creep.store.getUsedCapacity(RESOURCE_ENERGY) + // ensure we have energy + if (creepEnergy <= 0) return Result.noAction + // ensure energy is our only resource + if (creepEnergy !== creep.store.getUsedCapacity()) return Result.noAction + + // Don't relay too close to the source position unless we are fatigued + + if ( + creepMemory[CreepMemoryKeys.taskRoom] !== creep.room.name && + !creep.fatigue && + creepMemory[CreepMemoryKeys.remote] === creep.room.name && + getRange( + creep.room.roomManager.remoteSourceHarvestPositions[ + creepMemory[CreepMemoryKeys.sourceIndex] + ][0], + creep.pos, + ) <= 1 + ) + return Result.noAction + + const moveCoord = creep.moveRequest + ? unpackCoord(creep.moveRequest) + : unpackPosAt(creepMemory[CreepMemoryKeys.path], 1) + + if (creep.pos.x === moveCoord.x || creep.pos.y === moveCoord.y) { + return this.relayCardinal(creep, moveCoord) + } + + return this.relayDiagonal(creep, moveCoord) + } + + private static travelToCommune(creep: Creep) { + if (creep.room.name === creep.commune.name && !creep.isOnExit) { + return Result.success + } + + const anchor = creep.commune.roomManager.anchor + if (!anchor) throw Error('no anchor for hauler') + + creep.createMoveRequest({ + origin: creep.pos, + goals: [ + { + pos: anchor, + range: 3, + }, + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + }) + + return Result.action + } + + /** + * Run commune logistics, but only for creeps intended for commune logistics + */ + private static runRestrictedCommuneLogistics(creep: Creep) { + const creepMemory = Memory.creeps[creep.name] + // let it respond to its remote + if (Memory.creeps[creep.name][CreepMemoryKeys.remote]) return false + // We aren't in the commune + if (creep.room.name !== creep.commune.name) return false + + if (creep.commune.communeManager.hasSufficientRoads) { + // If we have a body not optimized for roads, try to respond to a remote instead + if (!creepMemory[CreepMemoryKeys.preferRoads]) return false + } + + // If there is no need for more commune haulers + if ( + creep.commune.communeManager.communeHaulerNeed < + creep.commune.communeManager.communeHaulerCarryParts + ) { + return false + } + + // success, we are working for the commune now + + if (!creepMemory[CreepMemoryKeys.taskRoom]) { + creepMemory[CreepMemoryKeys.taskRoom] = creep.room.name + creep.commune.communeManager.communeHaulerCarryParts += MyCreepUtils.parts(creep).carry + } + + this.runCommuneLogistics(creep) + return true + } + + private static runCommuneLogistics(creep: Creep) { + this.passiveRenew(creep) + + if (CreepProcs.runRoomLogisticsRequestsAdvanced(creep) === Result.action) { + this.relay(creep) + return Result.action + } + + return Result.success + } +} diff --git a/src/room/creeps/roleManager.new/commune/haulerServices.ts b/src/room/creeps/roles/commune/haulerServices.ts similarity index 100% rename from src/room/creeps/roleManager.new/commune/haulerServices.ts rename to src/room/creeps/roles/commune/haulerServices.ts diff --git a/src/room/roomProcs.ts b/src/room/roomProcs.ts index 57de71f4a..cab93733f 100644 --- a/src/room/roomProcs.ts +++ b/src/room/roomProcs.ts @@ -15,8 +15,8 @@ import { CommuneProcs } from './commune/communeProcs' import { LogisticsProcs } from './logisticsProcs' import { customLog } from 'utils/logging' import { unpackCoord } from 'other/codec' -import { HaulerServices } from './creeps/roleManager.new/commune/haulerServices' -import { HaulerProcs } from './creeps/roleManager.new/commune/haulerProcs' +import { HaulerServices } from './creeps/roles/commune/haulerServices' +import { HaulerProcs } from './creeps/roles/commune/haulerProcs' export class RoomProcs { static update(room: Room) { From 4daee7a59eed01e401c7a60d8f27e2b7479d65bd Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Mon, 29 Jan 2024 22:56:21 -0800 Subject: [PATCH 118/190] haulerProcs -> haulerOps --- src/other/profilerRegister.ts | 4 ++-- .../creeps/roles/commune/{haulerProcs.ts => haulerOps.ts} | 2 +- src/room/creeps/roles/commune/haulerServices.ts | 6 ++---- src/room/roomProcs.ts | 2 +- 4 files changed, 6 insertions(+), 8 deletions(-) rename src/room/creeps/roles/commune/{haulerProcs.ts => haulerOps.ts} (99%) diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index dbde1b859..bfaf31a60 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -111,7 +111,7 @@ import { TickInit } from 'international/tickInit' import { DebugUtils } from 'debug/debugUtils' import { DefenceProcs } from 'room/commune/defenceProcs' import { DefenceUtils } from 'room/commune/defenceUtils' -import { HaulerProcs } from 'room/creeps/roles/commune/haulerProcs' +import { HaulerOps } from 'room/creeps/roles/commune/haulerOps' import { HaulerServices } from 'room/creeps/roles/commune/haulerServices' import { MyCreepProcs } from 'room/creeps/myCreepProcs' import { RoomServices } from 'room/roomServices' @@ -218,7 +218,7 @@ export function profilerRegister() { // Creep Roles profiler.registerClass(HaulerServices, 'HaulerServices') - profiler.registerClass(HaulerProcs, 'HaulerProcs') + profiler.registerClass(HaulerOps, 'HaulerOps') // Objects diff --git a/src/room/creeps/roles/commune/haulerProcs.ts b/src/room/creeps/roles/commune/haulerOps.ts similarity index 99% rename from src/room/creeps/roles/commune/haulerProcs.ts rename to src/room/creeps/roles/commune/haulerOps.ts index 4ab26b6f4..7135d9210 100644 --- a/src/room/creeps/roles/commune/haulerProcs.ts +++ b/src/room/creeps/roles/commune/haulerOps.ts @@ -20,7 +20,7 @@ import { Hauler } from 'room/creeps/roleManagers/commune/hauler' import { StructureUtils } from 'room/structureUtils' import { getRangeXY, Utils, randomIntRange, findObjectWithID, getRange } from 'utils/utils' -export class HaulerProcs { +export class HaulerOps { static isDying(creep: Creep) { // Stop if creep is spawning diff --git a/src/room/creeps/roles/commune/haulerServices.ts b/src/room/creeps/roles/commune/haulerServices.ts index 033562656..118e52a95 100644 --- a/src/room/creeps/roles/commune/haulerServices.ts +++ b/src/room/creeps/roles/commune/haulerServices.ts @@ -1,12 +1,10 @@ -import { HaulerProcs } from "./haulerProcs"; +import { HaulerOps } from './haulerOps' export class HaulerServices { static runCreeps(creepNames: string[]) { - for (const creepName of creepNames) { - const creep = Game.creeps[creepName] - HaulerProcs.runCreep(creep) + HaulerOps.runCreep(creep) } } } diff --git a/src/room/roomProcs.ts b/src/room/roomProcs.ts index cab93733f..c6c41bac5 100644 --- a/src/room/roomProcs.ts +++ b/src/room/roomProcs.ts @@ -16,7 +16,7 @@ import { LogisticsProcs } from './logisticsProcs' import { customLog } from 'utils/logging' import { unpackCoord } from 'other/codec' import { HaulerServices } from './creeps/roles/commune/haulerServices' -import { HaulerProcs } from './creeps/roles/commune/haulerProcs' +import { HaulerOps } from './creeps/roles/commune/haulerOps' export class RoomProcs { static update(room: Room) { From 2368b9582e5683a1e85c0fb7e91d70febeb841e1 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Mon, 29 Jan 2024 23:34:36 -0800 Subject: [PATCH 119/190] new roles cleanup --- src/main.ts | 8 +- src/other/profilerRegister.ts | 4 +- src/room/creeps/myCreepServices.ts | 2 +- src/room/creeps/roles/commune/builder.ts | 28 - .../roles/commune/controllerUpgrader.ts | 54 - src/room/creeps/roles/commune/haulerOps.ts | 1082 ----------------- .../creeps/roles/commune/haulerServices.ts | 10 - src/room/roomProcs.ts | 4 +- 8 files changed, 9 insertions(+), 1183 deletions(-) delete mode 100644 src/room/creeps/roles/commune/builder.ts delete mode 100644 src/room/creeps/roles/commune/controllerUpgrader.ts delete mode 100644 src/room/creeps/roles/commune/haulerOps.ts delete mode 100644 src/room/creeps/roles/commune/haulerServices.ts diff --git a/src/main.ts b/src/main.ts index 3d845739b..1515b1859 100644 --- a/src/main.ts +++ b/src/main.ts @@ -3,7 +3,7 @@ import './other/userScript/userScript' import './international/commands' import './debug/debugUtils' import { CollectiveManager } from './international/collective' -import { RoomsManager } from 'room/roomServoces' +import { RoomServices } from 'room/roomServices' import './room/resourceAdditions' import './room/roomObjectFunctions' import './room/roomObjectAdditions' @@ -65,14 +65,14 @@ export function originalLoop() { RoomDataProcs.initRooms() RoomDataProcs.updateRooms() - RoomsManager.updateRun() + RoomServices.updateRun() TransactionsManager.run() RequestsManager.run() if (global.collectivizer) global.collectivizer.run() if (global.userScript) global.userScript.run() PlayerManager.run() - RoomsManager.initRun() + RoomServices.initRun() CreepDataProcs.updateCreeps() CreepOrganizer.run() PowerCreepOrganizer.run() @@ -82,7 +82,7 @@ export function originalLoop() { ConstructionSiteManager.run() MarketManager.run() - RoomsManager.run() + RoomServices.run() MapVisualsManager.run() simpleAllies.endRun() diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index bfaf31a60..b5105f8b6 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -111,8 +111,8 @@ import { TickInit } from 'international/tickInit' import { DebugUtils } from 'debug/debugUtils' import { DefenceProcs } from 'room/commune/defenceProcs' import { DefenceUtils } from 'room/commune/defenceUtils' -import { HaulerOps } from 'room/creeps/roles/commune/haulerOps' -import { HaulerServices } from 'room/creeps/roles/commune/haulerServices' +import { HaulerOps } from 'room/creeps/roles/haulerOps' +import { HaulerServices } from 'room/creeps/roles/haulerServices' import { MyCreepProcs } from 'room/creeps/myCreepProcs' import { RoomServices } from 'room/roomServices' import { HaulerNeedOps } from 'room/commune/haulerNeedOps' diff --git a/src/room/creeps/myCreepServices.ts b/src/room/creeps/myCreepServices.ts index ed3848ed2..29b2e3ce1 100644 --- a/src/room/creeps/myCreepServices.ts +++ b/src/room/creeps/myCreepServices.ts @@ -1,5 +1,5 @@ import { customLog } from 'utils/logging' -import { HaulerServices } from './roles/commune/haulerServices' +import { HaulerServices } from './roles/haulerServices' export class MyCreepServices { static runCreeps(room: Room) { diff --git a/src/room/creeps/roles/commune/builder.ts b/src/room/creeps/roles/commune/builder.ts deleted file mode 100644 index 74bcfdc3f..000000000 --- a/src/room/creeps/roles/commune/builder.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Result, RoomLogisticsRequestTypes } from 'international/constants' -import { DefaultRoleManager } from 'room/creeps/defaultRoleManager' -import { customLog } from 'utils/logging' -import { findObjectWithID, getRange } from 'utils/utils' - -class BuilderManager extends DefaultRoleManager { - role: CreepRoles = 'hauler' - - runInitial(creep: Creep) { - if (!creep.room.roomManager.cSiteTarget) return - if (!creep.room.communeManager.buildersMakeRequests) return - if (creep.usedReserveStore > creep.store.getCapacity() * 0.5) return - - creep.room.roomManager.room.createRoomLogisticsRequest({ - target: creep, - type: RoomLogisticsRequestTypes.transfer, - priority: 8, - }) - } - - run(creep: Creep) { - if (creep.advancedBuild() === Result.fail) { - creep.advancedRecycle() - } - } -} - -export const builderManager = new BuilderManager() diff --git a/src/room/creeps/roles/commune/controllerUpgrader.ts b/src/room/creeps/roles/commune/controllerUpgrader.ts deleted file mode 100644 index 71af1313e..000000000 --- a/src/room/creeps/roles/commune/controllerUpgrader.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { RoomMemoryKeys, creepRoles, packedPosLength } from 'international/constants' -import { CreepProcs } from 'room/creeps/creepProcs' -import { CreepUtils } from 'room/creeps/creepUtils' -import { DefaultRoleManager } from 'room/creeps/defaultRoleManager' - -class ControllerUpgraderManager extends DefaultRoleManager { - role: CreepRoles = 'controllerUpgrader' - - isDying(creep: Creep) { - // Stop if creep is spawning - - if (creep.spawning) return false - - // If the creep's remaining ticks are more than the estimated spawn time plus travel time, inform false - - if ( - creep.ticksToLive > - creep.body.length * CREEP_SPAWN_TIME + - creep.room.memory[RoomMemoryKeys.upgradePath].length / packedPosLength - ) - return false - - // Record creep as isDying - - return true - } - /* -// Not good enough, we need to account for downgrading; state machine - shouldBuild(creep: Creep) { - return !!creep.room.roomManager.cSiteTarget; - } - */ - - /** - * Runs when the creep is spawning - */ - runSpawning(creep: Creep) {} - - runUpdate(creep: Creep) { - creep.room.communeManager.upgradeStrength += creep.room.communeManager.upgradeStrength - } - - initialRun(creep: Creep) {} - - run(creep: Creep) { - /* if (this.shouldBuild(creep)) { - creep.advancedBuild(); - return; - } */ - CreepProcs.advancedUpgradeController(creep) - } -} - -export const controllerUpgraderManager = new ControllerUpgraderManager() diff --git a/src/room/creeps/roles/commune/haulerOps.ts b/src/room/creeps/roles/commune/haulerOps.ts deleted file mode 100644 index 7135d9210..000000000 --- a/src/room/creeps/roles/commune/haulerOps.ts +++ /dev/null @@ -1,1082 +0,0 @@ -import { - CreepMemoryKeys, - packedPosLength, - RoomMemoryKeys, - RoomStatsKeys, - RoomTypes, - Result, - SleepFor, - RoomLogisticsRequestTypes, - MovedTypes, - customColors, - FlagNames, - relayOffsets, -} from 'international/constants' -import { StatsManager } from 'international/stats' -import { unpackPosAt, reversePosList, packCoord, unpackCoord } from 'other/codec' -import { CreepProcs } from 'room/creeps/creepProcs' -import { MyCreepUtils } from 'room/creeps/myCreepUtils' -import { Hauler } from 'room/creeps/roleManagers/commune/hauler' -import { StructureUtils } from 'room/structureUtils' -import { getRangeXY, Utils, randomIntRange, findObjectWithID, getRange } from 'utils/utils' - -export class HaulerOps { - static isDying(creep: Creep) { - // Stop if creep is spawning - - if (creep.spawning) return false - /* - // If the creep's remaining ticks are more than the estimated spawn time, inform false - - if (creep.ticksToLive > creep.body.length * CREEP_SPAWN_TIME) return false - */ - const creepMemory = Memory.creeps[creep.name] - - if (creepMemory[CreepMemoryKeys.remote]) { - if (creepMemory[CreepMemoryKeys.sourceIndex] === undefined) - throw Error('has remote but no sourceIndex') - if ( - creep.ticksToLive > - creep.body.length * CREEP_SPAWN_TIME + - Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ - creep.commune.communeManager.remoteResourcePathType - ][creepMemory[CreepMemoryKeys.sourceIndex]].length / - packedPosLength - ) { - return false - } - } - if (creep.ticksToLive > creep.body.length * CREEP_SPAWN_TIME) return false - - return true - } - - static runSpawning(creep: Creep) {} - - static initRun(creep: Creep) { - if (Utils.isTickInterval(10) && creep.getActiveBodyparts(CARRY) === 0) { - creep.suicide() - return - } - - const creepMemory = Memory.creeps[creep.name] - if ( - creepMemory[CreepMemoryKeys.previousRelayer] && - Game.time > creepMemory[CreepMemoryKeys.previousRelayer][1] + 1 - ) { - creepMemory[CreepMemoryKeys.previousRelayer] = undefined - } - - const carryParts = MyCreepUtils.parts(creep).carry - creep.commune.communeManager.haulerCarryParts += carryParts - - if (this.hasValidRemote(creep)) { - this.applyRemote(creep) - return - } - - // We don't have a valid remote - this.removeRemote(creep) - - const commune = creep.commune - if (creepMemory[CreepMemoryKeys.taskRoom] === commune.name) { - commune.communeManager.communeHaulerCarryParts += carryParts - commune.communeManager.communeHaulers.push(creep.name) - } - } - - static runCreep(creep: Creep) { - if (this.runRestrictedCommuneLogistics(creep) === true) { - return - } - - if (!this.findRemote(creep)) { - if (this.travelToCommune(creep) !== Result.success) return - this.runCommuneLogistics(creep) - return - } - - const creepMemory = Memory.creeps[creep.name] - - if ( - creepMemory[CreepMemoryKeys.sleepFor] === SleepFor.any && - creepMemory[CreepMemoryKeys.sleepTime] > Game.time - ) { - creep.message = '😴' - return - } - - if (creep.needsResources() /* && creep.ticksToLive > returnTripTime */) { - this.getResources(creep) - return - } - - // Otherwise if the creep doesn't need resources - - if (this.deliverResources(creep)) { - this.relay(creep) - } - } - - private static passiveRenew(creep: Creep) { - const { room } = creep - - // If there is insufficient CPU to renew, inform false - - if (creep.body.length > 10) return - if (!room.myCreepsByRole.fastFiller.length) return - // only renew if we are the same as the desired hauler cost - const creepCost = Memory.creeps[creep.name][CreepMemoryKeys.cost] - if (creepCost !== Memory.rooms[room.name][RoomMemoryKeys.minHaulerCost]) return - - // If the creep's age is less than the benefit from renewing, inform false - - const energyCost = Math.ceil(creepCost / 2.5 / creep.body.length) - if (CREEP_LIFE_TIME - creep.ticksToLive < Math.floor(600 / creep.body.length)) return - - // Get the room's spawns, stopping if there are none - - const spawns = room.roomManager.structures.spawn - - // Get a spawn in range of 1, informing false if there are none - - const spawn = spawns.find( - spawn => - getRangeXY(creep.pos.x, spawn.pos.x, creep.pos.y, spawn.pos.y) === 1 && - !spawn.renewed && - !spawn.spawning && - StructureUtils.isRCLActionable(spawn), - ) - if (!spawn) return - - const result = spawn.renewCreep(creep) - if (result === OK) { - StatsManager.updateStat(creep.room.name, RoomStatsKeys.EnergyOutputSpawn, energyCost) - spawn.renewed = true - } - } - - private static hasValidRemote(creep: Creep) { - const remoteName = Memory.creeps[creep.name][CreepMemoryKeys.remote] - if (!remoteName) return false - - const remoteMemory = Memory.rooms[remoteName] - - if (remoteMemory[RoomMemoryKeys.disable]) return false - if (remoteMemory[RoomMemoryKeys.abandonRemote]) return false - if (remoteMemory[RoomMemoryKeys.enemyReserved]) return false - if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) return false - if (remoteMemory[RoomMemoryKeys.commune] !== creep.commune.name) return false - - return true - } - - /** - * Finds a remote to harvest in - */ - private static findRemote(creep: Creep) { - if (this.hasValidRemote(creep)) return true - - for (const remoteInfo of creep.commune.roomManager.remoteSourceIndexesByEfficacy) { - const splitRemoteInfo = remoteInfo.split(' ') - const remoteName = splitRemoteInfo[0] - const remoteMemory = Memory.rooms[remoteName] - - if (remoteMemory[RoomMemoryKeys.disable]) continue - if (remoteMemory[RoomMemoryKeys.abandonRemote]) continue - if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) continue - if (remoteMemory[RoomMemoryKeys.commune] !== creep.commune.name) continue - - const sourceIndex = parseInt(splitRemoteInfo[1]) - if (!this.isRemoteValid(creep, remoteName, sourceIndex)) continue - - this.assignRemote(creep, remoteName, sourceIndex) - return true - } - - return false - } - - private static isRemoteValid(creep: Creep, remoteName: string, sourceIndex: number) { - const remoteMemory = Memory.rooms[remoteName] - - // Ensure the creep and the remote have the same opinions on roads - if ( - !!remoteMemory[RoomMemoryKeys.roads][sourceIndex] != - !!Memory.creeps[creep.name][CreepMemoryKeys.preferRoads] - ) - return false - - const commune = creep.commune - - // Make sure we have enough life to get there - /* - const pathLength = - remoteMemory[commune.communeManager.remoteResourcePathType][sourceIndex].length / - packedPosLength - if (pathLength >= creep.ticksToLive) return false - */ - // Make sure we have enough free space to keep reservation below credit - if ( - remoteMemory[RoomMemoryKeys.remoteSourceCredit][sourceIndex] - - remoteMemory[RoomMemoryKeys.remoteSourceCreditReservation][sourceIndex] < - creep.freeNextStore - ) { - return false - } - - // If we do roads but the remote doesn't - change to be a low-priority search later - if (Memory.creeps[creep.name][CreepMemoryKeys.preferRoads]) { - const roadsQuota = - remoteMemory[commune.communeManager.remoteResourcePathType][sourceIndex].length / - packedPosLength - - // See if there are roads close enough or more than the quota - if (remoteMemory[RoomMemoryKeys.roads][sourceIndex] < roadsQuota * 0.9) return false - } - - return true - } - - private static isCurrentRemoteValid(creep: Creep) { - const creepMemory = Memory.creeps[creep.name] - return this.isRemoteValid( - creep, - creepMemory[CreepMemoryKeys.remote], - creepMemory[CreepMemoryKeys.sourceIndex], - ) - } - - private static assignRemote(creep: Creep, remoteName: string, sourceIndex: number) { - const creepMemory = Memory.creeps[creep.name] - - creepMemory[CreepMemoryKeys.remote] = remoteName - creepMemory[CreepMemoryKeys.sourceIndex] = sourceIndex - creepMemory[CreepMemoryKeys.taskRoom] = undefined - creepMemory[CreepMemoryKeys.roomLogisticsRequests] = [] - - this.applyRemote(creep) - } - - private static applyRemote(creep: Creep) { - if (creep.isDying()) return - if (!creep.needsResources()) return - - const creepMemory = Memory.creeps[creep.name] - - Memory.rooms[creepMemory[CreepMemoryKeys.remote]][RoomMemoryKeys.remoteSourceCreditReservation][ - creepMemory[CreepMemoryKeys.sourceIndex] - ] += creep.dataChange = creep.freeNextStore - } - - private static removeRemote(creep: Creep) { - const creepMemory = Memory.creeps[creep.name] - - if (!creep.isDying) { - Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ - RoomMemoryKeys.remoteSourceCreditReservation - ][creepMemory[CreepMemoryKeys.sourceIndex]] -= creep.dataChange - } - - delete creepMemory[CreepMemoryKeys.remote] - delete creepMemory[CreepMemoryKeys.sourceIndex] - } - - private static getResources(creep: Creep) { - const creepMemory = Memory.creeps[creep.name] - - // Try to find a remote - - if (!this.findRemote(creep)) { - creep.message = '❌ Remote' - - if (creep.room.name !== creep.commune.name) { - const anchor = creep.commune.roomManager.anchor - if (!anchor) throw Error('no anchor for hauler') - - if ( - creep.createMoveRequest({ - origin: creep.pos, - goals: [ - { - pos: anchor, - range: 25, - }, - ], - }) === Result.fail - ) { - creepMemory[CreepMemoryKeys.sleepFor] = SleepFor.any - creepMemory[CreepMemoryKeys.sleepTime] = Game.time + randomIntRange(10, 50) - } - } - - // If the room is the creep's commune - /* - if (creep.room.name === creep.commune.name) { - // Advanced recycle and iterate - - creep.advancedRecycle() - return false - } - - // Otherwise, have the creep make a moveRequest to its commune and iterate - - creep.createMoveRequest({ - origin: creep.pos, - goals: [ - { - pos: creep.commune.anchor, - range: 25, - }, - ], - }) - */ - return false - } - - // If the creep is in the remote - - if (creep.room.name === creep.memory[CreepMemoryKeys.remote]) { - if (!this.getRemoteSourceResources(creep)) return false - - // We have enough resources, return home - - delete creep.moved - - creep.message += creep.commune.name - - const anchor = creep.commune.roomManager.anchor - if (!anchor) throw Error('No anchor for hauler ' + creep.room.name) - - creep.createMoveRequestByPath( - { - origin: creep.pos, - goals: [ - { - pos: anchor, - range: 3, - }, - ], - avoidEnemyRanges: true, - typeWeights: { - [RoomTypes.enemy]: Infinity, - [RoomTypes.ally]: Infinity, - [RoomTypes.sourceKeeper]: Infinity, - [RoomTypes.enemyRemote]: Infinity, - [RoomTypes.allyRemote]: Infinity, - }, - }, - { - packedPath: - Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ - creep.commune.communeManager.remoteResourcePathType - ][creepMemory[CreepMemoryKeys.sourceIndex]], - remoteName: creepMemory[CreepMemoryKeys.remote], - }, - ) - - return true - } - - if (creep.room.name !== creep.commune.name) { - // Fulfill requests near the hauler - - CreepProcs.runRoomLogisticsRequestsAdvanced(creep, { - types: new Set([RoomLogisticsRequestTypes.pickup, RoomLogisticsRequestTypes.withdraw]), - resourceTypes: new Set([RESOURCE_ENERGY]), - conditions: request => { - // If the target is near the creep - - const targetPos = findObjectWithID(request.targetID).pos - return getRange(targetPos, creep.pos) <= 0 - }, - }) - - if (!creep.needsResources()) { - // We have enough resources, return home - - delete creep.moved - - creep.message += creep.commune.name - - const anchor = creep.commune.roomManager.anchor - if (!anchor) throw Error('No anchor for hauler ' + creep.room.name) - - creep.createMoveRequestByPath( - { - origin: creep.pos, - goals: [ - { - pos: anchor, - range: 3, - }, - ], - avoidEnemyRanges: true, - typeWeights: { - [RoomTypes.enemy]: Infinity, - [RoomTypes.ally]: Infinity, - [RoomTypes.sourceKeeper]: Infinity, - [RoomTypes.enemyRemote]: Infinity, - [RoomTypes.allyRemote]: Infinity, - }, - }, - { - packedPath: - Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ - creep.commune.communeManager.remoteResourcePathType - ][creepMemory[CreepMemoryKeys.sourceIndex]], - remoteName: creepMemory[CreepMemoryKeys.remote], - }, - ) - - return true - } - } - - // We aren't in the remote, go to the source - - const sourceHarvestPos = unpackPosAt( - Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ - RoomMemoryKeys.remoteSourceHarvestPositions - ][creepMemory[CreepMemoryKeys.sourceIndex]], - ) - - creep.message += creepMemory[CreepMemoryKeys.remote] - console.log(creepMemory[CreepMemoryKeys.remote]) - creep.createMoveRequestByPath( - { - origin: creep.pos, - goals: [ - { - pos: sourceHarvestPos, - range: 1, - }, - ], - avoidEnemyRanges: true, - typeWeights: { - [RoomTypes.enemy]: Infinity, - [RoomTypes.ally]: Infinity, - [RoomTypes.sourceKeeper]: Infinity, - [RoomTypes.enemyRemote]: Infinity, - [RoomTypes.allyRemote]: Infinity, - }, - avoidDanger: true, - }, - { - packedPath: reversePosList( - Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ - creep.commune.communeManager.remoteResourcePathType - ][creepMemory[CreepMemoryKeys.sourceIndex]], - ), - remoteName: creepMemory[CreepMemoryKeys.remote], - }, - ) - - return true - } - - /** - * - * @returns If the creep no longer needs energy - */ - private static getRemoteSourceResources(creep: Creep) { - const creepMemory = Memory.creeps[creep.name] - const sourceHarvestPos = unpackPosAt( - Memory.rooms[creep.room.name][RoomMemoryKeys.remoteSourceHarvestPositions][ - creepMemory[CreepMemoryKeys.sourceIndex] - ], - ) - - // If we're ready to take on a request by the source or we already have one, perform it - - const isBySourceHarvestPos = getRange(creep.pos, sourceHarvestPos) <= 1 - if (isBySourceHarvestPos || creepMemory[CreepMemoryKeys.roomLogisticsRequests].length > 0) { - const freeNextStoreInitial = creep.freeNextStore - - CreepProcs.runRoomLogisticsRequestsAdvanced(creep, { - types: new Set([RoomLogisticsRequestTypes.pickup, RoomLogisticsRequestTypes.withdraw]), - resourceTypes: new Set([RESOURCE_ENERGY]), - conditions: request => { - // If the target is near the creep or source - - const targetPos = findObjectWithID(request.targetID).pos - return ( - getRange(targetPos, creep.pos) <= 1 || - getRange( - targetPos, - creep.room.roomManager.remoteSources[creepMemory[CreepMemoryKeys.sourceIndex]].pos, - ) <= 1 - ) - }, - }) - - // remove fulfilled reserved source credit from source credit - - // Should be a negative number, as we should have more used store than before - const freeNextStoreDifference = creep.freeNextStore - freeNextStoreInitial - if (freeNextStoreDifference !== 0) { - Memory.rooms[creep.room.name][RoomMemoryKeys.remoteSourceCredit][ - creepMemory[CreepMemoryKeys.sourceIndex] - ] += freeNextStoreDifference - Memory.rooms[creep.room.name][RoomMemoryKeys.remoteSourceCreditReservation][ - creepMemory[CreepMemoryKeys.sourceIndex] - ] += freeNextStoreDifference - } - - return !creep.needsResources() - } - - // Fulfill requests near the hauler - - CreepProcs.runRoomLogisticsRequestsAdvanced(creep, { - types: new Set([ - RoomLogisticsRequestTypes.pickup, - RoomLogisticsRequestTypes.withdraw, - ]), - resourceTypes: new Set([RESOURCE_ENERGY]), - conditions: request => { - // If the target is near the creep - - const targetPos = findObjectWithID(request.targetID).pos - return getRange(targetPos, creep.pos) <= 1 - }, - }) - - if (!creep.needsResources()) return true - - // We aren't by the sourceHarvestPos, get adjacent to it - - if (!isBySourceHarvestPos) { - creep.createMoveRequestByPath( - { - origin: creep.pos, - goals: [ - { - pos: sourceHarvestPos, - range: 1, - }, - ], - avoidEnemyRanges: true, - }, - { - packedPath: reversePosList( - Memory.rooms[creep.room.name][creep.commune.communeManager.remoteResourcePathType][ - creepMemory[CreepMemoryKeys.sourceIndex] - ], - ), - remoteName: creep.room.name, - }, - ) - - return false - } - - // We are next to the source - - creep.moved = MovedTypes.wait - - return !creep.needsResources() - } - - private static deliverResources(creep: Creep) { - const commune = creep.commune - - if (commune.communeManager.remoteResourcePathType === RoomMemoryKeys.remoteSourceHubPaths) { - if (creep.room.name === commune.name) { - this.passiveRenew(creep) - - CreepProcs.runRoomLogisticsRequestsAdvanced(creep, { - types: new Set([RoomLogisticsRequestTypes.transfer]), - resourceTypes: new Set([RESOURCE_ENERGY]), - noDelivery: true, - conditions: request => { - // If the target is near the creep - - const targetPos = findObjectWithID(request.targetID).pos - return getRange(targetPos, creep.pos) <= 1 - }, - }) - - // If we tried to respond but weren't able to do so in a single tick, then we should wait to try again next tick - if (Memory.creeps[creep.name][CreepMemoryKeys.roomLogisticsRequests].length) return true - - // We haven't emptied ourselves yet - if (!creep.needsResources()) { - if (getRange(creep.pos, commune.storage.pos) <= 1) return true - - creep.createMoveRequestByPath( - { - origin: creep.pos, - goals: [ - { - pos: commune.storage.pos, - range: 1, - }, - ], - avoidEnemyRanges: true, - typeWeights: { - [RoomTypes.enemy]: Infinity, - [RoomTypes.ally]: Infinity, - [RoomTypes.sourceKeeper]: Infinity, - [RoomTypes.enemyRemote]: Infinity, - [RoomTypes.allyRemote]: Infinity, - }, - }, - { - packedPath: - Memory.rooms[creep.memory[CreepMemoryKeys.remote]][ - commune.communeManager.remoteResourcePathType - ][creep.memory[CreepMemoryKeys.sourceIndex]], - }, - ) - return true - } - this.removeRemote(creep) - if (!this.findRemote(creep)) return false - - creep.message += creep.memory[CreepMemoryKeys.remote] - - const sourceHarvestPos = unpackPosAt( - Memory.rooms[creep.memory[CreepMemoryKeys.remote]][ - RoomMemoryKeys.remoteSourceHarvestPositions - ][creep.memory[CreepMemoryKeys.sourceIndex]], - ) - - creep.createMoveRequestByPath( - { - origin: creep.pos, - goals: [ - { - pos: sourceHarvestPos, - range: 1, - }, - ], - avoidEnemyRanges: true, - typeWeights: { - [RoomTypes.enemy]: Infinity, - [RoomTypes.ally]: Infinity, - [RoomTypes.sourceKeeper]: Infinity, - [RoomTypes.enemyRemote]: Infinity, - [RoomTypes.allyRemote]: Infinity, - }, - }, - { - packedPath: reversePosList( - Memory.rooms[creep.memory[CreepMemoryKeys.remote]][ - commune.communeManager.remoteResourcePathType - ][creep.memory[CreepMemoryKeys.sourceIndex]], - ), - remoteName: creep.memory[CreepMemoryKeys.remote], - }, - ) - - return false - } - - creep.message += commune.name - - creep.createMoveRequestByPath( - { - origin: creep.pos, - goals: [ - { - pos: commune.storage.pos, - range: 1, - }, - ], - avoidEnemyRanges: true, - typeWeights: { - [RoomTypes.enemy]: Infinity, - [RoomTypes.ally]: Infinity, - [RoomTypes.sourceKeeper]: Infinity, - [RoomTypes.enemyRemote]: Infinity, - [RoomTypes.allyRemote]: Infinity, - }, - }, - { - packedPath: - Memory.rooms[creep.memory[CreepMemoryKeys.remote]][ - commune.communeManager.remoteResourcePathType - ][creep.memory[CreepMemoryKeys.sourceIndex]], - }, - ) - return true - } - - if (creep.room.name === commune.name) { - this.passiveRenew(creep) - - CreepProcs.runRoomLogisticsRequestAdvanced(creep, { - types: new Set([RoomLogisticsRequestTypes.transfer]), - resourceTypes: new Set([RESOURCE_ENERGY]), - }) - - // We haven't emptied ourselves yet - if (!creep.needsResources()) return true - this.removeRemote(creep) - if (!this.findRemote(creep)) return false - - creep.message += creep.memory[CreepMemoryKeys.remote] - - const sourceHarvestPos = unpackPosAt( - Memory.rooms[creep.memory[CreepMemoryKeys.remote]][ - RoomMemoryKeys.remoteSourceHarvestPositions - ][creep.memory[CreepMemoryKeys.sourceIndex]], - ) - - creep.createMoveRequestByPath( - { - origin: creep.pos, - goals: [ - { - pos: sourceHarvestPos, - range: 1, - }, - ], - avoidEnemyRanges: true, - typeWeights: { - [RoomTypes.enemy]: Infinity, - [RoomTypes.ally]: Infinity, - [RoomTypes.sourceKeeper]: Infinity, - [RoomTypes.enemyRemote]: Infinity, - [RoomTypes.allyRemote]: Infinity, - }, - }, - { - packedPath: reversePosList( - Memory.rooms[creep.memory[CreepMemoryKeys.remote]][ - commune.communeManager.remoteResourcePathType - ][creep.memory[CreepMemoryKeys.sourceIndex]], - ), - remoteName: creep.memory[CreepMemoryKeys.remote], - }, - ) - - return false - } - - creep.message += commune.name - - const anchor = commune.roomManager.anchor - if (!anchor) throw Error('No anchor for hauler ' + creep.room.name) - - creep.createMoveRequestByPath( - { - origin: creep.pos, - goals: [ - { - pos: anchor, - range: 3, - }, - ], - avoidEnemyRanges: true, - typeWeights: { - [RoomTypes.enemy]: Infinity, - [RoomTypes.ally]: Infinity, - [RoomTypes.sourceKeeper]: Infinity, - [RoomTypes.enemyRemote]: Infinity, - [RoomTypes.allyRemote]: Infinity, - }, - }, - { - packedPath: - Memory.rooms[creep.memory[CreepMemoryKeys.remote]][ - commune.communeManager.remoteResourcePathType - ][creep.memory[CreepMemoryKeys.sourceIndex]], - loose: true, - }, - ) - - return true - } - - private static relayCoord(creep: Creep, coord: Coord) { - if (global.settings.roomVisuals) { - creep.room.visual.circle(coord.x, coord.y, { fill: customColors.lightBlue }) - } - - const creepAtPosName = creep.room.creepPositions[packCoord(coord)] - if (!creepAtPosName) return false - - const creepAtPos = Game.creeps[creepAtPosName] - - if (creepAtPos.role !== 'hauler') return false - if (creepAtPos.movedResource) return false - - const creepMemory = Memory.creeps[creep.name] - // ensure we aren't relaying with the same creep as last tick - if ( - creepMemory[CreepMemoryKeys.previousRelayer] && - creepMemory[CreepMemoryKeys.previousRelayer][0] === creepAtPos.name - ) - return false - - // ensure the creep receiving creep is empty - /* if (creepAtPos.store.getUsedCapacity() > 0) return false */ - if (creepAtPos.store.getUsedCapacity() > 0) return false - - // Ensure that they have the same opinions on roads - if (creepMemory[CreepMemoryKeys.preferRoads] !== creepMemory[CreepMemoryKeys.preferRoads]) - return false - - /* const logisticsRequest = Memory.creeps[creep.name][CreepMemoryKeys.roomLogisticsRequests][0] - if (logisticsRequest) { - const target = findObjectWithID(logisticsRequest[CreepRoomLogisticsRequestKeys.target]) - // Don't relay if they are close to our logistics target - if (getRange(target.pos, creepAtPos.pos) <= 1) return false - } */ - if (creepAtPos.store.getFreeCapacity() !== creep.store.getUsedCapacity(RESOURCE_ENERGY)) - return false - - creep.transfer(creepAtPos, RESOURCE_ENERGY) - - creep.movedResource = true - creepAtPos.movedResource = true - /* - const nextEnergy = Math.min(creep.nextStore.energy, creepAtPos.freeNextStore) - creep.nextStore.energy -= nextEnergy - creepAtPos.nextStore.energy += nextEnergy - */ - /* - log('creepEnergy', creep.store.energy) - log('creepAtPos Energy', creepAtPos.freeNextStore) - log('nextEnergy', Math.min(creep.store.energy, creepAtPos.freeNextStore)) - */ - const transferAmount = Math.min( - creep.store.getUsedCapacity(RESOURCE_ENERGY), - creepAtPos.store.getFreeCapacity(), - ) - creep.reserveStore.energy -= transferAmount - creep.nextStore.energy -= transferAmount - creepAtPos.reserveStore.energy += transferAmount - creepAtPos.nextStore.energy += transferAmount - /* - log('creep needs res', creep.needsResources()) - log('creepAtPos need res', creepAtPos.needsResources()) - */ - // Stop previously attempted moveRequests as they do not account for a relay - - delete creep.moveRequest - delete creepAtPos.moveRequest - - delete creep.moved - delete creepAtPos.moved - - const creepAtPosMemory = Memory.creeps[creepAtPos.name] - - // Trade paths so they might reuse them - - const path = creepMemory[CreepMemoryKeys.path] - creepMemory[CreepMemoryKeys.path] = creepAtPosMemory[CreepMemoryKeys.path] - creepAtPosMemory[CreepMemoryKeys.path] = path - - // record relaying information to avoid swapping - - creepMemory[CreepMemoryKeys.previousRelayer] = [creepAtPos.name, Game.time] - creepAtPosMemory[CreepMemoryKeys.previousRelayer] = [creep.name, Game.time] - - // Trade room logistics requests - - const creepAtPosRequests = [...creepAtPosMemory[CreepMemoryKeys.roomLogisticsRequests]] - creepAtPosMemory[CreepMemoryKeys.roomLogisticsRequests] = [ - ...creepMemory[CreepMemoryKeys.roomLogisticsRequests], - ] - creepMemory[CreepMemoryKeys.roomLogisticsRequests] = creepAtPosRequests - - // Trade remotes and sourceIndexes - // Delete from creepAtPos because it is returning home, not responding to a remote - - const remote = creepMemory[CreepMemoryKeys.remote] - creepMemory[CreepMemoryKeys.remote] = creepAtPosMemory[CreepMemoryKeys.remote] - creepAtPosMemory[CreepMemoryKeys.remote] = remote - - const sourceIndex = creepMemory[CreepMemoryKeys.sourceIndex] - creepMemory[CreepMemoryKeys.sourceIndex] = creepAtPosMemory[CreepMemoryKeys.sourceIndex] - creepAtPosMemory[CreepMemoryKeys.sourceIndex] = sourceIndex - - const taskRoom = creepMemory[CreepMemoryKeys.taskRoom] - creepMemory[CreepMemoryKeys.taskRoom] = creepAtPosMemory[CreepMemoryKeys.taskRoom] - creepAtPosMemory[CreepMemoryKeys.taskRoom] = taskRoom - - // - - if (creepMemory[CreepMemoryKeys.taskRoom]) { - this.runCommuneLogistics(creep) - } else this.getResources(creep) - - const hauler = creepAtPos as Hauler - if (creepAtPosMemory[CreepMemoryKeys.taskRoom]) hauler.runCommuneLogistics() - else if (creepAtPosMemory[CreepMemoryKeys.remote]) hauler.deliverResources() - - if (Game.flags[FlagNames.debugRelay]) { - if (creep.moveRequest) - creep.room.targetVisual(creep.pos, unpackCoord(creep.moveRequest), true) - if (creepAtPos.moveRequest) { - creepAtPos.room.targetVisual(creepAtPos.pos, unpackCoord(creepAtPos.moveRequest), true) - } - } - - return true - } - - private static relayCardinal(creep: Creep, moveCoord: Coord) { - let offsets = relayOffsets.horizontal - if (creep.pos.y === moveCoord.y) offsets = relayOffsets.vertical - - for (const offset of offsets) { - const coord = { - x: moveCoord.x + offset.x, - y: moveCoord.y + offset.y, - } - - if (this.relayCoord(creep, coord)) return Result.action - } - - return Result.noAction - } - - private static relayDiagonal(creep: Creep, moveCoord: Coord) { - let offsets - - if (creep.pos.y > moveCoord.y) { - offsets = relayOffsets.topLeft - if (creep.pos.x < moveCoord.x) offsets = relayOffsets.topRight - } else { - offsets = relayOffsets.bottomLeft - if (creep.pos.x < moveCoord.x) offsets = relayOffsets.bottomRight - } - - for (const offset of offsets) { - const coord = { - x: moveCoord.x + offset.x, - y: moveCoord.y + offset.y, - } - /* - // If the x and y are dissimilar - - if (coord.x !== moveCoord.x && coord.y !== moveCoord.y) continue - */ - if (this.relayCoord(creep, coord)) return Result.action - } - - return Result.noAction - } - - private static relay(creep: Creep) { - // If there is no easy way to know what coord the creep is trying to go to next - - const creepMemory = Memory.creeps[creep.name] - if ( - !creep.moveRequest && - (!creepMemory[CreepMemoryKeys.path] || - creepMemory[CreepMemoryKeys.path].length / packedPosLength < 2) - ) - return Result.noAction - if (creep.movedResource) return Result.noAction - - const creepEnergy = creep.store.getUsedCapacity(RESOURCE_ENERGY) - // ensure we have energy - if (creepEnergy <= 0) return Result.noAction - // ensure energy is our only resource - if (creepEnergy !== creep.store.getUsedCapacity()) return Result.noAction - - // Don't relay too close to the source position unless we are fatigued - - if ( - creepMemory[CreepMemoryKeys.taskRoom] !== creep.room.name && - !creep.fatigue && - creepMemory[CreepMemoryKeys.remote] === creep.room.name && - getRange( - creep.room.roomManager.remoteSourceHarvestPositions[ - creepMemory[CreepMemoryKeys.sourceIndex] - ][0], - creep.pos, - ) <= 1 - ) - return Result.noAction - - const moveCoord = creep.moveRequest - ? unpackCoord(creep.moveRequest) - : unpackPosAt(creepMemory[CreepMemoryKeys.path], 1) - - if (creep.pos.x === moveCoord.x || creep.pos.y === moveCoord.y) { - return this.relayCardinal(creep, moveCoord) - } - - return this.relayDiagonal(creep, moveCoord) - } - - private static travelToCommune(creep: Creep) { - if (creep.room.name === creep.commune.name && !creep.isOnExit) { - return Result.success - } - - const anchor = creep.commune.roomManager.anchor - if (!anchor) throw Error('no anchor for hauler') - - creep.createMoveRequest({ - origin: creep.pos, - goals: [ - { - pos: anchor, - range: 3, - }, - ], - avoidEnemyRanges: true, - typeWeights: { - [RoomTypes.enemy]: Infinity, - [RoomTypes.ally]: Infinity, - [RoomTypes.sourceKeeper]: Infinity, - [RoomTypes.enemyRemote]: Infinity, - [RoomTypes.allyRemote]: Infinity, - }, - }) - - return Result.action - } - - /** - * Run commune logistics, but only for creeps intended for commune logistics - */ - private static runRestrictedCommuneLogistics(creep: Creep) { - const creepMemory = Memory.creeps[creep.name] - // let it respond to its remote - if (Memory.creeps[creep.name][CreepMemoryKeys.remote]) return false - // We aren't in the commune - if (creep.room.name !== creep.commune.name) return false - - if (creep.commune.communeManager.hasSufficientRoads) { - // If we have a body not optimized for roads, try to respond to a remote instead - if (!creepMemory[CreepMemoryKeys.preferRoads]) return false - } - - // If there is no need for more commune haulers - if ( - creep.commune.communeManager.communeHaulerNeed < - creep.commune.communeManager.communeHaulerCarryParts - ) { - return false - } - - // success, we are working for the commune now - - if (!creepMemory[CreepMemoryKeys.taskRoom]) { - creepMemory[CreepMemoryKeys.taskRoom] = creep.room.name - creep.commune.communeManager.communeHaulerCarryParts += MyCreepUtils.parts(creep).carry - } - - this.runCommuneLogistics(creep) - return true - } - - private static runCommuneLogistics(creep: Creep) { - this.passiveRenew(creep) - - if (CreepProcs.runRoomLogisticsRequestsAdvanced(creep) === Result.action) { - this.relay(creep) - return Result.action - } - - return Result.success - } -} diff --git a/src/room/creeps/roles/commune/haulerServices.ts b/src/room/creeps/roles/commune/haulerServices.ts deleted file mode 100644 index 118e52a95..000000000 --- a/src/room/creeps/roles/commune/haulerServices.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { HaulerOps } from './haulerOps' - -export class HaulerServices { - static runCreeps(creepNames: string[]) { - for (const creepName of creepNames) { - const creep = Game.creeps[creepName] - HaulerOps.runCreep(creep) - } - } -} diff --git a/src/room/roomProcs.ts b/src/room/roomProcs.ts index c6c41bac5..6f982ee74 100644 --- a/src/room/roomProcs.ts +++ b/src/room/roomProcs.ts @@ -15,8 +15,8 @@ import { CommuneProcs } from './commune/communeProcs' import { LogisticsProcs } from './logisticsProcs' import { customLog } from 'utils/logging' import { unpackCoord } from 'other/codec' -import { HaulerServices } from './creeps/roles/commune/haulerServices' -import { HaulerOps } from './creeps/roles/commune/haulerOps' +import { HaulerServices } from './creeps/roles/haulerServices' +import { HaulerOps } from './creeps/roles/haulerOps' export class RoomProcs { static update(room: Room) { From cfecb34c9a3984aba865ee02a72c9d78172f9a1a Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 30 Jan 2024 12:05:59 -0800 Subject: [PATCH 120/190] correct references to improved stat keys enum --- src/room/commune/powerSpawnProcs.ts | 4 ++-- .../commune/spawning/spawningStructureProcs.ts | 3 ++- src/room/commune/towerProcs.ts | 4 ++-- src/room/creeps/creepProcs.ts | 15 ++++++++------- src/room/creeps/creepPrototypes/creepFunctions.ts | 7 ++++--- .../roleManagers/commune/mineralHarvester.ts | 3 ++- 6 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/room/commune/powerSpawnProcs.ts b/src/room/commune/powerSpawnProcs.ts index 833eac7e9..578096b4e 100644 --- a/src/room/commune/powerSpawnProcs.ts +++ b/src/room/commune/powerSpawnProcs.ts @@ -1,5 +1,5 @@ import { CollectiveManager } from 'international/collective' -import { RoomLogisticsRequestTypes } from 'international/constants' +import { RoomLogisticsRequestTypes, RoomStatsKeys } from 'international/constants' import { StatsManager } from 'international/stats' import { scalePriority } from 'utils/utils' import { CommuneUtils } from './communeUtils' @@ -24,7 +24,7 @@ export class PowerSpawnProcs { const result = powerSpawn.processPower() if (result === OK) - StatsManager.updateStat(powerSpawn.room.name, 'eop', POWER_SPAWN_ENERGY_RATIO) + StatsManager.updateStat(powerSpawn.room.name, RoomStatsKeys.EnergyOutputPower, POWER_SPAWN_ENERGY_RATIO) } /** diff --git a/src/room/commune/spawning/spawningStructureProcs.ts b/src/room/commune/spawning/spawningStructureProcs.ts index 6e570a551..ff3e469f1 100644 --- a/src/room/commune/spawning/spawningStructureProcs.ts +++ b/src/room/commune/spawning/spawningStructureProcs.ts @@ -9,6 +9,7 @@ import { creepRoles, customColors, MovedTypes, + RoomStatsKeys, } from 'international/constants' import { StatsManager } from 'international/stats' import { unpackPosAt, packCoord, unpackCoord } from 'other/codec' @@ -168,7 +169,7 @@ export class SpawningStructureProcs { // Record in stats the costs room.communeManager.nextSpawnEnergyAvailable -= request.cost - StatsManager.updateStat(room.name, 'eosp', request.cost) + StatsManager.updateStat(room.name, RoomStatsKeys.EnergyOutputSpawn, request.cost) // The spawn we intented to spawn should no longer be considered inactive inactiveSpawns.splice(spawnIndex, 1) diff --git a/src/room/commune/towerProcs.ts b/src/room/commune/towerProcs.ts index 3fe013e57..12751895f 100644 --- a/src/room/commune/towerProcs.ts +++ b/src/room/commune/towerProcs.ts @@ -1,4 +1,4 @@ -import { PlayerMemoryKeys, RoomLogisticsRequestTypes } from "international/constants" +import { PlayerMemoryKeys, RoomLogisticsRequestTypes, RoomStatsKeys } from "international/constants" import { PlayerManager } from 'international/players' import { StatsManager } from 'international/stats' import { packCoord } from 'other/codec' @@ -177,7 +177,7 @@ export class TowerProcs { const tower = findObjectWithID(actionableTowerIDs[i]) if (tower.repair(repairTarget) !== OK) continue - StatsManager.updateStat(room.name, 'eorwr', TOWER_ENERGY_COST) + StatsManager.updateStat(room.name, RoomStatsKeys.EnergyOutputRepairWallOrRampart, TOWER_ENERGY_COST) actionableTowerIDs.splice(i, 1) } diff --git a/src/room/creeps/creepProcs.ts b/src/room/creeps/creepProcs.ts index 18c67e7dc..af93007a0 100644 --- a/src/room/creeps/creepProcs.ts +++ b/src/room/creeps/creepProcs.ts @@ -15,6 +15,7 @@ import { Result, RoomLogisticsRequestTypes, offsetsByDirection, + RoomStatsKeys, } from 'international/constants' import { CreepUtils } from './creepUtils' import { CommuneUtils } from 'room/commune/communeUtils' @@ -87,7 +88,7 @@ export class CreepProcs { const controlPoints = workPartCount * UPGRADE_CONTROLLER_POWER - StatsManager.updateStat(creep.room.name, 'eou', controlPoints) + StatsManager.updateStat(creep.room.name, RoomStatsKeys.EnergyOutputUpgrade, controlPoints) creep.message += `🔋${controlPoints}` } } @@ -116,7 +117,7 @@ export class CreepProcs { // Add control points to total controlPoints counter and say the success - StatsManager.updateStat(creep.room.name, 'eoro', energySpentOnRepairs) + StatsManager.updateStat(creep.room.name, RoomStatsKeys.EnergyOutputRepairOther, energySpentOnRepairs) creep.message += `🔧${energySpentOnRepairs * REPAIR_POWER}` } } @@ -206,7 +207,7 @@ export class CreepProcs { MyCreepUtils.parts(creep).work * UPGRADE_CONTROLLER_POWER, ) - StatsManager.updateStat(creep.room.name, 'eou', energySpentOnUpgrades) + StatsManager.updateStat(creep.room.name, RoomStatsKeys.EnergyOutputUpgrade, energySpentOnUpgrades) creep.message = `🔋${energySpentOnUpgrades}` // Inform true @@ -263,10 +264,10 @@ export class CreepProcs { // Record the repair attempt in different places for barricades than other structures if (target.structureType === STRUCTURE_RAMPART || target.structureType === STRUCTURE_WALL) { - StatsManager.updateStat(creep.room.name, 'eorwr', energySpentOnRepair) + StatsManager.updateStat(creep.room.name, RoomStatsKeys.EnergyOutputRepairWallOrRampart, energySpentOnRepair) creep.message = `🧱${energySpentOnRepair * REPAIR_POWER}` } else { - StatsManager.updateStat(creep.room.name, 'eoro', energySpentOnRepair) + StatsManager.updateStat(creep.room.name, RoomStatsKeys.EnergyOutputRepairOther, energySpentOnRepair) creep.message = `🔧${energySpentOnRepair * REPAIR_POWER}` } @@ -1098,7 +1099,7 @@ export class CreepProcs { const result = spawn.renewCreep(creep) if (result === OK) { - StatsManager.updateStat(creep.room.name, 'eosp', energyCost) + StatsManager.updateStat(creep.room.name, RoomStatsKeys.EnergyOutputSpawn, energyCost) spawn.renewed = true } } @@ -1135,7 +1136,7 @@ export class CreepProcs { const result = spawn.renewCreep(creep) if (result === OK) { - StatsManager.updateStat(creep.room.name, 'eosp', energyCost) + StatsManager.updateStat(creep.room.name, RoomStatsKeys.EnergyOutputSpawn, energyCost) spawn.renewed = true } } diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index 574f99693..f32ea710d 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -3,7 +3,8 @@ import { roomDimensions, Result, CreepMemoryKeys, RoomMemoryKeys, ReservedCoordTypes, WorkTypes, - RoomLogisticsRequestTypes + RoomLogisticsRequestTypes, + RoomStatsKeys } from 'international/constants' import { findClosestObject, @@ -265,7 +266,7 @@ Creep.prototype.advancedBuildCSite = function (cSite) { // Add control points to total controlPoints counter and say the success - StatsManager.updateStat(this.room.name, 'eob', energySpentOnConstruction) + StatsManager.updateStat(this.room.name, RoomStatsKeys.EnergyOutputBuild, energySpentOnConstruction) this.message = `🚧 ` + energySpentOnConstruction return Result.success @@ -347,7 +348,7 @@ Creep.prototype.advancedBuildAllyCSite = function () { // Add control points to total controlPoints counter and say the success - StatsManager.updateStat(this.room.name, 'eob', energySpentOnConstruction) + StatsManager.updateStat(this.room.name, RoomStatsKeys.EnergyOutputBuild, energySpentOnConstruction) this.message = `🚧${energySpentOnConstruction}` // Inform true diff --git a/src/room/creeps/roleManagers/commune/mineralHarvester.ts b/src/room/creeps/roleManagers/commune/mineralHarvester.ts index d73f82484..d8a0e5c05 100644 --- a/src/room/creeps/roleManagers/commune/mineralHarvester.ts +++ b/src/room/creeps/roleManagers/commune/mineralHarvester.ts @@ -3,6 +3,7 @@ import { ReservedCoordTypes, Result, RoomMemoryKeys, + RoomStatsKeys, } from 'international/constants' import { StatsManager } from 'international/stats' import { getRangeXY, getRange, areCoordsEqual } from 'utils/utils' @@ -65,7 +66,7 @@ export class MineralHarvester extends Creep { mineral.mineralAmount, ) this.reserveStore[mineral.mineralType] += mineralsHarvested - StatsManager.updateStat(this.room.name, 'mh', mineralsHarvested) + StatsManager.updateStat(this.room.name, RoomStatsKeys.MineralsHarvested, mineralsHarvested) this.message = `⛏️${mineralsHarvested}` return Result.success From b308b4d363e18be6fdb291e153a028d1e4eb139b Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 30 Jan 2024 12:18:45 -0800 Subject: [PATCH 121/190] RoomDataProcs -> RoomDataOps; CommuneDataProcs -> CommuneDataOps --- src/main.ts | 8 +- src/other/profilerRegister.ts | 8 +- src/room/commune/communeData.ts | 3 +- src/room/commune/communeProcs.ts | 2 +- src/room/commune/communeUtils.ts | 4 +- src/room/commune/towerUtils.ts | 2 +- src/room/creeps/roles/haulerOps.ts | 1086 +++++++++++++++++++++++ src/room/creeps/roles/haulerServices.ts | 10 + src/room/roomData.ts | 6 +- src/room/roomUtils.ts | 2 +- 10 files changed, 1113 insertions(+), 18 deletions(-) create mode 100644 src/room/creeps/roles/haulerOps.ts create mode 100644 src/room/creeps/roles/haulerServices.ts diff --git a/src/main.ts b/src/main.ts index 1515b1859..7320ec3ed 100644 --- a/src/main.ts +++ b/src/main.ts @@ -34,10 +34,10 @@ import { MarketManager } from 'international/market/marketOrders' import { TransactionsManager } from 'international/transactions' import { SegmentsManager } from 'international/segments' import { CreepDataProcs } from 'room/creeps/creepData' -import { RoomDataProcs } from 'room/roomData' +import { RoomDataOps } from 'room/roomData' import { Utils } from 'utils/utils' import { Procs } from 'utils/procs' -import { CommuneDataProcs } from 'room/commune/communeData' +import { CommuneDataOps } from 'room/commune/communeData' import { GarbageCollector } from 'international/garbageCollector' export function originalLoop() { @@ -63,8 +63,8 @@ export function originalLoop() { simpleAllies.initRun() wasm.collaborator() - RoomDataProcs.initRooms() - RoomDataProcs.updateRooms() + RoomDataOps.initRooms() + RoomDataOps.updateRooms() RoomServices.updateRun() TransactionsManager.run() RequestsManager.run() diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index b5105f8b6..030545b22 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -76,8 +76,8 @@ import { import { CustomPathFinder } from 'international/customPathFinder' import { RoomUtils } from 'room/roomUtils' import { CommuneUtils } from 'room/commune/communeUtils' -import { RoomDataProcs } from 'room/roomData' -import { CommuneDataProcs } from 'room/commune/communeData' +import { RoomDataOps } from 'room/roomData' +import { CommuneDataOps } from 'room/commune/communeData' import { MyCreepUtils } from 'room/creeps/myCreepUtils' import { CreepMoveProcs } from 'room/creeps/creepMoveProcs' import { CommuneProcs } from 'room/commune/communeProcs' @@ -177,8 +177,8 @@ export function profilerRegister() { profiler.registerClass(RoomUtils, 'RoomUtils') profiler.registerClass(RoomProcs, 'RoomProcs') profiler.registerClass(CommuneUtils, 'CommuneUtils') - profiler.registerClass(RoomDataProcs, 'RoomDataProcs') - profiler.registerClass(CommuneDataProcs, 'CommuneDataProcs') + profiler.registerClass(RoomDataOps, 'RoomDataProcs') + profiler.registerClass(CommuneDataOps, 'CommuneDataProcs') profiler.registerClass(CommuneProcs, 'CommuneProc') profiler.registerClass(RoomObjectUtils, 'RoomObjectUtils') profiler.registerClass(StructureUtils, 'StructureUtils') diff --git a/src/room/commune/communeData.ts b/src/room/commune/communeData.ts index 7156162fc..3aec9e5df 100644 --- a/src/room/commune/communeData.ts +++ b/src/room/commune/communeData.ts @@ -28,7 +28,7 @@ export const communeData: { [roomName: string]: Partial } = {} /** * Handles cached data for communes */ -export class CommuneDataProcs { +export class CommuneDataOps { /** * Called by the room's RoomManager */ @@ -52,7 +52,6 @@ export class CommuneDataProcs { } if (Utils.isTickInterval(100)) { - delete data.resourceTargets } } diff --git a/src/room/commune/communeProcs.ts b/src/room/commune/communeProcs.ts index 48daa2029..d90c05e85 100644 --- a/src/room/commune/communeProcs.ts +++ b/src/room/commune/communeProcs.ts @@ -1,5 +1,5 @@ import { RoomUtils } from 'room/roomUtils' -import { CommuneDataProcs, communeData } from './communeData' +import { CommuneDataOps, communeData } from './communeData' import { CommuneUtils } from './communeUtils' import { Result, diff --git a/src/room/commune/communeUtils.ts b/src/room/commune/communeUtils.ts index bf690a473..9e584d040 100644 --- a/src/room/commune/communeUtils.ts +++ b/src/room/commune/communeUtils.ts @@ -1,6 +1,6 @@ import { packCoord, unpackCoord } from 'other/codec' -import { CommuneDataProcs, communeData } from './communeData' -import { RoomDataProcs, roomData } from 'room/roomData' +import { CommuneDataOps, communeData } from './communeData' +import { RoomDataOps, roomData } from 'room/roomData' import { findLinkThroughput, getRange, packAsNum, unpackNumAsCoord } from 'utils/utils' import { Result, diff --git a/src/room/commune/towerUtils.ts b/src/room/commune/towerUtils.ts index 379324a95..453c580ea 100644 --- a/src/room/commune/towerUtils.ts +++ b/src/room/commune/towerUtils.ts @@ -1,6 +1,6 @@ import { towerPowers } from "international/constants" import { findWithLowestScore, getRange } from 'utils/utils' -import { CommuneDataProcs, communeData } from './communeData' +import { CommuneDataOps, communeData } from './communeData' import { CommuneUtils } from './communeUtils' import { packCoord } from 'other/codec' diff --git a/src/room/creeps/roles/haulerOps.ts b/src/room/creeps/roles/haulerOps.ts new file mode 100644 index 000000000..de90d96ab --- /dev/null +++ b/src/room/creeps/roles/haulerOps.ts @@ -0,0 +1,1086 @@ +import { + CreepMemoryKeys, + packedPosLength, + RoomMemoryKeys, + RoomStatsKeys, + RoomTypes, + Result, + SleepFor, + RoomLogisticsRequestTypes, + MovedTypes, + customColors, + FlagNames, + relayOffsets, +} from 'international/constants' +import { StatsManager } from 'international/stats' +import { unpackPosAt, reversePosList, packCoord, unpackCoord } from 'other/codec' +import { CreepProcs } from 'room/creeps/creepProcs' +import { MyCreepUtils } from 'room/creeps/myCreepUtils' +import { Hauler } from 'room/creeps/roleManagers/commune/hauler' +import { StructureUtils } from 'room/structureUtils' +import { getRangeXY, Utils, randomIntRange, findObjectWithID, getRange } from 'utils/utils' + +export class HaulerOps { + static deadRun(creepName: string) {} + + static runSpawning(creep: Creep) {} + + static updateRun(creep: Creep) {} + + static initRun(creep: Creep) { + if (Utils.isTickInterval(10) && creep.getActiveBodyparts(CARRY) === 0) { + creep.suicide() + return + } + + const creepMemory = Memory.creeps[creep.name] + if ( + creepMemory[CreepMemoryKeys.previousRelayer] && + Game.time > creepMemory[CreepMemoryKeys.previousRelayer][1] + 1 + ) { + creepMemory[CreepMemoryKeys.previousRelayer] = undefined + } + + const carryParts = MyCreepUtils.parts(creep).carry + creep.commune.communeManager.haulerCarryParts += carryParts + + if (this.hasValidRemote(creep)) { + this.applyRemote(creep) + return + } + + // We don't have a valid remote + this.removeRemote(creep) + + const commune = creep.commune + if (creepMemory[CreepMemoryKeys.taskRoom] === commune.name) { + commune.communeManager.communeHaulerCarryParts += carryParts + commune.communeManager.communeHaulers.push(creep.name) + } + } + + static runCreep(creep: Creep) { + if (this.runRestrictedCommuneLogistics(creep) === true) { + return + } + + if (!this.findRemote(creep)) { + if (this.travelToCommune(creep) !== Result.success) return + this.runCommuneLogistics(creep) + return + } + + const creepMemory = Memory.creeps[creep.name] + + if ( + creepMemory[CreepMemoryKeys.sleepFor] === SleepFor.any && + creepMemory[CreepMemoryKeys.sleepTime] > Game.time + ) { + creep.message = '😴' + return + } + + if (creep.needsResources() /* && creep.ticksToLive > returnTripTime */) { + this.getResources(creep) + return + } + + // Otherwise if the creep doesn't need resources + + if (this.deliverResources(creep)) { + this.relay(creep) + } + } + + private static passiveRenew(creep: Creep) { + const { room } = creep + + // If there is insufficient CPU to renew, inform false + + if (creep.body.length > 10) return + if (!room.myCreepsByRole.fastFiller.length) return + // only renew if we are the same as the desired hauler cost + const creepCost = Memory.creeps[creep.name][CreepMemoryKeys.cost] + if (creepCost !== Memory.rooms[room.name][RoomMemoryKeys.minHaulerCost]) return + + // If the creep's age is less than the benefit from renewing, inform false + + const energyCost = Math.ceil(creepCost / 2.5 / creep.body.length) + if (CREEP_LIFE_TIME - creep.ticksToLive < Math.floor(600 / creep.body.length)) return + + // Get the room's spawns, stopping if there are none + + const spawns = room.roomManager.structures.spawn + + // Get a spawn in range of 1, informing false if there are none + + const spawn = spawns.find( + spawn => + getRangeXY(creep.pos.x, spawn.pos.x, creep.pos.y, spawn.pos.y) === 1 && + !spawn.renewed && + !spawn.spawning && + StructureUtils.isRCLActionable(spawn), + ) + if (!spawn) return + + const result = spawn.renewCreep(creep) + if (result === OK) { + StatsManager.updateStat(creep.room.name, RoomStatsKeys.EnergyOutputSpawn, energyCost) + spawn.renewed = true + } + } + + private static hasValidRemote(creep: Creep) { + const remoteName = Memory.creeps[creep.name][CreepMemoryKeys.remote] + if (!remoteName) return false + + const remoteMemory = Memory.rooms[remoteName] + + if (remoteMemory[RoomMemoryKeys.disable]) return false + if (remoteMemory[RoomMemoryKeys.abandonRemote]) return false + if (remoteMemory[RoomMemoryKeys.enemyReserved]) return false + if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) return false + if (remoteMemory[RoomMemoryKeys.commune] !== creep.commune.name) return false + + return true + } + + /** + * Finds a remote to harvest in + */ + private static findRemote(creep: Creep) { + if (this.hasValidRemote(creep)) return true + + for (const remoteInfo of creep.commune.roomManager.remoteSourceIndexesByEfficacy) { + const splitRemoteInfo = remoteInfo.split(' ') + const remoteName = splitRemoteInfo[0] + const remoteMemory = Memory.rooms[remoteName] + + if (remoteMemory[RoomMemoryKeys.disable]) continue + if (remoteMemory[RoomMemoryKeys.abandonRemote]) continue + if (remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote) continue + if (remoteMemory[RoomMemoryKeys.commune] !== creep.commune.name) continue + + const sourceIndex = parseInt(splitRemoteInfo[1]) + if (!this.isRemoteValid(creep, remoteName, sourceIndex)) continue + + this.assignRemote(creep, remoteName, sourceIndex) + return true + } + + return false + } + + private static isRemoteValid(creep: Creep, remoteName: string, sourceIndex: number) { + const remoteMemory = Memory.rooms[remoteName] + + // Ensure the creep and the remote have the same opinions on roads + if ( + !!remoteMemory[RoomMemoryKeys.roads][sourceIndex] != + !!Memory.creeps[creep.name][CreepMemoryKeys.preferRoads] + ) + return false + + const commune = creep.commune + + // Make sure we have enough life to get there + /* + const pathLength = + remoteMemory[commune.communeManager.remoteResourcePathType][sourceIndex].length / + packedPosLength + if (pathLength >= creep.ticksToLive) return false + */ + // Make sure we have enough free space to keep reservation below credit + if ( + remoteMemory[RoomMemoryKeys.remoteSourceCredit][sourceIndex] - + remoteMemory[RoomMemoryKeys.remoteSourceCreditReservation][sourceIndex] < + creep.freeNextStore + ) { + return false + } + + // If we do roads but the remote doesn't - change to be a low-priority search later + if (Memory.creeps[creep.name][CreepMemoryKeys.preferRoads]) { + const roadsQuota = + remoteMemory[commune.communeManager.remoteResourcePathType][sourceIndex].length / + packedPosLength + + // See if there are roads close enough or more than the quota + if (remoteMemory[RoomMemoryKeys.roads][sourceIndex] < roadsQuota * 0.9) return false + } + + return true + } + + private static isCurrentRemoteValid(creep: Creep) { + const creepMemory = Memory.creeps[creep.name] + return this.isRemoteValid( + creep, + creepMemory[CreepMemoryKeys.remote], + creepMemory[CreepMemoryKeys.sourceIndex], + ) + } + + private static assignRemote(creep: Creep, remoteName: string, sourceIndex: number) { + const creepMemory = Memory.creeps[creep.name] + + creepMemory[CreepMemoryKeys.remote] = remoteName + creepMemory[CreepMemoryKeys.sourceIndex] = sourceIndex + creepMemory[CreepMemoryKeys.taskRoom] = undefined + creepMemory[CreepMemoryKeys.roomLogisticsRequests] = [] + + this.applyRemote(creep) + } + + private static applyRemote(creep: Creep) { + if (creep.isDying()) return + if (!creep.needsResources()) return + + const creepMemory = Memory.creeps[creep.name] + + Memory.rooms[creepMemory[CreepMemoryKeys.remote]][RoomMemoryKeys.remoteSourceCreditReservation][ + creepMemory[CreepMemoryKeys.sourceIndex] + ] += creep.dataChange = creep.freeNextStore + } + + private static removeRemote(creep: Creep) { + const creepMemory = Memory.creeps[creep.name] + + if (!creep.isDying) { + Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ + RoomMemoryKeys.remoteSourceCreditReservation + ][creepMemory[CreepMemoryKeys.sourceIndex]] -= creep.dataChange + } + + delete creepMemory[CreepMemoryKeys.remote] + delete creepMemory[CreepMemoryKeys.sourceIndex] + } + + private static getResources(creep: Creep) { + const creepMemory = Memory.creeps[creep.name] + + // Try to find a remote + + if (!this.findRemote(creep)) { + creep.message = '❌ Remote' + + if (creep.room.name !== creep.commune.name) { + const anchor = creep.commune.roomManager.anchor + if (!anchor) throw Error('no anchor for hauler') + + if ( + creep.createMoveRequest({ + origin: creep.pos, + goals: [ + { + pos: anchor, + range: 25, + }, + ], + }) === Result.fail + ) { + creepMemory[CreepMemoryKeys.sleepFor] = SleepFor.any + creepMemory[CreepMemoryKeys.sleepTime] = Game.time + randomIntRange(10, 50) + } + } + + // If the room is the creep's commune + /* + if (creep.room.name === creep.commune.name) { + // Advanced recycle and iterate + + creep.advancedRecycle() + return false + } + + // Otherwise, have the creep make a moveRequest to its commune and iterate + + creep.createMoveRequest({ + origin: creep.pos, + goals: [ + { + pos: creep.commune.anchor, + range: 25, + }, + ], + }) + */ + return false + } + + // If the creep is in the remote + + if (creep.room.name === creep.memory[CreepMemoryKeys.remote]) { + if (!this.getRemoteSourceResources(creep)) return false + + // We have enough resources, return home + + delete creep.moved + + creep.message += creep.commune.name + + const anchor = creep.commune.roomManager.anchor + if (!anchor) throw Error('No anchor for hauler ' + creep.room.name) + + creep.createMoveRequestByPath( + { + origin: creep.pos, + goals: [ + { + pos: anchor, + range: 3, + }, + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + }, + { + packedPath: + Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ + creep.commune.communeManager.remoteResourcePathType + ][creepMemory[CreepMemoryKeys.sourceIndex]], + remoteName: creepMemory[CreepMemoryKeys.remote], + }, + ) + + return true + } + + if (creep.room.name !== creep.commune.name) { + // Fulfill requests near the hauler + + CreepProcs.runRoomLogisticsRequestsAdvanced(creep, { + types: new Set([RoomLogisticsRequestTypes.pickup, RoomLogisticsRequestTypes.withdraw]), + resourceTypes: new Set([RESOURCE_ENERGY]), + conditions: request => { + // If the target is near the creep + + const targetPos = findObjectWithID(request.targetID).pos + return getRange(targetPos, creep.pos) <= 0 + }, + }) + + if (!creep.needsResources()) { + // We have enough resources, return home + + delete creep.moved + + creep.message += creep.commune.name + + const anchor = creep.commune.roomManager.anchor + if (!anchor) throw Error('No anchor for hauler ' + creep.room.name) + + creep.createMoveRequestByPath( + { + origin: creep.pos, + goals: [ + { + pos: anchor, + range: 3, + }, + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + }, + { + packedPath: + Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ + creep.commune.communeManager.remoteResourcePathType + ][creepMemory[CreepMemoryKeys.sourceIndex]], + remoteName: creepMemory[CreepMemoryKeys.remote], + }, + ) + + return true + } + } + + // We aren't in the remote, go to the source + + const sourceHarvestPos = unpackPosAt( + Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ + RoomMemoryKeys.remoteSourceHarvestPositions + ][creepMemory[CreepMemoryKeys.sourceIndex]], + ) + + creep.message += creepMemory[CreepMemoryKeys.remote] + console.log(creepMemory[CreepMemoryKeys.remote]) + creep.createMoveRequestByPath( + { + origin: creep.pos, + goals: [ + { + pos: sourceHarvestPos, + range: 1, + }, + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + avoidDanger: true, + }, + { + packedPath: reversePosList( + Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ + creep.commune.communeManager.remoteResourcePathType + ][creepMemory[CreepMemoryKeys.sourceIndex]], + ), + remoteName: creepMemory[CreepMemoryKeys.remote], + }, + ) + + return true + } + + /** + * + * @returns If the creep no longer needs energy + */ + private static getRemoteSourceResources(creep: Creep) { + const creepMemory = Memory.creeps[creep.name] + const sourceHarvestPos = unpackPosAt( + Memory.rooms[creep.room.name][RoomMemoryKeys.remoteSourceHarvestPositions][ + creepMemory[CreepMemoryKeys.sourceIndex] + ], + ) + + // If we're ready to take on a request by the source or we already have one, perform it + + const isBySourceHarvestPos = getRange(creep.pos, sourceHarvestPos) <= 1 + if (isBySourceHarvestPos || creepMemory[CreepMemoryKeys.roomLogisticsRequests].length > 0) { + const freeNextStoreInitial = creep.freeNextStore + + CreepProcs.runRoomLogisticsRequestsAdvanced(creep, { + types: new Set([RoomLogisticsRequestTypes.pickup, RoomLogisticsRequestTypes.withdraw]), + resourceTypes: new Set([RESOURCE_ENERGY]), + conditions: request => { + // If the target is near the creep or source + + const targetPos = findObjectWithID(request.targetID).pos + return ( + getRange(targetPos, creep.pos) <= 1 || + getRange( + targetPos, + creep.room.roomManager.remoteSources[creepMemory[CreepMemoryKeys.sourceIndex]].pos, + ) <= 1 + ) + }, + }) + + // remove fulfilled reserved source credit from source credit + + // Should be a negative number, as we should have more used store than before + const freeNextStoreDifference = creep.freeNextStore - freeNextStoreInitial + if (freeNextStoreDifference !== 0) { + Memory.rooms[creep.room.name][RoomMemoryKeys.remoteSourceCredit][ + creepMemory[CreepMemoryKeys.sourceIndex] + ] += freeNextStoreDifference + Memory.rooms[creep.room.name][RoomMemoryKeys.remoteSourceCreditReservation][ + creepMemory[CreepMemoryKeys.sourceIndex] + ] += freeNextStoreDifference + } + + return !creep.needsResources() + } + + // Fulfill requests near the hauler + + CreepProcs.runRoomLogisticsRequestsAdvanced(creep, { + types: new Set([ + RoomLogisticsRequestTypes.pickup, + RoomLogisticsRequestTypes.withdraw, + ]), + resourceTypes: new Set([RESOURCE_ENERGY]), + conditions: request => { + // If the target is near the creep + + const targetPos = findObjectWithID(request.targetID).pos + return getRange(targetPos, creep.pos) <= 1 + }, + }) + + if (!creep.needsResources()) return true + + // We aren't by the sourceHarvestPos, get adjacent to it + + if (!isBySourceHarvestPos) { + creep.createMoveRequestByPath( + { + origin: creep.pos, + goals: [ + { + pos: sourceHarvestPos, + range: 1, + }, + ], + avoidEnemyRanges: true, + }, + { + packedPath: reversePosList( + Memory.rooms[creep.room.name][creep.commune.communeManager.remoteResourcePathType][ + creepMemory[CreepMemoryKeys.sourceIndex] + ], + ), + remoteName: creep.room.name, + }, + ) + + return false + } + + // We are next to the source + + creep.moved = MovedTypes.wait + + return !creep.needsResources() + } + + private static deliverResources(creep: Creep) { + const commune = creep.commune + + if (commune.communeManager.remoteResourcePathType === RoomMemoryKeys.remoteSourceHubPaths) { + if (creep.room.name === commune.name) { + this.passiveRenew(creep) + + CreepProcs.runRoomLogisticsRequestsAdvanced(creep, { + types: new Set([RoomLogisticsRequestTypes.transfer]), + resourceTypes: new Set([RESOURCE_ENERGY]), + noDelivery: true, + conditions: request => { + // If the target is near the creep + + const targetPos = findObjectWithID(request.targetID).pos + return getRange(targetPos, creep.pos) <= 1 + }, + }) + + // If we tried to respond but weren't able to do so in a single tick, then we should wait to try again next tick + if (Memory.creeps[creep.name][CreepMemoryKeys.roomLogisticsRequests].length) return true + + // We haven't emptied ourselves yet + if (!creep.needsResources()) { + if (getRange(creep.pos, commune.storage.pos) <= 1) return true + + creep.createMoveRequestByPath( + { + origin: creep.pos, + goals: [ + { + pos: commune.storage.pos, + range: 1, + }, + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + }, + { + packedPath: + Memory.rooms[creep.memory[CreepMemoryKeys.remote]][ + commune.communeManager.remoteResourcePathType + ][creep.memory[CreepMemoryKeys.sourceIndex]], + }, + ) + return true + } + this.removeRemote(creep) + if (!this.findRemote(creep)) return false + + creep.message += creep.memory[CreepMemoryKeys.remote] + + const sourceHarvestPos = unpackPosAt( + Memory.rooms[creep.memory[CreepMemoryKeys.remote]][ + RoomMemoryKeys.remoteSourceHarvestPositions + ][creep.memory[CreepMemoryKeys.sourceIndex]], + ) + + creep.createMoveRequestByPath( + { + origin: creep.pos, + goals: [ + { + pos: sourceHarvestPos, + range: 1, + }, + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + }, + { + packedPath: reversePosList( + Memory.rooms[creep.memory[CreepMemoryKeys.remote]][ + commune.communeManager.remoteResourcePathType + ][creep.memory[CreepMemoryKeys.sourceIndex]], + ), + remoteName: creep.memory[CreepMemoryKeys.remote], + }, + ) + + return false + } + + creep.message += commune.name + + creep.createMoveRequestByPath( + { + origin: creep.pos, + goals: [ + { + pos: commune.storage.pos, + range: 1, + }, + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + }, + { + packedPath: + Memory.rooms[creep.memory[CreepMemoryKeys.remote]][ + commune.communeManager.remoteResourcePathType + ][creep.memory[CreepMemoryKeys.sourceIndex]], + }, + ) + return true + } + + if (creep.room.name === commune.name) { + this.passiveRenew(creep) + + CreepProcs.runRoomLogisticsRequestAdvanced(creep, { + types: new Set([RoomLogisticsRequestTypes.transfer]), + resourceTypes: new Set([RESOURCE_ENERGY]), + }) + + // We haven't emptied ourselves yet + if (!creep.needsResources()) return true + this.removeRemote(creep) + if (!this.findRemote(creep)) return false + + creep.message += creep.memory[CreepMemoryKeys.remote] + + const sourceHarvestPos = unpackPosAt( + Memory.rooms[creep.memory[CreepMemoryKeys.remote]][ + RoomMemoryKeys.remoteSourceHarvestPositions + ][creep.memory[CreepMemoryKeys.sourceIndex]], + ) + + creep.createMoveRequestByPath( + { + origin: creep.pos, + goals: [ + { + pos: sourceHarvestPos, + range: 1, + }, + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + }, + { + packedPath: reversePosList( + Memory.rooms[creep.memory[CreepMemoryKeys.remote]][ + commune.communeManager.remoteResourcePathType + ][creep.memory[CreepMemoryKeys.sourceIndex]], + ), + remoteName: creep.memory[CreepMemoryKeys.remote], + }, + ) + + return false + } + + creep.message += commune.name + + const anchor = commune.roomManager.anchor + if (!anchor) throw Error('No anchor for hauler ' + creep.room.name) + + creep.createMoveRequestByPath( + { + origin: creep.pos, + goals: [ + { + pos: anchor, + range: 3, + }, + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + }, + { + packedPath: + Memory.rooms[creep.memory[CreepMemoryKeys.remote]][ + commune.communeManager.remoteResourcePathType + ][creep.memory[CreepMemoryKeys.sourceIndex]], + loose: true, + }, + ) + + return true + } + + private static relayCoord(creep: Creep, coord: Coord) { + if (global.settings.roomVisuals) { + creep.room.visual.circle(coord.x, coord.y, { fill: customColors.lightBlue }) + } + + const creepAtPosName = creep.room.creepPositions[packCoord(coord)] + if (!creepAtPosName) return false + + const creepAtPos = Game.creeps[creepAtPosName] + + if (creepAtPos.role !== 'hauler') return false + if (creepAtPos.movedResource) return false + + const creepMemory = Memory.creeps[creep.name] + // ensure we aren't relaying with the same creep as last tick + if ( + creepMemory[CreepMemoryKeys.previousRelayer] && + creepMemory[CreepMemoryKeys.previousRelayer][0] === creepAtPos.name + ) + return false + + // ensure the creep receiving creep is empty + /* if (creepAtPos.store.getUsedCapacity() > 0) return false */ + if (creepAtPos.store.getUsedCapacity() > 0) return false + + // Ensure that they have the same opinions on roads + if (creepMemory[CreepMemoryKeys.preferRoads] !== creepMemory[CreepMemoryKeys.preferRoads]) + return false + + /* const logisticsRequest = Memory.creeps[creep.name][CreepMemoryKeys.roomLogisticsRequests][0] + if (logisticsRequest) { + const target = findObjectWithID(logisticsRequest[CreepRoomLogisticsRequestKeys.target]) + // Don't relay if they are close to our logistics target + if (getRange(target.pos, creepAtPos.pos) <= 1) return false + } */ + if (creepAtPos.store.getFreeCapacity() !== creep.store.getUsedCapacity(RESOURCE_ENERGY)) + return false + + creep.transfer(creepAtPos, RESOURCE_ENERGY) + + creep.movedResource = true + creepAtPos.movedResource = true + /* + const nextEnergy = Math.min(creep.nextStore.energy, creepAtPos.freeNextStore) + creep.nextStore.energy -= nextEnergy + creepAtPos.nextStore.energy += nextEnergy + */ + /* + log('creepEnergy', creep.store.energy) + log('creepAtPos Energy', creepAtPos.freeNextStore) + log('nextEnergy', Math.min(creep.store.energy, creepAtPos.freeNextStore)) + */ + const transferAmount = Math.min( + creep.store.getUsedCapacity(RESOURCE_ENERGY), + creepAtPos.store.getFreeCapacity(), + ) + creep.reserveStore.energy -= transferAmount + creep.nextStore.energy -= transferAmount + creepAtPos.reserveStore.energy += transferAmount + creepAtPos.nextStore.energy += transferAmount + /* + log('creep needs res', creep.needsResources()) + log('creepAtPos need res', creepAtPos.needsResources()) + */ + // Stop previously attempted moveRequests as they do not account for a relay + + delete creep.moveRequest + delete creepAtPos.moveRequest + + delete creep.moved + delete creepAtPos.moved + + const creepAtPosMemory = Memory.creeps[creepAtPos.name] + + // Trade paths so they might reuse them + + const path = creepMemory[CreepMemoryKeys.path] + creepMemory[CreepMemoryKeys.path] = creepAtPosMemory[CreepMemoryKeys.path] + creepAtPosMemory[CreepMemoryKeys.path] = path + + // record relaying information to avoid swapping + + creepMemory[CreepMemoryKeys.previousRelayer] = [creepAtPos.name, Game.time] + creepAtPosMemory[CreepMemoryKeys.previousRelayer] = [creep.name, Game.time] + + // Trade room logistics requests + + const creepAtPosRequests = [...creepAtPosMemory[CreepMemoryKeys.roomLogisticsRequests]] + creepAtPosMemory[CreepMemoryKeys.roomLogisticsRequests] = [ + ...creepMemory[CreepMemoryKeys.roomLogisticsRequests], + ] + creepMemory[CreepMemoryKeys.roomLogisticsRequests] = creepAtPosRequests + + // Trade remotes and sourceIndexes + // Delete from creepAtPos because it is returning home, not responding to a remote + + const remote = creepMemory[CreepMemoryKeys.remote] + creepMemory[CreepMemoryKeys.remote] = creepAtPosMemory[CreepMemoryKeys.remote] + creepAtPosMemory[CreepMemoryKeys.remote] = remote + + const sourceIndex = creepMemory[CreepMemoryKeys.sourceIndex] + creepMemory[CreepMemoryKeys.sourceIndex] = creepAtPosMemory[CreepMemoryKeys.sourceIndex] + creepAtPosMemory[CreepMemoryKeys.sourceIndex] = sourceIndex + + const taskRoom = creepMemory[CreepMemoryKeys.taskRoom] + creepMemory[CreepMemoryKeys.taskRoom] = creepAtPosMemory[CreepMemoryKeys.taskRoom] + creepAtPosMemory[CreepMemoryKeys.taskRoom] = taskRoom + + // + + if (creepMemory[CreepMemoryKeys.taskRoom]) { + this.runCommuneLogistics(creep) + } else this.getResources(creep) + + const hauler = creepAtPos as Hauler + if (creepAtPosMemory[CreepMemoryKeys.taskRoom]) hauler.runCommuneLogistics() + else if (creepAtPosMemory[CreepMemoryKeys.remote]) hauler.deliverResources() + + if (Game.flags[FlagNames.debugRelay]) { + if (creep.moveRequest) + creep.room.targetVisual(creep.pos, unpackCoord(creep.moveRequest), true) + if (creepAtPos.moveRequest) { + creepAtPos.room.targetVisual(creepAtPos.pos, unpackCoord(creepAtPos.moveRequest), true) + } + } + + return true + } + + private static relayCardinal(creep: Creep, moveCoord: Coord) { + let offsets = relayOffsets.horizontal + if (creep.pos.y === moveCoord.y) offsets = relayOffsets.vertical + + for (const offset of offsets) { + const coord = { + x: moveCoord.x + offset.x, + y: moveCoord.y + offset.y, + } + + if (this.relayCoord(creep, coord)) return Result.action + } + + return Result.noAction + } + + private static relayDiagonal(creep: Creep, moveCoord: Coord) { + let offsets + + if (creep.pos.y > moveCoord.y) { + offsets = relayOffsets.topLeft + if (creep.pos.x < moveCoord.x) offsets = relayOffsets.topRight + } else { + offsets = relayOffsets.bottomLeft + if (creep.pos.x < moveCoord.x) offsets = relayOffsets.bottomRight + } + + for (const offset of offsets) { + const coord = { + x: moveCoord.x + offset.x, + y: moveCoord.y + offset.y, + } + /* + // If the x and y are dissimilar + + if (coord.x !== moveCoord.x && coord.y !== moveCoord.y) continue + */ + if (this.relayCoord(creep, coord)) return Result.action + } + + return Result.noAction + } + + private static relay(creep: Creep) { + // If there is no easy way to know what coord the creep is trying to go to next + + const creepMemory = Memory.creeps[creep.name] + if ( + !creep.moveRequest && + (!creepMemory[CreepMemoryKeys.path] || + creepMemory[CreepMemoryKeys.path].length / packedPosLength < 2) + ) + return Result.noAction + if (creep.movedResource) return Result.noAction + + const creepEnergy = creep.store.getUsedCapacity(RESOURCE_ENERGY) + // ensure we have energy + if (creepEnergy <= 0) return Result.noAction + // ensure energy is our only resource + if (creepEnergy !== creep.store.getUsedCapacity()) return Result.noAction + + // Don't relay too close to the source position unless we are fatigued + + if ( + creepMemory[CreepMemoryKeys.taskRoom] !== creep.room.name && + !creep.fatigue && + creepMemory[CreepMemoryKeys.remote] === creep.room.name && + getRange( + creep.room.roomManager.remoteSourceHarvestPositions[ + creepMemory[CreepMemoryKeys.sourceIndex] + ][0], + creep.pos, + ) <= 1 + ) + return Result.noAction + + const moveCoord = creep.moveRequest + ? unpackCoord(creep.moveRequest) + : unpackPosAt(creepMemory[CreepMemoryKeys.path], 1) + + if (creep.pos.x === moveCoord.x || creep.pos.y === moveCoord.y) { + return this.relayCardinal(creep, moveCoord) + } + + return this.relayDiagonal(creep, moveCoord) + } + + private static travelToCommune(creep: Creep) { + if (creep.room.name === creep.commune.name && !creep.isOnExit) { + return Result.success + } + + const anchor = creep.commune.roomManager.anchor + if (!anchor) throw Error('no anchor for hauler') + + creep.createMoveRequest({ + origin: creep.pos, + goals: [ + { + pos: anchor, + range: 3, + }, + ], + avoidEnemyRanges: true, + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: Infinity, + [RoomTypes.allyRemote]: Infinity, + }, + }) + + return Result.action + } + + /** + * Run commune logistics, but only for creeps intended for commune logistics + */ + private static runRestrictedCommuneLogistics(creep: Creep) { + const creepMemory = Memory.creeps[creep.name] + // let it respond to its remote + if (Memory.creeps[creep.name][CreepMemoryKeys.remote]) return false + // We aren't in the commune + if (creep.room.name !== creep.commune.name) return false + + if (creep.commune.communeManager.hasSufficientRoads) { + // If we have a body not optimized for roads, try to respond to a remote instead + if (!creepMemory[CreepMemoryKeys.preferRoads]) return false + } + + // If there is no need for more commune haulers + if ( + creep.commune.communeManager.communeHaulerNeed < + creep.commune.communeManager.communeHaulerCarryParts + ) { + return false + } + + // success, we are working for the commune now + + if (!creepMemory[CreepMemoryKeys.taskRoom]) { + creepMemory[CreepMemoryKeys.taskRoom] = creep.room.name + creep.commune.communeManager.communeHaulerCarryParts += MyCreepUtils.parts(creep).carry + } + + this.runCommuneLogistics(creep) + return true + } + + private static runCommuneLogistics(creep: Creep) { + this.passiveRenew(creep) + + if (CreepProcs.runRoomLogisticsRequestsAdvanced(creep) === Result.action) { + this.relay(creep) + return Result.action + } + + return Result.success + } + + static isDying(creep: Creep) { + // Stop if creep is spawning + + if (creep.spawning) return false + /* + // If the creep's remaining ticks are more than the estimated spawn time, inform false + + if (creep.ticksToLive > creep.body.length * CREEP_SPAWN_TIME) return false + */ + const creepMemory = Memory.creeps[creep.name] + + if (creepMemory[CreepMemoryKeys.remote]) { + if (creepMemory[CreepMemoryKeys.sourceIndex] === undefined) + throw Error('has remote but no sourceIndex') + if ( + creep.ticksToLive > + creep.body.length * CREEP_SPAWN_TIME + + Memory.rooms[creepMemory[CreepMemoryKeys.remote]][ + creep.commune.communeManager.remoteResourcePathType + ][creepMemory[CreepMemoryKeys.sourceIndex]].length / + packedPosLength + ) { + return false + } + } + if (creep.ticksToLive > creep.body.length * CREEP_SPAWN_TIME) return false + + return true + } +} diff --git a/src/room/creeps/roles/haulerServices.ts b/src/room/creeps/roles/haulerServices.ts new file mode 100644 index 000000000..118e52a95 --- /dev/null +++ b/src/room/creeps/roles/haulerServices.ts @@ -0,0 +1,10 @@ +import { HaulerOps } from './haulerOps' + +export class HaulerServices { + static runCreeps(creepNames: string[]) { + for (const creepName of creepNames) { + const creep = Game.creeps[creepName] + HaulerOps.runCreep(creep) + } + } +} diff --git a/src/room/roomData.ts b/src/room/roomData.ts index 23c7dd648..6618498e5 100644 --- a/src/room/roomData.ts +++ b/src/room/roomData.ts @@ -1,5 +1,5 @@ import { Utils } from 'utils/utils' -import { CommuneDataProcs } from './commune/communeData' +import { CommuneDataOps } from './commune/communeData' export interface RoomData { sourceIDs: Id[] @@ -16,7 +16,7 @@ export const roomData: { [roomName: string]: Partial } = {} /** * Handles cached data for rooms, including some overlapping data for communes and remotes */ -export class RoomDataProcs { +export class RoomDataOps { static initRooms() { for (const roomName in Game.rooms) { const room = Game.rooms[roomName] @@ -29,7 +29,7 @@ export class RoomDataProcs { roomData[room.name] ??= {} if (room.controller && room.controller.my) { - CommuneDataProcs.initCommune(room) + CommuneDataOps.initCommune(room) } } diff --git a/src/room/roomUtils.ts b/src/room/roomUtils.ts index 8464d341c..71e9b7297 100644 --- a/src/room/roomUtils.ts +++ b/src/room/roomUtils.ts @@ -1,6 +1,6 @@ import { RoomMemoryKeys, RoomTypes, roomDimensions } from 'international/constants' import { packCoord, packXYAsCoord, unpackCoord } from 'other/codec' -import { RoomDataProcs, roomData } from './roomData' +import { RoomDataOps, roomData } from './roomData' import { findObjectWithID, forAdjacentCoords, Utils } from 'utils/utils' import { StructureUtils } from './structureUtils' import { StructureCoords } from './room' From 4318b82315d9fc9e2b30bfed8a37f3e1790074d5 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 30 Jan 2024 12:38:01 -0800 Subject: [PATCH 122/190] cached and uncached terrain binary options, optimize calls to them --- src/international/collective.ts | 24 --------------- src/international/flags/flags.ts | 4 +-- src/other/profilerRegister.ts | 4 +-- src/room/construction/communePlanner.ts | 3 +- src/room/remotePlanner.ts | 1 - src/room/room.ts | 5 ++-- src/room/roomData.ts | 6 ++++ src/room/roomFunctions.ts | 5 +--- src/room/roomNameUtils.ts | 6 ++-- src/room/roomProcs.ts | 39 +++++++++++++++++++++++-- src/room/roomServices.ts | 8 ++--- src/types.d.ts | 4 +-- 12 files changed, 62 insertions(+), 47 deletions(-) diff --git a/src/international/collective.ts b/src/international/collective.ts index 13db77318..ce66bec1c 100644 --- a/src/international/collective.ts +++ b/src/international/collective.ts @@ -50,10 +50,6 @@ export class CollectiveManager { * An intra-tick collection of commands we wish to issue */ static myCommands: any[] - /** - * Terrain binaries of wall or not wall for rooms - */ - static terrainBinaries: { [roomName: string]: Uint8Array } = {} static constructionSiteCount = 0 static creepCount: number static powerCreepCount: number @@ -177,26 +173,6 @@ export class CollectiveManager { Memory.minHaulerCostUpdate = Game.time } - /** - * Provides a cached binary of wall or not wall terrain - */ - static getTerrainBinary(roomName: string) { - if (this.terrainBinaries[roomName]) return this.terrainBinaries[roomName] - - this.terrainBinaries[roomName] = new Uint8Array(2500) - - const terrain = Game.map.getRoomTerrain(roomName) - - for (let x = 0; x < roomDimensions; x += 1) { - for (let y = 0; y < roomDimensions; y += 1) { - this.terrainBinaries[roomName][packXYAsNum(x, y)] = - terrain.get(x, y) === TERRAIN_MASK_WALL ? 255 : 0 - } - } - - return this.terrainBinaries[roomName] - } - static newTickID() { return (this.tickID += 1).toString() } diff --git a/src/international/flags/flags.ts b/src/international/flags/flags.ts index c332ed86a..b0cd9a6af 100644 --- a/src/international/flags/flags.ts +++ b/src/international/flags/flags.ts @@ -19,7 +19,7 @@ import { findObjectWithID, isAlly } from 'utils/utils' import { customLog } from 'utils/logging' import { RoomUtils } from 'room/roomUtils' import { SpawnRequestConstructorsByType } from 'room/commune/spawning/spawningStructureProcs' -import { RoomProcs } from 'room/roomProcs' +import { RoomOps } from 'room/roomProcs' export class FlagManager { run() { @@ -1046,7 +1046,7 @@ export class FlagManager { data.push(row) } - RoomProcs.tableVisual(room, 'Funneling', headers, data) + RoomOps.tableVisual(room, 'Funneling', headers, data) } } diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index 030545b22..108d0f804 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -101,7 +101,7 @@ import { SpawningStructureUtils } from 'room/commune/spawning/spawningStructureU import { NukerProcs } from 'room/commune/nukerProcs' import { ObserverProcs } from 'room/commune/observerProcs' import { PowerSpawnProcs } from 'room/commune/powerSpawnProcs' -import { RoomProcs } from 'room/roomProcs' +import { RoomOps } from 'room/roomProcs' import { RoomNameProcs } from 'room/roomNameProcs' import { SegmentsManager } from 'international/segments' import { wasm } from './wasmInit' @@ -175,7 +175,7 @@ export function profilerRegister() { profiler.registerClass(RoomNameUtils, 'RoomNameUtils') profiler.registerClass(RoomNameProcs, 'RoomNameProcs') profiler.registerClass(RoomUtils, 'RoomUtils') - profiler.registerClass(RoomProcs, 'RoomProcs') + profiler.registerClass(RoomOps, 'RoomProcs') profiler.registerClass(CommuneUtils, 'CommuneUtils') profiler.registerClass(RoomDataOps, 'RoomDataProcs') profiler.registerClass(CommuneDataOps, 'CommuneDataProcs') diff --git a/src/room/construction/communePlanner.ts b/src/room/construction/communePlanner.ts index 671231c85..efe4b4b9a 100644 --- a/src/room/construction/communePlanner.ts +++ b/src/room/construction/communePlanner.ts @@ -63,6 +63,7 @@ import { RampartPlans } from './rampartPlans' import { minCutToExit } from './minCut' import { CustomPathFinder } from 'international/customPathFinder' import { TowerUtils } from 'room/commune/towerUtils' +import { RoomOps } from 'room/roomProcs' const unprotectedCoordWeight = defaultRoadPlanningPlainCost * 16 const dynamicDistanceWeight = 8 @@ -425,7 +426,7 @@ export class CommunePlanner { this.planAttempts = [] this.findFastFillerStartCoords() - this.terrainCoords = CollectiveManager.getTerrainBinary(this.room.name) + this.terrainCoords = RoomOps.createTerrainBinary(this.room.name) } private findFastFillerStartCoords() { if (this.fastFillerStartCoords) return diff --git a/src/room/remotePlanner.ts b/src/room/remotePlanner.ts index 5c230073b..8a880fc57 100644 --- a/src/room/remotePlanner.ts +++ b/src/room/remotePlanner.ts @@ -292,7 +292,6 @@ export class RemotePlanner { // Initial configuration if (!this.terrainCoords) { - this.terrainCoords = CollectiveManager.getTerrainBinary(this.room.name) this.planAttempts = [] } diff --git a/src/room/room.ts b/src/room/room.ts index 7ef9fba69..ecca3e7be 100644 --- a/src/room/room.ts +++ b/src/room/room.ts @@ -67,6 +67,7 @@ import { StructureUtils } from './structureUtils' import { LogisticsProcs } from './logisticsProcs' import { CommuneProcs } from './commune/communeProcs' import { roomData } from './roomData' +import { RoomOps } from './roomProcs' export interface InterpretedRoomEvent { eventType: EventConstant @@ -1486,7 +1487,7 @@ export class RoomManager { if (this._quadCostMatrix) return this._quadCostMatrix const quadCostMatrix = new PathFinder.CostMatrix() - const terrainCoords = new Uint8Array(CollectiveManager.getTerrainBinary(this.room.name)) + const terrainCoords = new Uint8Array(RoomOps.getTerrainBinary(this.room.name)) const roadCoords = new Set() for (const road of this.structures.road) roadCoords.add(packCoord(road.pos)) @@ -1639,7 +1640,7 @@ export class RoomManager { if (this._quadBulldozeCostMatrix) return this._quadBulldozeCostMatrix const quadBulldozeCostMatrix = new PathFinder.CostMatrix() - const terrainCoords = new Uint8Array(CollectiveManager.getTerrainBinary(this.room.name)) + const terrainCoords = new Uint8Array(RoomOps.getTerrainBinary(this.room.name)) const roadCoords = new Set() for (const road of this.structures.road) roadCoords.add(packCoord(road.pos)) diff --git a/src/room/roomData.ts b/src/room/roomData.ts index 6618498e5..e3894e0b2 100644 --- a/src/room/roomData.ts +++ b/src/room/roomData.ts @@ -6,6 +6,7 @@ export interface RoomData { fastFillerContainerLeftId: Id | false fastFillerContainerRightId: Id | false fastFillerCoords: string[] + terrainBinary: Uint8Array } /** @@ -41,5 +42,10 @@ export class RoomDataOps { private static updateRoom(roomName: string) { const data = roomData[roomName] + + if (Utils.isTickInterval(100)) { + + delete data.terrainBinary + } } } diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index be26437f0..fe3305810 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -36,6 +36,7 @@ import { RoomNameUtils } from './roomNameUtils' import { customLog } from 'utils/logging' import { RoomObjectUtils } from './roomObjectUtils' import { RoomNameProcs } from './roomNameProcs' +import { RoomOps } from './roomProcs' /** @param pos1 pos of the object performing the action @@ -847,8 +848,6 @@ Room.prototype.distanceTransform = function ( const distanceCoords = new Uint8Array(2500) - if (!initialCoords) initialCoords = new Uint8Array(CollectiveManager.getTerrainBinary(this.name)) - let x let y let minX = Math.max(x1 - 1, 0) @@ -942,8 +941,6 @@ Room.prototype.diagonalDistanceTransform = function ( const distanceCoords = new Uint8Array(2500) - if (!initialCoords) initialCoords = new Uint8Array(CollectiveManager.getTerrainBinary(this.name)) - let x let y let packedCoord diff --git a/src/room/roomNameUtils.ts b/src/room/roomNameUtils.ts index ede9d2daf..491402408 100644 --- a/src/room/roomNameUtils.ts +++ b/src/room/roomNameUtils.ts @@ -25,7 +25,7 @@ import { import { unpackPosAt } from 'other/codec' import { CommuneManager } from './commune/commune' import { customLog } from 'utils/logging' -import { RoomProcs } from './roomProcs' +import { RoomOps } from './roomProcs' import { RoomNameProcs } from './roomNameProcs' import { RoomUtils } from './roomUtils' @@ -341,9 +341,9 @@ export class RoomNameUtils { static getStatusForPotentialMemory(roomName: string) { const roomMemory = Memory.rooms[roomName] if (roomMemory === undefined) { - const roomMemory = Memory.rooms[roomName] = {} as RoomMemory + const roomMemory = (Memory.rooms[roomName] = {} as RoomMemory) RoomNameUtils.basicScout(roomName) - + return roomMemory[RoomMemoryKeys.status] } diff --git a/src/room/roomProcs.ts b/src/room/roomProcs.ts index 6f982ee74..d234184b4 100644 --- a/src/room/roomProcs.ts +++ b/src/room/roomProcs.ts @@ -5,10 +5,11 @@ import { powerCreepClassNames, RoomLogisticsRequestTypes, RoomTypes, + roomDimensions, } from 'international/constants' import { StatsManager } from 'international/stats' import { Dashboard, Rectangle, Table } from 'screeps-viz' -import { randomTick } from 'utils/utils' +import { packXYAsNum, randomTick } from 'utils/utils' import { RoomNameUtils } from './roomNameUtils' import { CommuneManager } from './commune/commune' import { CommuneProcs } from './commune/communeProcs' @@ -17,8 +18,9 @@ import { customLog } from 'utils/logging' import { unpackCoord } from 'other/codec' import { HaulerServices } from './creeps/roles/haulerServices' import { HaulerOps } from './creeps/roles/haulerOps' +import { roomData } from './roomData' -export class RoomProcs { +export class RoomOps { static update(room: Room) { const roomManager = room.roomManager @@ -235,4 +237,37 @@ export class RoomProcs { ], }) } + + /** + * Creates a new terrain binary: 0 = not wall, 255 = wall. + * Callers of this function are responsible for caching the data themselves (or not, if preferred). + */ + static createTerrainBinary(roomName: string) { + const terrainBinary = new Uint8Array(2500) + + const terrain = Game.map.getRoomTerrain(roomName) + + for (let x = 0; x < roomDimensions; x += 1) { + for (let y = 0; y < roomDimensions; y += 1) { + terrainBinary[packXYAsNum(x, y)] = terrain.get(x, y) === TERRAIN_MASK_WALL ? 255 : 0 + } + } + + return terrainBinary + } + + /** + * A temporaly-discrete cached terrain binary. 0 = not wall, 255 = wall + */ + static getTerrainBinary(roomName: string) { + const data = roomData[roomName] + if (data.terrainBinary !== undefined) { + return data.terrainBinary + } + + const terrainBinary = this.createTerrainBinary(roomName) + + data.terrainBinary = terrainBinary + return terrainBinary + } } diff --git a/src/room/roomServices.ts b/src/room/roomServices.ts index 9a80a6628..05bf0136c 100644 --- a/src/room/roomServices.ts +++ b/src/room/roomServices.ts @@ -20,7 +20,7 @@ import './creeps/endTickCreepManager' import { CommuneManager } from './commune/commune' import { RoomManager } from './room' import { LogTypes, customLog } from 'utils/logging' -import { RoomProcs } from './roomProcs' +import { RoomOps } from './roomProcs' export class RoomServices { static updateRun() { @@ -34,7 +34,7 @@ export class RoomServices { RoomManager.roomManagers[room.name] = room.roomManager } - RoomProcs.update(room) + RoomOps.update(room) } } @@ -42,7 +42,7 @@ export class RoomServices { for (const roomName in Game.rooms) { const room = Game.rooms[roomName] - RoomProcs.initRun(room) + RoomOps.initRun(room) } } @@ -56,7 +56,7 @@ export class RoomServices { const startCPU = Game.cpu.getUsed() const room = Game.rooms[roomName] - RoomProcs.run(room) + RoomOps.run(room) // Log room stats diff --git a/src/types.d.ts b/src/types.d.ts index c33b42839..ced97fa4d 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -574,7 +574,7 @@ declare global { * Finds open spaces in a room and records them in a cost matrix */ distanceTransform( - initialCoords?: CoordMap, + initialCoords: CoordMap, visuals?: boolean, /** * The smallest number to convert into an avoid value @@ -590,7 +590,7 @@ declare global { * Finds open spaces in a room without adding depth to diagonals, and records the depth results in a cost matrix */ diagonalDistanceTransform( - initialCoords?: CoordMap, + initialCoords: CoordMap, visuals?: boolean, /** * The smallest number to convert into an avoid value From f8cc547e9eb940b40a32d015ceb2ac2ef6402b30 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 30 Jan 2024 12:40:08 -0800 Subject: [PATCH 123/190] Correctly rename RoomProcs file -> RoomOps --- src/room/{roomProcs.ts => RoomOps.ts} | 0 src/room/room.ts | 2 +- src/room/roomFunctions.ts | 2 +- src/room/roomNameUtils.ts | 2 +- src/room/roomServices.ts | 2 +- 5 files changed, 4 insertions(+), 4 deletions(-) rename src/room/{roomProcs.ts => RoomOps.ts} (100%) diff --git a/src/room/roomProcs.ts b/src/room/RoomOps.ts similarity index 100% rename from src/room/roomProcs.ts rename to src/room/RoomOps.ts diff --git a/src/room/room.ts b/src/room/room.ts index ecca3e7be..116dc4a0e 100644 --- a/src/room/room.ts +++ b/src/room/room.ts @@ -67,7 +67,7 @@ import { StructureUtils } from './structureUtils' import { LogisticsProcs } from './logisticsProcs' import { CommuneProcs } from './commune/communeProcs' import { roomData } from './roomData' -import { RoomOps } from './roomProcs' +import { RoomOps } from './RoomOps' export interface InterpretedRoomEvent { eventType: EventConstant diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index fe3305810..7ae61021c 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -36,7 +36,7 @@ import { RoomNameUtils } from './roomNameUtils' import { customLog } from 'utils/logging' import { RoomObjectUtils } from './roomObjectUtils' import { RoomNameProcs } from './roomNameProcs' -import { RoomOps } from './roomProcs' +import { RoomOps } from './RoomOps' /** @param pos1 pos of the object performing the action diff --git a/src/room/roomNameUtils.ts b/src/room/roomNameUtils.ts index 491402408..1a748db27 100644 --- a/src/room/roomNameUtils.ts +++ b/src/room/roomNameUtils.ts @@ -25,7 +25,7 @@ import { import { unpackPosAt } from 'other/codec' import { CommuneManager } from './commune/commune' import { customLog } from 'utils/logging' -import { RoomOps } from './roomProcs' +import { RoomOps } from './RoomOps' import { RoomNameProcs } from './roomNameProcs' import { RoomUtils } from './roomUtils' diff --git a/src/room/roomServices.ts b/src/room/roomServices.ts index 05bf0136c..ec8a9cae9 100644 --- a/src/room/roomServices.ts +++ b/src/room/roomServices.ts @@ -20,7 +20,7 @@ import './creeps/endTickCreepManager' import { CommuneManager } from './commune/commune' import { RoomManager } from './room' import { LogTypes, customLog } from 'utils/logging' -import { RoomOps } from './roomProcs' +import { RoomOps } from './RoomOps' export class RoomServices { static updateRun() { From e98308419553415e4dcf3ec4802222d899a9137d Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 30 Jan 2024 12:41:54 -0800 Subject: [PATCH 124/190] Fix roomOps file name --- src/international/flags/flags.ts | 2 +- src/other/profilerRegister.ts | 2 +- src/room/construction/communePlanner.ts | 2 +- src/room/room.ts | 2 +- src/room/roomFunctions.ts | 2 +- src/room/roomNameUtils.ts | 2 +- src/room/{RoomOps.ts => roomOps.ts} | 5 +++++ src/room/roomServices.ts | 2 +- 8 files changed, 12 insertions(+), 7 deletions(-) rename src/room/{RoomOps.ts => roomOps.ts} (99%) diff --git a/src/international/flags/flags.ts b/src/international/flags/flags.ts index b0cd9a6af..dace521a9 100644 --- a/src/international/flags/flags.ts +++ b/src/international/flags/flags.ts @@ -19,7 +19,7 @@ import { findObjectWithID, isAlly } from 'utils/utils' import { customLog } from 'utils/logging' import { RoomUtils } from 'room/roomUtils' import { SpawnRequestConstructorsByType } from 'room/commune/spawning/spawningStructureProcs' -import { RoomOps } from 'room/roomProcs' +import { RoomOps } from 'room/roomOps' export class FlagManager { run() { diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index 108d0f804..de5dd464d 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -101,7 +101,7 @@ import { SpawningStructureUtils } from 'room/commune/spawning/spawningStructureU import { NukerProcs } from 'room/commune/nukerProcs' import { ObserverProcs } from 'room/commune/observerProcs' import { PowerSpawnProcs } from 'room/commune/powerSpawnProcs' -import { RoomOps } from 'room/roomProcs' +import { RoomOps } from 'room/roomOps' import { RoomNameProcs } from 'room/roomNameProcs' import { SegmentsManager } from 'international/segments' import { wasm } from './wasmInit' diff --git a/src/room/construction/communePlanner.ts b/src/room/construction/communePlanner.ts index efe4b4b9a..6e710ce3a 100644 --- a/src/room/construction/communePlanner.ts +++ b/src/room/construction/communePlanner.ts @@ -63,7 +63,7 @@ import { RampartPlans } from './rampartPlans' import { minCutToExit } from './minCut' import { CustomPathFinder } from 'international/customPathFinder' import { TowerUtils } from 'room/commune/towerUtils' -import { RoomOps } from 'room/roomProcs' +import { RoomOps } from 'room/roomOps' const unprotectedCoordWeight = defaultRoadPlanningPlainCost * 16 const dynamicDistanceWeight = 8 diff --git a/src/room/room.ts b/src/room/room.ts index 116dc4a0e..44d06e7d9 100644 --- a/src/room/room.ts +++ b/src/room/room.ts @@ -67,7 +67,7 @@ import { StructureUtils } from './structureUtils' import { LogisticsProcs } from './logisticsProcs' import { CommuneProcs } from './commune/communeProcs' import { roomData } from './roomData' -import { RoomOps } from './RoomOps' +import { RoomOps } from './roomOps' export interface InterpretedRoomEvent { eventType: EventConstant diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index 7ae61021c..d90702166 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -36,7 +36,7 @@ import { RoomNameUtils } from './roomNameUtils' import { customLog } from 'utils/logging' import { RoomObjectUtils } from './roomObjectUtils' import { RoomNameProcs } from './roomNameProcs' -import { RoomOps } from './RoomOps' +import { RoomOps } from './roomOps' /** @param pos1 pos of the object performing the action diff --git a/src/room/roomNameUtils.ts b/src/room/roomNameUtils.ts index 1a748db27..b0ca68548 100644 --- a/src/room/roomNameUtils.ts +++ b/src/room/roomNameUtils.ts @@ -25,7 +25,7 @@ import { import { unpackPosAt } from 'other/codec' import { CommuneManager } from './commune/commune' import { customLog } from 'utils/logging' -import { RoomOps } from './RoomOps' +import { RoomOps } from './roomOps' import { RoomNameProcs } from './roomNameProcs' import { RoomUtils } from './roomUtils' diff --git a/src/room/RoomOps.ts b/src/room/roomOps.ts similarity index 99% rename from src/room/RoomOps.ts rename to src/room/roomOps.ts index d234184b4..43fde4017 100644 --- a/src/room/RoomOps.ts +++ b/src/room/roomOps.ts @@ -270,4 +270,9 @@ export class RoomOps { data.terrainBinary = terrainBinary return terrainBinary } + + static getStructures(room: Room) { + + + } } diff --git a/src/room/roomServices.ts b/src/room/roomServices.ts index ec8a9cae9..35887d2f7 100644 --- a/src/room/roomServices.ts +++ b/src/room/roomServices.ts @@ -20,7 +20,7 @@ import './creeps/endTickCreepManager' import { CommuneManager } from './commune/commune' import { RoomManager } from './room' import { LogTypes, customLog } from 'utils/logging' -import { RoomOps } from './RoomOps' +import { RoomOps } from './roomOps' export class RoomServices { static updateRun() { From 87916e5f0be61a1757133d5b963e88492b4ddcc3 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 30 Jan 2024 13:09:13 -0800 Subject: [PATCH 125/190] +getStructures --- src/room/roomOps.ts | 15 ++++++++++++++- src/types.d.ts | 2 ++ src/types/structures.ts | 3 +++ 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 src/types/structures.ts diff --git a/src/room/roomOps.ts b/src/room/roomOps.ts index 43fde4017..1c559c7db 100644 --- a/src/room/roomOps.ts +++ b/src/room/roomOps.ts @@ -6,6 +6,7 @@ import { RoomLogisticsRequestTypes, RoomTypes, roomDimensions, + allStructureTypes, } from 'international/constants' import { StatsManager } from 'international/stats' import { Dashboard, Rectangle, Table } from 'screeps-viz' @@ -272,7 +273,19 @@ export class RoomOps { } static getStructures(room: Room) { + if (room.structures !== undefined) { + return room.structures + } + + const structures: OrganizedStructures = {} as OrganizedStructures + for (const structureType of allStructureTypes) structures[structureType] = [] + + const unorganizedStructures = room.find(FIND_STRUCTURES) + for (const structure of unorganizedStructures) { + structures[structure.structureType].push(structure as any) + } - + room.structures = structures + return structures } } diff --git a/src/types.d.ts b/src/types.d.ts index ced97fa4d..57664a39f 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -523,6 +523,8 @@ declare global { storingStructuresCapacity: number storingStructures: (StructureStorage | StructureTerminal)[] + structures: OrganizedStructures + // Commune // Functions diff --git a/src/types/structures.ts b/src/types/structures.ts new file mode 100644 index 000000000..26080c0e7 --- /dev/null +++ b/src/types/structures.ts @@ -0,0 +1,3 @@ +export interface OrganizedStructures { + +} From 31de79380635dbc11f532e476000607d04d8fe98 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 30 Jan 2024 13:28:57 -0800 Subject: [PATCH 126/190] patch easy to patch holes in RoomMamanger, CommuneManager --- src/main.ts | 1 + src/room/commune/communeProcs.ts | 17 +++++----- src/room/roomOps.ts | 55 ++++++++++++++++++++++++++++++++ src/room/roomServices.ts | 16 ++++++++++ 4 files changed, 81 insertions(+), 8 deletions(-) diff --git a/src/main.ts b/src/main.ts index 7320ec3ed..eefc588ae 100644 --- a/src/main.ts +++ b/src/main.ts @@ -63,6 +63,7 @@ export function originalLoop() { simpleAllies.initRun() wasm.collaborator() + RoomServices.cleanManagers() RoomDataOps.initRooms() RoomDataOps.updateRooms() RoomServices.updateRun() diff --git a/src/room/commune/communeProcs.ts b/src/room/commune/communeProcs.ts index d90c05e85..eca83a4c1 100644 --- a/src/room/commune/communeProcs.ts +++ b/src/room/commune/communeProcs.ts @@ -22,19 +22,13 @@ import { PowerSpawnProcs } from './powerSpawnProcs' import { SpawningStructureProcs } from './spawning/spawningStructureProcs' import { TowerProcs } from './towerProcs' import { HaulerNeedOps } from './haulerNeedOps' +import { CommuneManager } from './commune' /** * Minor processes for communes */ export class CommuneProcs { - static update(room: Room) { - const communeManager = room.communeManager - communeManager.room = room - - // non manager - - // - + static clean(communeManager: CommuneManager) { delete communeManager._maxCombatRequests delete communeManager._defensiveRamparts delete communeManager._sourceLinks @@ -53,6 +47,13 @@ export class CommuneProcs { delete communeManager._upgradeStructure delete communeManager._hasSufficientRoads } + } + + static update(room: Room) { + const communeManager = room.communeManager + communeManager.room = room + + // non manager const roomMemory = Memory.rooms[room.name] diff --git a/src/room/roomOps.ts b/src/room/roomOps.ts index 1c559c7db..c4a398f53 100644 --- a/src/room/roomOps.ts +++ b/src/room/roomOps.ts @@ -20,8 +20,63 @@ import { unpackCoord } from 'other/codec' import { HaulerServices } from './creeps/roles/haulerServices' import { HaulerOps } from './creeps/roles/haulerOps' import { roomData } from './roomData' +import { RoomManager } from './room' export class RoomOps { + + /** + * Not perfect, but should help reduce heap usage until RoomManagers are deprecated. + */ + static clean(roomManager: RoomManager) { + delete roomManager._structureUpdate + delete roomManager.checkedCSiteUpdate + delete roomManager._communeSources + delete roomManager._remoteSources + delete roomManager._mineral + delete roomManager.checkedCSiteUpdate + delete roomManager._structures + delete roomManager._cSites + delete roomManager._notMyCreeps + delete roomManager._enemyAttackers + delete roomManager._myDamagedCreeps + delete roomManager._myDamagedPowerCreeps + delete roomManager._allyDamagedCreeps + roomManager._enemyCreepPositions = undefined + delete roomManager._notMyConstructionSites + delete roomManager._allyConstructionSitesByType + delete roomManager._dismantleTargets + delete roomManager._destructibleStructures + delete roomManager._combatStructureTargets + delete roomManager._remoteNamesByEfficacy + delete roomManager._remoteSourceIndexesByEfficacy + + roomManager._sourceContainers = undefined + roomManager._fastFillerContainers = undefined + roomManager._controllerContainer = undefined + roomManager._mineralContainer = undefined + roomManager._fastFillerLink = undefined + roomManager._hubLink = undefined + roomManager._droppedEnergy = undefined + roomManager._droppedResources = undefined + roomManager._actionableWalls = undefined + roomManager._quadCostMatrix = undefined + roomManager._quadBulldozeCostMatrix = undefined + roomManager._enemyDamageThreat = undefined + roomManager._enemyThreatCoords = undefined + roomManager._enemyThreatGoals = undefined + /* this._flags = undefined */ + roomManager._resourcesInStoringStructures = undefined + roomManager._unprotectedEnemyCreeps = undefined + roomManager._exitCoords = undefined + roomManager._advancedLogistics = undefined + roomManager._defaultCostMatrix = undefined + roomManager._totalEnemyCombatStrength = undefined + roomManager._factory = undefined + roomManager._powerSpawn = undefined + roomManager._nuker = undefined + roomManager._observer = undefined + } + static update(room: Room) { const roomManager = room.roomManager diff --git a/src/room/roomServices.ts b/src/room/roomServices.ts index 35887d2f7..f9c1af328 100644 --- a/src/room/roomServices.ts +++ b/src/room/roomServices.ts @@ -21,8 +21,24 @@ import { CommuneManager } from './commune/commune' import { RoomManager } from './room' import { LogTypes, customLog } from 'utils/logging' import { RoomOps } from './roomOps' +import { CommuneProcs } from './commune/communeProcs' export class RoomServices { + static cleanManagers() { + + for (const roomName in RoomManager.roomManagers) { + + const roomManager = RoomManager.roomManagers[roomName] + RoomOps.clean(roomManager) + } + + for (const roomName in CommuneManager.communeManagers) { + + const communeManager = CommuneManager.communeManagers[roomName] + CommuneProcs.clean(communeManager) + } + } + static updateRun() { for (const roomName in Game.rooms) { const room = Game.rooms[roomName] From a94d99e62f573506ae853a6526430ee313a5179a Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 30 Jan 2024 13:31:53 -0800 Subject: [PATCH 127/190] deletion of roomData, communeData object on largest deletion interval --- src/room/commune/communeData.ts | 1 + src/room/roomData.ts | 1 + src/room/roomOps.ts | 48 --------------------------------- 3 files changed, 2 insertions(+), 48 deletions(-) diff --git a/src/room/commune/communeData.ts b/src/room/commune/communeData.ts index 3aec9e5df..67c960218 100644 --- a/src/room/commune/communeData.ts +++ b/src/room/commune/communeData.ts @@ -53,6 +53,7 @@ export class CommuneDataOps { if (Utils.isTickInterval(100)) { delete data.resourceTargets + delete communeData[roomName] } } } diff --git a/src/room/roomData.ts b/src/room/roomData.ts index e3894e0b2..d830ac62e 100644 --- a/src/room/roomData.ts +++ b/src/room/roomData.ts @@ -46,6 +46,7 @@ export class RoomDataOps { if (Utils.isTickInterval(100)) { delete data.terrainBinary + delete roomData[roomName] } } } diff --git a/src/room/roomOps.ts b/src/room/roomOps.ts index c4a398f53..c117eba1c 100644 --- a/src/room/roomOps.ts +++ b/src/room/roomOps.ts @@ -80,54 +80,6 @@ export class RoomOps { static update(room: Room) { const roomManager = room.roomManager - delete roomManager._structureUpdate - delete roomManager.checkedCSiteUpdate - delete roomManager._communeSources - delete roomManager._remoteSources - delete roomManager._mineral - delete roomManager.checkedCSiteUpdate - delete roomManager._structures - delete roomManager._cSites - delete roomManager._notMyCreeps - delete roomManager._enemyAttackers - delete roomManager._myDamagedCreeps - delete roomManager._myDamagedPowerCreeps - delete roomManager._allyDamagedCreeps - roomManager._enemyCreepPositions = undefined - delete roomManager._notMyConstructionSites - delete roomManager._allyConstructionSitesByType - delete roomManager._dismantleTargets - delete roomManager._destructibleStructures - delete roomManager._combatStructureTargets - delete roomManager._remoteNamesByEfficacy - delete roomManager._remoteSourceIndexesByEfficacy - - roomManager._sourceContainers = undefined - roomManager._fastFillerContainers = undefined - roomManager._controllerContainer = undefined - roomManager._mineralContainer = undefined - roomManager._fastFillerLink = undefined - roomManager._hubLink = undefined - roomManager._droppedEnergy = undefined - roomManager._droppedResources = undefined - roomManager._actionableWalls = undefined - roomManager._quadCostMatrix = undefined - roomManager._quadBulldozeCostMatrix = undefined - roomManager._enemyDamageThreat = undefined - roomManager._enemyThreatCoords = undefined - roomManager._enemyThreatGoals = undefined - /* this._flags = undefined */ - roomManager._resourcesInStoringStructures = undefined - roomManager._unprotectedEnemyCreeps = undefined - roomManager._exitCoords = undefined - roomManager._advancedLogistics = undefined - roomManager._defaultCostMatrix = undefined - roomManager._totalEnemyCombatStrength = undefined - roomManager._factory = undefined - roomManager._powerSpawn = undefined - roomManager._nuker = undefined - roomManager._observer = undefined - if (randomTick()) { delete roomManager._nukeTargetCoords roomManager.roomLogisticsBlacklistCoords = new Set() From 98e94bbbd5f27f776011b8664dc3c4ebd8750a00 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 30 Jan 2024 13:35:46 -0800 Subject: [PATCH 128/190] remove deprecated freeSpecificStore --- src/room/creeps/roleManagers/commune/hubHauler.ts | 8 ++++---- src/room/roomObjectFunctions.ts | 8 -------- src/types.d.ts | 6 ------ 3 files changed, 4 insertions(+), 18 deletions(-) delete mode 100644 src/room/roomObjectFunctions.ts diff --git a/src/room/creeps/roleManagers/commune/hubHauler.ts b/src/room/creeps/roleManagers/commune/hubHauler.ts index d57308852..2ff3c1d44 100644 --- a/src/room/creeps/roleManagers/commune/hubHauler.ts +++ b/src/room/creeps/roleManagers/commune/hubHauler.ts @@ -570,7 +570,7 @@ export class HubHauler extends Creep { ) return false - const amount = Math.min(this.freeNextStore, powerSpawn.freeSpecificStore(resource)) + const amount = Math.min(this.freeNextStore, powerSpawn.store.getFreeCapacity(resource)) // Find a provider @@ -590,7 +590,7 @@ export class HubHauler extends Creep { this, RoomLogisticsRequestTypes.transfer, powerSpawn.id, - Math.min(this.freeNextStore + this.store[resource], powerSpawn.freeSpecificStore(resource)), + Math.min(this.freeNextStore + this.store[resource], powerSpawn.store.getFreeCapacity(resource)), resource, ) return true @@ -620,7 +620,7 @@ export class HubHauler extends Creep { ) return false - const amount = Math.min(this.freeNextStore, powerSpawn.freeSpecificStore(resource)) + const amount = Math.min(this.freeNextStore, powerSpawn.store.getFreeCapacity(resource)) // Find a provider @@ -640,7 +640,7 @@ export class HubHauler extends Creep { this, RoomLogisticsRequestTypes.transfer, powerSpawn.id, - Math.min(this.freeNextStore + this.store[resource], powerSpawn.freeSpecificStore(resource)), + Math.min(this.freeNextStore + this.store[resource], powerSpawn.store.getFreeCapacity(resource)), resource, ) return true diff --git a/src/room/roomObjectFunctions.ts b/src/room/roomObjectFunctions.ts deleted file mode 100644 index fa17244cb..000000000 --- a/src/room/roomObjectFunctions.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { separateStoreStructureTypes } from "international/constants" - -RoomObject.prototype.freeSpecificStore = function ( - this: RoomObject & { store?: StoreDefinition }, - resourceType = RESOURCE_ENERGY, -) { - return this.store.getCapacity(resourceType) - this.store[resourceType] -} diff --git a/src/types.d.ts b/src/types.d.ts index 57664a39f..b09b8f9dd 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -1066,12 +1066,6 @@ declare global { interface RoomObject { // Functions - /** - * Finds the total free store capacity of a specific resource for this RoomObject - * @deprecated either create a util without a prototype or use your brain to do the math yourself - */ - freeSpecificStore(resourceType?: ResourceConstant): number - // RoomObject getters _effectsData: Map From b25b95496226e03a306d1e8b7658bba222af0a08 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 30 Jan 2024 13:46:41 -0800 Subject: [PATCH 129/190] delete deprecated roomVisuals, mapVisuals settings --- src/international/constants.ts | 1 + src/international/mapVisuals.ts | 12 +- .../spawning/spawningStructureProcs.ts | 5 +- .../creepPrototypes/creepMoveFunctions.ts | 405 +++++++++--------- src/room/creeps/roleManagers/antifa/antifa.ts | 71 +-- src/room/creeps/roleManagers/antifa/duo.ts | 72 ++-- src/room/creeps/roleManagers/antifa/quad.ts | 7 +- .../commune/defenders/meleeDefender.ts | 21 +- .../creeps/roleManagers/commune/hauler.ts | 2 +- src/room/creeps/roles/haulerOps.ts | 2 +- src/room/roomFunctions.ts | 6 +- src/room/roomVisuals.ts | 3 +- src/settingsDefault.ts | 2 - src/types/settings.ts | 9 - src/utils/utils.ts | 4 +- 15 files changed, 314 insertions(+), 308 deletions(-) diff --git a/src/international/constants.ts b/src/international/constants.ts index 43c9ebcc6..0bba4d00a 100644 --- a/src/international/constants.ts +++ b/src/international/constants.ts @@ -1483,6 +1483,7 @@ export enum FlagNames { debugCreepLogistics = 'debugCreepLogistics', debugSpawning = 'debugSpawning', mapVisuals = 'mapVisuals', + roomVisuals = 'roomVisuals', deactivate = 'deactiveate', } diff --git a/src/international/mapVisuals.ts b/src/international/mapVisuals.ts index cb327e09a..7a3d7ba4f 100644 --- a/src/international/mapVisuals.ts +++ b/src/international/mapVisuals.ts @@ -16,7 +16,7 @@ import { CommuneUtils } from 'room/commune/communeUtils' */ export class MapVisualsManager { static run() { - if (!global.settings.mapVisuals && !Game.flags[FlagNames.mapVisuals]) return + if (!Game.flags[FlagNames.mapVisuals]) return for (const roomName in Memory.rooms) { const roomMemory = Memory.rooms[roomName] @@ -24,6 +24,10 @@ export class MapVisualsManager { const type = roomMemory[RoomMemoryKeys.type] if (!type) continue + if (roomMemory[RoomMemoryKeys.type] === RoomTypes.commune) { + this.visualizeCommune(roomName, roomMemory) + } + // Room type Game.map.visual.text( @@ -197,6 +201,12 @@ export class MapVisualsManager { this.workRequests() } + + private static visualizeCommune(roomName: string, roomMemory: RoomMemory) { + + + } + private static workRequests() { for (const roomName in Memory.workRequests) { const priority = Memory.workRequests[roomName][WorkRequestKeys.priority] diff --git a/src/room/commune/spawning/spawningStructureProcs.ts b/src/room/commune/spawning/spawningStructureProcs.ts index ff3e469f1..84ed4562c 100644 --- a/src/room/commune/spawning/spawningStructureProcs.ts +++ b/src/room/commune/spawning/spawningStructureProcs.ts @@ -10,6 +10,7 @@ import { customColors, MovedTypes, RoomStatsKeys, + FlagNames, } from 'international/constants' import { StatsManager } from 'international/stats' import { unpackPosAt, packCoord, unpackCoord } from 'other/codec' @@ -378,7 +379,7 @@ export class SpawningStructureProcs { creep.moved = creep.moveRequest delete room.moveRequests[creep.moveRequest] - if (global.settings.roomVisuals) { + if (Game.flags[FlagNames.roomVisuals]) { const moved = unpackCoord(creep.moved) room.visual.rect(moved.x - 0.5, moved.y - 0.5, 1, 1, { @@ -395,7 +396,7 @@ export class SpawningStructureProcs { const creepAtPos = Game.creeps[creepNameAtPos] || Game.powerCreeps[creepNameAtPos] const packedCoord = packCoord(creep.pos) - if (global.settings.roomVisuals) { + if (Game.flags[FlagNames.roomVisuals]) { const moved = unpackCoord(creep.moveRequest) room.visual.rect(moved.x - 0.5, moved.y - 0.5, 1, 1, { diff --git a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts index b032e37a4..cf7c02ff7 100644 --- a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts @@ -5,7 +5,8 @@ import { CreepMemoryKeys, Result, communeCreepRoles, ReservedCoordTypes, - MovedTypes + MovedTypes, + FlagNames } from 'international/constants' import { CollectiveManager } from 'international/collective' import { @@ -218,7 +219,8 @@ PowerCreep.prototype.findShoveCoord = Creep.prototype.findShoveCoord = function // Score based on value of reservation if (reservationType !== undefined) score += reservationType * 2 - if (global.settings.roomVisuals) this.room.visual.text(score.toString(), coord.x, coord.y) + if (Game.flags[FlagNames.roomVisuals]) + this.room.visual.text(score.toString(), coord.x, coord.y) // Preference for lower-scoring coords if (score >= lowestScore) return @@ -286,28 +288,28 @@ PowerCreep.prototype.shove = Creep.prototype.shove = function (avoidPackedCoords this.assignMoveRequest(shoveCoord) - if (global.settings.roomVisuals) - room.visual.circle(this.pos, { - fill: '', - stroke: customColors.red, - radius: 0.5, - strokeWidth: 0.15, - }) + if (Game.flags[FlagNames.roomVisuals]) + room.visual.circle(this.pos, { + fill: '', + stroke: customColors.red, + radius: 0.5, + strokeWidth: 0.15, + }) if (!this.moveRequest) return false - if (global.settings.roomVisuals) { - room.visual.circle(this.pos, { - fill: '', - stroke: customColors.yellow, - radius: 0.5, - strokeWidth: 0.15, - opacity: 0.3, - }) - - room.visual.line(this.pos, unpackCoordAsPos(this.moveRequest, this.room.name), { - color: customColors.yellow, - }) + if (Game.flags[FlagNames.roomVisuals]) { + room.visual.circle(this.pos, { + fill: '', + stroke: customColors.yellow, + radius: 0.5, + strokeWidth: 0.15, + opacity: 0.3, + }) + + room.visual.line(this.pos, unpackCoordAsPos(this.moveRequest, this.room.name), { + color: customColors.yellow, + }) } this.runMoveRequest() @@ -331,11 +333,11 @@ PowerCreep.prototype.runMoveRequest = Creep.prototype.runMoveRequest = function this.room.roomManager.runMoveRequestOrder += 1 - if (global.settings.roomVisuals) - room.visual.rect(this.pos.x - 0.5, this.pos.y - 0.5, 1, 1, { - fill: customColors.lightBlue, - opacity: 0.2, - }) + if (Game.flags[FlagNames.roomVisuals]) + room.visual.rect(this.pos.x - 0.5, this.pos.y - 0.5, 1, 1, { + fill: customColors.lightBlue, + opacity: 0.2, + }) // Record where the creep is tying to move @@ -381,11 +383,11 @@ PowerCreep.prototype.recurseMoveRequest = Creep.prototype.recurseMoveRequest = f // If there is no creep at the pos if (!creepNameAtPos) { - /* if (this.spawning) { + /* if (this.spawning) { this.moved = this.moveRequest delete room.moveRequests[this.moveRequest] - if (global.settings.roomVisuals) { + if (Game.flags[FlagNames.roomVisuals]) { const moved = unpackCoord(this.moved) room.visual.rect(moved.x - 0.5, moved.y - 0.5, 1, 1, { @@ -396,33 +398,33 @@ PowerCreep.prototype.recurseMoveRequest = Creep.prototype.recurseMoveRequest = f return } */ - // loop through each index of the queue, drawing visuals + // loop through each index of the queue, drawing visuals - if (global.settings.roomVisuals) { - const moveRequestPos = unpackCoordAsPos(this.moveRequest, room.name) + if (Game.flags[FlagNames.roomVisuals]) { + const moveRequestPos = unpackCoordAsPos(this.moveRequest, room.name) - room.visual.rect(moveRequestPos.x - 0.5, moveRequestPos.y - 0.5, 1, 1, { - fill: customColors.green, - opacity: 0.2, - }) + room.visual.rect(moveRequestPos.x - 0.5, moveRequestPos.y - 0.5, 1, 1, { + fill: customColors.green, + opacity: 0.2, + }) - for (let index = queue.length - 1; index >= 0; index--) { - const creep = Game.creeps[queue[index]] || Game.powerCreeps[queue[index]] + for (let index = queue.length - 1; index >= 0; index--) { + const creep = Game.creeps[queue[index]] || Game.powerCreeps[queue[index]] - room.visual.rect(creep.pos.x - 0.5, creep.pos.y - 0.5, 1, 1, { - fill: customColors.yellow, - opacity: 0.2, - }) - } + room.visual.rect(creep.pos.x - 0.5, creep.pos.y - 0.5, 1, 1, { + fill: customColors.yellow, + opacity: 0.2, + }) } + } - // Have each member of the queue run its moveRequest + // Have each member of the queue run its moveRequest - for (let index = queue.length - 1; index >= 0; index--) { - ;(Game.creeps[queue[index]] || Game.powerCreeps[queue[index]]).runMoveRequest() - } + for (let index = queue.length - 1; index >= 0; index--) { + ;(Game.creeps[queue[index]] || Game.powerCreeps[queue[index]]).runMoveRequest() + } - return + return } const packedCoord = packCoord(this.pos) @@ -432,17 +434,17 @@ PowerCreep.prototype.recurseMoveRequest = Creep.prototype.recurseMoveRequest = f // if creepAtPos is fatigued it is useless to us if ((creepAtPos as Creep).fatigue > 0) { - this.moved = MovedTypes.wait + this.moved = MovedTypes.wait - /* delete room.moveRequests[this.moved] */ - delete this.moveRequest - return + /* delete room.moveRequests[this.moved] */ + delete this.moveRequest + return } /* // We're spawning, just get us space to move into if (this.spawning) { - if (global.settings.roomVisuals) { + if (Game.flags[FlagNames.roomVisuals]) { const moved = unpackCoord(this.moveRequest) room.visual.rect(moved.x - 0.5, moved.y - 0.5, 1, 1, { @@ -463,61 +465,60 @@ PowerCreep.prototype.recurseMoveRequest = Creep.prototype.recurseMoveRequest = f } */ if (creepAtPos.moved) { - // might not be what we want. uncomment if (more) stuck bugs appear - /* if (creepAtPos.moved === 'moved') { + // might not be what we want. uncomment if (more) stuck bugs appear + /* if (creepAtPos.moved === 'moved') { delete this.moveRequest this.moved = 'moved' return } */ - if (creepAtPos.moved === MovedTypes.moved) { - this.runMoveRequest() - return + if (creepAtPos.moved === MovedTypes.moved) { + this.runMoveRequest() + return + } + + if (creepAtPos.moved === MovedTypes.wait) { + if (creepAtPos instanceof PowerCreep) { + delete this.moveRequest + this.moved = MovedTypes.wait + return } - if (creepAtPos.moved === MovedTypes.wait) { - if (creepAtPos instanceof PowerCreep) { - delete this.moveRequest - this.moved = MovedTypes.wait - return - } + // Don't allow swapping in the queue if we might move a creep out of the commune + // Will trade if: + // remotes are different + // sourceIndexes are different + // Traffic priorities are by default different + // One is around empty while the other is around full - // Don't allow swapping in the queue if we might move a creep out of the commune - // Will trade if: - // remotes are different - // sourceIndexes are different - // Traffic priorities are by default different - // One is around empty while the other is around full - - if ( - (!this.isOnExit || !communeCreepRoles.has(creepAtPos.role)) && - (this.memory[CreepMemoryKeys.remote] !== - creepAtPos.memory[CreepMemoryKeys.remote] || - this.memory[CreepMemoryKeys.sourceIndex] !== - creepAtPos.memory[CreepMemoryKeys.sourceIndex] || - TrafficPriorities[this.role] + (this.needsResources() ? 0.1 : 0) > - TrafficPriorities[creepAtPos.role] + (this.needsResources() ? 0.1 : 0)) - ) { - // Have the creep move to its moveRequest - - this.runMoveRequest() - - // Have the creepAtPos move to the creep and inform true - - creepAtPos.moveRequest = packedCoord - room.moveRequests[packedCoord] = [creepAtPos.name] - creepAtPos.runMoveRequest() - return - } + if ( + (!this.isOnExit || !communeCreepRoles.has(creepAtPos.role)) && + (this.memory[CreepMemoryKeys.remote] !== creepAtPos.memory[CreepMemoryKeys.remote] || + this.memory[CreepMemoryKeys.sourceIndex] !== + creepAtPos.memory[CreepMemoryKeys.sourceIndex] || + TrafficPriorities[this.role] + (this.needsResources() ? 0.1 : 0) > + TrafficPriorities[creepAtPos.role] + (this.needsResources() ? 0.1 : 0)) + ) { + // Have the creep move to its moveRequest - delete this.moveRequest - this.moved = MovedTypes.wait - return + this.runMoveRequest() + + // Have the creepAtPos move to the creep and inform true + + creepAtPos.moveRequest = packedCoord + room.moveRequests[packedCoord] = [creepAtPos.name] + creepAtPos.runMoveRequest() + return } - // If the creep is where the creepAtPos is trying to move to - /* + delete this.moveRequest + this.moved = MovedTypes.wait + return + } + + // If the creep is where the creepAtPos is trying to move to + /* if (packedCoord === creepAtPos.moved) { - if (global.settings.roomVisuals) + if (Game.flags[FlagNames.roomVisuals]) room.visual.rect(creepAtPos.pos.x - 0.5, creepAtPos.pos.y - 0.5, 1, 1, { fill: customColors.purple, opacity: 0.2, @@ -527,39 +528,39 @@ PowerCreep.prototype.recurseMoveRequest = Creep.prototype.recurseMoveRequest = f return } */ - if (global.settings.roomVisuals) - room.visual.rect(creepAtPos.pos.x - 0.5, creepAtPos.pos.y - 0.5, 1, 1, { - fill: customColors.white, - opacity: 0.2, - }) + if (Game.flags[FlagNames.roomVisuals]) + room.visual.rect(creepAtPos.pos.x - 0.5, creepAtPos.pos.y - 0.5, 1, 1, { + fill: customColors.white, + opacity: 0.2, + }) - // Otherwise, loop through each index of the queue + // Otherwise, loop through each index of the queue - for (let index = queue.length - 1; index >= 0; index--) { - // Have the creep run its moveRequest + for (let index = queue.length - 1; index >= 0; index--) { + // Have the creep run its moveRequest - ;(Game.creeps[queue[index]] || Game.powerCreeps[queue[index]]).runMoveRequest() - } + ;(Game.creeps[queue[index]] || Game.powerCreeps[queue[index]]).runMoveRequest() + } - // loop through each index of the queue, drawing visuals + // loop through each index of the queue, drawing visuals - if (global.settings.roomVisuals) - for (let index = queue.length - 1; index >= 0; index--) - room.visual.rect(creepAtPos.pos.x - 0.5, creepAtPos.pos.y - 0.5, 1, 1, { - fill: customColors.yellow, - opacity: 0.2, - }) - return + if (Game.flags[FlagNames.roomVisuals]) + for (let index = queue.length - 1; index >= 0; index--) + room.visual.rect(creepAtPos.pos.x - 0.5, creepAtPos.pos.y - 0.5, 1, 1, { + fill: customColors.yellow, + opacity: 0.2, + }) + return } // If the creepAtPos has a moveRequest if (creepAtPos.moveRequest) { - // If it's not valid + // If it's not valid - if (!room.moveRequests[creepAtPos.moveRequest]) { - /* - if (global.settings.roomVisuals) + if (!room.moveRequests[creepAtPos.moveRequest]) { + /* + if (Game.flags[FlagNames.roomVisuals]) room.visual.rect(creepAtPos.pos.x - 0.5, creepAtPos.pos.y - 0.5, 1, 1, { fill: customColors.teal, opacity: 0.2, @@ -575,64 +576,64 @@ PowerCreep.prototype.recurseMoveRequest = Creep.prototype.recurseMoveRequest = f room.moveRequests.set(packedCoord, [creepAtPos.name]) creepAtPos.runMoveRequest() */ - return - } + return + } - // If the creepAtPos wants to move to creep + // If the creepAtPos wants to move to creep - if (packedCoord === creepAtPos.moveRequest) { - if (global.settings.roomVisuals) - room.visual.rect(creepAtPos.pos.x - 0.5, creepAtPos.pos.y - 0.5, 1, 1, { - fill: customColors.teal, - opacity: 0.2, - }) - /* + if (packedCoord === creepAtPos.moveRequest) { + if (Game.flags[FlagNames.roomVisuals]) + room.visual.rect(creepAtPos.pos.x - 0.5, creepAtPos.pos.y - 0.5, 1, 1, { + fill: customColors.teal, + opacity: 0.2, + }) + /* // Culprit for relay issues? this.room.visual.text('R', this.pos) this.room.targetVisual(creepAtPos.pos, unpackCoord(creepAtPos.moveRequest), true) */ - // Have the creep move to its moveRequest + // Have the creep move to its moveRequest - this.runMoveRequest() - creepAtPos.runMoveRequest() - return - } + this.runMoveRequest() + creepAtPos.runMoveRequest() + return + } - // If both creeps moveRequests are aligned + // If both creeps moveRequests are aligned - if (this.moveRequest === creepAtPos.moveRequest) { - if (global.settings.roomVisuals) - room.visual.rect(creepAtPos.pos.x - 0.5, creepAtPos.pos.y - 0.5, 1, 1, { - fill: customColors.pink, - opacity: 0.2, - }) + if (this.moveRequest === creepAtPos.moveRequest) { + if (Game.flags[FlagNames.roomVisuals]) + room.visual.rect(creepAtPos.pos.x - 0.5, creepAtPos.pos.y - 0.5, 1, 1, { + fill: customColors.pink, + opacity: 0.2, + }) - // Prefer the creep with the higher priority + // Prefer the creep with the higher priority - if ( - !(creepAtPos instanceof PowerCreep) && - TrafficPriorities[this.role] + (this.needsResources() ? 0.1 : 0) > - TrafficPriorities[creepAtPos.role] + (this.needsResources() ? 0.1 : 0) - ) { - this.runMoveRequest() + if ( + !(creepAtPos instanceof PowerCreep) && + TrafficPriorities[this.role] + (this.needsResources() ? 0.1 : 0) > + TrafficPriorities[creepAtPos.role] + (this.needsResources() ? 0.1 : 0) + ) { + this.runMoveRequest() - delete creepAtPos.moveRequest - creepAtPos.moved = MovedTypes.moved + delete creepAtPos.moveRequest + creepAtPos.moved = MovedTypes.moved - return - } + return + } - delete this.moveRequest - this.moved = MovedTypes.moved + delete this.moveRequest + this.moved = MovedTypes.moved - creepAtPos.runMoveRequest() - return - } + creepAtPos.runMoveRequest() + return + } - // Swap if creep has higher priority than creepAtPos - /* + // Swap if creep has higher priority than creepAtPos + /* if ( !(creepAtPos instanceof PowerCreep) && (!this.isOnExit || @@ -640,7 +641,7 @@ PowerCreep.prototype.recurseMoveRequest = Creep.prototype.recurseMoveRequest = f (TrafficPriorities[this.role] + (this.needsResources() ? 0.1 : 0) > TrafficPriorities[creepAtPos.role] + (this.needsResources() ? 0.1 : 0)) ) { - if (global.settings.roomVisuals) + if (Game.flags[FlagNames.roomVisuals]) room.visual.rect(creepAtPos.pos.x - 0.5, creepAtPos.pos.y - 0.5, 1, 1, { fill: customColors.pink, opacity: 0.2, @@ -656,69 +657,69 @@ PowerCreep.prototype.recurseMoveRequest = Creep.prototype.recurseMoveRequest = f return } */ - // If the creepAtPos is in the queue + // If the creepAtPos is in the queue - if (queue.includes(creepAtPos.name)) { - // loop through each index of the queue + if (queue.includes(creepAtPos.name)) { + // loop through each index of the queue - for (let index = queue.length - 1; index >= 0; index--) - // Have the creep run its moveRequest + for (let index = queue.length - 1; index >= 0; index--) + // Have the creep run its moveRequest - (Game.creeps[queue[index]] || Game.powerCreeps[queue[index]]).runMoveRequest() + (Game.creeps[queue[index]] || Game.powerCreeps[queue[index]]).runMoveRequest() - // loop through each index of the queue, drawing visuals + // loop through each index of the queue, drawing visuals - if (global.settings.roomVisuals) - for (let index = queue.length - 1; index >= 0; index--) - room.visual.rect(creepAtPos.pos.x - 0.5, creepAtPos.pos.y - 0.5, 1, 1, { - fill: customColors.yellow, - opacity: 0.2, - }) + if (Game.flags[FlagNames.roomVisuals]) + for (let index = queue.length - 1; index >= 0; index--) + room.visual.rect(creepAtPos.pos.x - 0.5, creepAtPos.pos.y - 0.5, 1, 1, { + fill: customColors.yellow, + opacity: 0.2, + }) - return - } + return + } - if (creepAtPos.actionCoord) { - // No point in swapping to get to the same target - if (this.actionCoord && areCoordsEqual(this.actionCoord, creepAtPos.actionCoord)) { - delete this.moveRequest - return - } + if (creepAtPos.actionCoord) { + // No point in swapping to get to the same target + if (this.actionCoord && areCoordsEqual(this.actionCoord, creepAtPos.actionCoord)) { + delete this.moveRequest + return + } - // If swapping will get it closer or equal range to its actionCoord - if ( - getRange(this.pos, creepAtPos.actionCoord) < - getRange(creepAtPos.pos, creepAtPos.actionCoord) - ) { - // Run creep's moveRequest, trading places with creepAtPos + // If swapping will get it closer or equal range to its actionCoord + if ( + getRange(this.pos, creepAtPos.actionCoord) < + getRange(creepAtPos.pos, creepAtPos.actionCoord) + ) { + // Run creep's moveRequest, trading places with creepAtPos - this.runMoveRequest() + this.runMoveRequest() - creepAtPos.moveRequest = packedCoord - room.moveRequests[packedCoord] = [creepAtPos.name] - creepAtPos.runMoveRequest() - return - } + creepAtPos.moveRequest = packedCoord + room.moveRequests[packedCoord] = [creepAtPos.name] + creepAtPos.runMoveRequest() + return } + } - creepAtPos.recurseMoveRequest(queue) - return + creepAtPos.recurseMoveRequest(queue) + return } // Otherwise the creepAtPos has no moveRequest, try to shove if (creepAtPos.shove(new Set([packedCoord]))) { - this.room.visual.text('S', creepAtPos.pos) - this.runMoveRequest() - return + this.room.visual.text('S', creepAtPos.pos) + this.runMoveRequest() + return } if (this.isOnExit) return - if (global.settings.roomVisuals) - room.visual.rect(creepAtPos.pos.x - 0.5, creepAtPos.pos.y - 0.5, 1, 1, { - fill: customColors.teal, - opacity: 0.2, - }) + if (Game.flags[FlagNames.roomVisuals]) + room.visual.rect(creepAtPos.pos.x - 0.5, creepAtPos.pos.y - 0.5, 1, 1, { + fill: customColors.teal, + opacity: 0.2, + }) // Run creep's moveRequest, trading places with creepAtPos diff --git a/src/room/creeps/roleManagers/antifa/antifa.ts b/src/room/creeps/roleManagers/antifa/antifa.ts index 20691f277..0f001263f 100644 --- a/src/room/creeps/roleManagers/antifa/antifa.ts +++ b/src/room/creeps/roleManagers/antifa/antifa.ts @@ -1,6 +1,7 @@ import { CombatRequestKeys, CreepMemoryKeys, + FlagNames, RoomTypes, antifaRoles, customColors, @@ -301,11 +302,11 @@ export class Antifa extends Creep { this.message = 'EC' const enemyCreep = findClosestObject(this.pos, enemyCreeps) - if (global.settings.roomVisuals) - this.room.visual.line(this.pos, enemyCreep.pos, { - color: customColors.green, - opacity: 0.3, - }) + if (Game.flags[FlagNames.roomVisuals]) + this.room.visual.line(this.pos, enemyCreep.pos, { + color: customColors.green, + opacity: 0.3, + }) // Get the range between the creeps @@ -334,11 +335,11 @@ export class Antifa extends Creep { // Otherwise, get the closest enemyAttacker const enemyAttacker = findClosestObject(this.pos, enemyAttackers) - if (global.settings.roomVisuals) - this.room.visual.line(this.pos, enemyAttacker.pos, { - color: customColors.green, - opacity: 0.3, - }) + if (Game.flags[FlagNames.roomVisuals]) + this.room.visual.line(this.pos, enemyAttacker.pos, { + color: customColors.green, + opacity: 0.3, + }) // Get the range between the creeps @@ -411,11 +412,11 @@ export class Antifa extends Creep { if (!structures.length) return false let structure = findClosestObject(this.pos, structures) - if (global.settings.roomVisuals) - this.room.visual.line(this.pos, structure.pos, { - color: customColors.green, - opacity: 0.3, - }) + if (Game.flags[FlagNames.roomVisuals]) + this.room.visual.line(this.pos, structure.pos, { + color: customColors.green, + opacity: 0.3, + }) if (getRangeXY(this.pos.x, structure.pos.x, this.pos.y, structure.pos.y) > 3) { this.createMoveRequest({ @@ -473,11 +474,11 @@ export class Antifa extends Creep { this.message = 'EC' const enemyCreep = findClosestObject(this.pos, enemyCreeps) - if (global.settings.roomVisuals) - this.room.visual.line(this.pos, enemyCreep.pos, { - color: customColors.green, - opacity: 0.3, - }) + if (Game.flags[FlagNames.roomVisuals]) + this.room.visual.line(this.pos, enemyCreep.pos, { + color: customColors.green, + opacity: 0.3, + }) // If the range is more than 1 @@ -499,11 +500,11 @@ export class Antifa extends Creep { } const enemyAttacker = findClosestObject(this.pos, enemyAttackers) - if (global.settings.roomVisuals) - this.room.visual.line(this.pos, enemyAttacker.pos, { - color: customColors.green, - opacity: 0.3, - }) + if (Game.flags[FlagNames.roomVisuals]) + this.room.visual.line(this.pos, enemyAttacker.pos, { + color: customColors.green, + opacity: 0.3, + }) // If the range is more than 1 @@ -534,11 +535,11 @@ export class Antifa extends Creep { if (!structures.length) return false let structure = findClosestObject(this.pos, structures) - if (global.settings.roomVisuals) - this.room.visual.line(this.pos, structure.pos, { - color: customColors.green, - opacity: 0.3, - }) + if (Game.flags[FlagNames.roomVisuals]) + this.room.visual.line(this.pos, structure.pos, { + color: customColors.green, + opacity: 0.3, + }) if (getRangeXY(this.pos.x, structure.pos.x, this.pos.y, structure.pos.y) > 1) { this.createMoveRequest({ @@ -581,11 +582,11 @@ export class Antifa extends Creep { if (!structures.length) return false let structure = findClosestObject(this.pos, structures) - if (global.settings.roomVisuals) - this.room.visual.line(this.pos, structure.pos, { - color: customColors.green, - opacity: 0.3, - }) + if (Game.flags[FlagNames.roomVisuals]) + this.room.visual.line(this.pos, structure.pos, { + color: customColors.green, + opacity: 0.3, + }) if (getRangeXY(this.pos.x, structure.pos.x, this.pos.y, structure.pos.y) > 1) { this.createMoveRequest({ diff --git a/src/room/creeps/roleManagers/antifa/duo.ts b/src/room/creeps/roleManagers/antifa/duo.ts index 8ac0d39fa..bc57dfe1a 100644 --- a/src/room/creeps/roleManagers/antifa/duo.ts +++ b/src/room/creeps/roleManagers/antifa/duo.ts @@ -1,4 +1,4 @@ -import { CreepMemoryKeys, MovedTypes, RoomTypes, customColors, roomDimensions } from 'international/constants' +import { CreepMemoryKeys, FlagNames, MovedTypes, RoomTypes, customColors, roomDimensions } from 'international/constants' import { findClosestObject, getRangeXY, getRange, isExit, isXYExit } from 'utils/utils' import { Antifa } from './antifa' import { CustomPathFinderArgs } from 'international/customPathFinder' @@ -182,11 +182,11 @@ export class Duo { this.leader.message = 'EC' const enemyCreep = findClosestObject(this.leader.pos, enemyCreeps) - if (global.settings.roomVisuals) - this.leader.room.visual.line(this.leader.pos, enemyCreep.pos, { - color: customColors.green, - opacity: 0.3, - }) + if (Game.flags[FlagNames.roomVisuals]) + this.leader.room.visual.line(this.leader.pos, enemyCreep.pos, { + color: customColors.green, + opacity: 0.3, + }) // Get the range between the creeps @@ -224,11 +224,11 @@ export class Duo { // Otherwise, get the closest enemyAttacker const enemyAttacker = findClosestObject(this.leader.pos, enemyAttackers) - if (global.settings.roomVisuals) - this.leader.room.visual.line(this.leader.pos, enemyAttacker.pos, { - color: customColors.green, - opacity: 0.3, - }) + if (Game.flags[FlagNames.roomVisuals]) + this.leader.room.visual.line(this.leader.pos, enemyAttacker.pos, { + color: customColors.green, + opacity: 0.3, + }) // Get the range between the creeps @@ -310,11 +310,11 @@ export class Duo { if (!structures.length) return false let structure = findClosestObject(this.leader.pos, structures) - if (global.settings.roomVisuals) - this.leader.room.visual.line(this.leader.pos, structure.pos, { - color: customColors.green, - opacity: 0.3, - }) + if (Game.flags[FlagNames.roomVisuals]) + this.leader.room.visual.line(this.leader.pos, structure.pos, { + color: customColors.green, + opacity: 0.3, + }) if ( getRangeXY(this.leader.pos.x, structure.pos.x, this.leader.pos.y, structure.pos.y) > 3 @@ -376,11 +376,11 @@ export class Duo { this.leader.message = 'EC' const enemyCreep = findClosestObject(this.leader.pos, enemyCreeps) - if (global.settings.roomVisuals) - this.leader.room.visual.line(this.leader.pos, enemyCreep.pos, { - color: customColors.green, - opacity: 0.3, - }) + if (Game.flags[FlagNames.roomVisuals]) + this.leader.room.visual.line(this.leader.pos, enemyCreep.pos, { + color: customColors.green, + opacity: 0.3, + }) // If the range is more than 1 @@ -412,11 +412,11 @@ export class Duo { } const enemyAttacker = findClosestObject(this.leader.pos, enemyAttackers) - if (global.settings.roomVisuals) - this.leader.room.visual.line(this.leader.pos, enemyAttacker.pos, { - color: customColors.green, - opacity: 0.3, - }) + if (Game.flags[FlagNames.roomVisuals]) + this.leader.room.visual.line(this.leader.pos, enemyAttacker.pos, { + color: customColors.green, + opacity: 0.3, + }) // If the range is more than 1 @@ -455,11 +455,11 @@ export class Duo { if (!structures.length) return false let structure = findClosestObject(this.leader.pos, structures) - if (global.settings.roomVisuals) - this.leader.room.visual.line(this.leader.pos, structure.pos, { - color: customColors.green, - opacity: 0.3, - }) + if (Game.flags[FlagNames.roomVisuals]) + this.leader.room.visual.line(this.leader.pos, structure.pos, { + color: customColors.green, + opacity: 0.3, + }) if ( getRangeXY(this.leader.pos.x, structure.pos.x, this.leader.pos.y, structure.pos.y) > 1 @@ -506,11 +506,11 @@ export class Duo { if (!structures.length) return false let structure = findClosestObject(this.leader.pos, structures) - if (global.settings.roomVisuals) - this.leader.room.visual.line(this.leader.pos, structure.pos, { - color: customColors.green, - opacity: 0.3, - }) + if (Game.flags[FlagNames.roomVisuals]) + this.leader.room.visual.line(this.leader.pos, structure.pos, { + color: customColors.green, + opacity: 0.3, + }) if ( getRangeXY(this.leader.pos.x, structure.pos.x, this.leader.pos.y, structure.pos.y) > 1 diff --git a/src/room/creeps/roleManagers/antifa/quad.ts b/src/room/creeps/roleManagers/antifa/quad.ts index dfbe46966..0266c32c4 100644 --- a/src/room/creeps/roleManagers/antifa/quad.ts +++ b/src/room/creeps/roleManagers/antifa/quad.ts @@ -1,6 +1,7 @@ import { CombatRequestKeys, CreepMemoryKeys, + FlagNames, MovedTypes, Result, RoomMemoryKeys, @@ -731,7 +732,7 @@ export class Quad { this.leader.message = 'EC' const enemyCreep = findClosestObject(this.leader.pos, enemyCreeps) - if (global.settings.roomVisuals) + if (Game.flags[FlagNames.roomVisuals]) this.leader.room.visual.line(this.leader.pos, enemyCreep.pos, { color: customColors.green, opacity: 0.3, @@ -766,7 +767,7 @@ export class Quad { // Otherwise, get the closest enemyAttacker const enemyAttacker = findClosestObject(this.leader.pos, enemyCreeps) - if (global.settings.roomVisuals) + if (Game.flags[FlagNames.roomVisuals]) this.leader.room.visual.line(this.leader.pos, enemyAttacker.pos, { color: customColors.green, opacity: 0.3, @@ -901,7 +902,7 @@ export class Quad { if (!structures.length) return false let structure = findClosestObject(this.leader.pos, structures) - if (global.settings.roomVisuals) + if (Game.flags[FlagNames.roomVisuals]) this.leader.room.visual.line(this.leader.pos, structure.pos, { color: customColors.green, opacity: 0.3, diff --git a/src/room/creeps/roleManagers/commune/defenders/meleeDefender.ts b/src/room/creeps/roleManagers/commune/defenders/meleeDefender.ts index 4418784e6..7198beed0 100644 --- a/src/room/creeps/roleManagers/commune/defenders/meleeDefender.ts +++ b/src/room/creeps/roleManagers/commune/defenders/meleeDefender.ts @@ -4,6 +4,7 @@ import { CreepMemoryKeys, PlayerMemoryKeys, ReservedCoordTypes, + FlagNames, } from 'international/constants' import { PlayerManager } from 'international/players' import { @@ -111,11 +112,11 @@ export class MeleeDefender extends Creep { findClosestObject(this.pos, enemyCreeps) || findClosestObject(this.pos, this.room.roomManager.notMyCreeps.enemy) - if (global.settings.roomVisuals) - this.room.visual.line(this.pos, enemyCreep.pos, { - color: customColors.green, - opacity: 0.3, - }) + if (Game.flags[FlagNames.roomVisuals]) + this.room.visual.line(this.pos, enemyCreep.pos, { + color: customColors.green, + opacity: 0.3, + }) // If out of range move to it @@ -206,8 +207,8 @@ export class MeleeDefender extends Creep { // Visualize the targeting, if roomVisuals are enabled - if (global.settings.roomVisuals) { - /* + if (Game.flags[FlagNames.roomVisuals]) { + /* for (const rampart of ramparts) room.visual.text( getRangeEucXY(enemyCreep.pos.x, rampart.pos.x, enemyCreep.pos.y, rampart.pos.y).toString(), @@ -216,9 +217,9 @@ export class MeleeDefender extends Creep { ) */ - this.room.visual.line(this.pos.x, this.pos.y, rampart.pos.x, rampart.pos.y, { - color: customColors.yellow, - }) + this.room.visual.line(this.pos.x, this.pos.y, rampart.pos.x, rampart.pos.y, { + color: customColors.yellow, + }) } // If the creep is range 0 to the closestRampart, inform false diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index f1f068b53..339813670 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -766,7 +766,7 @@ export class Hauler extends Creep { } relayCoord?(coord: Coord) { - if (global.settings.roomVisuals) { + if (Game.flags[FlagNames.roomVisuals]) { this.room.visual.circle(coord.x, coord.y, { fill: customColors.lightBlue }) } diff --git a/src/room/creeps/roles/haulerOps.ts b/src/room/creeps/roles/haulerOps.ts index de90d96ab..e9e73030e 100644 --- a/src/room/creeps/roles/haulerOps.ts +++ b/src/room/creeps/roles/haulerOps.ts @@ -765,7 +765,7 @@ export class HaulerOps { } private static relayCoord(creep: Creep, coord: Coord) { - if (global.settings.roomVisuals) { + if (Game.flags[FlagNames.roomVisuals]) { creep.room.visual.circle(coord.x, coord.y, { fill: customColors.lightBlue }) } diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index d90702166..6efb90f97 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -48,7 +48,7 @@ Room.prototype.actionVisual = function (pos1, pos2, type?) { // Stop if roomVisuals are disabled - if (!global.settings.roomVisuals) return + if (!Game.flags[FlagNames.roomVisuals]) return // Construct colors for each type @@ -68,7 +68,7 @@ Room.prototype.actionVisual = function (pos1, pos2, type?) { room.visual.line(pos1, pos2, { color }) } -Room.prototype.targetVisual = function (coord1, coord2, visualize = global.settings.roomVisuals) { +Room.prototype.targetVisual = function (coord1, coord2, visualize = !!Game.flags[FlagNames.roomVisuals]) { if (!visualize) return this.visual.line(coord1.x, coord1.y, coord2.x, coord2.y, { @@ -1190,7 +1190,7 @@ Room.prototype.findClosestPos = function (opts) { return false } -Room.prototype.errorVisual = function (coord, visualize = global.settings.roomVisuals) { +Room.prototype.errorVisual = function (coord, visualize = !!Game.flags[FlagNames.roomVisuals]) { if (!visualize) return this.visual.circle(coord.x, coord.y, { diff --git a/src/room/roomVisuals.ts b/src/room/roomVisuals.ts index 21f559f32..bb7143627 100644 --- a/src/room/roomVisuals.ts +++ b/src/room/roomVisuals.ts @@ -8,6 +8,7 @@ import { packedPosLength, RoomMemoryKeys, RoomTypes, + FlagNames, } from 'international/constants' import { StatsManager } from 'international/stats' import { customLog } from 'utils/logging' @@ -34,7 +35,7 @@ export class RoomVisualsManager { private roomVisuals() { // Stop if roomVisuals are disabled - if (!global.settings.roomVisuals) return + if (!Game.flags[FlagNames.roomVisuals]) return this.controllerVisuals() this.spawnVisuals() diff --git a/src/settingsDefault.ts b/src/settingsDefault.ts index 1f5557269..4898c1df2 100644 --- a/src/settingsDefault.ts +++ b/src/settingsDefault.ts @@ -5,8 +5,6 @@ import { Settings } from 'types/settings' */ export const defaultSettings: Settings = { breakingVersion: 128, - roomVisuals: false, - mapVisuals: false, allies: ['MarvinTMB'], nonAggressionPlayers: [], tradeBlacklist: [], diff --git a/src/types/settings.ts b/src/types/settings.ts index 143a05e39..5e569dd2f 100644 --- a/src/types/settings.ts +++ b/src/types/settings.ts @@ -4,15 +4,6 @@ export interface Settings { * Increment to induce migrations which can be controlled with the migration manager */ breakingVersion: number | undefined - /** - * Wether the bot should generate any room visuals - */ - roomVisuals: boolean - - /** - * Wether the bot should generate map visuals - */ - mapVisuals: boolean /** * A list of usernames to treat as allies diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 18e433bc1..8dda2bb4b 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -1,6 +1,6 @@ import { ErrorMapper } from 'other/ErrorMapper' import { - customColors, roomDimensions, PlayerMemoryKeys, Result + customColors, roomDimensions, PlayerMemoryKeys, Result, FlagNames } from '../international/constants' import { customLog } from './logging' import { PlayerRelationships } from 'international/constants' @@ -693,7 +693,7 @@ export function randomOf(array: T[]): T { export function visualizePath( path: RoomPosition[], color: string = customColors.yellow, - visualize: boolean = global.settings.roomVisuals, + visualize: boolean = !!Game.flags[FlagNames.roomVisuals], ) { if (!visualize) return From 88385f6122582a6ad8ea906895596e2271bcea6e Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 30 Jan 2024 13:54:13 -0800 Subject: [PATCH 130/190] new setup for Antifa logic --- .../creeps/roleManagers/antifa/antifaOps.ts | 3 + .../roleManagers/antifa/antifaServices.ts | 3 + .../creeps/roleManagers/antifa/duoOpts.ts | 3 + .../creeps/roleManagers/antifa/dynamicOps.ts | 3 + .../roleManagers/antifa/meleeSingleOps.ts | 22 ++++++++ .../creeps/roleManagers/antifa/quadOps.ts | 3 + .../roleManagers/antifa/rangedSingleOps.ts | 22 ++++++++ .../creeps/roleManagers/antifa/singleOps.ts | 5 ++ .../creeps/roleManagers/antifa/singleton.ts | 56 ------------------- 9 files changed, 64 insertions(+), 56 deletions(-) create mode 100644 src/room/creeps/roleManagers/antifa/antifaOps.ts create mode 100644 src/room/creeps/roleManagers/antifa/antifaServices.ts create mode 100644 src/room/creeps/roleManagers/antifa/duoOpts.ts create mode 100644 src/room/creeps/roleManagers/antifa/dynamicOps.ts create mode 100644 src/room/creeps/roleManagers/antifa/meleeSingleOps.ts create mode 100644 src/room/creeps/roleManagers/antifa/quadOps.ts create mode 100644 src/room/creeps/roleManagers/antifa/rangedSingleOps.ts create mode 100644 src/room/creeps/roleManagers/antifa/singleOps.ts delete mode 100644 src/room/creeps/roleManagers/antifa/singleton.ts diff --git a/src/room/creeps/roleManagers/antifa/antifaOps.ts b/src/room/creeps/roleManagers/antifa/antifaOps.ts new file mode 100644 index 000000000..4e44b8ad6 --- /dev/null +++ b/src/room/creeps/roleManagers/antifa/antifaOps.ts @@ -0,0 +1,3 @@ +export class AntifaOps { + +} diff --git a/src/room/creeps/roleManagers/antifa/antifaServices.ts b/src/room/creeps/roleManagers/antifa/antifaServices.ts new file mode 100644 index 000000000..e8f721b2d --- /dev/null +++ b/src/room/creeps/roleManagers/antifa/antifaServices.ts @@ -0,0 +1,3 @@ +export class AntifaServices { + +} diff --git a/src/room/creeps/roleManagers/antifa/duoOpts.ts b/src/room/creeps/roleManagers/antifa/duoOpts.ts new file mode 100644 index 000000000..e24c11a5c --- /dev/null +++ b/src/room/creeps/roleManagers/antifa/duoOpts.ts @@ -0,0 +1,3 @@ +export class DuoSquadOps { + +} diff --git a/src/room/creeps/roleManagers/antifa/dynamicOps.ts b/src/room/creeps/roleManagers/antifa/dynamicOps.ts new file mode 100644 index 000000000..8a36d922c --- /dev/null +++ b/src/room/creeps/roleManagers/antifa/dynamicOps.ts @@ -0,0 +1,3 @@ +export class DynamicSquadOps { + +} diff --git a/src/room/creeps/roleManagers/antifa/meleeSingleOps.ts b/src/room/creeps/roleManagers/antifa/meleeSingleOps.ts new file mode 100644 index 000000000..4f356a6b2 --- /dev/null +++ b/src/room/creeps/roleManagers/antifa/meleeSingleOps.ts @@ -0,0 +1,22 @@ +export class MeleeSingleSquadOps { + registerCommuneDefenceTargets(creep: Creep) { + + + } + defendCommune(creep: Creep) { + + + } + defendCommuneWithRamparts(creep: Creep) { + + + } + findDefenceRampart(creep: Creep) { + + + } + defendCommuneWithoutRamparts(creep: Creep) { + + + } +} diff --git a/src/room/creeps/roleManagers/antifa/quadOps.ts b/src/room/creeps/roleManagers/antifa/quadOps.ts new file mode 100644 index 000000000..e166e0145 --- /dev/null +++ b/src/room/creeps/roleManagers/antifa/quadOps.ts @@ -0,0 +1,3 @@ +export class QuadSquadOps { + +} diff --git a/src/room/creeps/roleManagers/antifa/rangedSingleOps.ts b/src/room/creeps/roleManagers/antifa/rangedSingleOps.ts new file mode 100644 index 000000000..5b8632045 --- /dev/null +++ b/src/room/creeps/roleManagers/antifa/rangedSingleOps.ts @@ -0,0 +1,22 @@ +export class RangedSingleSquadOps { + registerCommuneDefenceTargets(creep: Creep) { + + + } + defendCommune(creep: Creep) { + + + } + defendCommuneWithRamparts(creep: Creep) { + + + } + findDefenceRampart(creep: Creep) { + + + } + defendCommuneWithoutRamparts(creep: Creep) { + + + } +} diff --git a/src/room/creeps/roleManagers/antifa/singleOps.ts b/src/room/creeps/roleManagers/antifa/singleOps.ts new file mode 100644 index 000000000..e03c192c2 --- /dev/null +++ b/src/room/creeps/roleManagers/antifa/singleOps.ts @@ -0,0 +1,5 @@ +export class SingleSquadOps { + run(creep: Creep) { + + } +} diff --git a/src/room/creeps/roleManagers/antifa/singleton.ts b/src/room/creeps/roleManagers/antifa/singleton.ts deleted file mode 100644 index f9b550eaf..000000000 --- a/src/room/creeps/roleManagers/antifa/singleton.ts +++ /dev/null @@ -1,56 +0,0 @@ - -export const singletonUtils = { - // Ranged - - // Melee - meleeDefendCommune(creep: Creep) { - - - }, -} - -export const rangedSingletonUtils = { - registerCommuneDefenceTargets(creep: Creep) { - - - }, - defendCommune(creep: Creep) { - - - }, - defendCommuneWithRamparts(creep: Creep) { - - - }, - findDefenceRampart(creep: Creep) { - - - }, - defendCommuneWithoutRamparts(creep: Creep) { - - - }, -} - -export const meleeSingletonUtils = { - registerCommuneDefenceTargets(creep: Creep) { - - - }, - defendCommune(creep: Creep) { - - - }, - defendCommuneWithRamparts(creep: Creep) { - - - }, - findDefenceRampart(creep: Creep) { - - - }, - defendCommuneWithoutRamparts(creep: Creep) { - - - }, -} From 7f5a3778d375bbbcc8ca6c63b94ea2d1de5546d8 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 30 Jan 2024 20:06:54 -0800 Subject: [PATCH 131/190] constants in seperate folder --- .../constants.ts => constants/general.ts} | 7 +- src/constants/structures.ts | 0 src/international/collective.ts | 2 +- src/international/commands.ts | 2 +- src/international/constructionSites.ts | 2 +- src/international/creepOrganizer.ts | 7 +- src/international/customPathFinder.ts | 2 +- src/international/endTick.ts | 2 +- src/international/flags/flags.ts | 2 +- src/international/garbageCollector.ts | 2 +- src/international/init.ts | 4 +- src/international/mapVisuals.ts | 18 +- src/international/market/marketOrders.ts | 2 +- src/international/migration.ts | 2 +- src/international/players.ts | 4 +- src/international/powerCreepOrganizer.ts | 2 +- src/international/requests.ts | 2 +- src/international/roomPruning.ts | 68 +- src/international/segments.ts | 2 +- .../simpleAllies/simpleAllies.ts | 2 +- src/international/stats.ts | 8 +- src/international/transactions.ts | 2 +- src/main.ts | 2 +- src/other/codec.spec.ts | 2 +- src/other/codec.ts | 6 +- src/other/errorExporter.ts | 2 +- src/room/commune/combatRequest.ts | 2 +- src/room/commune/commune.ts | 7 +- src/room/commune/communeProcs.ts | 2 +- src/room/commune/communeUtils.ts | 2 +- src/room/commune/defenceProcs.ts | 9 +- src/room/commune/defenceUtils.ts | 2 +- src/room/commune/factory.ts | 563 ++-- src/room/commune/haulRequestManager.ts | 7 +- src/room/commune/haulerNeedOps.ts | 24 +- src/room/commune/labs.ts | 2 +- src/room/commune/links.ts | 2 +- src/room/commune/nukerProcs.ts | 7 +- src/room/commune/observerProcs.ts | 2 +- src/room/commune/powerSpawnProcs.ts | 2 +- src/room/commune/remotesManager.ts | 2 +- .../spawning/spawnRequestConstructors.ts | 2 +- src/room/commune/spawning/spawnRequests.ts | 2 +- .../spawning/spawningStructureProcs.ts | 2 +- .../spawning/spawningStructureUtils.ts | 2 +- src/room/commune/terminal/terminal.old.ts | 2911 ++++++++--------- src/room/commune/terminal/terminalProcs.ts | 2 +- src/room/commune/terminal/tradingUtils.ts | 2 +- src/room/commune/towerProcs.ts | 8 +- src/room/commune/towerUtils.ts | 3 +- src/room/commune/workRequest.ts | 2 +- src/room/construction/basePlans.ts | 2 +- src/room/construction/communePlanner.ts | 2 +- src/room/construction/construction.ts | 16 +- src/room/construction/minCut.ts | 2 +- src/room/construction/rampartPlans.ts | 2 +- src/room/creeps/creepAdditions.ts | 14 +- src/room/creeps/creepMoveProcs.ts | 2 +- src/room/creeps/creepProcs.ts | 2 +- .../creeps/creepPrototypes/creepFunctions.ts | 12 +- .../creepPrototypes/creepMoveFunctions.ts | 20 +- src/room/creeps/creepRoleManager.ts | 2 +- src/room/creeps/creepUtils.ts | 2 +- src/room/creeps/endTickCreepManager.ts | 16 +- src/room/creeps/powerCreepRoleManager.ts | 56 +- src/room/creeps/powerCreeps/operator.ts | 2 +- src/room/creeps/roleManagers/antifa/antifa.ts | 16 +- src/room/creeps/roleManagers/antifa/duo.ts | 917 +++--- .../roleManagers/antifa/dynamicSquad.ts | 6 +- src/room/creeps/roleManagers/antifa/quad.ts | 2 +- .../creeps/roleManagers/commune/builder.ts | 46 +- .../commune/controllerUpgrader.ts | 7 +- .../commune/defenders/meleeDefender.ts | 14 +- .../commune/defenders/rangedDefender.ts | 2 +- .../creeps/roleManagers/commune/fastFiller.ts | 6 +- .../creeps/roleManagers/commune/hauler.ts | 2 +- .../creeps/roleManagers/commune/hubHauler.ts | 18 +- .../creeps/roleManagers/commune/maintainer.ts | 7 +- .../roleManagers/commune/mineralHarvester.ts | 12 +- .../roleManagers/commune/sourceHarvester.ts | 18 +- .../international/allyVanguard.ts | 14 +- .../roleManagers/international/claimer.ts | 2 +- .../international/requestHauler.ts | 28 +- .../roleManagers/international/scout.ts | 14 +- .../roleManagers/international/vanguard.ts | 12 +- .../roleManagers/remote/remoteBuilder.ts | 12 +- .../roleManagers/remote/remoteCoreAttacker.ts | 16 +- .../roleManagers/remote/remoteDefender.ts | 12 +- .../roleManagers/remote/remoteDismantler.ts | 12 +- .../roleManagers/remote/remoteReserver.ts | 2 +- .../remote/remoteSourceHarvester.ts | 2 +- src/room/creeps/roles/haulerOps.ts | 2 +- src/room/logisticsProcs.ts | 31 +- src/room/remotePlanner.ts | 34 +- src/room/remoteProcs.ts | 6 +- src/room/resourceAdditions.ts | 2 +- src/room/room.ts | 52 +- src/room/roomFunctions.ts | 2 +- src/room/roomNameProcs.ts | 3 +- src/room/roomNameUtils.ts | 2 +- src/room/roomObjectAdditions.ts | 210 +- src/room/roomObjectUtils.ts | 17 +- src/room/roomOps.ts | 2 +- src/room/roomServices.ts | 12 +- src/room/roomUtils.ts | 2 +- src/room/roomVisuals.ts | 22 +- src/room/structureUtils.ts | 2 +- src/types.d.ts | 2 +- src/types/creepTasks.ts | 2 +- src/types/internationalRequests.ts | 94 +- src/types/players.ts | 4 +- src/types/roomLogistics.ts | 22 +- src/utils/utils.ts | 10 +- 113 files changed, 2750 insertions(+), 2863 deletions(-) rename src/{international/constants.ts => constants/general.ts} (99%) create mode 100644 src/constants/structures.ts diff --git a/src/international/constants.ts b/src/constants/general.ts similarity index 99% rename from src/international/constants.ts rename to src/constants/general.ts index 0bba4d00a..144f21e67 100644 --- a/src/international/constants.ts +++ b/src/constants/general.ts @@ -1,7 +1,5 @@ -import { packCoord } from 'other/codec' -import { CollectiveManager } from './collective' -import { CommuneManager } from 'room/commune/commune' -import { randomIntRange } from 'utils/utils' +import { packCoord } from '../other/codec' +import { randomIntRange } from '../utils/utils' export enum PlayerRelationships { ally, @@ -203,7 +201,6 @@ export enum CreepTaskKeys { } export enum CreepTaskNames { - // Creep harvestMineral, diff --git a/src/constants/structures.ts b/src/constants/structures.ts new file mode 100644 index 000000000..e69de29bb diff --git a/src/international/collective.ts b/src/international/collective.ts index ce66bec1c..7fed60337 100644 --- a/src/international/collective.ts +++ b/src/international/collective.ts @@ -7,7 +7,7 @@ import { RoomMemoryKeys, minerals, haulerUpdateDefault, -} from './constants' +} from '../constants/general' import { CommuneUtils } from 'room/commune/communeUtils' const periodicUpdateInterval = randomIntRange(100, 200) diff --git a/src/international/commands.ts b/src/international/commands.ts index 6ebc184db..f43e571c7 100644 --- a/src/international/commands.ts +++ b/src/international/commands.ts @@ -7,7 +7,7 @@ import { RoomMemoryKeys, RoomTypes, Result, -} from './constants' +} from '../constants/general' const importantStructures: StructureConstant[] = [STRUCTURE_SPAWN] diff --git a/src/international/constructionSites.ts b/src/international/constructionSites.ts index b2e7553ae..9daf7af49 100644 --- a/src/international/constructionSites.ts +++ b/src/international/constructionSites.ts @@ -1,7 +1,7 @@ import { Sleepable } from 'utils/sleepable' import { CollectiveManager } from './collective' import { Utils } from 'utils/utils' -import { IDUpdateInterval } from './constants' +import { IDUpdateInterval } from '../constants/general' import { SegmentsManager } from './segments' /** diff --git a/src/international/creepOrganizer.ts b/src/international/creepOrganizer.ts index b8bb238bc..b34ddb02f 100644 --- a/src/international/creepOrganizer.ts +++ b/src/international/creepOrganizer.ts @@ -1,5 +1,10 @@ import { creepClasses } from 'room/creeps/creepClasses' -import { CreepMemoryKeys, customColors, remoteRoles, roomLogisticsRoles } from './constants' +import { + CreepMemoryKeys, + customColors, + remoteRoles, + roomLogisticsRoles, +} from '../constants/general' import { customLog } from 'utils/logging' import { CollectiveManager } from './collective' import { packCoord } from 'other/codec' diff --git a/src/international/customPathFinder.ts b/src/international/customPathFinder.ts index c17d6aec1..9269f80d8 100644 --- a/src/international/customPathFinder.ts +++ b/src/international/customPathFinder.ts @@ -12,7 +12,7 @@ import { impassibleStructureTypes, impassibleStructureTypesSet, roomDimensions, -} from './constants' +} from '../constants/general' import { packCoord, unpackCoord, unpackCoordList, unpackPosAt, unpackPosList } from 'other/codec' import { LogTypes, customLog } from 'utils/logging' import { forCoordsAroundRange, unpackNumAsCoord, visualizePath } from '../utils/utils' diff --git a/src/international/endTick.ts b/src/international/endTick.ts index 814ca9f95..8433c0095 100644 --- a/src/international/endTick.ts +++ b/src/international/endTick.ts @@ -1,4 +1,4 @@ -import { customColors } from 'international/constants' +import { customColors } from 'constants/general' import { LogTypes, customLog } from 'utils/logging' import { findCPUColor, findCPUOf } from 'utils/utils' import { CollectiveManager } from './collective' diff --git a/src/international/flags/flags.ts b/src/international/flags/flags.ts index dace521a9..a8d8d3096 100644 --- a/src/international/flags/flags.ts +++ b/src/international/flags/flags.ts @@ -10,7 +10,7 @@ import { customColors, ourImpassibleStructuresSet, packedPosLength, -} from '../constants' +} from '../../constants/general' import { CollectiveManager } from '../collective' import { CombatRequestTypes } from 'types/internationalRequests' import { RoomNameUtils } from 'room/roomNameUtils' diff --git a/src/international/garbageCollector.ts b/src/international/garbageCollector.ts index 763e7be1b..745646e4c 100644 --- a/src/international/garbageCollector.ts +++ b/src/international/garbageCollector.ts @@ -1,5 +1,5 @@ import { Sleepable, StaticSleepable } from 'utils/sleepable' -import { RoomMemoryKeys } from './constants' +import { RoomMemoryKeys } from '../constants/general' /** * Intended to clean Memory, global, segments from stale data diff --git a/src/international/init.ts b/src/international/init.ts index f69bf0e32..5d93b7909 100644 --- a/src/international/init.ts +++ b/src/international/init.ts @@ -1,8 +1,8 @@ import { getMe } from 'utils/utils' import { PlayerManager } from './players' import { StatsManager } from './stats' -import { PlayerMemoryKeys, SegmentIDs } from './constants' -import { PlayerRelationships } from './constants' +import { PlayerMemoryKeys, SegmentIDs } from '../constants/general' +import { PlayerRelationships } from '../constants/general' import { RoomNameUtils } from 'room/roomNameUtils' /** diff --git a/src/international/mapVisuals.ts b/src/international/mapVisuals.ts index 7a3d7ba4f..25bdf2424 100644 --- a/src/international/mapVisuals.ts +++ b/src/international/mapVisuals.ts @@ -1,14 +1,14 @@ import { unpackPosAt, unpackPosList } from 'other/codec' import { - customColors, - WorkRequestKeys, - RoomMemoryKeys, - RoomTypes, - roomDimensions, - packedPosLength, - FlagNames, - Result, -} from './constants' + customColors, + WorkRequestKeys, + RoomMemoryKeys, + RoomTypes, + roomDimensions, + packedPosLength, + FlagNames, + Result, +} from '../constants/general' import { CommuneUtils } from 'room/commune/communeUtils' /** diff --git a/src/international/market/marketOrders.ts b/src/international/market/marketOrders.ts index 8ffc51789..d43661148 100644 --- a/src/international/market/marketOrders.ts +++ b/src/international/market/marketOrders.ts @@ -1,5 +1,5 @@ import { findHighestScore, randomIntRange, randomTick, Utils } from 'utils/utils' -import { PlayerMemoryKeys, Result, RoomMemoryKeys } from '../constants' +import { PlayerMemoryKeys, Result, RoomMemoryKeys } from '../../constants/general' import { CollectiveManager } from '../collective' import { customLog } from 'utils/logging' diff --git a/src/international/migration.ts b/src/international/migration.ts index 6a785fbdd..477f76151 100644 --- a/src/international/migration.ts +++ b/src/international/migration.ts @@ -1,5 +1,5 @@ import { RoomNameUtils } from 'room/roomNameUtils' -import { RoomMemoryKeys, RoomTypes, SegmentIDs, majorVersion } from './constants' +import { RoomMemoryKeys, RoomTypes, SegmentIDs, majorVersion } from '../constants/general' import { RoomNameProcs } from 'room/roomNameProcs' /** diff --git a/src/international/players.ts b/src/international/players.ts index d8e7a2f76..6400c87dc 100644 --- a/src/international/players.ts +++ b/src/international/players.ts @@ -1,8 +1,8 @@ import { isNumber } from 'lodash' -import { PlayerMemoryKeys, defaultDataDecay, playerDecayKeys } from './constants' +import { PlayerMemoryKeys, defaultDataDecay, playerDecayKeys } from '../constants/general' import { randomTick } from '../utils/utils' import { Sleepable, StaticSleepable } from '../utils/sleepable' -import { PlayerRelationships } from './constants' +import { PlayerRelationships } from '../constants/general' export class PlayerManager extends StaticSleepable { /** diff --git a/src/international/powerCreepOrganizer.ts b/src/international/powerCreepOrganizer.ts index 0cf8e84a6..6617399e0 100644 --- a/src/international/powerCreepOrganizer.ts +++ b/src/international/powerCreepOrganizer.ts @@ -1,5 +1,5 @@ import { creepClasses } from 'room/creeps/creepClasses' -import { customColors, remoteRoles } from './constants' +import { customColors, remoteRoles } from '../constants/general' import { customLog } from 'utils/logging' import { CollectiveManager } from './collective' import { packCoord } from 'other/codec' diff --git a/src/international/requests.ts b/src/international/requests.ts index e0fd62d38..2659acc0c 100644 --- a/src/international/requests.ts +++ b/src/international/requests.ts @@ -12,7 +12,7 @@ import { maxCombatDistance, maxHaulDistance, maxWorkRequestDistance, -} from './constants' +} from '../constants/general' import { indexOf } from 'lodash' import { Sleepable, StaticSleepable } from 'utils/sleepable' import { util } from 'chai' diff --git a/src/international/roomPruning.ts b/src/international/roomPruning.ts index 02b8405c3..b05bf689a 100644 --- a/src/international/roomPruning.ts +++ b/src/international/roomPruning.ts @@ -1,48 +1,48 @@ -import { RoomMemoryKeys, WorkRequestKeys, maxControllerLevel } from './constants' +import { RoomMemoryKeys, WorkRequestKeys, maxControllerLevel } from '../constants/general' import { findLowestScore, randomIntRange } from '../utils/utils' import { Sleepable, StaticSleepable } from 'utils/sleepable' import { CollectiveManager } from './collective' export class RoomPruningManager extends StaticSleepable { - static sleepFor = randomIntRange(50000, 100000) - static run() { - if (this.isSleepingResponsive()) return + static sleepFor = randomIntRange(50000, 100000) + static run() { + if (this.isSleepingResponsive()) return - // Find the highest scoring commune. Remember that higher score is less preferable. + // Find the highest scoring commune. Remember that higher score is less preferable. - let maxRCLRooms = 0 - let highestCommuneScore = 0 - let highestCommuneScoreCommuneName: string + let maxRCLRooms = 0 + let highestCommuneScore = 0 + let highestCommuneScoreCommuneName: string - for (const roomName of CollectiveManager.communes) { - const room = Game.rooms[roomName] - if (room.controller.level < maxControllerLevel) return + for (const roomName of CollectiveManager.communes) { + const room = Game.rooms[roomName] + if (room.controller.level < maxControllerLevel) return - maxRCLRooms += 1 + maxRCLRooms += 1 - const roomMemory = Memory.rooms[roomName] - const score = roomMemory[RoomMemoryKeys.score] + roomMemory[RoomMemoryKeys.dynamicScore] + const roomMemory = Memory.rooms[roomName] + const score = roomMemory[RoomMemoryKeys.score] + roomMemory[RoomMemoryKeys.dynamicScore] - if (score <= highestCommuneScore) continue + if (score <= highestCommuneScore) continue - highestCommuneScore = score - highestCommuneScoreCommuneName = roomName - } - - // Ensure that every room is max RCL - // What about temple rooms? - if (maxRCLRooms !== CollectiveManager.communes.size) return - - // Find the lowest scoring workRequest - const lowestWorkRequestScore = findLowestScore( - Object.keys(Memory.workRequests), - roomName => - Memory.rooms[roomName][RoomMemoryKeys.score] + - Memory.rooms[roomName][RoomMemoryKeys.dynamicScore], - ) - // The best work request must be better than our worst commune - if (lowestWorkRequestScore >= highestCommuneScore) return - - Memory.rooms[highestCommuneScoreCommuneName][RoomMemoryKeys.abandonCommune] = true + highestCommuneScore = score + highestCommuneScoreCommuneName = roomName } + + // Ensure that every room is max RCL + // What about temple rooms? + if (maxRCLRooms !== CollectiveManager.communes.size) return + + // Find the lowest scoring workRequest + const lowestWorkRequestScore = findLowestScore( + Object.keys(Memory.workRequests), + roomName => + Memory.rooms[roomName][RoomMemoryKeys.score] + + Memory.rooms[roomName][RoomMemoryKeys.dynamicScore], + ) + // The best work request must be better than our worst commune + if (lowestWorkRequestScore >= highestCommuneScore) return + + Memory.rooms[highestCommuneScoreCommuneName][RoomMemoryKeys.abandonCommune] = true + } } diff --git a/src/international/segments.ts b/src/international/segments.ts index 7baa7c1e4..93a16190d 100644 --- a/src/international/segments.ts +++ b/src/international/segments.ts @@ -1,4 +1,4 @@ -import { Result, SegmentIDs } from './constants' +import { Result, SegmentIDs } from '../constants/general' export class SegmentsManager { static run() { diff --git a/src/international/simpleAllies/simpleAllies.ts b/src/international/simpleAllies/simpleAllies.ts index 0386949b4..c64c80464 100644 --- a/src/international/simpleAllies/simpleAllies.ts +++ b/src/international/simpleAllies/simpleAllies.ts @@ -1,5 +1,5 @@ import { CollectiveManager } from '../collective' -import { maxSegmentsOpen } from '../constants' +import { maxSegmentsOpen } from '../../constants/general' import { AllyRequests, AttackRequest, diff --git a/src/international/stats.ts b/src/international/stats.ts index 8c06f9ed2..3f84cc3e9 100644 --- a/src/international/stats.ts +++ b/src/international/stats.ts @@ -1,5 +1,11 @@ import { roundTo } from 'utils/utils' -import { CPUMaxPerTick, customColors, RoomMemoryKeys, RoomStatsKeys, RoomTypes } from './constants' +import { + CPUMaxPerTick, + customColors, + RoomMemoryKeys, + RoomStatsKeys, + RoomTypes, +} from '../constants/general' import { customLog, LogTypes } from 'utils/logging' import { CollectiveManager } from './collective' diff --git a/src/international/transactions.ts b/src/international/transactions.ts index 0a3b59602..54621bf6f 100644 --- a/src/international/transactions.ts +++ b/src/international/transactions.ts @@ -1,5 +1,5 @@ import { Sleepable } from 'utils/sleepable' -import { IDUpdateInterval, RoomStatsKeys } from './constants' +import { IDUpdateInterval, RoomStatsKeys } from '../constants/general' import { randomIntRange, Utils } from 'utils/utils' import { CollectiveManager } from './collective' import { SegmentsManager } from './segments' diff --git a/src/main.ts b/src/main.ts index eefc588ae..269962c15 100644 --- a/src/main.ts +++ b/src/main.ts @@ -10,7 +10,7 @@ import './room/roomObjectAdditions' import './room/creeps/creepAdditions' import './other/profilerRegister' import { MemoryHack } from 'other/memoryHack' -import { CPUMaxPerTick, FlagNames, Result } from 'international/constants' +import { CPUMaxPerTick, FlagNames, Result } from 'constants/general' import { InitManager } from './international/init' import { MigrationManager } from 'international/migration' import { RespawnManager } from './international/respawn' diff --git a/src/other/codec.spec.ts b/src/other/codec.spec.ts index c05df99ea..1f900be30 100644 --- a/src/other/codec.spec.ts +++ b/src/other/codec.spec.ts @@ -11,7 +11,7 @@ jest.mock('./ErrorExporter', () => {}) // import * as constants from '../international/constants' // jest.spyOn(constants, 'packedQuadAttackMemberOffsets').mockReturnValue([]) -import { buildableStructureTypes } from 'international/constants' +import { buildableStructureTypes } from 'constants/general' import * as Codec from './codec' diff --git a/src/other/codec.ts b/src/other/codec.ts index aaaa30dd9..9a2fbf5ad 100644 --- a/src/other/codec.ts +++ b/src/other/codec.ts @@ -1,9 +1,5 @@ // eslint-disable -import { - buildableStructureTypes, - packedPosLength, - stampKeys, -} from 'international/constants' +import { buildableStructureTypes, packedPosLength, stampKeys } from 'constants/general' import { encode, decode } from 'base32768' /** diff --git a/src/other/errorExporter.ts b/src/other/errorExporter.ts index cfe9c766f..93717bb8b 100644 --- a/src/other/errorExporter.ts +++ b/src/other/errorExporter.ts @@ -1,4 +1,4 @@ -import { SegmentIDs } from "international/constants" +import { SegmentIDs } from 'constants/general' /** * Rather cpu intensive and unavoidably inefficient. Try to avoid this needing to ba called diff --git a/src/room/commune/combatRequest.ts b/src/room/commune/combatRequest.ts index 50ef55efe..62691d7c1 100644 --- a/src/room/commune/combatRequest.ts +++ b/src/room/commune/combatRequest.ts @@ -1,4 +1,4 @@ -import { CombatRequestKeys, RoomMemoryKeys, customColors } from 'international/constants' +import { CombatRequestKeys, RoomMemoryKeys, customColors } from 'constants/general' import { CommuneManager } from './commune' import { StatsManager } from 'international/stats' import { randomIntRange, Utils } from 'utils/utils' diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index 5c0535fa5..5329fe427 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -8,11 +8,12 @@ import { import './workRequest' import './combatRequest' import { - RoomMemoryKeys, rampartUpkeepCost, + RoomMemoryKeys, + rampartUpkeepCost, RemoteResourcePathTypes, ReservedCoordTypes, - RoomStatsKeys -} from 'international/constants' + RoomStatsKeys, +} from 'constants/general' import './factory' import { LabManager } from './labs' import './links' diff --git a/src/room/commune/communeProcs.ts b/src/room/commune/communeProcs.ts index eca83a4c1..a475448b5 100644 --- a/src/room/commune/communeProcs.ts +++ b/src/room/commune/communeProcs.ts @@ -8,7 +8,7 @@ import { RoomTypes, creepRoles, haulerUpdateDefault, -} from 'international/constants' +} from 'constants/general' import { Utils, randomIntRange, randomTick } from 'utils/utils' import { CollectiveManager } from 'international/collective' import { RoomNameUtils } from 'room/roomNameUtils' diff --git a/src/room/commune/communeUtils.ts b/src/room/commune/communeUtils.ts index 9e584d040..8d78a39cb 100644 --- a/src/room/commune/communeUtils.ts +++ b/src/room/commune/communeUtils.ts @@ -8,7 +8,7 @@ import { generalRepairStructureTypes, packedPosLength, structureTypesToProtectSet, -} from 'international/constants' +} from 'constants/general' import { CollectiveManager } from 'international/collective' import { RoomUtils } from 'room/roomUtils' import { StructureUtils } from 'room/structureUtils' diff --git a/src/room/commune/defenceProcs.ts b/src/room/commune/defenceProcs.ts index d4362386e..fec4ef3ca 100644 --- a/src/room/commune/defenceProcs.ts +++ b/src/room/commune/defenceProcs.ts @@ -1,5 +1,12 @@ import { CollectiveManager } from "international/collective" -import { Result, ourImpassibleStructuresSet, RoomMemoryKeys, PlayerMemoryKeys, CombatRequestKeys, defaultDataDecay } from "international/constants" +import { + Result, + ourImpassibleStructuresSet, + RoomMemoryKeys, + PlayerMemoryKeys, + CombatRequestKeys, + defaultDataDecay, +} from 'constants/general' import { PlayerManager } from "international/players" import { simpleAllies } from "international/simpleAllies/simpleAllies" import { packCoord } from "other/codec" diff --git a/src/room/commune/defenceUtils.ts b/src/room/commune/defenceUtils.ts index dc8bf1e73..afa2e3c2f 100644 --- a/src/room/commune/defenceUtils.ts +++ b/src/room/commune/defenceUtils.ts @@ -1,5 +1,5 @@ import { CollectiveManager } from "international/collective" -import { Result, ourImpassibleStructuresSet } from "international/constants" +import { Result, ourImpassibleStructuresSet } from 'constants/general' import { packCoord } from "other/codec" import { RoomNameUtils } from "room/roomNameUtils" import { findObjectWithID, isAlly } from "utils/utils" diff --git a/src/room/commune/factory.ts b/src/room/commune/factory.ts index 92f0720e8..f0042dbe8 100644 --- a/src/room/commune/factory.ts +++ b/src/room/commune/factory.ts @@ -1,333 +1,304 @@ -import { RoomMemoryKeys } from 'international/constants' +import { RoomMemoryKeys } from 'constants/general' import { CommuneManager, ResourceTargets } from './commune' import { CommuneUtils } from './communeUtils' const BASE_RESOURCES = [ - 'energy', - 'H', - 'O', - 'U', - 'L', - 'K', - 'Z', - 'X', - 'G', - RESOURCE_BIOMASS, - RESOURCE_METAL, - RESOURCE_SILICON, - RESOURCE_MIST, + 'energy', + 'H', + 'O', + 'U', + 'L', + 'K', + 'Z', + 'X', + 'G', + RESOURCE_BIOMASS, + RESOURCE_METAL, + RESOURCE_SILICON, + RESOURCE_MIST, ] export class FactoryManager { - communeManager: CommuneManager - factory: StructureFactory - constructor(communeManager: CommuneManager) { - this.communeManager = communeManager - } - - run() { - this.factory = this.communeManager.room.roomManager.factory + communeManager: CommuneManager + factory: StructureFactory + constructor(communeManager: CommuneManager) { + this.communeManager = communeManager + } - if (!this.factory) return - if (this.factory.cooldown > 0) return + run() { + this.factory = this.communeManager.room.roomManager.factory - if (Game.time % 10 == 0) { - this.pickProduct() - } + if (!this.factory) return + if (this.factory.cooldown > 0) return - this.runFactory() + if (Game.time % 10 == 0) { + this.pickProduct() } - allComponents( - product: CommodityConstant | MineralConstant | RESOURCE_GHODIUM | RESOURCE_ENERGY, - ): (CommodityConstant | MineralConstant | RESOURCE_GHODIUM | RESOURCE_ENERGY)[] { - let result: (CommodityConstant | MineralConstant | RESOURCE_GHODIUM | RESOURCE_ENERGY)[] = - [] - - //If we're asked for a base material, it's the reverse reaction that's being requested, - // but we need to hard-code this case, so we don't get into an infinate loop. - // Otherwise we'll get "energy requires batteries requires energy" - if (product == RESOURCE_ENERGY) return [RESOURCE_BATTERY] - if (product == RESOURCE_GHODIUM) return [RESOURCE_GHODIUM_MELT, RESOURCE_ENERGY] - if (product == RESOURCE_OXYGEN) return [RESOURCE_OXIDANT, RESOURCE_ENERGY] - if (product == RESOURCE_HYDROGEN) return [RESOURCE_REDUCTANT, RESOURCE_ENERGY] - if (product == RESOURCE_CATALYST) return [RESOURCE_PURIFIER, RESOURCE_ENERGY] - - if (product == RESOURCE_UTRIUM) return [RESOURCE_UTRIUM_BAR, RESOURCE_ENERGY] - if (product == RESOURCE_LEMERGIUM) return [RESOURCE_LEMERGIUM_BAR, RESOURCE_ENERGY] - if (product == RESOURCE_KEANIUM) return [RESOURCE_KEANIUM_BAR, RESOURCE_ENERGY] - if (product == RESOURCE_ZYNTHIUM) return [RESOURCE_ZYNTHIUM_BAR, RESOURCE_ENERGY] - - //Don't include the product if we can't make it. - if ( - this.factory && - COMMODITIES[product].level && - COMMODITIES[product].level != this.factory.level + this.runFactory() + } + + allComponents( + product: CommodityConstant | MineralConstant | RESOURCE_GHODIUM | RESOURCE_ENERGY, + ): (CommodityConstant | MineralConstant | RESOURCE_GHODIUM | RESOURCE_ENERGY)[] { + let result: (CommodityConstant | MineralConstant | RESOURCE_GHODIUM | RESOURCE_ENERGY)[] = [] + + //If we're asked for a base material, it's the reverse reaction that's being requested, + // but we need to hard-code this case, so we don't get into an infinate loop. + // Otherwise we'll get "energy requires batteries requires energy" + if (product == RESOURCE_ENERGY) return [RESOURCE_BATTERY] + if (product == RESOURCE_GHODIUM) return [RESOURCE_GHODIUM_MELT, RESOURCE_ENERGY] + if (product == RESOURCE_OXYGEN) return [RESOURCE_OXIDANT, RESOURCE_ENERGY] + if (product == RESOURCE_HYDROGEN) return [RESOURCE_REDUCTANT, RESOURCE_ENERGY] + if (product == RESOURCE_CATALYST) return [RESOURCE_PURIFIER, RESOURCE_ENERGY] + + if (product == RESOURCE_UTRIUM) return [RESOURCE_UTRIUM_BAR, RESOURCE_ENERGY] + if (product == RESOURCE_LEMERGIUM) return [RESOURCE_LEMERGIUM_BAR, RESOURCE_ENERGY] + if (product == RESOURCE_KEANIUM) return [RESOURCE_KEANIUM_BAR, RESOURCE_ENERGY] + if (product == RESOURCE_ZYNTHIUM) return [RESOURCE_ZYNTHIUM_BAR, RESOURCE_ENERGY] + + //Don't include the product if we can't make it. + if ( + this.factory && + COMMODITIES[product].level && + COMMODITIES[product].level != this.factory.level + ) + return [] + + for (let component of Object.keys(COMMODITIES[product].components)) { + result.push( + component as CommodityConstant | MineralConstant | RESOURCE_GHODIUM | RESOURCE_ENERGY, + ) + if ( + !BASE_RESOURCES.includes(component) && + COMMODITIES[ + component as CommodityConstant | MineralConstant | RESOURCE_GHODIUM | RESOURCE_ENERGY + ] + ) { + result = result.concat( + this.allComponents( + component as CommodityConstant | MineralConstant | RESOURCE_GHODIUM | RESOURCE_ENERGY, + ), ) - return [] - - for (let component of Object.keys(COMMODITIES[product].components)) { - result.push( - component as - | CommodityConstant - | MineralConstant - | RESOURCE_GHODIUM - | RESOURCE_ENERGY, - ) - if ( - !BASE_RESOURCES.includes(component) && - COMMODITIES[ - component as - | CommodityConstant - | MineralConstant - | RESOURCE_GHODIUM - | RESOURCE_ENERGY - ] - ) { - result = result.concat( - this.allComponents( - component as - | CommodityConstant - | MineralConstant - | RESOURCE_GHODIUM - | RESOURCE_ENERGY, - ), - ) - } - } - - return _.uniq(result) + } } - updateUsableResources() { - if (!this.getProduct()) { - this.communeManager.room.memory[RoomMemoryKeys.factoryUsableResources] = [] - return - } - - //This should probably be smarter, and use the known production quantity to know if it needs to recurse - // Into the items. Ex: If we have a bunch of U_Bars in storare, we don't need U on this list. - // But for now, it asks for it. - this.communeManager.room.memory[RoomMemoryKeys.factoryUsableResources] = this.allComponents( - this.getProduct(), - ) - } + return _.uniq(result) + } - setProduct(product: CommodityConstant | MineralConstant | RESOURCE_ENERGY | RESOURCE_GHODIUM) { - this.communeManager.room.memory[RoomMemoryKeys.factoryProduct] = product - this.updateUsableResources() + updateUsableResources() { + if (!this.getProduct()) { + this.communeManager.room.memory[RoomMemoryKeys.factoryUsableResources] = [] + return } - getProduct() { - return this.communeManager.room.memory[RoomMemoryKeys.factoryProduct] + //This should probably be smarter, and use the known production quantity to know if it needs to recurse + // Into the items. Ex: If we have a bunch of U_Bars in storare, we don't need U on this list. + // But for now, it asks for it. + this.communeManager.room.memory[RoomMemoryKeys.factoryUsableResources] = this.allComponents( + this.getProduct(), + ) + } + + setProduct(product: CommodityConstant | MineralConstant | RESOURCE_ENERGY | RESOURCE_GHODIUM) { + this.communeManager.room.memory[RoomMemoryKeys.factoryProduct] = product + this.updateUsableResources() + } + + getProduct() { + return this.communeManager.room.memory[RoomMemoryKeys.factoryProduct] + } + + /** + * Wether or not we have the sufficient resources for the production of a specified product + */ + hasSufficientMaterials( + resourceType: keyof typeof COMMODITIES, + minAmount: number, + resourcesInStoringStructures: Partial<{ [key in ResourceConstant]: number }>, + resourceTargets: ResourceTargets, + ) { + // We know we can't produce a commodity if we don't have the power level + if (COMMODITIES[resourceType].level && COMMODITIES[resourceType].level !== this.factory.level) { + return false } - - /** - * Wether or not we have the sufficient resources for the production of a specified product - */ - hasSufficientMaterials( - resourceType: keyof typeof COMMODITIES, - minAmount: number, - resourcesInStoringStructures: Partial<{ [key in ResourceConstant]: number }>, - resourceTargets: ResourceTargets - ) { - // We know we can't produce a commodity if we don't have the power level - if ( - COMMODITIES[resourceType].level && - COMMODITIES[resourceType].level !== this.factory.level - ) { - return false - } - console.log('Factory Considering ' + resourceType) - - // Make sure we have enough of each component, recursively - - const components = COMMODITIES[resourceType].components - for (const key in components) { - const materialResourceType = key as - | CommodityConstant - | MineralConstant - | RESOURCE_ENERGY - | RESOURCE_GHODIUM - | DepositConstant - - const min = Math.min( - resourceTargets.min[materialResourceType], - (components[materialResourceType] / COMMODITIES[resourceType].amount) * minAmount, - ) - const currentAmount = resourcesInStoringStructures[materialResourceType] - // Make sure we have at least the min required resources - if (currentAmount < min) { - - // We don't have the required material, so see if we have enough to make it - - // See if it has componenets to break into - if (!COMMODITIES[materialResourceType as keyof typeof COMMODITIES]) return false - - // Break it down into its further components and see if it's enough - - const hasSufficientMaterials = this.hasSufficientMaterials( - materialResourceType as keyof typeof COMMODITIES, - Math.floor(components[materialResourceType] / minAmount), - resourcesInStoringStructures, - resourceTargets, - ) - if (!hasSufficientMaterials) return false - } - } - - return true - } - - nextProduction( - product: CommodityConstant | MineralConstant | RESOURCE_ENERGY | RESOURCE_GHODIUM, - ): CommodityConstant | MineralConstant | RESOURCE_ENERGY | RESOURCE_GHODIUM { - if (!product) product = this.getProduct() - if (!product) return null - - let receipe = COMMODITIES[product] - if (!receipe) return null - let missingComponents = _.filter( - Object.keys(receipe.components), - r => - this.factory.store[ - r as CommodityConstant | MineralConstant | RESOURCE_ENERGY | RESOURCE_GHODIUM - ] < - receipe.components[ - r as CommodityConstant | MineralConstant | RESOURCE_ENERGY | RESOURCE_GHODIUM - ], + console.log('Factory Considering ' + resourceType) + + // Make sure we have enough of each component, recursively + + const components = COMMODITIES[resourceType].components + for (const key in components) { + const materialResourceType = key as + | CommodityConstant + | MineralConstant + | RESOURCE_ENERGY + | RESOURCE_GHODIUM + | DepositConstant + + const min = Math.min( + resourceTargets.min[materialResourceType], + (components[materialResourceType] / COMMODITIES[resourceType].amount) * minAmount, + ) + const currentAmount = resourcesInStoringStructures[materialResourceType] + // Make sure we have at least the min required resources + if (currentAmount < min) { + // We don't have the required material, so see if we have enough to make it + + // See if it has componenets to break into + if (!COMMODITIES[materialResourceType as keyof typeof COMMODITIES]) return false + + // Break it down into its further components and see if it's enough + + const hasSufficientMaterials = this.hasSufficientMaterials( + materialResourceType as keyof typeof COMMODITIES, + Math.floor(components[materialResourceType] / minAmount), + resourcesInStoringStructures, + resourceTargets, ) + if (!hasSufficientMaterials) return false + } + } + return true + } + + nextProduction( + product: CommodityConstant | MineralConstant | RESOURCE_ENERGY | RESOURCE_GHODIUM, + ): CommodityConstant | MineralConstant | RESOURCE_ENERGY | RESOURCE_GHODIUM { + if (!product) product = this.getProduct() + if (!product) return null + + let receipe = COMMODITIES[product] + if (!receipe) return null + let missingComponents = _.filter( + Object.keys(receipe.components), + r => + this.factory.store[ + r as CommodityConstant | MineralConstant | RESOURCE_ENERGY | RESOURCE_GHODIUM + ] < + receipe.components[ + r as CommodityConstant | MineralConstant | RESOURCE_ENERGY | RESOURCE_GHODIUM + ], + ) + + if (missingComponents.length == 0 && (!receipe.level || receipe.level == this.factory.level)) { + return product + } else { + //If we're asked to make a base product, and we're missing the components, that means we don't have the compressed + // version of the uncompressed product. Bail. + if (BASE_RESOURCES.includes(product)) return null + + for (let component of missingComponents) { if ( - missingComponents.length == 0 && - (!receipe.level || receipe.level == this.factory.level) + !BASE_RESOURCES.includes(component) && + COMMODITIES[ + component as CommodityConstant | MineralConstant | RESOURCE_ENERGY | RESOURCE_GHODIUM + ] ) { - return product - } else { - //If we're asked to make a base product, and we're missing the components, that means we don't have the compressed - // version of the uncompressed product. Bail. - if (BASE_RESOURCES.includes(product)) return null - - for (let component of missingComponents) { - if ( - !BASE_RESOURCES.includes(component) && - COMMODITIES[ - component as - | CommodityConstant - | MineralConstant - | RESOURCE_ENERGY - | RESOURCE_GHODIUM - ] - ) { - let result = this.nextProduction( - component as - | CommodityConstant - | MineralConstant - | RESOURCE_ENERGY - | RESOURCE_GHODIUM, - ) - if (result) return result - } - } + let result = this.nextProduction( + component as CommodityConstant | MineralConstant | RESOURCE_ENERGY | RESOURCE_GHODIUM, + ) + if (result) return result } - return null + } } + return null + } - pickProduct() { - this.setProduct(null) + pickProduct() { + this.setProduct(null) - // We want a certain ratio of batteries to stored energy + // We want a certain ratio of batteries to stored energy - if ( - this.communeManager.room.roomManager.resourcesInStoringStructures[RESOURCE_ENERGY] > - CommuneUtils.minStoredEnergy(this.communeManager.room) * 1.2 && - this.communeManager.room.roomManager.resourcesInStoringStructures.battery < - this.communeManager.room.roomManager.resourcesInStoringStructures.energy / 100 - ) { - // Convert energy into batteries - this.setProduct(RESOURCE_BATTERY) - return - } - - if ( - this.communeManager.room.roomManager.resourcesInStoringStructures[RESOURCE_ENERGY] < - CommuneUtils.minStoredEnergy(this.communeManager.room) && - this.communeManager.room.roomManager.resourcesInStoringStructures[RESOURCE_BATTERY] >= - 600 - ) { - this.setProduct(RESOURCE_ENERGY) - return - } + if ( + this.communeManager.room.roomManager.resourcesInStoringStructures[RESOURCE_ENERGY] > + CommuneUtils.minStoredEnergy(this.communeManager.room) * 1.2 && + this.communeManager.room.roomManager.resourcesInStoringStructures.battery < + this.communeManager.room.roomManager.resourcesInStoringStructures.energy / 100 + ) { + // Convert energy into batteries + this.setProduct(RESOURCE_BATTERY) + return + } - //let scheduledItems = []; - //if(Memory.masterPlan.targetProduction) - // scheduledItems = _.keys(Memory.masterPlan.targetProduction).filter(rsc => Memory.masterPlan.targetProduction[rsc] > 0); - - //This is what to make, in priorty sequence. Scheduled items is used for scheduling high-end materials for prodution. - let stuffToMake = [ - //...scheduledItems, - RESOURCE_BATTERY, - RESOURCE_CONDENSATE, - RESOURCE_WIRE, - RESOURCE_ALLOY, - RESOURCE_CELL, - - RESOURCE_GHODIUM_MELT, - RESOURCE_REDUCTANT, - RESOURCE_OXIDANT, - RESOURCE_PURIFIER, - RESOURCE_LEMERGIUM_BAR, - RESOURCE_UTRIUM_BAR, - RESOURCE_KEANIUM_BAR, - RESOURCE_ZYNTHIUM_BAR, - - //This needs to have the L2 and L3 common components added, but the logic - // below needs updates so it's only built when it's needed. - RESOURCE_COMPOSITE, - - //This list needs the reverse-fabrication of bars in here as well, for when the supplies are super-low, or energy - // is low, but the below block needs that logic in first. - ] + if ( + this.communeManager.room.roomManager.resourcesInStoringStructures[RESOURCE_ENERGY] < + CommuneUtils.minStoredEnergy(this.communeManager.room) && + this.communeManager.room.roomManager.resourcesInStoringStructures[RESOURCE_BATTERY] >= 600 + ) { + this.setProduct(RESOURCE_ENERGY) + return + } - const resourcesInStoringStructures = - this.communeManager.room.roomManager.resourcesInStoringStructures - const resourceTargets = CommuneUtils.getResourceTargets(this.communeManager.room) - - for (const resourceType of stuffToMake) { - const max = resourceTargets.max[resourceType] - const currentAmount = resourcesInStoringStructures[resourceType] - // Make sure we are sufficiently low on the resource before wanting to produce more - if (currentAmount * 1.1 >= max) continue - - let currentlyHaveAllMaterials = this.hasSufficientMaterials( - resourceType, - max - currentAmount, - resourcesInStoringStructures, - resourceTargets - ) - // Make sure we have enough component-materials to make the end product - if (!currentlyHaveAllMaterials) continue - - this.setProduct(resourceType) - break - } + //let scheduledItems = []; + //if(Memory.masterPlan.targetProduction) + // scheduledItems = _.keys(Memory.masterPlan.targetProduction).filter(rsc => Memory.masterPlan.targetProduction[rsc] > 0); + + //This is what to make, in priorty sequence. Scheduled items is used for scheduling high-end materials for prodution. + let stuffToMake = [ + //...scheduledItems, + RESOURCE_BATTERY, + RESOURCE_CONDENSATE, + RESOURCE_WIRE, + RESOURCE_ALLOY, + RESOURCE_CELL, + + RESOURCE_GHODIUM_MELT, + RESOURCE_REDUCTANT, + RESOURCE_OXIDANT, + RESOURCE_PURIFIER, + RESOURCE_LEMERGIUM_BAR, + RESOURCE_UTRIUM_BAR, + RESOURCE_KEANIUM_BAR, + RESOURCE_ZYNTHIUM_BAR, + + //This needs to have the L2 and L3 common components added, but the logic + // below needs updates so it's only built when it's needed. + RESOURCE_COMPOSITE, + + //This list needs the reverse-fabrication of bars in here as well, for when the supplies are super-low, or energy + // is low, but the below block needs that logic in first. + ] + + const resourcesInStoringStructures = + this.communeManager.room.roomManager.resourcesInStoringStructures + const resourceTargets = CommuneUtils.getResourceTargets(this.communeManager.room) + + for (const resourceType of stuffToMake) { + const max = resourceTargets.max[resourceType] + const currentAmount = resourcesInStoringStructures[resourceType] + // Make sure we are sufficiently low on the resource before wanting to produce more + if (currentAmount * 1.1 >= max) continue + + let currentlyHaveAllMaterials = this.hasSufficientMaterials( + resourceType, + max - currentAmount, + resourcesInStoringStructures, + resourceTargets, + ) + // Make sure we have enough component-materials to make the end product + if (!currentlyHaveAllMaterials) continue + + this.setProduct(resourceType) + break } + } - runFactory() { - if (!this.getProduct()) return - if (this.factory.cooldown > 0) return + runFactory() { + if (!this.getProduct()) return + if (this.factory.cooldown > 0) return - let product = this.nextProduction(null) - if (!product) return + let product = this.nextProduction(null) + if (!product) return - var result = this.factory.produce(product) + var result = this.factory.produce(product) - if (result == ERR_BUSY) { - } else if (result != OK) { - } else { - // if(Memory.masterPlan.targetProduction && Memory.masterPlan.targetProduction[product]) { - // Memory.masterPlan.targetProduction[product]--; - // } - } + if (result == ERR_BUSY) { + } else if (result != OK) { + } else { + // if(Memory.masterPlan.targetProduction && Memory.masterPlan.targetProduction[product]) { + // Memory.masterPlan.targetProduction[product]--; + // } } + } } diff --git a/src/room/commune/haulRequestManager.ts b/src/room/commune/haulRequestManager.ts index a396684bd..295ea2940 100644 --- a/src/room/commune/haulRequestManager.ts +++ b/src/room/commune/haulRequestManager.ts @@ -1,9 +1,4 @@ -import { - customColors, - HaulRequestKeys, - CombatRequestKeys, - RoomMemoryKeys, -} from 'international/constants' +import { customColors, HaulRequestKeys, CombatRequestKeys, RoomMemoryKeys } from 'constants/general' import { randomIntRange, randomTick, Utils } from 'utils/utils' import { CommuneManager } from './commune' import { CommuneUtils } from './communeUtils' diff --git a/src/room/commune/haulerNeedOps.ts b/src/room/commune/haulerNeedOps.ts index 2ae1ea2ef..5944c34c2 100644 --- a/src/room/commune/haulerNeedOps.ts +++ b/src/room/commune/haulerNeedOps.ts @@ -1,11 +1,10 @@ -import { RoomMemoryKeys, RoomStatsKeys, packedPosLength, stamps } from "international/constants" -import { StructureUtils } from "room/structureUtils" -import { findCarryPartsRequired } from "utils/utils" -import { CommuneUtils } from "./communeUtils" +import { RoomMemoryKeys, RoomStatsKeys, packedPosLength, stamps } from 'constants/general' +import { StructureUtils } from 'room/structureUtils' +import { findCarryPartsRequired } from 'utils/utils' +import { CommuneUtils } from './communeUtils' export class HaulerNeedOps { static run(room: Room) { - this.sourceNeed(room) this.controllerNeed(room) @@ -27,8 +26,10 @@ export class HaulerNeedOps { (room.controller.level >= 4 && room.storage) || (room.terminal && room.controller.level >= 6) ) { - room.communeManager.communeHaulerNeed += Memory.stats.rooms[room.name][RoomStatsKeys.EnergyOutputSpawn] / 10 - room.communeManager.communeHaulerNeed += Memory.stats.rooms[room.name][RoomStatsKeys.SpawnUsagePercentage] * 8 + room.communeManager.communeHaulerNeed += + Memory.stats.rooms[room.name][RoomStatsKeys.EnergyOutputSpawn] / 10 + room.communeManager.communeHaulerNeed += + Memory.stats.rooms[room.name][RoomStatsKeys.SpawnUsagePercentage] * 8 } room.communeManager.communeHaulerNeed = Math.round(room.communeManager.communeHaulerNeed) @@ -66,16 +67,13 @@ export class HaulerNeedOps { } private static controllerNeed(room: Room) { - if (room.controller.level < 2) return // There is a viable controllerContainer if (room.roomManager.controllerContainer) { room.communeManager.communeHaulerNeed += findCarryPartsRequired( - Memory.rooms[room.name][RoomMemoryKeys.upgradePath].length / - packedPosLength + - 3, + Memory.rooms[room.name][RoomMemoryKeys.upgradePath].length / packedPosLength + 3, room.communeManager.upgradeStrength * 1.1, ) return @@ -95,9 +93,7 @@ export class HaulerNeedOps { // There is a viable controllerLink but we need to haul to it room.communeManager.communeHaulerNeed += findCarryPartsRequired( - Memory.rooms[room.name][RoomMemoryKeys.upgradePath].length / - packedPosLength + - 3, + Memory.rooms[room.name][RoomMemoryKeys.upgradePath].length / packedPosLength + 3, room.communeManager.upgradeStrength * 1.1, ) return diff --git a/src/room/commune/labs.ts b/src/room/commune/labs.ts index 301208451..b4d8a9cb8 100644 --- a/src/room/commune/labs.ts +++ b/src/room/commune/labs.ts @@ -1,4 +1,4 @@ -import { RoomLogisticsRequestTypes, minerals } from 'international/constants' +import { RoomLogisticsRequestTypes, minerals } from 'constants/general' import { CommuneManager } from './commune' import { Hauler } from '../creeps/roleManagers/commune/hauler' import { findObjectWithID, getRange, randomTick, scalePriority } from 'utils/utils' diff --git a/src/room/commune/links.ts b/src/room/commune/links.ts index 323629156..31025fb0b 100644 --- a/src/room/commune/links.ts +++ b/src/room/commune/links.ts @@ -2,7 +2,7 @@ import { RoomLogisticsRequestTypes, linkReceiveTreshold, linkSendThreshold, -} from 'international/constants' +} from 'constants/general' import { customLog } from 'utils/logging' import { CommuneManager } from './commune' import { StructureUtils } from 'room/structureUtils' diff --git a/src/room/commune/nukerProcs.ts b/src/room/commune/nukerProcs.ts index 9cb388111..7b3c862c3 100644 --- a/src/room/commune/nukerProcs.ts +++ b/src/room/commune/nukerProcs.ts @@ -1,4 +1,9 @@ -import { RoomMemoryKeys, Result, NukeRequestKeys, RoomLogisticsRequestTypes } from "international/constants" +import { + RoomMemoryKeys, + Result, + NukeRequestKeys, + RoomLogisticsRequestTypes, +} from 'constants/general' import { RoomObjectUtils } from 'room/roomObjectUtils' const nukerResources = [RESOURCE_ENERGY, RESOURCE_GHODIUM] diff --git a/src/room/commune/observerProcs.ts b/src/room/commune/observerProcs.ts index 2fb650a4e..7d01a5b92 100644 --- a/src/room/commune/observerProcs.ts +++ b/src/room/commune/observerProcs.ts @@ -1,4 +1,4 @@ -import { RoomMemoryKeys } from "international/constants" +import { RoomMemoryKeys } from 'constants/general' import { RoomNameUtils } from 'room/roomNameUtils' import { forRoomNamesAroundRangeXY, Utils } from 'utils/utils' diff --git a/src/room/commune/powerSpawnProcs.ts b/src/room/commune/powerSpawnProcs.ts index 578096b4e..8e0470329 100644 --- a/src/room/commune/powerSpawnProcs.ts +++ b/src/room/commune/powerSpawnProcs.ts @@ -1,5 +1,5 @@ import { CollectiveManager } from 'international/collective' -import { RoomLogisticsRequestTypes, RoomStatsKeys } from 'international/constants' +import { RoomLogisticsRequestTypes, RoomStatsKeys } from 'constants/general' import { StatsManager } from 'international/stats' import { scalePriority } from 'utils/utils' import { CommuneUtils } from './communeUtils' diff --git a/src/room/commune/remotesManager.ts b/src/room/commune/remotesManager.ts index d7b5ae84c..d081924c1 100644 --- a/src/room/commune/remotesManager.ts +++ b/src/room/commune/remotesManager.ts @@ -7,7 +7,7 @@ import { RoomTypes, defaultDataDecay, maxRemotePathDistance, -} from 'international/constants' +} from 'constants/general' import { findCarryPartsRequired, findLowestScore, diff --git a/src/room/commune/spawning/spawnRequestConstructors.ts b/src/room/commune/spawning/spawnRequestConstructors.ts index d4624291d..2508c1755 100644 --- a/src/room/commune/spawning/spawnRequestConstructors.ts +++ b/src/room/commune/spawning/spawnRequestConstructors.ts @@ -1,7 +1,7 @@ import { SpawnRequest } from 'types/spawnRequest' import { LogTypes, customLog } from 'utils/logging' import { SpawnRequestArgs } from 'types/spawnRequest' -import { CreepMemoryKeys, FlagNames } from 'international/constants' +import { CreepMemoryKeys, FlagNames } from 'constants/general' export type SpawnRequestConstructor = (room: Room, args: SpawnRequestArgs) => SpawnRequest[] diff --git a/src/room/commune/spawning/spawnRequests.ts b/src/room/commune/spawning/spawnRequests.ts index 9117500b9..95e56ec50 100644 --- a/src/room/commune/spawning/spawnRequests.ts +++ b/src/room/commune/spawning/spawnRequests.ts @@ -6,7 +6,7 @@ import { CreepMemoryKeys, RoomMemoryKeys, RoomTypes, -} from 'international/constants' +} from 'constants/general' import { CollectiveManager } from 'international/collective' import { CommuneManager } from '../commune' import { SpawnRequestArgs, SpawnRequestTypes } from 'types/spawnRequest' diff --git a/src/room/commune/spawning/spawningStructureProcs.ts b/src/room/commune/spawning/spawningStructureProcs.ts index 84ed4562c..633d15c07 100644 --- a/src/room/commune/spawning/spawningStructureProcs.ts +++ b/src/room/commune/spawning/spawningStructureProcs.ts @@ -11,7 +11,7 @@ import { MovedTypes, RoomStatsKeys, FlagNames, -} from 'international/constants' +} from 'constants/general' import { StatsManager } from 'international/stats' import { unpackPosAt, packCoord, unpackCoord } from 'other/codec' import { CreepProcs } from 'room/creeps/creepProcs' diff --git a/src/room/commune/spawning/spawningStructureUtils.ts b/src/room/commune/spawning/spawningStructureUtils.ts index 753243586..38b213ec3 100644 --- a/src/room/commune/spawning/spawningStructureUtils.ts +++ b/src/room/commune/spawning/spawningStructureUtils.ts @@ -1,6 +1,6 @@ import { StructureUtils } from 'room/structureUtils' import { OrganizedSpawns } from './spawningStructureProcs' import { CreepProcs } from 'room/creeps/creepProcs' -import { CreepMemoryKeys } from 'international/constants' +import { CreepMemoryKeys } from 'constants/general' export class SpawningStructureUtils {} diff --git a/src/room/commune/terminal/terminal.old.ts b/src/room/commune/terminal/terminal.old.ts index 09aebe9c0..b2166fc0e 100644 --- a/src/room/commune/terminal/terminal.old.ts +++ b/src/room/commune/terminal/terminal.old.ts @@ -1,4 +1,4 @@ -import { minerals, Result, RoomMemoryKeys } from 'international/constants' +import { minerals, Result, RoomMemoryKeys } from 'constants/general' import { customLog } from 'utils/logging' import { newID, roundTo } from 'utils/utils' import './tradingUtils' @@ -14,1596 +14,1505 @@ const allowedBuySellPriceRatio = 0.9 const npcRoomRegex = /^[WE][0-9]*0[NS][0-9]*0$/ function loadLocalMarketMemory() { - let segment = JSON.parse(InterShardMemory.getLocal() || '{}') - return segment.market || { departures: {} } + let segment = JSON.parse(InterShardMemory.getLocal() || '{}') + return segment.market || { departures: {} } } function loadRemoteMarketMemory(shardId: string) { - let segment = JSON.parse(InterShardMemory.getRemote(shardId) || '{}') - return segment.market || { departures: {} } + let segment = JSON.parse(InterShardMemory.getRemote(shardId) || '{}') + return segment.market || { departures: {} } } function storeLocalMarketMemory(memory: string) { - let segment = JSON.parse(InterShardMemory.getLocal() || '{}') - segment.market = memory - InterShardMemory.setLocal(JSON.stringify(segment)) + let segment = JSON.parse(InterShardMemory.getLocal() || '{}') + segment.market = memory + InterShardMemory.setLocal(JSON.stringify(segment)) } const tradeBlacklistRoomNames = [ - //Don't trade with myself. - 'W21N9', - 'W21N8', - 'W17N16', + //Don't trade with myself. + 'W21N9', + 'W21N8', + 'W17N16', ] export class TerminalManager { - communeManager: CommuneManager - room: Room - terminal: StructureTerminal + communeManager: CommuneManager + room: Room + terminal: StructureTerminal - constructor(communeManager: CommuneManager) { - this.communeManager = communeManager - } + constructor(communeManager: CommuneManager) { + this.communeManager = communeManager + } - // "New" version, not yet in use + // "New" version, not yet in use - isTradingPossible() { - return this.room.terminal && this.room.storage - } + isTradingPossible() { + return this.room.terminal && this.room.storage + } - runNewVersion() { - this.room = this.communeManager.room - this.terminal = this.room.terminal + runNewVersion() { + this.room = this.communeManager.room + this.terminal = this.room.terminal - if (!this.room.storage || !this.room.terminal) return + if (!this.room.storage || !this.room.terminal) return - //if (this.room.memory.trading === undefined) this.room.memory.trading = {} - //if (this.room.memory.trading.purchaseTarget === undefined) this.room.memory.trading.purchaseTarget = {} + //if (this.room.memory.trading === undefined) this.room.memory.trading = {} + //if (this.room.memory.trading.purchaseTarget === undefined) this.room.memory.trading.purchaseTarget = {} - if (Game.cpu.bucket > 6000 || (Game.cpu.bucket > 3000 && Game.time % 10 == 0)) { - this.doTransfers() - } + if (Game.cpu.bucket > 6000 || (Game.cpu.bucket > 3000 && Game.time % 10 == 0)) { + this.doTransfers() + } - if (this.room.name != 'W17N16' && this.room.name != 'W21N9' && this.room.name != 'W21N8') - return - //This should be below the isTradingPossible check, but that doesn't use the correct - // logic. It needs to use the same work queue that the creep does. - if (!this.isTradingPossible()) return + if (this.room.name != 'W17N16' && this.room.name != 'W21N9' && this.room.name != 'W21N8') return + //This should be below the isTradingPossible check, but that doesn't use the correct + // logic. It needs to use the same work queue that the creep does. + if (!this.isTradingPossible()) return - if (Game.cpu.bucket > 6000 || (Game.cpu.bucket > 3000 && Game.time % 10 == 0)) { - this.doTrading() - } + if (Game.cpu.bucket > 6000 || (Game.cpu.bucket > 3000 && Game.time % 10 == 0)) { + this.doTrading() } - - amountInRoom(resource: ResourceConstant, roomName: string = null) { - let room = this.room - if (roomName) room = Game.rooms[roomName] - if (!room) console.log('Somethings wrong. room is null. RN: ' + roomName) - return ( - (room.terminal.store[resource] || 0) + - (room.storage.store[resource] || 0) + - (room.roomManager.structures.factory - ? room.roomManager.structures.factory[0].store[resource] || 0 - : 0) + } + + amountInRoom(resource: ResourceConstant, roomName: string = null) { + let room = this.room + if (roomName) room = Game.rooms[roomName] + if (!room) console.log('Somethings wrong. room is null. RN: ' + roomName) + return ( + (room.terminal.store[resource] || 0) + + (room.storage.store[resource] || 0) + + (room.roomManager.structures.factory + ? room.roomManager.structures.factory[0].store[resource] || 0 + : 0) + ) + } + + sendResourceToRoom(resource: ResourceConstant, rooms: string[]) { + for (let room of rooms) { + if (this.room.name == room) continue + + if (this.amountInRoom(resource) > this.amountInRoom(resource, room) * 2) { + let transferAmount = Math.min( + this.amountInRoom(resource) / 2, + this.terminal.store[resource], + this.terminal.store[RESOURCE_ENERGY], ) - } + if (transferAmount == 0) continue - sendResourceToRoom(resource: ResourceConstant, rooms: string[]) { - for (let room of rooms) { - if (this.room.name == room) continue - - if (this.amountInRoom(resource) > this.amountInRoom(resource, room) * 2) { - let transferAmount = Math.min( - this.amountInRoom(resource) / 2, - this.terminal.store[resource], - this.terminal.store[RESOURCE_ENERGY], - ) - if (transferAmount == 0) continue - - let result = this.terminal.send(resource, transferAmount, room) - if (result != OK) { - console.log( - `Error ${result} in transfer from ${this.room.name} to ${room}. ${resource}`, - ) - } else return true - } + let result = this.terminal.send(resource, transferAmount, room) + if (result != OK) { + console.log(`Error ${result} in transfer from ${this.room.name} to ${room}. ${resource}`) + } else return true + } + } + return false + } + + doTransfers(): boolean { + if (this.terminal.cooldown > 0) return false + + // if (Game.shard.name == 'shard1') { + // if (this.room.name == 'W29N19') { + // if (this.sendAllToRooms('KH2O', ['W21N8'])) return true + // if (this.terminal.store['UL'] > 5000) if (this.sendAllToRooms('UL', ['W21N8'])) return true + // if (this.terminal.store[RESOURCE_UTRIUM_BAR] > 5000) + // if (this.sendAllToRooms(RESOURCE_UTRIUM_BAR, ['W21N8'])) return true + // if (this.terminal.store[RESOURCE_LEMERGIUM_BAR] > 5000) + // if (this.sendAllToRooms(RESOURCE_LEMERGIUM_BAR, ['W21N8'])) return true + // if (this.terminal.store[RESOURCE_OXIDANT] > 5000) + // if (this.sendAllToRooms(RESOURCE_OXIDANT, ['W21N8'])) return true + // if (this.terminal.store[RESOURCE_OXYGEN] > 5000) + // if (this.sendAllToRooms(RESOURCE_OXYGEN, ['W21N8'])) return true + // } + // } + + if (Game.shard.name != 'shard3') return false + + //Balance out the energy some. + let amountOfEnergy = this.amountInRoom(RESOURCE_ENERGY) + if (amountOfEnergy > 450000) { + let result = _.min( + _.filter( + Game.rooms, + rm => + rm.controller && + rm.controller.my && + rm.storage && + rm.terminal && + rm.name != 'W19N15' && + rm.name != 'W15N18', + ), + room => + (room.terminal.store[RESOURCE_ENERGY] || 0) + (room.storage.store[RESOURCE_ENERGY] || 0), + //The TS @type for _min is wrong, it'll return infinity, if there's no results. + ) as Room | number + let lowestRoom = result === Infinity ? null : (result as Room) + //console.log('Pondering Energy transfer from ' + this.room.name + ' to ' + lowestRoom.name + ' E:' + amountOfEnergy + ' targetE: ' + this.amountInRoom(RESOURCE_ENERGY, lowestRoom.name)); + //If there was a room, and it's not the current room, and there's a big difference between the lowest room and this room + if ( + lowestRoom != null && + lowestRoom.name != this.room.name && + amountOfEnergy - this.amountInRoom(RESOURCE_ENERGY, lowestRoom.name) > 100000 && + lowestRoom.terminal && + lowestRoom.terminal.store.getFreeCapacity(RESOURCE_ENERGY) > 50000 + ) { + console.log('LowTransfer to: ' + lowestRoom.name) + let amountToTransfer = Math.min(this.terminal.store[RESOURCE_ENERGY], 50000) + let transactionCost = Game.market.calcTransactionCost(1000, this.room.name, lowestRoom.name) + //The rounding is slightly off, so don't transfer all the energy, just 99% of it... + amountToTransfer = (1000 / (1000 + transactionCost)) * amountToTransfer * 0.99 + let result = this.terminal.send(RESOURCE_ENERGY, amountToTransfer, lowestRoom.name) + if (result != OK) { + console.log('Error in energy balance transfer. ' + result) } - return false + return result == OK + } } - doTransfers(): boolean { - if (this.terminal.cooldown > 0) return false - - // if (Game.shard.name == 'shard1') { - // if (this.room.name == 'W29N19') { - // if (this.sendAllToRooms('KH2O', ['W21N8'])) return true - // if (this.terminal.store['UL'] > 5000) if (this.sendAllToRooms('UL', ['W21N8'])) return true - // if (this.terminal.store[RESOURCE_UTRIUM_BAR] > 5000) - // if (this.sendAllToRooms(RESOURCE_UTRIUM_BAR, ['W21N8'])) return true - // if (this.terminal.store[RESOURCE_LEMERGIUM_BAR] > 5000) - // if (this.sendAllToRooms(RESOURCE_LEMERGIUM_BAR, ['W21N8'])) return true - // if (this.terminal.store[RESOURCE_OXIDANT] > 5000) - // if (this.sendAllToRooms(RESOURCE_OXIDANT, ['W21N8'])) return true - // if (this.terminal.store[RESOURCE_OXYGEN] > 5000) - // if (this.sendAllToRooms(RESOURCE_OXYGEN, ['W21N8'])) return true - // } - // } - - if (Game.shard.name != 'shard3') return false - - //Balance out the energy some. - let amountOfEnergy = this.amountInRoom(RESOURCE_ENERGY) - if (amountOfEnergy > 450000) { - let result = _.min( - _.filter( - Game.rooms, - rm => - rm.controller && - rm.controller.my && - rm.storage && - rm.terminal && - rm.name != 'W19N15' && - rm.name != 'W15N18', - ), - room => - (room.terminal.store[RESOURCE_ENERGY] || 0) + - (room.storage.store[RESOURCE_ENERGY] || 0), - //The TS @type for _min is wrong, it'll return infinity, if there's no results. - ) as Room | number - let lowestRoom = result === Infinity ? null : (result as Room) - //console.log('Pondering Energy transfer from ' + this.room.name + ' to ' + lowestRoom.name + ' E:' + amountOfEnergy + ' targetE: ' + this.amountInRoom(RESOURCE_ENERGY, lowestRoom.name)); - //If there was a room, and it's not the current room, and there's a big difference between the lowest room and this room - if ( - lowestRoom != null && - lowestRoom.name != this.room.name && - amountOfEnergy - this.amountInRoom(RESOURCE_ENERGY, lowestRoom.name) > 100000 && - lowestRoom.terminal && - lowestRoom.terminal.store.getFreeCapacity(RESOURCE_ENERGY) > 50000 - ) { - console.log('LowTransfer to: ' + lowestRoom.name) - let amountToTransfer = Math.min(this.terminal.store[RESOURCE_ENERGY], 50000) - let transactionCost = Game.market.calcTransactionCost( - 1000, - this.room.name, - lowestRoom.name, - ) - //The rounding is slightly off, so don't transfer all the energy, just 99% of it... - amountToTransfer = (1000 / (1000 + transactionCost)) * amountToTransfer * 0.99 - let result = this.terminal.send(RESOURCE_ENERGY, amountToTransfer, lowestRoom.name) - if (result != OK) { - console.log('Error in energy balance transfer. ' + result) - } - return result == OK - } + if (this.room.name == 'W19N15') { + for (let resource of [RESOURCE_MIST, RESOURCE_WIRE, RESOURCE_CONDENSATE, RESOURCE_CELL]) { + if (this.terminal.store[resource] > 100) { + let result = this.terminal.send(resource, this.terminal.store[resource], 'W17N16') + if (result != OK) { + console.log('Error in transfer. ' + result + resource) + } + return result == OK } + } + } - if (this.room.name == 'W19N15') { - for (let resource of [ - RESOURCE_MIST, - RESOURCE_WIRE, - RESOURCE_CONDENSATE, - RESOURCE_CELL, - ]) { - if (this.terminal.store[resource] > 100) { - let result = this.terminal.send( - resource, - this.terminal.store[resource], - 'W17N16', - ) - if (result != OK) { - console.log('Error in transfer. ' + result + resource) - } - return result == OK - } - } - } + // if(this.room.name == "W19N15" || this.room.name == "W15N18") { + // if(this.amountInRoom(RESOURCE_ENERGY) > 200000 && this.terminal.store[RESOURCE_ENERGY] > 40000) { + // this.terminal.send(RESOURCE_ENERGY, this.terminal.store[RESOURCE_ENERGY] * .9, "W17N16") + // return true; + // } + // } + + if (this.sendResourceToRoom(RESOURCE_MIST, ['W14N18'])) return true + if (this.sendResourceToRoom(RESOURCE_CONDENSATE, ['W15N18', 'W17N16'])) return true + + if (this.sendAllToRooms(RESOURCE_MUSCLE, ['W17N16'])) return true + if (this.sendAllToRooms(RESOURCE_TISSUE, ['W18N16'])) return true + if (this.sendAllToRooms(RESOURCE_PHLEGM, ['W18N16', 'W15N18'])) return true + if (this.sendAllToRooms(RESOURCE_CELL, ['W17N16', 'W15N18'])) return true + if (this.sendAllToRooms('XGH2O', ['W17N16'])) return true + + if (this.sendAllToRooms(RESOURCE_WIRE, ['W17N16', 'W18N16', 'W15N18'])) return true + if (this.sendAllToRooms(RESOURCE_SWITCH, ['W15N18'])) return true + if (this.sendSomeToRooms(RESOURCE_COMPOSITE, ['W18N16'])) return true + if (this.sendAllToRooms(RESOURCE_TRANSISTOR, ['W18N16'])) return true + if (this.sendAllToRooms(RESOURCE_MICROCHIP, ['W17N16'])) return true + + if ( + this.terminal.store[RESOURCE_CONCENTRATE] > 100 && + this.room.name != 'W18N16' && + this.room.name != 'W15N18' + ) { + let result = this.terminal.send( + RESOURCE_CONCENTRATE, + this.terminal.store[RESOURCE_CONCENTRATE], + 'W15N18', + ) + if (result != OK) { + console.log('Error in transfer. ' + result + RESOURCE_CONCENTRATE) + } + return result == OK + } - // if(this.room.name == "W19N15" || this.room.name == "W15N18") { - // if(this.amountInRoom(RESOURCE_ENERGY) > 200000 && this.terminal.store[RESOURCE_ENERGY] > 40000) { - // this.terminal.send(RESOURCE_ENERGY, this.terminal.store[RESOURCE_ENERGY] * .9, "W17N16") - // return true; - // } - // } + if ( + this.amountInRoom(RESOURCE_OPS) > this.amountInRoom(RESOURCE_OPS, 'W15N18') * 2 && + this.room.name != 'W15N18' && + this.terminal.store[RESOURCE_OPS] + ) { + let result = this.terminal.send( + RESOURCE_OPS, + Math.min( + this.amountInRoom(RESOURCE_OPS) / 2, + this.terminal.store[RESOURCE_OPS], + this.terminal.store[RESOURCE_ENERGY], + ), + 'W15N18', + ) + if (result != OK) { + console.log('Error in transfer. ' + result + RESOURCE_OPS) + } + return result == OK + } + if ( + this.amountInRoom(RESOURCE_OPS) > this.amountInRoom(RESOURCE_OPS, 'W17N16') * 2 && + this.room.name != 'W17N16' && + this.terminal.store[RESOURCE_OPS] + ) { + let result = this.terminal.send( + RESOURCE_OPS, + Math.min( + this.amountInRoom(RESOURCE_OPS) / 2, + this.terminal.store[RESOURCE_OPS], + this.terminal.store[RESOURCE_ENERGY], + ), + 'W17N16', + ) + if (result != OK) { + console.log('Error in transfer. ' + result + RESOURCE_OPS) + } + return result == OK + } - if (this.sendResourceToRoom(RESOURCE_MIST, ['W14N18'])) return true - if (this.sendResourceToRoom(RESOURCE_CONDENSATE, ['W15N18', 'W17N16'])) return true + if ( + this.amountInRoom(RESOURCE_CONCENTRATE) > + this.amountInRoom(RESOURCE_CONCENTRATE, 'W18N16') * 2 && + this.room.name != 'W18N16' && + this.terminal.store[RESOURCE_CONCENTRATE] + ) { + let result = this.terminal.send( + RESOURCE_CONCENTRATE, + Math.min( + this.amountInRoom(RESOURCE_CONCENTRATE) / 2, + this.terminal.store[RESOURCE_CONCENTRATE], + this.terminal.store[RESOURCE_ENERGY], + ), + 'W18N16', + ) + if (result != OK) { + console.log('Error in transfer. ' + result + RESOURCE_CONCENTRATE) + } + return result == OK + } + if ( + this.amountInRoom(RESOURCE_CONCENTRATE) > + this.amountInRoom(RESOURCE_CONCENTRATE, 'W15N18') * 2 && + this.room.name != 'W15N18' && + this.terminal.store[RESOURCE_CONCENTRATE] + ) { + let result = this.terminal.send( + RESOURCE_CONCENTRATE, + Math.min( + this.amountInRoom(RESOURCE_CONCENTRATE) / 2, + this.terminal.store[RESOURCE_CONCENTRATE], + this.terminal.store[RESOURCE_ENERGY], + ), + 'W15N18', + ) + if (result != OK) { + console.log('Error in transfer. ' + result + RESOURCE_CONCENTRATE) + } + return result == OK + } - if (this.sendAllToRooms(RESOURCE_MUSCLE, ['W17N16'])) return true - if (this.sendAllToRooms(RESOURCE_TISSUE, ['W18N16'])) return true - if (this.sendAllToRooms(RESOURCE_PHLEGM, ['W18N16', 'W15N18'])) return true - if (this.sendAllToRooms(RESOURCE_CELL, ['W17N16', 'W15N18'])) return true - if (this.sendAllToRooms('XGH2O', ['W17N16'])) return true + if ( + this.amountInRoom(RESOURCE_EXTRACT) > this.amountInRoom(RESOURCE_EXTRACT, 'W18N16') * 2 && + this.room.name != 'W18N16' && + this.terminal.store[RESOURCE_EXTRACT] + ) { + let result = this.terminal.send( + RESOURCE_EXTRACT, + Math.min( + this.amountInRoom(RESOURCE_EXTRACT) / 2, + this.terminal.store[RESOURCE_EXTRACT], + this.terminal.store[RESOURCE_ENERGY], + ), + 'W18N16', + ) + if (result != OK) { + console.log('Error in transfer. ' + result + RESOURCE_EXTRACT) + } + return result == OK + } - if (this.sendAllToRooms(RESOURCE_WIRE, ['W17N16', 'W18N16', 'W15N18'])) return true - if (this.sendAllToRooms(RESOURCE_SWITCH, ['W15N18'])) return true - if (this.sendSomeToRooms(RESOURCE_COMPOSITE, ['W18N16'])) return true - if (this.sendAllToRooms(RESOURCE_TRANSISTOR, ['W18N16'])) return true - if (this.sendAllToRooms(RESOURCE_MICROCHIP, ['W17N16'])) return true + if ( + this.amountInRoom(RESOURCE_KEANIUM_BAR) > + this.amountInRoom(RESOURCE_KEANIUM_BAR, 'W17N16') * 2 && + this.room.name != 'W17N16' && + this.terminal.store[RESOURCE_KEANIUM_BAR] + ) { + let result = this.terminal.send( + RESOURCE_KEANIUM_BAR, + Math.min( + this.amountInRoom(RESOURCE_KEANIUM_BAR) / 2, + this.terminal.store[RESOURCE_KEANIUM_BAR], + this.terminal.store[RESOURCE_ENERGY], + ), + 'W17N16', + ) + if (result != OK) { + console.log('Error in transfer. ' + result + RESOURCE_KEANIUM_BAR) + } + return result == OK + } - if ( - this.terminal.store[RESOURCE_CONCENTRATE] > 100 && - this.room.name != 'W18N16' && - this.room.name != 'W15N18' - ) { - let result = this.terminal.send( - RESOURCE_CONCENTRATE, - this.terminal.store[RESOURCE_CONCENTRATE], - 'W15N18', - ) - if (result != OK) { - console.log('Error in transfer. ' + result + RESOURCE_CONCENTRATE) - } - return result == OK - } + if ( + this.amountInRoom(RESOURCE_REDUCTANT) > this.amountInRoom(RESOURCE_REDUCTANT, 'W17N16') * 2 && + this.room.name != 'W17N16' && + this.terminal.store[RESOURCE_REDUCTANT] + ) { + let result = this.terminal.send( + RESOURCE_REDUCTANT, + Math.min( + this.amountInRoom(RESOURCE_REDUCTANT) / 2, + this.terminal.store[RESOURCE_REDUCTANT], + this.terminal.store[RESOURCE_ENERGY], + ), + 'W17N16', + ) + if (result != OK) { + console.log('Error in transfer. ' + result + RESOURCE_REDUCTANT) + } + return result == OK + } - if ( - this.amountInRoom(RESOURCE_OPS) > this.amountInRoom(RESOURCE_OPS, 'W15N18') * 2 && - this.room.name != 'W15N18' && - this.terminal.store[RESOURCE_OPS] - ) { - let result = this.terminal.send( - RESOURCE_OPS, - Math.min( - this.amountInRoom(RESOURCE_OPS) / 2, - this.terminal.store[RESOURCE_OPS], - this.terminal.store[RESOURCE_ENERGY], - ), - 'W15N18', - ) - if (result != OK) { - console.log('Error in transfer. ' + result + RESOURCE_OPS) - } - return result == OK - } - if ( - this.amountInRoom(RESOURCE_OPS) > this.amountInRoom(RESOURCE_OPS, 'W17N16') * 2 && - this.room.name != 'W17N16' && - this.terminal.store[RESOURCE_OPS] - ) { - let result = this.terminal.send( - RESOURCE_OPS, - Math.min( - this.amountInRoom(RESOURCE_OPS) / 2, - this.terminal.store[RESOURCE_OPS], - this.terminal.store[RESOURCE_ENERGY], - ), - 'W17N16', - ) - if (result != OK) { - console.log('Error in transfer. ' + result + RESOURCE_OPS) - } - return result == OK - } + if ( + this.amountInRoom(RESOURCE_REDUCTANT) > this.amountInRoom(RESOURCE_REDUCTANT, 'W15N18') * 2 && + this.room.name != 'W15N18' && + this.terminal.store[RESOURCE_REDUCTANT] + ) { + let result = this.terminal.send( + RESOURCE_REDUCTANT, + Math.min( + this.amountInRoom(RESOURCE_REDUCTANT) / 2, + this.terminal.store[RESOURCE_REDUCTANT], + this.terminal.store[RESOURCE_ENERGY], + ), + 'W15N18', + ) + if (result != OK) { + console.log('Error in transfer. ' + result + RESOURCE_REDUCTANT) + } + return result == OK + } - if ( - this.amountInRoom(RESOURCE_CONCENTRATE) > - this.amountInRoom(RESOURCE_CONCENTRATE, 'W18N16') * 2 && - this.room.name != 'W18N16' && - this.terminal.store[RESOURCE_CONCENTRATE] - ) { - let result = this.terminal.send( - RESOURCE_CONCENTRATE, - Math.min( - this.amountInRoom(RESOURCE_CONCENTRATE) / 2, - this.terminal.store[RESOURCE_CONCENTRATE], - this.terminal.store[RESOURCE_ENERGY], - ), - 'W18N16', - ) - if (result != OK) { - console.log('Error in transfer. ' + result + RESOURCE_CONCENTRATE) - } - return result == OK - } - if ( - this.amountInRoom(RESOURCE_CONCENTRATE) > - this.amountInRoom(RESOURCE_CONCENTRATE, 'W15N18') * 2 && - this.room.name != 'W15N18' && - this.terminal.store[RESOURCE_CONCENTRATE] - ) { - let result = this.terminal.send( - RESOURCE_CONCENTRATE, - Math.min( - this.amountInRoom(RESOURCE_CONCENTRATE) / 2, - this.terminal.store[RESOURCE_CONCENTRATE], - this.terminal.store[RESOURCE_ENERGY], - ), - 'W15N18', - ) - if (result != OK) { - console.log('Error in transfer. ' + result + RESOURCE_CONCENTRATE) - } - return result == OK - } + if ( + this.amountInRoom(RESOURCE_REDUCTANT) > this.amountInRoom(RESOURCE_REDUCTANT, 'W18N16') * 2 && + this.room.name != 'W18N16' && + this.terminal.store[RESOURCE_REDUCTANT] + ) { + let result = this.terminal.send( + RESOURCE_REDUCTANT, + Math.min( + this.amountInRoom(RESOURCE_REDUCTANT) / 2, + this.terminal.store[RESOURCE_REDUCTANT], + this.terminal.store[RESOURCE_ENERGY], + ), + 'W18N16', + ) + if (result != OK) { + console.log('Error in transfer. ' + result + RESOURCE_REDUCTANT) + } + return result == OK + } - if ( - this.amountInRoom(RESOURCE_EXTRACT) > - this.amountInRoom(RESOURCE_EXTRACT, 'W18N16') * 2 && - this.room.name != 'W18N16' && - this.terminal.store[RESOURCE_EXTRACT] - ) { - let result = this.terminal.send( - RESOURCE_EXTRACT, - Math.min( - this.amountInRoom(RESOURCE_EXTRACT) / 2, - this.terminal.store[RESOURCE_EXTRACT], - this.terminal.store[RESOURCE_ENERGY], - ), - 'W18N16', - ) - if (result != OK) { - console.log('Error in transfer. ' + result + RESOURCE_EXTRACT) - } - return result == OK + if (this.sendResourceToRoom(RESOURCE_REDUCTANT, ['W18N16', 'W17N16'])) return true + if (this.balanceResourceToRCL8Rooms([RESOURCE_POWER])) { + } //this function doesn't return it's bool correctly... It needs to be re-tested now. + + //Move finished good for final delivery. + if (this.room.name != 'W17N16') + for (let resource of [RESOURCE_SPIRIT]) { + if (this.terminal.store[resource] > 0) { + let result = this.terminal.send( + resource, + Math.min(this.terminal.store[resource], this.terminal.store[RESOURCE_ENERGY]), + 'W17N16', + ) + if (result != OK) { + console.log(`Error ${result} in ${resource} transfer.`) + } + return result == OK } + } + return false + } + + //This should evenly divide the resources between the two rooms, including the rooms sending supplies to each other. Right now, this + // Is just the first draft. But the key part of this function is the only room that should need the resource are specified in rooms, and + // Anyone else who has that resource is wrong. + sendAllToRooms(resource: ResourceConstant, rooms: string[]) { + if (!this.room.terminal.store[resource]) return false + + let result = _.min( + rooms.map(rm => Game.rooms[rm]).filter(rm => rm.terminal && rm.storage && rm != this.room), + rm => (rm.storage.store[resource] || 0) + (rm.terminal.store[resource] || 0), + ) as Room | number + let neediestRoom = result === Infinity ? null : (result as Room) + if (neediestRoom != null) { + let amount = Math.min(this.terminal.store[resource], this.terminal.store[RESOURCE_ENERGY]) + + //Don't send all of the resource, only send 1/3 of the colonly's total assets (if there's 2 rooms) to each room, this way the lower rooms + //Get a decent chance at the resources. + if (rooms.length > 1) + amount = Math.min( + amount, + Math.ceil((Memory.masterPlan.resources[resource] || 0) / (rooms.length + 1)), + ) - if ( - this.amountInRoom(RESOURCE_KEANIUM_BAR) > - this.amountInRoom(RESOURCE_KEANIUM_BAR, 'W17N16') * 2 && - this.room.name != 'W17N16' && - this.terminal.store[RESOURCE_KEANIUM_BAR] - ) { - let result = this.terminal.send( - RESOURCE_KEANIUM_BAR, - Math.min( - this.amountInRoom(RESOURCE_KEANIUM_BAR) / 2, - this.terminal.store[RESOURCE_KEANIUM_BAR], - this.terminal.store[RESOURCE_ENERGY], - ), - 'W17N16', - ) - if (result != OK) { - console.log('Error in transfer. ' + result + RESOURCE_KEANIUM_BAR) - } - return result == OK - } + //If the current room needs the resource as well, use totally different logic. Send half the difference between this room and the other + if (rooms.includes(this.room.name)) { + if (this.amountInRoom(resource) / 2 < this.amountInRoom(resource, neediestRoom.name)) + return false - if ( - this.amountInRoom(RESOURCE_REDUCTANT) > - this.amountInRoom(RESOURCE_REDUCTANT, 'W17N16') * 2 && - this.room.name != 'W17N16' && - this.terminal.store[RESOURCE_REDUCTANT] - ) { - let result = this.terminal.send( - RESOURCE_REDUCTANT, - Math.min( - this.amountInRoom(RESOURCE_REDUCTANT) / 2, - this.terminal.store[RESOURCE_REDUCTANT], - this.terminal.store[RESOURCE_ENERGY], - ), - 'W17N16', - ) - if (result != OK) { - console.log('Error in transfer. ' + result + RESOURCE_REDUCTANT) - } - return result == OK + amount = Math.min( + (this.amountInRoom(resource) - this.amountInRoom(resource, neediestRoom.name)) / 2, + this.terminal.store[resource], + this.terminal.store[RESOURCE_ENERGY], + ) + } + + if (amount <= 0) return false + let result = this.terminal.send(resource, amount, neediestRoom.name) + //console.log(`Sending all ${resource} from ${this.room.name} to ${neediestRoom.name}.`) + if (result != OK) { + console.log( + `sendAllToRooms: Error ${result} in ${resource} transfer from ${this.room.name}.`, + ) + } + return result == OK + } + return false + } + + sendSomeToRooms(resource: ResourceConstant, rooms: string[]): boolean { + if (!this.room.terminal.store[resource]) return false + + for (let room of rooms) { + if ( + this.amountInRoom(resource) > this.amountInRoom(resource, room) * 2 && + this.room.name != room && + this.terminal.store[resource] + ) { + let result = this.terminal.send( + resource, + Math.min( + this.amountInRoom(resource) / 2, + this.terminal.store[resource], + this.terminal.store[RESOURCE_ENERGY], + ), + room, + ) + console.log(`Sending some ${resource} from ${this.room.name} to ${room}.`) + if (result != OK) { + console.log('Error in transfer. ' + result + resource) } - - if ( - this.amountInRoom(RESOURCE_REDUCTANT) > - this.amountInRoom(RESOURCE_REDUCTANT, 'W15N18') * 2 && - this.room.name != 'W15N18' && - this.terminal.store[RESOURCE_REDUCTANT] - ) { - let result = this.terminal.send( - RESOURCE_REDUCTANT, - Math.min( - this.amountInRoom(RESOURCE_REDUCTANT) / 2, - this.terminal.store[RESOURCE_REDUCTANT], - this.terminal.store[RESOURCE_ENERGY], - ), - 'W15N18', + return result == OK + } + } + return false + } + + balanceResourceToRCL8Rooms(resources: ResourceConstant[]): boolean { + let possibleRooms = _.filter( + Game.rooms, + rm => + rm.controller && + rm.controller.my && + rm.controller.level == 8 && + rm.terminal && + rm != this.room, + ) + for (let resource of resources) { + let thisRoomAmount = + (this.terminal.store[resource] || 0) + (this.room.storage.store[resource] || 0) + if (thisRoomAmount === 0) continue + for (let targetRoom of possibleRooms) { + let targetRoomAmount = + (targetRoom.terminal.store[resource] || 0) + (targetRoom.storage.store[resource] || 0) + if (thisRoomAmount > targetRoomAmount * 2) { + let amount = Math.min( + thisRoomAmount / 2, + this.terminal.store[resource], + this.terminal.store[RESOURCE_ENERGY], + ) + if (amount == 0) continue + let result = this.terminal.send(resource, amount, targetRoom.name) + if (result != OK) { + console.log( + `balanceResourceToRCL8Rooms: Error ${result} in ${resource} transfer from ${this.room.name}.`, ) - if (result != OK) { - console.log('Error in transfer. ' + result + RESOURCE_REDUCTANT) - } - return result == OK + } + return result == OK } + } + } + return false + } + + getBestSell(resource: ResourceConstant, energyPrice: number) { + return _.first( + _.sortBy( + _.map( + this.dataCache[ORDER_SELL][resource].filter(ord => ord.remainingAmount > 0), + order => ({ + orderId: order.id, + remainingAmount: order.remainingAmount, + adjCost: + order.price + + (energyPrice * + Game.market.calcTransactionCost(1000, this.room.name, order.roomName)) / + 1000, + origPrice: order.price, + }), + ), + o => o.adjCost, + ), + ) + } + + getBestBuy(resource: ResourceConstant, energyPrice: number) { + return _.first( + _.sortBy( + _.map( + this.dataCache[ORDER_BUY][resource] + .filter(ord => !tradeBlacklistRoomNames.includes(ord.roomName)) + .filter(ord => ord.remainingAmount > 0 && ord.amount > 0), + order => ({ + orderId: order.id, + remainingAmount: order.remainingAmount, + adjCost: + order.price - + (energyPrice * + Game.market.calcTransactionCost(1000, this.room.name, order.roomName)) / + 1000, + origPrice: order.price, + }), + ), + o => -o.adjCost, + ), + ) + } + + updateBuyAvg(energyPrice: number) { + if (Game.time % 10 == 0) { + if (!this.room.memory[RoomMemoryKeys.marketData].buyAvg) + this.room.memory[RoomMemoryKeys.marketData].buyAvg = {} + + let resourceToTrackBuy = [ + RESOURCE_METAL, + RESOURCE_BIOMASS, + RESOURCE_SILICON, + RESOURCE_MIST, + RESOURCE_ZYNTHIUM_KEANITE, + RESOURCE_UTRIUM_LEMERGITE, + RESOURCE_POWER, + ...(_.keys(COMMODITIES) as ResourceConstant[]), + ] + for (let resource of resourceToTrackBuy) { + let bestBuy = this.getBestBuy(resource, energyPrice) + + if (bestBuy) { + if (!this.room.memory[RoomMemoryKeys.marketData].buyAvg[resource]) + this.room.memory[RoomMemoryKeys.marketData].buyAvg[resource] = bestBuy.adjCost + else + this.room.memory[RoomMemoryKeys.marketData].buyAvg[resource] = + this.room.memory[RoomMemoryKeys.marketData].buyAvg[resource] * 0.98 + + bestBuy.adjCost * 0.02 + } else { + //If we're not seeing people buying an item, let the price drift down slowly, so this number doesn't stay high. + this.room.memory[RoomMemoryKeys.marketData].buyAvg[resource] = + this.room.memory[RoomMemoryKeys.marketData].buyAvg[resource] * 0.995 - if ( - this.amountInRoom(RESOURCE_REDUCTANT) > - this.amountInRoom(RESOURCE_REDUCTANT, 'W18N16') * 2 && - this.room.name != 'W18N16' && - this.terminal.store[RESOURCE_REDUCTANT] - ) { - let result = this.terminal.send( - RESOURCE_REDUCTANT, - Math.min( - this.amountInRoom(RESOURCE_REDUCTANT) / 2, - this.terminal.store[RESOURCE_REDUCTANT], - this.terminal.store[RESOURCE_ENERGY], - ), - 'W18N16', - ) - if (result != OK) { - console.log('Error in transfer. ' + result + RESOURCE_REDUCTANT) - } - return result == OK + //If the data is messed up somehow (either zero or null, force it to a low value) + if (!this.room.memory[RoomMemoryKeys.marketData].buyAvg[resource]) + this.room.memory[RoomMemoryKeys.marketData].buyAvg[resource] = 0 } + } - if (this.sendResourceToRoom(RESOURCE_REDUCTANT, ['W18N16', 'W17N16'])) return true - if (this.balanceResourceToRCL8Rooms([RESOURCE_POWER])) { - } //this function doesn't return it's bool correctly... It needs to be re-tested now. - - //Move finished good for final delivery. - if (this.room.name != 'W17N16') - for (let resource of [RESOURCE_SPIRIT]) { - if (this.terminal.store[resource] > 0) { - let result = this.terminal.send( - resource, - Math.min( - this.terminal.store[resource], - this.terminal.store[RESOURCE_ENERGY], - ), - 'W17N16', - ) - if (result != OK) { - console.log(`Error ${result} in ${resource} transfer.`) - } - return result == OK - } - } - return false + let marketData = loadLocalMarketMemory() + marketData[this.room.name] = this.room.memory[RoomMemoryKeys.marketData] + storeLocalMarketMemory(marketData) } + } + + updateSellAvg(energyPrice: number) { + if (Game.time % 10 == 0) { + if (!this.room.memory[RoomMemoryKeys.marketData].sellAvg) + this.room.memory[RoomMemoryKeys.marketData].sellAvg = {} + + let resourceToTrackSell: ResourceConstant[] = [ + RESOURCE_ZYNTHIUM_KEANITE, + RESOURCE_UTRIUM_LEMERGITE, + RESOURCE_POWER, + RESOURCE_METAL, + RESOURCE_BIOMASS, + RESOURCE_SILICON, + RESOURCE_MIST, + ...(_.keys(COMMODITIES) as ResourceConstant[]), + ] + for (let resource of resourceToTrackSell) { + let bestSell = this.getBestSell(resource, energyPrice) + + //Detect market fuckery. Skip updates during it. + //Count the number of days in the past 14 where the current price is more then 3sigma outside of normal. + // If there's too many days outside of normal, refuse the price update, there's probably some price messing going on. + // The sell price doesn't have an upper bound, so it's easy to mess with this. + if (bestSell) { + //This is the number of days out of 14... + let daysOutside3Sigma = _.filter( + Game.market.getHistory(resource), + mh => bestSell.origPrice > mh.avgPrice + 3 * mh.stddevPrice, + ).length + if (daysOutside3Sigma >= 12) { + //console.log("Possible market manipulation of " + resource + " skipping price update for that resource."); + continue + } + + if (!this.room.memory[RoomMemoryKeys.marketData].sellAvg[resource]) + this.room.memory[RoomMemoryKeys.marketData].sellAvg[resource] = bestSell.adjCost + else + this.room.memory[RoomMemoryKeys.marketData].sellAvg[resource] = + this.room.memory[RoomMemoryKeys.marketData].sellAvg[resource] * 0.995 + + bestSell.adjCost * 0.005 + } else { + //If we're not seeing the item for sale, let the price drift up slowly, so this number doesn't stay too low. + this.room.memory[RoomMemoryKeys.marketData].sellAvg[resource] = + this.room.memory[RoomMemoryKeys.marketData].sellAvg[resource] * 1.005 - //This should evenly divide the resources between the two rooms, including the rooms sending supplies to each other. Right now, this - // Is just the first draft. But the key part of this function is the only room that should need the resource are specified in rooms, and - // Anyone else who has that resource is wrong. - sendAllToRooms(resource: ResourceConstant, rooms: string[]) { - if (!this.room.terminal.store[resource]) return false - - let result = _.min( - rooms - .map(rm => Game.rooms[rm]) - .filter(rm => rm.terminal && rm.storage && rm != this.room), - rm => (rm.storage.store[resource] || 0) + (rm.terminal.store[resource] || 0), - ) as Room | number - let neediestRoom = result === Infinity ? null : (result as Room) - if (neediestRoom != null) { - let amount = Math.min( - this.terminal.store[resource], - this.terminal.store[RESOURCE_ENERGY], - ) - - //Don't send all of the resource, only send 1/3 of the colonly's total assets (if there's 2 rooms) to each room, this way the lower rooms - //Get a decent chance at the resources. - if (rooms.length > 1) - amount = Math.min( - amount, - Math.ceil((Memory.masterPlan.resources[resource] || 0) / (rooms.length + 1)), - ) - - //If the current room needs the resource as well, use totally different logic. Send half the difference between this room and the other - if (rooms.includes(this.room.name)) { - if ( - this.amountInRoom(resource) / 2 < - this.amountInRoom(resource, neediestRoom.name) - ) - return false - - amount = Math.min( - (this.amountInRoom(resource) - this.amountInRoom(resource, neediestRoom.name)) / - 2, - this.terminal.store[resource], - this.terminal.store[RESOURCE_ENERGY], - ) - } - - if (amount <= 0) return false - let result = this.terminal.send(resource, amount, neediestRoom.name) - //console.log(`Sending all ${resource} from ${this.room.name} to ${neediestRoom.name}.`) - if (result != OK) { - console.log( - `sendAllToRooms: Error ${result} in ${resource} transfer from ${this.room.name}.`, - ) - } - return result == OK + //If the data is messed up somehow (either zero or null, force it to a high value) + if (!this.room.memory[RoomMemoryKeys.marketData].sellAvg[resource]) + this.room.memory[RoomMemoryKeys.marketData].sellAvg[resource] = 99999999 } - return false - } - - sendSomeToRooms(resource: ResourceConstant, rooms: string[]): boolean { - if (!this.room.terminal.store[resource]) return false - - for (let room of rooms) { - if ( - this.amountInRoom(resource) > this.amountInRoom(resource, room) * 2 && - this.room.name != room && - this.terminal.store[resource] - ) { - let result = this.terminal.send( - resource, - Math.min( - this.amountInRoom(resource) / 2, - this.terminal.store[resource], - this.terminal.store[RESOURCE_ENERGY], - ), - room, - ) - console.log(`Sending some ${resource} from ${this.room.name} to ${room}.`) - if (result != OK) { - console.log('Error in transfer. ' + result + resource) - } - return result == OK - } + } + + //Now create the aquireCost tables, which is the cost to get it, either by buying the resource itself, or buying the inputs. + this.room.memory[RoomMemoryKeys.marketData].aquire = {} + for (let resource of [...(_.keys(COMMODITIES) as ResourceConstant[])]) { + if (resource == RESOURCE_ENERGY) continue + this.room.memory[RoomMemoryKeys.marketData].aquire[resource] = null + } + //Step 1: Energy + this.room.memory[RoomMemoryKeys.marketData].aquire[RESOURCE_ENERGY] = Math.min( + this.room.memory[RoomMemoryKeys.marketData][RESOURCE_ENERGY], + (this.room.memory[RoomMemoryKeys.marketData].sellAvg[RESOURCE_BATTERY] * + COMMODITIES[RESOURCE_ENERGY].components[RESOURCE_BATTERY]) / + COMMODITIES[RESOURCE_ENERGY].amount, + ) + //then the basic resource & the basic resource bars. But all of these involve energy, so we need to have an energy price to work from. + //This does not calculate G and GMelt, because those can be obtained from reactions. + for (let resource of [ + RESOURCE_HYDROGEN, + RESOURCE_OXYGEN, + RESOURCE_UTRIUM, + RESOURCE_KEANIUM, + RESOURCE_LEMERGIUM, + RESOURCE_ZYNTHIUM, + RESOURCE_CATALYST, + RESOURCE_UTRIUM_BAR, + RESOURCE_LEMERGIUM_BAR, + RESOURCE_ZYNTHIUM_BAR, + RESOURCE_KEANIUM_BAR, + RESOURCE_OXIDANT, + RESOURCE_REDUCTANT, + RESOURCE_PURIFIER, + RESOURCE_BATTERY, + ]) { + let buildCost = 0 + for (let comp in COMMODITIES[resource].components) { + let amount = + COMMODITIES[resource].components[ + comp as + | DepositConstant + | CommodityConstant + | MineralConstant + | RESOURCE_ENERGY + | RESOURCE_GHODIUM + ] + if (comp == RESOURCE_ENERGY) { + buildCost += + this.room.memory[RoomMemoryKeys.marketData].aquire[RESOURCE_ENERGY] * amount + } else { + buildCost += + this.room.memory[RoomMemoryKeys.marketData].sellAvg[ + comp as + | DepositConstant + | CommodityConstant + | MineralConstant + | RESOURCE_ENERGY + | RESOURCE_GHODIUM + ] * amount + } } - return false - } - - balanceResourceToRCL8Rooms(resources: ResourceConstant[]): boolean { - let possibleRooms = _.filter( - Game.rooms, - rm => - rm.controller && - rm.controller.my && - rm.controller.level == 8 && - rm.terminal && - rm != this.room, + this.room.memory[RoomMemoryKeys.marketData].aquire[resource] = Math.min( + this.room.memory[RoomMemoryKeys.marketData].sellAvg[resource], + buildCost / COMMODITIES[resource].amount, ) - for (let resource of resources) { - let thisRoomAmount = - (this.terminal.store[resource] || 0) + (this.room.storage.store[resource] || 0) - if (thisRoomAmount === 0) continue - for (let targetRoom of possibleRooms) { - let targetRoomAmount = - (targetRoom.terminal.store[resource] || 0) + - (targetRoom.storage.store[resource] || 0) - if (thisRoomAmount > targetRoomAmount * 2) { - let amount = Math.min( - thisRoomAmount / 2, - this.terminal.store[resource], - this.terminal.store[RESOURCE_ENERGY], - ) - if (amount == 0) continue - let result = this.terminal.send(resource, amount, targetRoom.name) - if (result != OK) { - console.log( - `balanceResourceToRCL8Rooms: Error ${result} in ${resource} transfer from ${this.room.name}.`, - ) - } - return result == OK - } - } + } + + //Now setup ZK, UL, and OH, since it's all the same logic. + for (let resource of [ + RESOURCE_ZYNTHIUM_KEANITE, + RESOURCE_UTRIUM_LEMERGITE, + RESOURCE_HYDROXIDE, + ]) { + let buildCost = 0 + switch (resource) { + case RESOURCE_ZYNTHIUM_KEANITE: + buildCost = + this.room.memory[RoomMemoryKeys.marketData].aquire[RESOURCE_ZYNTHIUM] + + this.room.memory[RoomMemoryKeys.marketData].aquire[RESOURCE_KEANIUM] + break + case RESOURCE_UTRIUM_LEMERGITE: + buildCost = + this.room.memory[RoomMemoryKeys.marketData].aquire[RESOURCE_UTRIUM] + + this.room.memory[RoomMemoryKeys.marketData].aquire[RESOURCE_LEMERGIUM] + break + case RESOURCE_HYDROXIDE: + buildCost = + this.room.memory[RoomMemoryKeys.marketData].aquire[RESOURCE_OXYGEN] + + this.room.memory[RoomMemoryKeys.marketData].aquire[RESOURCE_HYDROGEN] + break } - return false - } - - getBestSell(resource: ResourceConstant, energyPrice: number) { - return _.first( - _.sortBy( - _.map( - this.dataCache[ORDER_SELL][resource].filter(ord => ord.remainingAmount > 0), - order => ({ - orderId: order.id, - remainingAmount: order.remainingAmount, - adjCost: - order.price + - (energyPrice * - Game.market.calcTransactionCost( - 1000, - this.room.name, - order.roomName, - )) / - 1000, - origPrice: order.price, - }), - ), - o => o.adjCost, - ), + this.room.memory[RoomMemoryKeys.marketData].aquire[resource] = Math.min( + this.room.memory[RoomMemoryKeys.marketData].sellAvg[resource], + buildCost, ) - } - - getBestBuy(resource: ResourceConstant, energyPrice: number) { - return _.first( - _.sortBy( - _.map( - this.dataCache[ORDER_BUY][resource] - .filter(ord => !tradeBlacklistRoomNames.includes(ord.roomName)) - .filter(ord => ord.remainingAmount > 0 && ord.amount > 0), - order => ({ - orderId: order.id, - remainingAmount: order.remainingAmount, - adjCost: - order.price - - (energyPrice * - Game.market.calcTransactionCost( - 1000, - this.room.name, - order.roomName, - )) / - 1000, - origPrice: order.price, - }), - ), - o => -o.adjCost, - ), - ) - } - - updateBuyAvg(energyPrice: number) { - if (Game.time % 10 == 0) { - if (!this.room.memory[RoomMemoryKeys.marketData].buyAvg) - this.room.memory[RoomMemoryKeys.marketData].buyAvg = {} - - let resourceToTrackBuy = [ - RESOURCE_METAL, - RESOURCE_BIOMASS, - RESOURCE_SILICON, - RESOURCE_MIST, - RESOURCE_ZYNTHIUM_KEANITE, - RESOURCE_UTRIUM_LEMERGITE, - RESOURCE_POWER, - ...(_.keys(COMMODITIES) as ResourceConstant[]), + } + //Now calculate G, and GMelt, including the possibility of reacting it. + let gReactionCost = + this.room.memory[RoomMemoryKeys.marketData].aquire[RESOURCE_ZYNTHIUM_KEANITE] + + this.room.memory[RoomMemoryKeys.marketData].aquire[RESOURCE_UTRIUM_LEMERGITE] + for (let resource of [RESOURCE_GHODIUM, RESOURCE_GHODIUM_MELT]) { + let buildCost = 0 + for (let comp in COMMODITIES[resource].components) { + let amount = + COMMODITIES[resource].components[ + comp as + | DepositConstant + | CommodityConstant + | MineralConstant + | RESOURCE_ENERGY + | RESOURCE_GHODIUM ] - for (let resource of resourceToTrackBuy) { - let bestBuy = this.getBestBuy(resource, energyPrice) - - if (bestBuy) { - if (!this.room.memory[RoomMemoryKeys.marketData].buyAvg[resource]) - this.room.memory[RoomMemoryKeys.marketData].buyAvg[resource] = - bestBuy.adjCost - else - this.room.memory[RoomMemoryKeys.marketData].buyAvg[resource] = - this.room.memory[RoomMemoryKeys.marketData].buyAvg[resource] * 0.98 + - bestBuy.adjCost * 0.02 - } else { - //If we're not seeing people buying an item, let the price drift down slowly, so this number doesn't stay high. - this.room.memory[RoomMemoryKeys.marketData].buyAvg[resource] = - this.room.memory[RoomMemoryKeys.marketData].buyAvg[resource] * 0.995 - - //If the data is messed up somehow (either zero or null, force it to a low value) - if (!this.room.memory[RoomMemoryKeys.marketData].buyAvg[resource]) - this.room.memory[RoomMemoryKeys.marketData].buyAvg[resource] = 0 - } - } - - let marketData = loadLocalMarketMemory() - marketData[this.room.name] = this.room.memory[RoomMemoryKeys.marketData] - storeLocalMarketMemory(marketData) + if (comp == RESOURCE_ENERGY) { + buildCost += + this.room.memory[RoomMemoryKeys.marketData].aquire[RESOURCE_ENERGY] * amount + } else if (comp == RESOURCE_GHODIUM) { + buildCost += gReactionCost * amount + } else { + buildCost += + this.room.memory[RoomMemoryKeys.marketData].sellAvg[ + comp as + | DepositConstant + | CommodityConstant + | MineralConstant + | RESOURCE_ENERGY + | RESOURCE_GHODIUM + ] * amount + } } - } - - updateSellAvg(energyPrice: number) { - if (Game.time % 10 == 0) { - if (!this.room.memory[RoomMemoryKeys.marketData].sellAvg) - this.room.memory[RoomMemoryKeys.marketData].sellAvg = {} - - let resourceToTrackSell: ResourceConstant[] = [ - RESOURCE_ZYNTHIUM_KEANITE, - RESOURCE_UTRIUM_LEMERGITE, - RESOURCE_POWER, - RESOURCE_METAL, - RESOURCE_BIOMASS, - RESOURCE_SILICON, - RESOURCE_MIST, - ...(_.keys(COMMODITIES) as ResourceConstant[]), - ] - for (let resource of resourceToTrackSell) { - let bestSell = this.getBestSell(resource, energyPrice) - - //Detect market fuckery. Skip updates during it. - //Count the number of days in the past 14 where the current price is more then 3sigma outside of normal. - // If there's too many days outside of normal, refuse the price update, there's probably some price messing going on. - // The sell price doesn't have an upper bound, so it's easy to mess with this. - if (bestSell) { - //This is the number of days out of 14... - let daysOutside3Sigma = _.filter( - Game.market.getHistory(resource), - mh => bestSell.origPrice > mh.avgPrice + 3 * mh.stddevPrice, - ).length - if (daysOutside3Sigma >= 12) { - //console.log("Possible market manipulation of " + resource + " skipping price update for that resource."); - continue - } - - if (!this.room.memory[RoomMemoryKeys.marketData].sellAvg[resource]) - this.room.memory[RoomMemoryKeys.marketData].sellAvg[resource] = - bestSell.adjCost - else - this.room.memory[RoomMemoryKeys.marketData].sellAvg[resource] = - this.room.memory[RoomMemoryKeys.marketData].sellAvg[resource] * 0.995 + - bestSell.adjCost * 0.005 - } else { - //If we're not seeing the item for sale, let the price drift up slowly, so this number doesn't stay too low. - this.room.memory[RoomMemoryKeys.marketData].sellAvg[resource] = - this.room.memory[RoomMemoryKeys.marketData].sellAvg[resource] * 1.005 - - //If the data is messed up somehow (either zero or null, force it to a high value) - if (!this.room.memory[RoomMemoryKeys.marketData].sellAvg[resource]) - this.room.memory[RoomMemoryKeys.marketData].sellAvg[resource] = 99999999 - } - } - - //Now create the aquireCost tables, which is the cost to get it, either by buying the resource itself, or buying the inputs. - this.room.memory[RoomMemoryKeys.marketData].aquire = {} - for (let resource of [...(_.keys(COMMODITIES) as ResourceConstant[])]) { - if (resource == RESOURCE_ENERGY) continue - this.room.memory[RoomMemoryKeys.marketData].aquire[resource] = null - } - //Step 1: Energy - this.room.memory[RoomMemoryKeys.marketData].aquire[RESOURCE_ENERGY] = Math.min( - this.room.memory[RoomMemoryKeys.marketData][RESOURCE_ENERGY], - (this.room.memory[RoomMemoryKeys.marketData].sellAvg[RESOURCE_BATTERY] * - COMMODITIES[RESOURCE_ENERGY].components[RESOURCE_BATTERY]) / - COMMODITIES[RESOURCE_ENERGY].amount, - ) - //then the basic resource & the basic resource bars. But all of these involve energy, so we need to have an energy price to work from. - //This does not calculate G and GMelt, because those can be obtained from reactions. - for (let resource of [ - RESOURCE_HYDROGEN, - RESOURCE_OXYGEN, - RESOURCE_UTRIUM, - RESOURCE_KEANIUM, - RESOURCE_LEMERGIUM, - RESOURCE_ZYNTHIUM, - RESOURCE_CATALYST, - RESOURCE_UTRIUM_BAR, - RESOURCE_LEMERGIUM_BAR, - RESOURCE_ZYNTHIUM_BAR, - RESOURCE_KEANIUM_BAR, - RESOURCE_OXIDANT, - RESOURCE_REDUCTANT, - RESOURCE_PURIFIER, - RESOURCE_BATTERY, - ]) { - let buildCost = 0 - for (let comp in COMMODITIES[resource].components) { - let amount = - COMMODITIES[resource].components[ - comp as - | DepositConstant - | CommodityConstant - | MineralConstant - | RESOURCE_ENERGY - | RESOURCE_GHODIUM - ] - if (comp == RESOURCE_ENERGY) { - buildCost += - this.room.memory[RoomMemoryKeys.marketData].aquire[RESOURCE_ENERGY] * - amount - } else { - buildCost += - this.room.memory[RoomMemoryKeys.marketData].sellAvg[ - comp as - | DepositConstant - | CommodityConstant - | MineralConstant - | RESOURCE_ENERGY - | RESOURCE_GHODIUM - ] * amount - } - } - this.room.memory[RoomMemoryKeys.marketData].aquire[resource] = Math.min( - this.room.memory[RoomMemoryKeys.marketData].sellAvg[resource], - buildCost / COMMODITIES[resource].amount, - ) - } - - //Now setup ZK, UL, and OH, since it's all the same logic. - for (let resource of [ - RESOURCE_ZYNTHIUM_KEANITE, - RESOURCE_UTRIUM_LEMERGITE, - RESOURCE_HYDROXIDE, - ]) { - let buildCost = 0 - switch (resource) { - case RESOURCE_ZYNTHIUM_KEANITE: - buildCost = - this.room.memory[RoomMemoryKeys.marketData].aquire[RESOURCE_ZYNTHIUM] + - this.room.memory[RoomMemoryKeys.marketData].aquire[RESOURCE_KEANIUM] - break - case RESOURCE_UTRIUM_LEMERGITE: - buildCost = - this.room.memory[RoomMemoryKeys.marketData].aquire[RESOURCE_UTRIUM] + - this.room.memory[RoomMemoryKeys.marketData].aquire[RESOURCE_LEMERGIUM] - break - case RESOURCE_HYDROXIDE: - buildCost = - this.room.memory[RoomMemoryKeys.marketData].aquire[RESOURCE_OXYGEN] + - this.room.memory[RoomMemoryKeys.marketData].aquire[RESOURCE_HYDROGEN] - break - } - this.room.memory[RoomMemoryKeys.marketData].aquire[resource] = Math.min( - this.room.memory[RoomMemoryKeys.marketData].sellAvg[resource], - buildCost, - ) - } - //Now calculate G, and GMelt, including the possibility of reacting it. - let gReactionCost = - this.room.memory[RoomMemoryKeys.marketData].aquire[RESOURCE_ZYNTHIUM_KEANITE] + - this.room.memory[RoomMemoryKeys.marketData].aquire[RESOURCE_UTRIUM_LEMERGITE] - for (let resource of [RESOURCE_GHODIUM, RESOURCE_GHODIUM_MELT]) { - let buildCost = 0 - for (let comp in COMMODITIES[resource].components) { - let amount = - COMMODITIES[resource].components[ - comp as - | DepositConstant - | CommodityConstant - | MineralConstant - | RESOURCE_ENERGY - | RESOURCE_GHODIUM - ] - if (comp == RESOURCE_ENERGY) { - buildCost += - this.room.memory[RoomMemoryKeys.marketData].aquire[RESOURCE_ENERGY] * - amount - } else if (comp == RESOURCE_GHODIUM) { - buildCost += gReactionCost * amount - } else { - buildCost += - this.room.memory[RoomMemoryKeys.marketData].sellAvg[ - comp as - | DepositConstant - | CommodityConstant - | MineralConstant - | RESOURCE_ENERGY - | RESOURCE_GHODIUM - ] * amount - } - } - this.room.memory[RoomMemoryKeys.marketData].aquire[resource] = Math.min( - this.room.memory[RoomMemoryKeys.marketData].sellAvg[resource], - buildCost / COMMODITIES[resource].amount, - ) - if (resource == RESOURCE_GHODIUM) - this.room.memory[RoomMemoryKeys.marketData].aquire[resource] = Math.min( - this.room.memory[RoomMemoryKeys.marketData].aquire[resource], - gReactionCost, - ) - } - - for (let resource of [ - RESOURCE_METAL, - RESOURCE_BIOMASS, - RESOURCE_SILICON, - RESOURCE_MIST, - ]) { - let priceToUse = this.room.memory[RoomMemoryKeys.marketData].sellAvg[resource] - if (priceToUse === undefined || priceToUse === null || priceToUse >= 99999999) { - this.room.memory[RoomMemoryKeys.marketData].buyAvg - ? (priceToUse = - this.room.memory[RoomMemoryKeys.marketData].buyAvg[resource] * 1.5) - : 99999999 - } - this.room.memory[RoomMemoryKeys.marketData].aquire[resource] = priceToUse - } - let didWork = true - while (didWork) { - didWork = false - for (let resource of [ - ...(_.keys(COMMODITIES) as ( - | CommodityConstant - | MineralConstant - | RESOURCE_ENERGY - | RESOURCE_GHODIUM - )[]), - ]) { - //This is handled erlier in the code. - if (resource == RESOURCE_ENERGY) continue - if (this.room.memory[RoomMemoryKeys.marketData].aquire[resource]) continue - let buildCost = 0 - for (let comp in COMMODITIES[resource].components) { - let amount = - COMMODITIES[resource].components[ - comp as - | DepositConstant - | CommodityConstant - | MineralConstant - | RESOURCE_ENERGY - | RESOURCE_GHODIUM - ] - //This will go to undefined if we don't have an aquire cost set. - buildCost += - this.room.memory[RoomMemoryKeys.marketData].aquire[ - comp as - | DepositConstant - | CommodityConstant - | MineralConstant - | RESOURCE_ENERGY - | RESOURCE_GHODIUM - ] * amount - } - if (buildCost) { - this.room.memory[RoomMemoryKeys.marketData].aquire[resource] = Math.min( - this.room.memory[RoomMemoryKeys.marketData].sellAvg[resource] || - 99999999, - buildCost / COMMODITIES[resource].amount, - ) - if (this.room.memory[RoomMemoryKeys.marketData].aquire[resource]) - didWork = true - } - } - } - - let marketData = loadLocalMarketMemory() - marketData[this.room.name] = this.room.memory[RoomMemoryKeys.marketData] - storeLocalMarketMemory(marketData) + this.room.memory[RoomMemoryKeys.marketData].aquire[resource] = Math.min( + this.room.memory[RoomMemoryKeys.marketData].sellAvg[resource], + buildCost / COMMODITIES[resource].amount, + ) + if (resource == RESOURCE_GHODIUM) + this.room.memory[RoomMemoryKeys.marketData].aquire[resource] = Math.min( + this.room.memory[RoomMemoryKeys.marketData].aquire[resource], + gReactionCost, + ) + } + + for (let resource of [RESOURCE_METAL, RESOURCE_BIOMASS, RESOURCE_SILICON, RESOURCE_MIST]) { + let priceToUse = this.room.memory[RoomMemoryKeys.marketData].sellAvg[resource] + if (priceToUse === undefined || priceToUse === null || priceToUse >= 99999999) { + this.room.memory[RoomMemoryKeys.marketData].buyAvg + ? (priceToUse = this.room.memory[RoomMemoryKeys.marketData].buyAvg[resource] * 1.5) + : 99999999 } - } - - useTerminal(bestEnergySellOrder: { - adjPrice: number - orderId: string - remainingAmount: number - origPrice: number - }) { - if (this.room.name == 'W21N8') { - // let sellTarget = [ - // //{ resource: RESOURCE_LEMERGIUM_BAR, sellPast: 0, orderSize: 1000 }, - // { resource: RESOURCE_ENERGY, sellPast: 500000, orderSize: 20000 }, - // ] - // this.extendSellOrders(sellTarget); - - let purchaseTarget = [ - //{ valuePrice: 4.8, targetAmount: 200000, orderSize: 20000, resource: RESOURCE_ENERGY }, - { - valuePrice: 1.8, - targetAmount: 20000, - orderSize: 2000, - resource: RESOURCE_HYDROGEN, - }, - { - valuePrice: 10, - targetAmount: 20000, - orderSize: 2000, - resource: RESOURCE_REDUCTANT, - }, - { - valuePrice: 0.7, - targetAmount: 10000, - orderSize: 2000, - resource: RESOURCE_ZYNTHIUM, - }, - { - valuePrice: 0.8, - targetAmount: 10000, - orderSize: 2000, - resource: RESOURCE_KEANIUM, - }, - ] - this.extendBuyOrders(purchaseTarget) + this.room.memory[RoomMemoryKeys.marketData].aquire[resource] = priceToUse + } + let didWork = true + while (didWork) { + didWork = false + for (let resource of [ + ...(_.keys(COMMODITIES) as ( + | CommodityConstant + | MineralConstant + | RESOURCE_ENERGY + | RESOURCE_GHODIUM + )[]), + ]) { + //This is handled erlier in the code. + if (resource == RESOURCE_ENERGY) continue + if (this.room.memory[RoomMemoryKeys.marketData].aquire[resource]) continue + let buildCost = 0 + for (let comp in COMMODITIES[resource].components) { + let amount = + COMMODITIES[resource].components[ + comp as + | DepositConstant + | CommodityConstant + | MineralConstant + | RESOURCE_ENERGY + | RESOURCE_GHODIUM + ] + //This will go to undefined if we don't have an aquire cost set. + buildCost += + this.room.memory[RoomMemoryKeys.marketData].aquire[ + comp as + | DepositConstant + | CommodityConstant + | MineralConstant + | RESOURCE_ENERGY + | RESOURCE_GHODIUM + ] * amount + } + if (buildCost) { + this.room.memory[RoomMemoryKeys.marketData].aquire[resource] = Math.min( + this.room.memory[RoomMemoryKeys.marketData].sellAvg[resource] || 99999999, + buildCost / COMMODITIES[resource].amount, + ) + if (this.room.memory[RoomMemoryKeys.marketData].aquire[resource]) didWork = true + } } - return + } - if (this.terminal.cooldown > 0) return - - let energyPrice = this.room.memory[RoomMemoryKeys.marketData][RESOURCE_ENERGY] - - let targetEnergyLevel = 200000 - let totalBetweenStorageAndTerminal = - (this.terminal.store[RESOURCE_ENERGY] || 0) + - (this.room.storage.store[RESOURCE_ENERGY] || 0) - - if (totalBetweenStorageAndTerminal < targetEnergyLevel) { - let amountToBuy = targetEnergyLevel - totalBetweenStorageAndTerminal - //Buy some extra energy, just so we're not buying stupidlly small amounts. - amountToBuy += 10000 - - //Limit the amount because we won't always have enough energy to move large quantities around. - // This ensures we have the energy to do the trade. - amountToBuy = Math.min(amountToBuy, this.terminal.store[RESOURCE_ENERGY]) - - let rate = 1 - if (targetEnergyLevel - totalBetweenStorageAndTerminal > 50000) rate = 1.1 - // if(targetEnergyLevel - totalBetweenStorageAndTerminal > 100000 ) - // rate = 1.2 - // if(targetEnergyLevel - totalBetweenStorageAndTerminal > 150000 ) - // rate = 1.3 - - let bestSell = this.getBestSell(RESOURCE_ENERGY, energyPrice) - - if (bestSell && bestSell.adjCost < energyPrice * rate) { - console.log( - 'buying ' + - JSON.stringify(bestSell) + - ' qty: ' + - amountToBuy + - ' energyPrice: ' + - energyPrice + - ' price*rate: ' + - energyPrice * rate, - ) - let result = Game.market.deal(bestSell.orderId, amountToBuy, this.room.name) - if (result == OK) return - - console.log(result) - } - } + let marketData = loadLocalMarketMemory() + marketData[this.room.name] = this.room.memory[RoomMemoryKeys.marketData] + storeLocalMarketMemory(marketData) + } + } + + useTerminal(bestEnergySellOrder: { + adjPrice: number + orderId: string + remainingAmount: number + origPrice: number + }) { + if (this.room.name == 'W21N8') { + // let sellTarget = [ + // //{ resource: RESOURCE_LEMERGIUM_BAR, sellPast: 0, orderSize: 1000 }, + // { resource: RESOURCE_ENERGY, sellPast: 500000, orderSize: 20000 }, + // ] + // this.extendSellOrders(sellTarget); + + let purchaseTarget = [ + //{ valuePrice: 4.8, targetAmount: 200000, orderSize: 20000, resource: RESOURCE_ENERGY }, + { + valuePrice: 1.8, + targetAmount: 20000, + orderSize: 2000, + resource: RESOURCE_HYDROGEN, + }, + { + valuePrice: 10, + targetAmount: 20000, + orderSize: 2000, + resource: RESOURCE_REDUCTANT, + }, + { + valuePrice: 0.7, + targetAmount: 10000, + orderSize: 2000, + resource: RESOURCE_ZYNTHIUM, + }, + { + valuePrice: 0.8, + targetAmount: 10000, + orderSize: 2000, + resource: RESOURCE_KEANIUM, + }, + ] + this.extendBuyOrders(purchaseTarget) + } + return + + if (this.terminal.cooldown > 0) return + + let energyPrice = this.room.memory[RoomMemoryKeys.marketData][RESOURCE_ENERGY] + + let targetEnergyLevel = 200000 + let totalBetweenStorageAndTerminal = + (this.terminal.store[RESOURCE_ENERGY] || 0) + (this.room.storage.store[RESOURCE_ENERGY] || 0) + + if (totalBetweenStorageAndTerminal < targetEnergyLevel) { + let amountToBuy = targetEnergyLevel - totalBetweenStorageAndTerminal + //Buy some extra energy, just so we're not buying stupidlly small amounts. + amountToBuy += 10000 + + //Limit the amount because we won't always have enough energy to move large quantities around. + // This ensures we have the energy to do the trade. + amountToBuy = Math.min(amountToBuy, this.terminal.store[RESOURCE_ENERGY]) + + let rate = 1 + if (targetEnergyLevel - totalBetweenStorageAndTerminal > 50000) rate = 1.1 + // if(targetEnergyLevel - totalBetweenStorageAndTerminal > 100000 ) + // rate = 1.2 + // if(targetEnergyLevel - totalBetweenStorageAndTerminal > 150000 ) + // rate = 1.3 + + let bestSell = this.getBestSell(RESOURCE_ENERGY, energyPrice) + + if (bestSell && bestSell.adjCost < energyPrice * rate) { + console.log( + 'buying ' + + JSON.stringify(bestSell) + + ' qty: ' + + amountToBuy + + ' energyPrice: ' + + energyPrice + + ' price*rate: ' + + energyPrice * rate, + ) + let result = Game.market.deal(bestSell.orderId, amountToBuy, this.room.name) + if (result == OK) return - //Sell off energy we're willing to sell off. The difference in the numbers is so we don't do super small transactions when we're low on energy. - if (this.terminal.store[RESOURCE_ENERGY] > 10000) { - let amountToTrade = this.terminal.store[RESOURCE_ENERGY] - 9000 - - //don't sell all the energy, we can only sell half of it because of transport. - amountToTrade = Math.floor(amountToTrade / 2) - - //If we have a lot of energy, be more agressive in selling. If we're low, be less aggressive. - let baseEnergy = - this.terminal.store[RESOURCE_ENERGY] + this.room.storage.store[RESOURCE_ENERGY] - let sellMultiplier = 1.2 - if (baseEnergy > 150000) sellMultiplier = 1.1 - if (baseEnergy > 250000) sellMultiplier = 1.05 - if (baseEnergy > 350000) sellMultiplier = 1.03 - if (baseEnergy > 500000) sellMultiplier = 1.02 - - if (Game.shard.name == 'shard3') sellMultiplier = sellMultiplier * 2 - - if ( - bestEnergySellOrder && - bestEnergySellOrder.adjPrice > energyPrice * sellMultiplier - ) { - console.log( - 'selling ' + JSON.stringify(bestEnergySellOrder) + ' qty: ' + amountToTrade, - ) - let result = Game.market.deal( - bestEnergySellOrder.orderId, - amountToTrade, - this.room.name, - ) - if (result != 0) console.log(result) - } - } + console.log(result) + } + } - //Don't run the terminal out of energy. - if (this.room.terminal.store[RESOURCE_ENERGY] < 5000) return - - //if(this.tryBuyingStuff([RESOURCE_MIST], energyPrice)) return; - if (this.buyAt(RESOURCE_MIST, 80, energyPrice)) return - - //This is the best price I expect to get cross-shard. I'd normally expect it on the target shard, but if I find it elsewhere - // I'll take it! - if (this.sellAt(RESOURCE_SPIRIT, 180000, energyPrice)) return - if (this.sellAt(RESOURCE_MUSCLE, 440000, energyPrice)) return - if (this.sellAt(RESOURCE_MICROCHIP, 290000, energyPrice)) return - - if (this.room.name == 'W21N9') { - //if(this.tryBuyingStuff([RESOURCE_METAL], energyPrice)) return; - //if(this.tryBuyingStuff([RESOURCE_SILICON], energyPrice)) return; - if ( - this.trySellingOffStuff( - [ - RESOURCE_OXIDANT, - RESOURCE_GHODIUM_MELT, - RESOURCE_LEMERGIUM_BAR, - RESOURCE_UTRIUM_BAR, - RESOURCE_PURIFIER, - RESOURCE_REDUCTANT, - RESOURCE_BATTERY, - RESOURCE_KEANIUM_BAR, - ], - energyPrice, - ) - ) - return - } + //Sell off energy we're willing to sell off. The difference in the numbers is so we don't do super small transactions when we're low on energy. + if (this.terminal.store[RESOURCE_ENERGY] > 10000) { + let amountToTrade = this.terminal.store[RESOURCE_ENERGY] - 9000 + + //don't sell all the energy, we can only sell half of it because of transport. + amountToTrade = Math.floor(amountToTrade / 2) + + //If we have a lot of energy, be more agressive in selling. If we're low, be less aggressive. + let baseEnergy = + this.terminal.store[RESOURCE_ENERGY] + this.room.storage.store[RESOURCE_ENERGY] + let sellMultiplier = 1.2 + if (baseEnergy > 150000) sellMultiplier = 1.1 + if (baseEnergy > 250000) sellMultiplier = 1.05 + if (baseEnergy > 350000) sellMultiplier = 1.03 + if (baseEnergy > 500000) sellMultiplier = 1.02 + + if (Game.shard.name == 'shard3') sellMultiplier = sellMultiplier * 2 + + if (bestEnergySellOrder && bestEnergySellOrder.adjPrice > energyPrice * sellMultiplier) { + console.log('selling ' + JSON.stringify(bestEnergySellOrder) + ' qty: ' + amountToTrade) + let result = Game.market.deal(bestEnergySellOrder.orderId, amountToTrade, this.room.name) + if (result != 0) console.log(result) + } + } - if (this.room.name == 'W17N16') { - //Sell off resources we're making for a profit... - //if(this.trySellingOffStuff([RESOURCE_EXTRACT], energyPrice)) return; - //Check to see what we want to buy... - //if(this.tryBuyingStuff([RESOURCE_CATALYST, RESOURCE_HYDROGEN, RESOURCE_ZYNTHIUM_KEANITE], energyPrice)) return; - //let xshard = JSON.parse(InterShardMemory.getRemote("shard2")).market["W21N9"]; - //if(xshard.buyAvg[RESOURCE_PURIFIER] > 2 * this.room.memory[RoomMemoryKeys.marketData].aquire[RESOURCE_PURIFIER]) { - // if(this.tryBuyingStuff([RESOURCE_CATALYST], energyPrice, 1.7)) return; - //} - } + //Don't run the terminal out of energy. + if (this.room.terminal.store[RESOURCE_ENERGY] < 5000) return + + //if(this.tryBuyingStuff([RESOURCE_MIST], energyPrice)) return; + if (this.buyAt(RESOURCE_MIST, 80, energyPrice)) return + + //This is the best price I expect to get cross-shard. I'd normally expect it on the target shard, but if I find it elsewhere + // I'll take it! + if (this.sellAt(RESOURCE_SPIRIT, 180000, energyPrice)) return + if (this.sellAt(RESOURCE_MUSCLE, 440000, energyPrice)) return + if (this.sellAt(RESOURCE_MICROCHIP, 290000, energyPrice)) return + + if (this.room.name == 'W21N9') { + //if(this.tryBuyingStuff([RESOURCE_METAL], energyPrice)) return; + //if(this.tryBuyingStuff([RESOURCE_SILICON], energyPrice)) return; + if ( + this.trySellingOffStuff( + [ + RESOURCE_OXIDANT, + RESOURCE_GHODIUM_MELT, + RESOURCE_LEMERGIUM_BAR, + RESOURCE_UTRIUM_BAR, + RESOURCE_PURIFIER, + RESOURCE_REDUCTANT, + RESOURCE_BATTERY, + RESOURCE_KEANIUM_BAR, + ], + energyPrice, + ) + ) + return } - buyAt(resource: ResourceConstant, price: number, energyPrice: number) { - let amountOnHand = - (this.room.terminal.store[resource] || 0) + (this.room.storage.store[resource] || 0) - let targetAmount = 10000 - let epislon = Math.ceil(targetAmount / 10) + if (this.room.name == 'W17N16') { + //Sell off resources we're making for a profit... + //if(this.trySellingOffStuff([RESOURCE_EXTRACT], energyPrice)) return; + //Check to see what we want to buy... + //if(this.tryBuyingStuff([RESOURCE_CATALYST, RESOURCE_HYDROGEN, RESOURCE_ZYNTHIUM_KEANITE], energyPrice)) return; + //let xshard = JSON.parse(InterShardMemory.getRemote("shard2")).market["W21N9"]; + //if(xshard.buyAvg[RESOURCE_PURIFIER] > 2 * this.room.memory[RoomMemoryKeys.marketData].aquire[RESOURCE_PURIFIER]) { + // if(this.tryBuyingStuff([RESOURCE_CATALYST], energyPrice, 1.7)) return; + //} + } + } - if (amountOnHand < targetAmount) { - let bestSell = this.getBestSell(resource, energyPrice) - if (!bestSell) return false + buyAt(resource: ResourceConstant, price: number, energyPrice: number) { + let amountOnHand = + (this.room.terminal.store[resource] || 0) + (this.room.storage.store[resource] || 0) + let targetAmount = 10000 + let epislon = Math.ceil(targetAmount / 10) - let amountToBuy = targetAmount - amountOnHand - //Buy some extra, just so we're not buying stupidlly small amounts. - amountToBuy += epislon + if (amountOnHand < targetAmount) { + let bestSell = this.getBestSell(resource, energyPrice) + if (!bestSell) return false - //Don't run the terminal out of energy. - amountToBuy = Math.min( - amountToBuy, - Math.floor(this.terminal.store[RESOURCE_ENERGY] / 2), - ) + let amountToBuy = targetAmount - amountOnHand + //Buy some extra, just so we're not buying stupidlly small amounts. + amountToBuy += epislon - let rate = 1 + //Don't run the terminal out of energy. + amountToBuy = Math.min(amountToBuy, Math.floor(this.terminal.store[RESOURCE_ENERGY] / 2)) - let avg = this.room.memory[RoomMemoryKeys.marketData].sellAvg[resource] - if (bestSell.adjCost > price) { - // if(avg * rate < bestSell.adjCost) { - //console.log("not buying : " + resource + " " + JSON.stringify(bestSell) + " avg*rate:" + avg * rate + " amount:" + amountToBuy + " adj:" + bestSell.adjCost); - return false - } + let rate = 1 - console.log( - 'buyAt ' + - resource + - ' bestSell: ' + - JSON.stringify(bestSell) + - ' qty: ' + - amountToBuy + - ' avg*rate: ' + - avg * rate, - ) - let result = Game.market.deal(bestSell.orderId, amountToBuy, this.room.name) - if (result != 0) console.log(result) - else return true - } + let avg = this.room.memory[RoomMemoryKeys.marketData].sellAvg[resource] + if (bestSell.adjCost > price) { + // if(avg * rate < bestSell.adjCost) { + //console.log("not buying : " + resource + " " + JSON.stringify(bestSell) + " avg*rate:" + avg * rate + " amount:" + amountToBuy + " adj:" + bestSell.adjCost); return false + } + + console.log( + 'buyAt ' + + resource + + ' bestSell: ' + + JSON.stringify(bestSell) + + ' qty: ' + + amountToBuy + + ' avg*rate: ' + + avg * rate, + ) + let result = Game.market.deal(bestSell.orderId, amountToBuy, this.room.name) + if (result != 0) console.log(result) + else return true } - - sellAt(resource: ResourceConstant, price: number, energyPrice: number) { - //console.log( + resource + price) - if (!this.terminal.store[resource]) return false - let bestSell = this.getBestBuy(resource, energyPrice) - //console.log('trying sellat: ' + JSON.stringify(bestSell)) - if (bestSell && bestSell.adjCost > price) { - let result = Game.market.deal( - bestSell.orderId, - Math.min(this.terminal.store[resource], bestSell.remainingAmount), - this.room.name, - ) - //console.log(bestSell.orderId); - if (result != OK) - console.log( - 'Error ' + - result + - ' while sellAt the order. ' + - JSON.stringify({ - orderId: bestSell.orderId, - amount: this.terminal.store[resource], - roomName: this.room.name, - order: Game.market.getOrderById(bestSell.orderId), - }), - ) - return true - } - return false + return false + } + + sellAt(resource: ResourceConstant, price: number, energyPrice: number) { + //console.log( + resource + price) + if (!this.terminal.store[resource]) return false + let bestSell = this.getBestBuy(resource, energyPrice) + //console.log('trying sellat: ' + JSON.stringify(bestSell)) + if (bestSell && bestSell.adjCost > price) { + let result = Game.market.deal( + bestSell.orderId, + Math.min(this.terminal.store[resource], bestSell.remainingAmount), + this.room.name, + ) + //console.log(bestSell.orderId); + if (result != OK) + console.log( + 'Error ' + + result + + ' while sellAt the order. ' + + JSON.stringify({ + orderId: bestSell.orderId, + amount: this.terminal.store[resource], + roomName: this.room.name, + order: Game.market.getOrderById(bestSell.orderId), + }), + ) + return true } - - extendSellOrders( - sellTarget: { resource: ResourceConstant; sellPast: number; orderSize: number }[], - ) { - for (let thisTarget of sellTarget) { - let resource = thisTarget.resource - //Keep the sales order up. The trader will deal with loading it every now and then. - let sellOrder = _.head( - _.filter( - _.values(Game.market.orders) as Order[], - ord => - ord.resourceType == resource && - ord.roomName == this.room.name && - ord.type == ORDER_SELL, - ), - ) - if (!sellOrder) continue - - let totalBetweenStorageAndTerminal = - (this.room.terminal.store[resource] || 0) + (this.room.storage.store[resource] || 0) - - let targetOrderSize = Math.min( - totalBetweenStorageAndTerminal - thisTarget.sellPast, - thisTarget.orderSize, - ) - - let amountToAdjust = - Math.min(targetOrderSize, totalBetweenStorageAndTerminal) - - sellOrder.remainingAmount - if (amountToAdjust > 0) { - let result = Game.market.extendOrder(sellOrder.id, amountToAdjust) - if (result != OK) { - console.log( - 'doTrading extendOrder failed in ' + - this.room.name + - ' for ' + - resource + - '. Error code' + - result + - '.', - ) - } - } + return false + } + + extendSellOrders( + sellTarget: { resource: ResourceConstant; sellPast: number; orderSize: number }[], + ) { + for (let thisTarget of sellTarget) { + let resource = thisTarget.resource + //Keep the sales order up. The trader will deal with loading it every now and then. + let sellOrder = _.head( + _.filter( + _.values(Game.market.orders) as Order[], + ord => + ord.resourceType == resource && + ord.roomName == this.room.name && + ord.type == ORDER_SELL, + ), + ) + if (!sellOrder) continue + + let totalBetweenStorageAndTerminal = + (this.room.terminal.store[resource] || 0) + (this.room.storage.store[resource] || 0) + + let targetOrderSize = Math.min( + totalBetweenStorageAndTerminal - thisTarget.sellPast, + thisTarget.orderSize, + ) + + let amountToAdjust = + Math.min(targetOrderSize, totalBetweenStorageAndTerminal) - sellOrder.remainingAmount + if (amountToAdjust > 0) { + let result = Game.market.extendOrder(sellOrder.id, amountToAdjust) + if (result != OK) { + console.log( + 'doTrading extendOrder failed in ' + + this.room.name + + ' for ' + + resource + + '. Error code' + + result + + '.', + ) } + } } - - extendBuyOrders( - purchaseTarget: { - resource: ResourceConstant - valuePrice: number - orderSize: number - targetAmount: number - }[], - ) { - for (let thisTarget of purchaseTarget) { - let targetOrderPrice = thisTarget.valuePrice - let result = _.min( - this.dataCache[ORDER_BUY][thisTarget.resource], - ord => -ord.price, - ) as Order | number - let highestOrder = result === Infinity ? null : (result as Order) - if (highestOrder) targetOrderPrice = Math.min(thisTarget.valuePrice, highestOrder.price) - - //Keep the sales order up. The trader will deal with loading it every now and then. - let totalBetweenStorageAndTerminal = - (this.room.terminal.store[thisTarget.resource] || 0) + - (this.room.storage.store[thisTarget.resource] || 0) - let buyOrder = _.head( - _.filter( - _.values(Game.market.orders) as Order[], - ord => - ord.resourceType == thisTarget.resource && - ord.roomName == this.room.name && - ord.type == ORDER_BUY, - ), - ) - if (!buyOrder) { - let amountToBuy = Math.min( - thisTarget.orderSize, - thisTarget.targetAmount - totalBetweenStorageAndTerminal, - ) - if (amountToBuy > 0) { - console.log( - 'Creating order: rsc:' + - thisTarget.resource + - ' qty:' + - amountToBuy + - ' price:' + - targetOrderPrice + - JSON.stringify([totalBetweenStorageAndTerminal, thisTarget]), - ) - let result = Game.market.createOrder({ - roomName: this.room.name, - type: ORDER_BUY, - resourceType: thisTarget.resource, - price: targetOrderPrice, - totalAmount: amountToBuy, - }) - if (result != OK) - console.log( - 'Error ' + - result + - ' while creating the order.' + - JSON.stringify({ - ORDER_BUY, - resource: thisTarget.resource, - targetOrderPrice, - amountToBuy, - roomName: this.room.name, - }), - ) - } - continue - } - - //Amount to adjust also needs to leave some room in the terminal as well. - let amountToAdjust = - thisTarget.targetAmount - totalBetweenStorageAndTerminal - buyOrder.remainingAmount - amountToAdjust = Math.min( - amountToAdjust, - thisTarget.orderSize - buyOrder.remainingAmount, + } + + extendBuyOrders( + purchaseTarget: { + resource: ResourceConstant + valuePrice: number + orderSize: number + targetAmount: number + }[], + ) { + for (let thisTarget of purchaseTarget) { + let targetOrderPrice = thisTarget.valuePrice + let result = _.min(this.dataCache[ORDER_BUY][thisTarget.resource], ord => -ord.price) as + | Order + | number + let highestOrder = result === Infinity ? null : (result as Order) + if (highestOrder) targetOrderPrice = Math.min(thisTarget.valuePrice, highestOrder.price) + + //Keep the sales order up. The trader will deal with loading it every now and then. + let totalBetweenStorageAndTerminal = + (this.room.terminal.store[thisTarget.resource] || 0) + + (this.room.storage.store[thisTarget.resource] || 0) + let buyOrder = _.head( + _.filter( + _.values(Game.market.orders) as Order[], + ord => + ord.resourceType == thisTarget.resource && + ord.roomName == this.room.name && + ord.type == ORDER_BUY, + ), + ) + if (!buyOrder) { + let amountToBuy = Math.min( + thisTarget.orderSize, + thisTarget.targetAmount - totalBetweenStorageAndTerminal, + ) + if (amountToBuy > 0) { + console.log( + 'Creating order: rsc:' + + thisTarget.resource + + ' qty:' + + amountToBuy + + ' price:' + + targetOrderPrice + + JSON.stringify([totalBetweenStorageAndTerminal, thisTarget]), + ) + let result = Game.market.createOrder({ + roomName: this.room.name, + type: ORDER_BUY, + resourceType: thisTarget.resource, + price: targetOrderPrice, + totalAmount: amountToBuy, + }) + if (result != OK) + console.log( + 'Error ' + + result + + ' while creating the order.' + + JSON.stringify({ + ORDER_BUY, + resource: thisTarget.resource, + targetOrderPrice, + amountToBuy, + roomName: this.room.name, + }), ) - - //Only do the adjustment if it's more then 5% of the max. This is to keep down the spam in the transaction history. - if (amountToAdjust < thisTarget.orderSize * 0.05) continue - - if (amountToAdjust > 0) { - console.log( - 'Extending order. ' + - JSON.stringify({ - amountToAdjust: amountToAdjust, - totalBetweenStorageAndTerminal: totalBetweenStorageAndTerminal, - buyOrder: buyOrder, - }), - ) - - let result = Game.market.extendOrder(buyOrder.id, amountToAdjust) - if (result != OK) { - console.log( - 'doTrading extendOrder failed in ' + - this.room.name + - ' for ' + - thisTarget.resource + - '. Error code' + - result + - '.', - ) - } - } } - } + continue + } + + //Amount to adjust also needs to leave some room in the terminal as well. + let amountToAdjust = + thisTarget.targetAmount - totalBetweenStorageAndTerminal - buyOrder.remainingAmount + amountToAdjust = Math.min(amountToAdjust, thisTarget.orderSize - buyOrder.remainingAmount) + + //Only do the adjustment if it's more then 5% of the max. This is to keep down the spam in the transaction history. + if (amountToAdjust < thisTarget.orderSize * 0.05) continue + + if (amountToAdjust > 0) { + console.log( + 'Extending order. ' + + JSON.stringify({ + amountToAdjust: amountToAdjust, + totalBetweenStorageAndTerminal: totalBetweenStorageAndTerminal, + buyOrder: buyOrder, + }), + ) - tryBuyingStuff( - resourcesToDirectBuy: ResourceConstant[], - energyPrice: number, - rateOverride: number, - ) { - for (let resource of resourcesToDirectBuy) { - let totalBetweenStorageAndTerminal = - (this.room.terminal.store[resource] || 0) + (this.room.storage.store[resource] || 0) - let amountOnHand = - (this.room.terminal.store[resource] || 0) + (this.room.storage.store[resource] || 0) - let targetAmount = 10000 - let epislon = Math.ceil(targetAmount / 10) - - if (amountOnHand < targetAmount) { - let bestSell = this.getBestSell(resource, energyPrice) - if (!bestSell) continue - - let amountToBuy = targetAmount - amountOnHand - //Buy some extra, just so we're not buying stupidlly small amounts. - amountToBuy += epislon - - //Don't run the terminal out of energy. - amountToBuy = Math.min( - amountToBuy, - Math.floor(this.terminal.store[RESOURCE_ENERGY] / 2), - ) - - let rate = 1 - - if (totalBetweenStorageAndTerminal < 20000) rate = 1.1 - if (totalBetweenStorageAndTerminal < 10000) rate = 1.3 - if (totalBetweenStorageAndTerminal < 5000) rate = 1.5 - - //Exclude the level 0 commodities, because they are things like L and L_bars which behave much more normally. - if ( - (COMMODITIES[ - resource as - | CommodityConstant - | MineralConstant - | RESOURCE_GHODIUM - | RESOURCE_ENERGY - ] && - COMMODITIES[ - resource as - | CommodityConstant - | MineralConstant - | RESOURCE_GHODIUM - | RESOURCE_ENERGY - ].level > 0) || - //When we're working with commodities, margins are thin, prices are high. - resource == RESOURCE_METAL || - resource == RESOURCE_SILICON || - resource == RESOURCE_BIOMASS || - resource == RESOURCE_MIST - ) { - rate = 1 - if (totalBetweenStorageAndTerminal < 1000) rate = 1.05 - } - - if (resource == RESOURCE_ZYNTHIUM || resource == RESOURCE_ZYNTHIUM_KEANITE) rate = 4 - - if (rateOverride) rate = rateOverride - - let avg = this.room.memory[RoomMemoryKeys.marketData].sellAvg[resource] - if (avg * rate < bestSell.adjCost) { - console.log( - 'not buying : ' + - resource + - ' ' + - JSON.stringify(bestSell) + - ' avg*rate:' + - avg * rate + - ' amount:' + - amountToBuy + - ' adj:' + - bestSell.adjCost, - ) - continue - } - - console.log( - 'buying ' + - resource + - ' bestSell: ' + - JSON.stringify(bestSell) + - ' qty: ' + - amountToBuy + - ' avg*rate: ' + - avg * rate, - ) - let result = Game.market.deal(bestSell.orderId, amountToBuy, this.room.name) - if (result != 0) console.log(result) - else return - } + let result = Game.market.extendOrder(buyOrder.id, amountToAdjust) + if (result != OK) { + console.log( + 'doTrading extendOrder failed in ' + + this.room.name + + ' for ' + + thisTarget.resource + + '. Error code' + + result + + '.', + ) } + } } + } + + tryBuyingStuff( + resourcesToDirectBuy: ResourceConstant[], + energyPrice: number, + rateOverride: number, + ) { + for (let resource of resourcesToDirectBuy) { + let totalBetweenStorageAndTerminal = + (this.room.terminal.store[resource] || 0) + (this.room.storage.store[resource] || 0) + let amountOnHand = + (this.room.terminal.store[resource] || 0) + (this.room.storage.store[resource] || 0) + let targetAmount = 10000 + let epislon = Math.ceil(targetAmount / 10) + + if (amountOnHand < targetAmount) { + let bestSell = this.getBestSell(resource, energyPrice) + if (!bestSell) continue + + let amountToBuy = targetAmount - amountOnHand + //Buy some extra, just so we're not buying stupidlly small amounts. + amountToBuy += epislon - trySellingOffStuff(resources: ResourceConstant[], energyPrice: number): boolean { - let importedResourceCosts: { [key in ResourceConstant]?: number } = {} - if (this.room.name == 'W21N9') { - importedResourceCosts[RESOURCE_UTRIUM] = 5 - importedResourceCosts[RESOURCE_ZYNTHIUM_BAR] = 30 - importedResourceCosts[RESOURCE_PURIFIER] = 140 - importedResourceCosts[RESOURCE_OXIDANT] = 65 - importedResourceCosts[RESOURCE_REDUCTANT] = 120 - importedResourceCosts[RESOURCE_KEANIUM_BAR] = 20 - importedResourceCosts[RESOURCE_UTRIUM_BAR] = 40 - } else { - importedResourceCosts[RESOURCE_ZYNTHIUM_BAR] = 20 - importedResourceCosts[RESOURCE_COMPOSITE] = 30 - } + //Don't run the terminal out of energy. + amountToBuy = Math.min(amountToBuy, Math.floor(this.terminal.store[RESOURCE_ENERGY] / 2)) - //Sell off resources we're making for a profit... - for (let resource of resources) { - let amountOnHand = - (this.room.terminal.store[resource] || 0) + (this.room.storage.store[resource] || 0) - - let amount = this.room.terminal.store[resource] - - //We should ignore the amount for sale sometimes.... I haven't figured out the rule for this. It's something like - // If the sell order is crappy ignore it. - if (resource !== RESOURCE_LEMERGIUM_BAR) { - //Subtract the amount on the market... - amount -= - _.sum( - _.filter( - Game.market.orders, - ord => ord.resourceType == resource && ord.roomName == this.room.name, - ), - ord => ord.remainingAmount, - ) / 2 - } - - if (amount < 1) continue - - let bestBuy = this.getBestBuy(resource, energyPrice) - if (!bestBuy) continue - - //Figure out how desperate I am to sell.. If I'm nearly empty, wait for a good margin. If I'm nearly full... SELL! - let multiplier = 0.95 - if (amountOnHand > 15000) multiplier = 0.9 - - //If this is an item with a high margin, we don't care if we're selling it dirt cheap. - if ( - importedResourceCosts[resource] && - importedResourceCosts[resource] > bestBuy.adjCost - ) - continue - - let avg = this.room.memory[RoomMemoryKeys.marketData].buyAvg[resource] - if (avg * multiplier > bestBuy.adjCost) { - //if(this.room.name == "W21N9") console.log("not selling : " + resource + " " + JSON.stringify(bestBuy) + " avg:" + avg + " amount:" + amount + " adj:" + bestBuy.adjCost); - continue - } - if (bestBuy.adjCost < 0) { - continue - } - - //This is something that we're importing, we know the safe price is, so we can use that to guard instead. - if (!importedResourceCosts[resource]) { - let daysOutside3Sigma = _.filter( - Game.market.getHistory(resource), - mh => bestBuy.origPrice < mh.avgPrice - 3 * mh.stddevPrice, - ).length - if (daysOutside3Sigma >= 6) { - console.log( - 'not selling due to sigma : ' + - resource + - ' ' + - JSON.stringify(bestBuy) + - ' avg:' + - avg + - ' amount:' + - amount + - ' adj:' + - bestBuy.adjCost, - ) - continue - } - } - - amount = Math.min(amount, bestBuy.remainingAmount) - - amount = Math.min(amount, this.room.terminal.store[RESOURCE_ENERGY]) + let rate = 1 - console.log( - 'selling : ' + - resource + - ' ' + - JSON.stringify(bestBuy) + - ' avg:' + - avg + - ' amount:' + - amount + - ' adj:' + - bestBuy.adjCost + - ' oh: ' + - amountOnHand, - ) - let result = Game.market.deal(bestBuy.orderId, amount, this.room.name) - if (result != 0) { - console.log(result) - } else { - return true - } - } - return false - } + if (totalBetweenStorageAndTerminal < 20000) rate = 1.1 + if (totalBetweenStorageAndTerminal < 10000) rate = 1.3 + if (totalBetweenStorageAndTerminal < 5000) rate = 1.5 - dataCache: { - [key in ORDER_BUY | ORDER_SELL]?: { - [key in ResourceConstant | InterShardResourceConstant]?: Order[] - } - } - buildDataCache(): void { - const result: { - [key in ORDER_BUY | ORDER_SELL]?: { - [key in ResourceConstant | InterShardResourceConstant]?: Order[] - } - } = { [ORDER_SELL]: {}, [ORDER_BUY]: {} } - - for (let resource of [...RESOURCES_ALL, ...INTERSHARD_RESOURCES]) { - result[ORDER_SELL][resource] = [] - result[ORDER_BUY][resource] = [] + //Exclude the level 0 commodities, because they are things like L and L_bars which behave much more normally. + if ( + (COMMODITIES[ + resource as CommodityConstant | MineralConstant | RESOURCE_GHODIUM | RESOURCE_ENERGY + ] && + COMMODITIES[ + resource as CommodityConstant | MineralConstant | RESOURCE_GHODIUM | RESOURCE_ENERGY + ].level > 0) || + //When we're working with commodities, margins are thin, prices are high. + resource == RESOURCE_METAL || + resource == RESOURCE_SILICON || + resource == RESOURCE_BIOMASS || + resource == RESOURCE_MIST + ) { + rate = 1 + if (totalBetweenStorageAndTerminal < 1000) rate = 1.05 } - for (let ord of Game.market.getAllOrders()) { - if (tradeBlacklistRoomNames.includes(ord.roomName)) continue - result[ord.type as ORDER_BUY | ORDER_SELL][ord.resourceType].push(ord) + + if (resource == RESOURCE_ZYNTHIUM || resource == RESOURCE_ZYNTHIUM_KEANITE) rate = 4 + + if (rateOverride) rate = rateOverride + + let avg = this.room.memory[RoomMemoryKeys.marketData].sellAvg[resource] + if (avg * rate < bestSell.adjCost) { + console.log( + 'not buying : ' + + resource + + ' ' + + JSON.stringify(bestSell) + + ' avg*rate:' + + avg * rate + + ' amount:' + + amountToBuy + + ' adj:' + + bestSell.adjCost, + ) + continue } - this.dataCache = result - } - doTrading() { - this.buildDataCache() - - let bestSell = _.first( - _.sortBy( - _.map(this.dataCache[ORDER_SELL][RESOURCE_ENERGY], order => ({ - orderId: order.id, - remainingAmount: order.remainingAmount, - adjCost: - order.price / - (1 - - Game.market.calcTransactionCost(1000, this.room.name, order.roomName) / - 1000), - origPrice: order.price, - })), - function (o) { - return o.adjCost - }, - ), + console.log( + 'buying ' + + resource + + ' bestSell: ' + + JSON.stringify(bestSell) + + ' qty: ' + + amountToBuy + + ' avg*rate: ' + + avg * rate, ) + let result = Game.market.deal(bestSell.orderId, amountToBuy, this.room.name) + if (result != 0) console.log(result) + else return + } + } + } + + trySellingOffStuff(resources: ResourceConstant[], energyPrice: number): boolean { + let importedResourceCosts: { [key in ResourceConstant]?: number } = {} + if (this.room.name == 'W21N9') { + importedResourceCosts[RESOURCE_UTRIUM] = 5 + importedResourceCosts[RESOURCE_ZYNTHIUM_BAR] = 30 + importedResourceCosts[RESOURCE_PURIFIER] = 140 + importedResourceCosts[RESOURCE_OXIDANT] = 65 + importedResourceCosts[RESOURCE_REDUCTANT] = 120 + importedResourceCosts[RESOURCE_KEANIUM_BAR] = 20 + importedResourceCosts[RESOURCE_UTRIUM_BAR] = 40 + } else { + importedResourceCosts[RESOURCE_ZYNTHIUM_BAR] = 20 + importedResourceCosts[RESOURCE_COMPOSITE] = 30 + } - let bestOrder = _.head( - _.sortBy( - _.map(this.dataCache[ORDER_BUY][RESOURCE_ENERGY], order => ({ - orderId: order.id, - remainingAmount: order.remainingAmount, - adjPrice: - order.price - - 1.4 * - (Game.market.calcTransactionCost(1000, this.room.name, order.roomName) / - 1000), - origPrice: order.price, - })), - function (o) { - return -o.adjPrice - }, + //Sell off resources we're making for a profit... + for (let resource of resources) { + let amountOnHand = + (this.room.terminal.store[resource] || 0) + (this.room.storage.store[resource] || 0) + + let amount = this.room.terminal.store[resource] + + //We should ignore the amount for sale sometimes.... I haven't figured out the rule for this. It's something like + // If the sell order is crappy ignore it. + if (resource !== RESOURCE_LEMERGIUM_BAR) { + //Subtract the amount on the market... + amount -= + _.sum( + _.filter( + Game.market.orders, + ord => ord.resourceType == resource && ord.roomName == this.room.name, ), - ) - - if (bestSell && bestOrder && Game.time % 10 == 0) { - let avg = (bestSell.adjCost + bestOrder.adjPrice) / 2 - if (!this.room.memory[RoomMemoryKeys.marketData]) - this.room.memory[RoomMemoryKeys.marketData] = {} - - if (!this.room.memory[RoomMemoryKeys.marketData][RESOURCE_ENERGY]) { - this.room.memory[RoomMemoryKeys.marketData][RESOURCE_ENERGY] = avg - } else { - this.room.memory[RoomMemoryKeys.marketData][RESOURCE_ENERGY] = - this.room.memory[RoomMemoryKeys.marketData][RESOURCE_ENERGY] * 0.995 + - avg * 0.005 - } + ord => ord.remainingAmount, + ) / 2 + } + + if (amount < 1) continue + + let bestBuy = this.getBestBuy(resource, energyPrice) + if (!bestBuy) continue + + //Figure out how desperate I am to sell.. If I'm nearly empty, wait for a good margin. If I'm nearly full... SELL! + let multiplier = 0.95 + if (amountOnHand > 15000) multiplier = 0.9 + + //If this is an item with a high margin, we don't care if we're selling it dirt cheap. + if (importedResourceCosts[resource] && importedResourceCosts[resource] > bestBuy.adjCost) + continue + + let avg = this.room.memory[RoomMemoryKeys.marketData].buyAvg[resource] + if (avg * multiplier > bestBuy.adjCost) { + //if(this.room.name == "W21N9") console.log("not selling : " + resource + " " + JSON.stringify(bestBuy) + " avg:" + avg + " amount:" + amount + " adj:" + bestBuy.adjCost); + continue + } + if (bestBuy.adjCost < 0) { + continue + } + + //This is something that we're importing, we know the safe price is, so we can use that to guard instead. + if (!importedResourceCosts[resource]) { + let daysOutside3Sigma = _.filter( + Game.market.getHistory(resource), + mh => bestBuy.origPrice < mh.avgPrice - 3 * mh.stddevPrice, + ).length + if (daysOutside3Sigma >= 6) { + console.log( + 'not selling due to sigma : ' + + resource + + ' ' + + JSON.stringify(bestBuy) + + ' avg:' + + avg + + ' amount:' + + amount + + ' adj:' + + bestBuy.adjCost, + ) + continue } + } + + amount = Math.min(amount, bestBuy.remainingAmount) + + amount = Math.min(amount, this.room.terminal.store[RESOURCE_ENERGY]) + + console.log( + 'selling : ' + + resource + + ' ' + + JSON.stringify(bestBuy) + + ' avg:' + + avg + + ' amount:' + + amount + + ' adj:' + + bestBuy.adjCost + + ' oh: ' + + amountOnHand, + ) + let result = Game.market.deal(bestBuy.orderId, amount, this.room.name) + if (result != 0) { + console.log(result) + } else { + return true + } + } + return false + } - let energyPrice = this.room.memory[RoomMemoryKeys.marketData][RESOURCE_ENERGY] - this.updateSellAvg(energyPrice) - this.updateBuyAvg(energyPrice) - //this.useTerminal(bestOrder) + dataCache: { + [key in ORDER_BUY | ORDER_SELL]?: { + [key in ResourceConstant | InterShardResourceConstant]?: Order[] + } + } + buildDataCache(): void { + const result: { + [key in ORDER_BUY | ORDER_SELL]?: { + [key in ResourceConstant | InterShardResourceConstant]?: Order[] + } + } = { [ORDER_SELL]: {}, [ORDER_BUY]: {} } + + for (let resource of [...RESOURCES_ALL, ...INTERSHARD_RESOURCES]) { + result[ORDER_SELL][resource] = [] + result[ORDER_BUY][resource] = [] + } + for (let ord of Game.market.getAllOrders()) { + if (tradeBlacklistRoomNames.includes(ord.roomName)) continue + result[ord.type as ORDER_BUY | ORDER_SELL][ord.resourceType].push(ord) } + this.dataCache = result + } + + doTrading() { + this.buildDataCache() + + let bestSell = _.first( + _.sortBy( + _.map(this.dataCache[ORDER_SELL][RESOURCE_ENERGY], order => ({ + orderId: order.id, + remainingAmount: order.remainingAmount, + adjCost: + order.price / + (1 - Game.market.calcTransactionCost(1000, this.room.name, order.roomName) / 1000), + origPrice: order.price, + })), + function (o) { + return o.adjCost + }, + ), + ) + + let bestOrder = _.head( + _.sortBy( + _.map(this.dataCache[ORDER_BUY][RESOURCE_ENERGY], order => ({ + orderId: order.id, + remainingAmount: order.remainingAmount, + adjPrice: + order.price - + 1.4 * (Game.market.calcTransactionCost(1000, this.room.name, order.roomName) / 1000), + origPrice: order.price, + })), + function (o) { + return -o.adjPrice + }, + ), + ) + + if (bestSell && bestOrder && Game.time % 10 == 0) { + let avg = (bestSell.adjCost + bestOrder.adjPrice) / 2 + if (!this.room.memory[RoomMemoryKeys.marketData]) + this.room.memory[RoomMemoryKeys.marketData] = {} + + if (!this.room.memory[RoomMemoryKeys.marketData][RESOURCE_ENERGY]) { + this.room.memory[RoomMemoryKeys.marketData][RESOURCE_ENERGY] = avg + } else { + this.room.memory[RoomMemoryKeys.marketData][RESOURCE_ENERGY] = + this.room.memory[RoomMemoryKeys.marketData][RESOURCE_ENERGY] * 0.995 + avg * 0.005 + } + } + + let energyPrice = this.room.memory[RoomMemoryKeys.marketData][RESOURCE_ENERGY] + this.updateSellAvg(energyPrice) + this.updateBuyAvg(energyPrice) + //this.useTerminal(bestOrder) + } } diff --git a/src/room/commune/terminal/terminalProcs.ts b/src/room/commune/terminal/terminalProcs.ts index 2519ade65..2a3e8086c 100644 --- a/src/room/commune/terminal/terminalProcs.ts +++ b/src/room/commune/terminal/terminalProcs.ts @@ -1,5 +1,5 @@ import { CollectiveManager } from 'international/collective' -import { Result } from 'international/constants' +import { Result } from 'constants/general' import { MarketManager } from 'international/market/marketOrders' import { simpleAllies } from 'international/simpleAllies/simpleAllies' import { StructureUtils } from 'room/structureUtils' diff --git a/src/room/commune/terminal/tradingUtils.ts b/src/room/commune/terminal/tradingUtils.ts index a50a0d5eb..b9475ced2 100644 --- a/src/room/commune/terminal/tradingUtils.ts +++ b/src/room/commune/terminal/tradingUtils.ts @@ -3,7 +3,7 @@ import { findLowestScore, roundTo } from 'utils/utils' import { CollectiveManager } from 'international/collective' import { StatsManager } from 'international/stats' import { MarketManager } from 'international/market/marketOrders' -import { Result, RoomStatsKeys } from 'international/constants' +import { Result, RoomStatsKeys } from 'constants/general' export class TradingUtils { static advancedSell(room: Room, resourceType: ResourceConstant, amount: number) { diff --git a/src/room/commune/towerProcs.ts b/src/room/commune/towerProcs.ts index 12751895f..3f6eaaf65 100644 --- a/src/room/commune/towerProcs.ts +++ b/src/room/commune/towerProcs.ts @@ -1,4 +1,4 @@ -import { PlayerMemoryKeys, RoomLogisticsRequestTypes, RoomStatsKeys } from "international/constants" +import { PlayerMemoryKeys, RoomLogisticsRequestTypes, RoomStatsKeys } from 'constants/general' import { PlayerManager } from 'international/players' import { StatsManager } from 'international/stats' import { packCoord } from 'other/codec' @@ -177,7 +177,11 @@ export class TowerProcs { const tower = findObjectWithID(actionableTowerIDs[i]) if (tower.repair(repairTarget) !== OK) continue - StatsManager.updateStat(room.name, RoomStatsKeys.EnergyOutputRepairWallOrRampart, TOWER_ENERGY_COST) + StatsManager.updateStat( + room.name, + RoomStatsKeys.EnergyOutputRepairWallOrRampart, + TOWER_ENERGY_COST, + ) actionableTowerIDs.splice(i, 1) } diff --git a/src/room/commune/towerUtils.ts b/src/room/commune/towerUtils.ts index 453c580ea..036729a75 100644 --- a/src/room/commune/towerUtils.ts +++ b/src/room/commune/towerUtils.ts @@ -1,4 +1,4 @@ -import { towerPowers } from "international/constants" +import { towerPowers } from 'constants/general' import { findWithLowestScore, getRange } from 'utils/utils' import { CommuneDataOps, communeData } from './communeData' import { CommuneUtils } from './communeUtils' @@ -108,4 +108,3 @@ export class TowerUtils { return structures } } - diff --git a/src/room/commune/workRequest.ts b/src/room/commune/workRequest.ts index bf96be90a..aad09add1 100644 --- a/src/room/commune/workRequest.ts +++ b/src/room/commune/workRequest.ts @@ -4,7 +4,7 @@ import { RoomMemoryKeys, RoomTypes, customColors, -} from 'international/constants' +} from 'constants/general' import { randomIntRange, randomTick, Utils } from 'utils/utils' import { CollectiveManager } from 'international/collective' import { CommuneManager } from './commune' diff --git a/src/room/construction/basePlans.ts b/src/room/construction/basePlans.ts index ca0d578ca..37125f532 100644 --- a/src/room/construction/basePlans.ts +++ b/src/room/construction/basePlans.ts @@ -2,7 +2,7 @@ import { customLog } from 'utils/logging' import { packXYAsNum, splitStringAt } from 'utils/utils' import { packCoord, packBasePlanCoord, packXYAsCoord, unpackBasePlanCoords } from 'other/codec' import { encode, decode } from 'base32768' -import { allStructureTypes } from 'international/constants' +import { allStructureTypes } from 'constants/general' export class BasePlans { /** diff --git a/src/room/construction/communePlanner.ts b/src/room/construction/communePlanner.ts index 6e710ce3a..ebe8cde3d 100644 --- a/src/room/construction/communePlanner.ts +++ b/src/room/construction/communePlanner.ts @@ -16,7 +16,7 @@ import { structureTypesToProtectSet, RoomMemoryKeys, basePlanCPUBucketThreshold, -} from 'international/constants' +} from 'constants/general' import { areCoordsEqual, createPosMap, diff --git a/src/room/construction/construction.ts b/src/room/construction/construction.ts index 1e53e9247..43fb03c23 100644 --- a/src/room/construction/construction.ts +++ b/src/room/construction/construction.ts @@ -1,12 +1,12 @@ import { - buildableStructuresSet, - buildableStructureTypes, - customColors, - impassibleStructureTypesSet, - Result, - RoomMemoryKeys, - structureTypesToProtectSet, -} from 'international/constants' + buildableStructuresSet, + buildableStructureTypes, + customColors, + impassibleStructureTypesSet, + Result, + RoomMemoryKeys, + structureTypesToProtectSet, +} from 'constants/general' import { customLog } from 'utils/logging' import { findObjectWithID, packAsNum, randomIntRange, randomTick, Utils } from 'utils/utils' import { packCoord, unpackCoord } from 'other/codec' diff --git a/src/room/construction/minCut.ts b/src/room/construction/minCut.ts index 4472e40e3..e9aaa757a 100644 --- a/src/room/construction/minCut.ts +++ b/src/room/construction/minCut.ts @@ -64,7 +64,7 @@ * each round of bfs. See the comments in the code for details. */ -import { customColors, roomDimensions } from 'international/constants' +import { customColors, roomDimensions } from 'constants/general' import { CollectiveManager } from 'international/collective' import { findCoordsInRangeXY, isXYInBorder, packXYAsNum, unpackNumAsCoord } from 'utils/utils' diff --git a/src/room/construction/rampartPlans.ts b/src/room/construction/rampartPlans.ts index df79320a1..857948f6f 100644 --- a/src/room/construction/rampartPlans.ts +++ b/src/room/construction/rampartPlans.ts @@ -1,7 +1,7 @@ import { packXYAsNum } from 'utils/utils' import { packCoord, packRampartPlanCoord, packXYAsCoord } from 'other/codec' import { encode, decode } from 'base32768' -import { allStructureTypes } from 'international/constants' +import { allStructureTypes } from 'constants/general' export class RampartPlans { /** diff --git a/src/room/creeps/creepAdditions.ts b/src/room/creeps/creepAdditions.ts index 621b307d4..25464dc50 100644 --- a/src/room/creeps/creepAdditions.ts +++ b/src/room/creeps/creepAdditions.ts @@ -1,11 +1,11 @@ import { - CreepMemoryKeys, - creepRoles, - dismantleBoosts, - dismantleBoostsSet, - roomDimensions, - towerPowers, -} from 'international/constants' + CreepMemoryKeys, + creepRoles, + dismantleBoosts, + dismantleBoostsSet, + roomDimensions, + towerPowers, +} from 'constants/general' import { customLog } from 'utils/logging' import { getRangeXY, getRange, isXYExit, isExit } from 'utils/utils' import { profiler } from 'other/profiler' diff --git a/src/room/creeps/creepMoveProcs.ts b/src/room/creeps/creepMoveProcs.ts index e35eceaa7..19e1a1e92 100644 --- a/src/room/creeps/creepMoveProcs.ts +++ b/src/room/creeps/creepMoveProcs.ts @@ -8,7 +8,7 @@ import { defaultCreepSwampCost, defaultPlainCost, packedPosLength, -} from 'international/constants' +} from 'constants/general' import { CustomPathFinderArgs, PathGoal, CustomPathFinder } from 'international/customPathFinder' import { packCoord, packPos, packPosList, unpackPos, unpackPosAt } from 'other/codec' import { areCoordsEqual, arePositionsEqual, findObjectWithID, getRange } from 'utils/utils' diff --git a/src/room/creeps/creepProcs.ts b/src/room/creeps/creepProcs.ts index af93007a0..2e5cbba1a 100644 --- a/src/room/creeps/creepProcs.ts +++ b/src/room/creeps/creepProcs.ts @@ -16,7 +16,7 @@ import { RoomLogisticsRequestTypes, offsetsByDirection, RoomStatsKeys, -} from 'international/constants' +} from 'constants/general' import { CreepUtils } from './creepUtils' import { CommuneUtils } from 'room/commune/communeUtils' import { diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index f32ea710d..0c902afd5 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -1,11 +1,15 @@ import { - impassibleStructureTypes, quadAttackMemberOffsets, - roomDimensions, Result, CreepMemoryKeys, RoomMemoryKeys, + impassibleStructureTypes, + quadAttackMemberOffsets, + roomDimensions, + Result, + CreepMemoryKeys, + RoomMemoryKeys, ReservedCoordTypes, WorkTypes, RoomLogisticsRequestTypes, - RoomStatsKeys -} from 'international/constants' + RoomStatsKeys, +} from 'constants/general' import { findClosestObject, findObjectWithID, diff --git a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts index cf7c02ff7..f09fca260 100644 --- a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts @@ -1,13 +1,15 @@ import { - impassibleStructureTypesSet, - customColors, TrafficPriorities, - packedPosLength, - CreepMemoryKeys, Result, - communeCreepRoles, - ReservedCoordTypes, - MovedTypes, - FlagNames -} from 'international/constants' + impassibleStructureTypesSet, + customColors, + TrafficPriorities, + packedPosLength, + CreepMemoryKeys, + Result, + communeCreepRoles, + ReservedCoordTypes, + MovedTypes, + FlagNames, +} from 'constants/general' import { CollectiveManager } from 'international/collective' import { areCoordsEqual, diff --git a/src/room/creeps/creepRoleManager.ts b/src/room/creeps/creepRoleManager.ts index f50446d07..54fae100b 100644 --- a/src/room/creeps/creepRoleManager.ts +++ b/src/room/creeps/creepRoleManager.ts @@ -1,7 +1,7 @@ import './creepPrototypes/creepFunctions' import './creepPrototypes/creepMoveFunctions' -import { creepRoles, customColors } from 'international/constants' +import { creepRoles, customColors } from 'constants/general' import { LogTypes, customLog } from 'utils/logging' import { RoomManager } from 'room/room' import { StatsManager } from 'international/stats' diff --git a/src/room/creeps/creepUtils.ts b/src/room/creeps/creepUtils.ts index bd09ce8ec..661cb2503 100644 --- a/src/room/creeps/creepUtils.ts +++ b/src/room/creeps/creepUtils.ts @@ -12,7 +12,7 @@ import { packedPosLength, roomLogisticsRoles, storingStructureTypesSet, -} from 'international/constants' +} from 'constants/general' import { StatsManager } from 'international/stats' import { arePositionsEqual, findObjectWithID, findWithLowestScore, getRange } from 'utils/utils' import { CreepRoleManager } from './creepRoleManager' diff --git a/src/room/creeps/endTickCreepManager.ts b/src/room/creeps/endTickCreepManager.ts index 971dc1c80..3563a5776 100644 --- a/src/room/creeps/endTickCreepManager.ts +++ b/src/room/creeps/endTickCreepManager.ts @@ -1,12 +1,12 @@ import { - MovedTypes, - RoomMemoryKeys, - RoomTypes, - customColors, - enemyDieChants, - friendlyDieChants, - powerCreepClassNames, -} from 'international/constants' + MovedTypes, + RoomMemoryKeys, + RoomTypes, + customColors, + enemyDieChants, + friendlyDieChants, + powerCreepClassNames, +} from 'constants/general' import { StatsManager } from 'international/stats' import { customLog } from 'utils/logging' import { forCoordsInRange, randomOf, randomRange, randomTick } from 'utils/utils' diff --git a/src/room/creeps/powerCreepRoleManager.ts b/src/room/creeps/powerCreepRoleManager.ts index d07cfd614..e3fb5f181 100644 --- a/src/room/creeps/powerCreepRoleManager.ts +++ b/src/room/creeps/powerCreepRoleManager.ts @@ -1,51 +1,49 @@ -import { customColors, powerCreepClassNames } from 'international/constants' +import { customColors, powerCreepClassNames } from 'constants/general' import { statsManager } from 'international/stats' import { customLog } from 'utils/logging' import { RoomManager } from 'room/room' import { Operator } from './powerCreeps/operator' const managers: { [key in PowerClassConstant]: Function } = { - [POWER_CLASS.OPERATOR]: Operator.operatorManager, + [POWER_CLASS.OPERATOR]: Operator.operatorManager, } export class PowerCreepRoleManager { - roomManager: RoomManager + roomManager: RoomManager - constructor(roomManager: RoomManager) { - this.roomManager = roomManager - } + constructor(roomManager: RoomManager) { + this.roomManager = roomManager + } - public run() { - const { room } = this.roomManager + public run() { + const { room } = this.roomManager - for (const className of powerCreepClassNames) this.runManager(className) - } + for (const className of powerCreepClassNames) this.runManager(className) + } - private runManager(className: PowerClassConstant) { - const roleCPUStart = Game.cpu.getUsed() + private runManager(className: PowerClassConstant) { + const roleCPUStart = Game.cpu.getUsed() - // Get the amount of creeps with the role + // Get the amount of creeps with the role - const creepsOfRoleAmount = this.roomManager.room.myPowerCreepsByRole[className].length + const creepsOfRoleAmount = this.roomManager.room.myPowerCreepsByRole[className].length - // If there are no creeps for this manager, iterate + // If there are no creeps for this manager, iterate - if (!this.roomManager.room.myPowerCreepsByRole[className].length) return + if (!this.roomManager.room.myPowerCreepsByRole[className].length) return - // Run manager + // Run manager - managers[className](this.roomManager.room, this.roomManager.room.myPowerCreepsByRole[className]) + managers[className](this.roomManager.room, this.roomManager.room.myPowerCreepsByRole[className]) - // Log className cpu + // Log className cpu - customLog( - `${className}s`, - `Creeps: ${creepsOfRoleAmount}, CPU: ${(Game.cpu.getUsed() - roleCPUStart).toFixed( - 2, - )}, CPU Per Creep: ${((Game.cpu.getUsed() - roleCPUStart) / creepsOfRoleAmount).toFixed( - 2, - )}`, - undefined, - ) - } + customLog( + `${className}s`, + `Creeps: ${creepsOfRoleAmount}, CPU: ${(Game.cpu.getUsed() - roleCPUStart).toFixed( + 2, + )}, CPU Per Creep: ${((Game.cpu.getUsed() - roleCPUStart) / creepsOfRoleAmount).toFixed(2)}`, + undefined, + ) + } } diff --git a/src/room/creeps/powerCreeps/operator.ts b/src/room/creeps/powerCreeps/operator.ts index 43bff03b2..493f2016e 100644 --- a/src/room/creeps/powerCreeps/operator.ts +++ b/src/room/creeps/powerCreeps/operator.ts @@ -5,7 +5,7 @@ import { CreepPowerTaskKeys, CreepTaskKeys, CreepTaskNames, -} from 'international/constants' +} from 'constants/general' import { CommuneUtils } from 'room/commune/communeUtils' import { CreepPowerTask, PowerRequest } from 'types/creepTasks' import { customLog } from 'utils/logging' diff --git a/src/room/creeps/roleManagers/antifa/antifa.ts b/src/room/creeps/roleManagers/antifa/antifa.ts index 0f001263f..9322d2666 100644 --- a/src/room/creeps/roleManagers/antifa/antifa.ts +++ b/src/room/creeps/roleManagers/antifa/antifa.ts @@ -1,12 +1,12 @@ import { - CombatRequestKeys, - CreepMemoryKeys, - FlagNames, - RoomTypes, - antifaRoles, - customColors, - squadQuotas, -} from 'international/constants' + CombatRequestKeys, + CreepMemoryKeys, + FlagNames, + RoomTypes, + antifaRoles, + customColors, + squadQuotas, +} from 'constants/general' import { customLog } from 'utils/logging' import { findClosestObject, getRangeXY, isExit, isXYExit } from 'utils/utils' import { CollectiveManager } from 'international/collective' diff --git a/src/room/creeps/roleManagers/antifa/duo.ts b/src/room/creeps/roleManagers/antifa/duo.ts index bc57dfe1a..819b02275 100644 --- a/src/room/creeps/roleManagers/antifa/duo.ts +++ b/src/room/creeps/roleManagers/antifa/duo.ts @@ -1,615 +1,594 @@ -import { CreepMemoryKeys, FlagNames, MovedTypes, RoomTypes, customColors, roomDimensions } from 'international/constants' +import { + CreepMemoryKeys, + FlagNames, + MovedTypes, + RoomTypes, + customColors, + roomDimensions, +} from 'constants/general' import { findClosestObject, getRangeXY, getRange, isExit, isXYExit } from 'utils/utils' import { Antifa } from './antifa' import { CustomPathFinderArgs } from 'international/customPathFinder' export class Duo { - /** - * All squad members, where index 0 is the leader - */ - members: Antifa[] = [] - leader: Antifa - - constructor(memberNames: string[]) { - for (let i = 0; i < memberNames.length; i++) { - const member = Game.creeps[memberNames[i]] - this.members.push(member) - - member.squad = this - member.squadRan = true - } - - this.leader = this.members[0] - - // Ensure the leader is the one with melee parts, if the quad is melee - - if ( - !(this.leader.parts.attack + this.leader.parts.work) && - this.members[1].parts.attack + this.members[1].parts.work - ) { - this.members.reverse() - this.leader = this.members[0] - } + /** + * All squad members, where index 0 is the leader + */ + members: Antifa[] = [] + leader: Antifa + + constructor(memberNames: string[]) { + for (let i = 0; i < memberNames.length; i++) { + const member = Game.creeps[memberNames[i]] + this.members.push(member) + + member.squad = this + member.squadRan = true } - run() { - if (this.runCombatRoom()) return + this.leader = this.members[0] - this.advancedHeal() + // Ensure the leader is the one with melee parts, if the quad is melee - if (!this.getInFormation()) return - - this.leader.message = 'IF' - - if (this.leader.room.roomManager.enemyDamageThreat && this.runCombat()) return - - this.createMoveRequest({ - origin: this.leader.pos, - goals: [ - { - pos: new RoomPosition( - 25, - 25, - this.leader.memory[CreepMemoryKeys.combatRequest], - ), - range: 25, - }, - ], - typeWeights: { - [RoomTypes.enemy]: Infinity, - [RoomTypes.ally]: Infinity, - [RoomTypes.sourceKeeper]: Infinity, - [RoomTypes.enemyRemote]: 4, - [RoomTypes.allyRemote]: 4, - [RoomTypes.neutral]: 2, - }, - }) - } - - runCombatRoom() { - if (this.leader.room.name !== this.leader.memory[CreepMemoryKeys.combatRequest]) - return false - - if (!this.leader.room.roomManager.enemyDamageThreat) { - for (const member of this.members) member.runCombat() - return true - } - - if (this.runCombat()) return true - - this.stompEnemyCSites() - return true + if ( + !(this.leader.parts.attack + this.leader.parts.work) && + this.members[1].parts.attack + this.members[1].parts.work + ) { + this.members.reverse() + this.leader = this.members[0] } - - runCombat() { - if (this.leader.memory[CreepMemoryKeys.squadCombatType] === 'rangedAttack') - return this.advancedRangedAttack() - if (this.leader.memory[CreepMemoryKeys.squadCombatType] === 'attack') - return this.advancedAttack() - return this.advancedDismantle() + } + + run() { + if (this.runCombatRoom()) return + + this.advancedHeal() + + if (!this.getInFormation()) return + + this.leader.message = 'IF' + + if (this.leader.room.roomManager.enemyDamageThreat && this.runCombat()) return + + this.createMoveRequest({ + origin: this.leader.pos, + goals: [ + { + pos: new RoomPosition(25, 25, this.leader.memory[CreepMemoryKeys.combatRequest]), + range: 25, + }, + ], + typeWeights: { + [RoomTypes.enemy]: Infinity, + [RoomTypes.ally]: Infinity, + [RoomTypes.sourceKeeper]: Infinity, + [RoomTypes.enemyRemote]: 4, + [RoomTypes.allyRemote]: 4, + [RoomTypes.neutral]: 2, + }, + }) + } + + runCombatRoom() { + if (this.leader.room.name !== this.leader.memory[CreepMemoryKeys.combatRequest]) return false + + if (!this.leader.room.roomManager.enemyDamageThreat) { + for (const member of this.members) member.runCombat() + return true } - getInFormation() { - if (this.leader.room.name === this.members[1].room.name) { - const range = getRange(this.leader.pos, this.members[1].pos) - if (range === 1) return true - - if (range > 2) { - this.leader.createMoveRequest({ - origin: this.leader.pos, - goals: [ - { - pos: this.members[1].pos, - range: 1, - }, - ], - }) - } - } - - this.leader.message = 'GIF' - - this.members[1].createMoveRequest({ - origin: this.members[1].pos, - goals: [ - { - pos: this.leader.pos, - range: 1, - }, - ], + if (this.runCombat()) return true + + this.stompEnemyCSites() + return true + } + + runCombat() { + if (this.leader.memory[CreepMemoryKeys.squadCombatType] === 'rangedAttack') + return this.advancedRangedAttack() + if (this.leader.memory[CreepMemoryKeys.squadCombatType] === 'attack') + return this.advancedAttack() + return this.advancedDismantle() + } + + getInFormation() { + if (this.leader.room.name === this.members[1].room.name) { + const range = getRange(this.leader.pos, this.members[1].pos) + if (range === 1) return true + + if (range > 2) { + this.leader.createMoveRequest({ + origin: this.leader.pos, + goals: [ + { + pos: this.members[1].pos, + range: 1, + }, + ], }) - - return this.leader.isOnExit + } } - holdFormation() { - for (const member of this.members) member.moved = MovedTypes.moved + this.leader.message = 'GIF' + + this.members[1].createMoveRequest({ + origin: this.members[1].pos, + goals: [ + { + pos: this.leader.pos, + range: 1, + }, + ], + }) + + return this.leader.isOnExit + } + + holdFormation() { + for (const member of this.members) member.moved = MovedTypes.moved + } + + createMoveRequest(opts: CustomPathFinderArgs, moveLeader = this.leader) { + if (!this.canMove) { + this.holdFormation() + return } - - createMoveRequest(opts: CustomPathFinderArgs, moveLeader = this.leader) { - if (!this.canMove) { - this.holdFormation() - return - } - this.leader.message = 'x' - if (!moveLeader.createMoveRequest(opts)) return - - if (getRange(this.leader.pos, this.members[1].pos) > 1) { - this.members[1].createMoveRequest({ - origin: this.members[1].pos, - goals: [ - { - pos: this.leader.pos, - range: 1, - }, - ], - }) - - return - } - - this.members[1].assignMoveRequest(moveLeader.pos) + this.leader.message = 'x' + if (!moveLeader.createMoveRequest(opts)) return + + if (getRange(this.leader.pos, this.members[1].pos) > 1) { + this.members[1].createMoveRequest({ + origin: this.members[1].pos, + goals: [ + { + pos: this.leader.pos, + range: 1, + }, + ], + }) + + return } - advancedRangedAttack() { - const { room } = this.leader + this.members[1].assignMoveRequest(moveLeader.pos) + } - let enemyAttackers = room.roomManager.enemyAttackers.filter(function (creep) { - return !creep.isOnExit - }) + advancedRangedAttack() { + const { room } = this.leader - if (!room.roomManager.enemyAttackers.length) - enemyAttackers = room.roomManager.enemyAttackers + let enemyAttackers = room.roomManager.enemyAttackers.filter(function (creep) { + return !creep.isOnExit + }) - // If there are none + if (!room.roomManager.enemyAttackers.length) enemyAttackers = room.roomManager.enemyAttackers - if (!enemyAttackers.length) { - let enemyCreeps = room.roomManager.notMyCreeps.enemy.filter(function (creep) { - return !creep.isOnExit - }) + // If there are none - if (!room.roomManager.notMyCreeps.enemy.length) - enemyCreeps = room.roomManager.notMyCreeps.enemy + if (!enemyAttackers.length) { + let enemyCreeps = room.roomManager.notMyCreeps.enemy.filter(function (creep) { + return !creep.isOnExit + }) - if (!enemyCreeps.length) { - return this.rangedAttackStructures() - } + if (!room.roomManager.notMyCreeps.enemy.length) + enemyCreeps = room.roomManager.notMyCreeps.enemy - // Heal nearby creeps + if (!enemyCreeps.length) { + return this.rangedAttackStructures() + } - if (this.leader.passiveHeal()) return true + // Heal nearby creeps - this.leader.message = 'EC' + if (this.leader.passiveHeal()) return true - const enemyCreep = findClosestObject(this.leader.pos, enemyCreeps) - if (Game.flags[FlagNames.roomVisuals]) - this.leader.room.visual.line(this.leader.pos, enemyCreep.pos, { - color: customColors.green, - opacity: 0.3, - }) + this.leader.message = 'EC' - // Get the range between the creeps + const enemyCreep = findClosestObject(this.leader.pos, enemyCreeps) + if (Game.flags[FlagNames.roomVisuals]) + this.leader.room.visual.line(this.leader.pos, enemyCreep.pos, { + color: customColors.green, + opacity: 0.3, + }) - const range = getRangeXY( - this.leader.pos.x, - enemyCreep.pos.x, - this.leader.pos.y, - enemyCreep.pos.y, - ) + // Get the range between the creeps - // If the range is more than 1 + const range = getRangeXY( + this.leader.pos.x, + enemyCreep.pos.x, + this.leader.pos.y, + enemyCreep.pos.y, + ) - if (range > 1) { - this.leader.rangedAttack(enemyCreep) + // If the range is more than 1 - // Have the create a moveRequest to the enemyAttacker and inform true + if (range > 1) { + this.leader.rangedAttack(enemyCreep) - this.createMoveRequest({ - origin: this.leader.pos, - goals: [{ pos: enemyCreep.pos, range: 1 }], - }) + // Have the create a moveRequest to the enemyAttacker and inform true - return true - } + this.createMoveRequest({ + origin: this.leader.pos, + goals: [{ pos: enemyCreep.pos, range: 1 }], + }) - this.leader.rangedMassAttack() + return true + } - if (enemyCreep.canMove && this.canMove) { - this.leader.assignMoveRequest(enemyCreep.pos) - this.members[1].assignMoveRequest(this.leader.pos) - } - return true - } + this.leader.rangedMassAttack() - // Otherwise, get the closest enemyAttacker + if (enemyCreep.canMove && this.canMove) { + this.leader.assignMoveRequest(enemyCreep.pos) + this.members[1].assignMoveRequest(this.leader.pos) + } + return true + } - const enemyAttacker = findClosestObject(this.leader.pos, enemyAttackers) - if (Game.flags[FlagNames.roomVisuals]) - this.leader.room.visual.line(this.leader.pos, enemyAttacker.pos, { - color: customColors.green, - opacity: 0.3, - }) + // Otherwise, get the closest enemyAttacker - // Get the range between the creeps + const enemyAttacker = findClosestObject(this.leader.pos, enemyAttackers) + if (Game.flags[FlagNames.roomVisuals]) + this.leader.room.visual.line(this.leader.pos, enemyAttacker.pos, { + color: customColors.green, + opacity: 0.3, + }) - const range = getRangeXY( - this.leader.pos.x, - enemyAttacker.pos.x, - this.leader.pos.y, - enemyAttacker.pos.y, - ) + // Get the range between the creeps - // If the squad is outmatched + const range = getRangeXY( + this.leader.pos.x, + enemyAttacker.pos.x, + this.leader.pos.y, + enemyAttacker.pos.y, + ) - if ( - this.combatStrength.heal + this.combatStrength.ranged < - enemyAttacker.combatStrength.heal + enemyAttacker.combatStrength.ranged - ) { - if (range === 4) { - return true - } + // If the squad is outmatched - // If too close + if ( + this.combatStrength.heal + this.combatStrength.ranged < + enemyAttacker.combatStrength.heal + enemyAttacker.combatStrength.ranged + ) { + if (range === 4) { + return true + } - if (range <= 3) { - this.leader.rangedAttack(enemyAttacker) + // If too close - // Have the squad flee + if (range <= 3) { + this.leader.rangedAttack(enemyAttacker) - this.createMoveRequest({ - origin: this.leader.pos, - goals: [{ pos: enemyAttacker.pos, range: 1 }], - flee: true, - }) - } + // Have the squad flee - return true - } + this.createMoveRequest({ + origin: this.leader.pos, + goals: [{ pos: enemyAttacker.pos, range: 1 }], + flee: true, + }) + } - // If it's more than range 3 + return true + } - if (range > 3) { - // Heal nearby creeps + // If it's more than range 3 - this.leader.passiveHeal() + if (range > 3) { + // Heal nearby creeps - // Make a moveRequest to it and inform true + this.leader.passiveHeal() - this.createMoveRequest({ - origin: this.leader.pos, - goals: [{ pos: enemyAttacker.pos, range: 1 }], - }) + // Make a moveRequest to it and inform true - return true - } + this.createMoveRequest({ + origin: this.leader.pos, + goals: [{ pos: enemyAttacker.pos, range: 1 }], + }) - this.leader.message = 'AEA' + return true + } - if (range === 1) this.leader.rangedMassAttack() - else this.leader.rangedAttack(enemyAttacker) + this.leader.message = 'AEA' - if (range > 1) { - this.createMoveRequest({ - origin: this.leader.pos, - goals: [{ pos: enemyAttacker.pos, range: 1 }], - }) + if (range === 1) this.leader.rangedMassAttack() + else this.leader.rangedAttack(enemyAttacker) - return true - } + if (range > 1) { + this.createMoveRequest({ + origin: this.leader.pos, + goals: [{ pos: enemyAttacker.pos, range: 1 }], + }) - if (enemyAttacker.canMove && this.canMove) { - this.leader.assignMoveRequest(enemyAttacker.pos) - this.members[1].assignMoveRequest(this.leader.pos) - } - return true + return true } - rangedAttackStructures() { - const structures = this.leader.room.roomManager.combatStructureTargets + if (enemyAttacker.canMove && this.canMove) { + this.leader.assignMoveRequest(enemyAttacker.pos) + this.members[1].assignMoveRequest(this.leader.pos) + } + return true + } - if (!structures.length) return false + rangedAttackStructures() { + const structures = this.leader.room.roomManager.combatStructureTargets - let structure = findClosestObject(this.leader.pos, structures) - if (Game.flags[FlagNames.roomVisuals]) - this.leader.room.visual.line(this.leader.pos, structure.pos, { - color: customColors.green, - opacity: 0.3, - }) + if (!structures.length) return false - if ( - getRangeXY(this.leader.pos.x, structure.pos.x, this.leader.pos.y, structure.pos.y) > 3 - ) { - this.createMoveRequest({ - origin: this.leader.pos, - goals: [{ pos: structure.pos, range: 3 }], - }) + let structure = findClosestObject(this.leader.pos, structures) + if (Game.flags[FlagNames.roomVisuals]) + this.leader.room.visual.line(this.leader.pos, structure.pos, { + color: customColors.green, + opacity: 0.3, + }) - return false - } + if (getRangeXY(this.leader.pos.x, structure.pos.x, this.leader.pos.y, structure.pos.y) > 3) { + this.createMoveRequest({ + origin: this.leader.pos, + goals: [{ pos: structure.pos, range: 3 }], + }) - if (this.leader.rangedAttack(structure) !== OK) return false + return false + } - // See if the structure is destroyed next tick + if (this.leader.rangedAttack(structure) !== OK) return false - structure.nextHits -= this.leader.parts.ranged_attack * RANGED_ATTACK_POWER - if (structure.nextHits > 0) return true + // See if the structure is destroyed next tick - // Try to find a new structure to preemptively move to + structure.nextHits -= this.leader.parts.ranged_attack * RANGED_ATTACK_POWER + if (structure.nextHits > 0) return true - structures.splice(structures.indexOf(structure), 1) - if (!structures.length) return true + // Try to find a new structure to preemptively move to - structure = findClosestObject(this.leader.pos, structures) + structures.splice(structures.indexOf(structure), 1) + if (!structures.length) return true - if ( - getRangeXY(this.leader.pos.x, structure.pos.y, this.leader.pos.y, structure.pos.y) > 3 - ) { - this.createMoveRequest({ - origin: this.leader.pos, - goals: [{ pos: structure.pos, range: 3 }], - }) - } + structure = findClosestObject(this.leader.pos, structures) - return true + if (getRangeXY(this.leader.pos.x, structure.pos.y, this.leader.pos.y, structure.pos.y) > 3) { + this.createMoveRequest({ + origin: this.leader.pos, + goals: [{ pos: structure.pos, range: 3 }], + }) } - advancedAttack() { - const { room } = this.leader + return true + } - let enemyAttackers = room.roomManager.enemyAttackers.filter(function (creep) { - return !creep.isOnExit - }) + advancedAttack() { + const { room } = this.leader + + let enemyAttackers = room.roomManager.enemyAttackers.filter(function (creep) { + return !creep.isOnExit + }) - if (!enemyAttackers.length) enemyAttackers = room.roomManager.enemyAttackers + if (!enemyAttackers.length) enemyAttackers = room.roomManager.enemyAttackers - // If there are none + // If there are none - if (!enemyAttackers.length) { - let enemyCreeps = room.roomManager.notMyCreeps.enemy.filter(function (creep) { - return !creep.isOnExit - }) + if (!enemyAttackers.length) { + let enemyCreeps = room.roomManager.notMyCreeps.enemy.filter(function (creep) { + return !creep.isOnExit + }) - if (!enemyCreeps.length) enemyCreeps = room.roomManager.notMyCreeps.enemy + if (!enemyCreeps.length) enemyCreeps = room.roomManager.notMyCreeps.enemy - if (!enemyCreeps.length) return this.attackStructures() + if (!enemyCreeps.length) return this.attackStructures() - this.leader.message = 'EC' + this.leader.message = 'EC' - const enemyCreep = findClosestObject(this.leader.pos, enemyCreeps) - if (Game.flags[FlagNames.roomVisuals]) - this.leader.room.visual.line(this.leader.pos, enemyCreep.pos, { - color: customColors.green, - opacity: 0.3, - }) + const enemyCreep = findClosestObject(this.leader.pos, enemyCreeps) + if (Game.flags[FlagNames.roomVisuals]) + this.leader.room.visual.line(this.leader.pos, enemyCreep.pos, { + color: customColors.green, + opacity: 0.3, + }) - // If the range is more than 1 + // If the range is more than 1 - if ( - getRangeXY( - this.leader.pos.x, - enemyCreep.pos.x, - this.leader.pos.y, - enemyCreep.pos.y, - ) > 1 - ) { - // Have the create a moveRequest to the enemyAttacker and inform true + if ( + getRangeXY(this.leader.pos.x, enemyCreep.pos.x, this.leader.pos.y, enemyCreep.pos.y) > 1 + ) { + // Have the create a moveRequest to the enemyAttacker and inform true - this.createMoveRequest({ - origin: this.leader.pos, - goals: [{ pos: enemyCreep.pos, range: 1 }], - }) + this.createMoveRequest({ + origin: this.leader.pos, + goals: [{ pos: enemyCreep.pos, range: 1 }], + }) - return true - } + return true + } - this.leader.attack(enemyCreep) + this.leader.attack(enemyCreep) - if (enemyCreep.canMove && this.canMove) { - this.leader.assignMoveRequest(enemyCreep.pos) - this.members[1].assignMoveRequest(this.leader.pos) - } - return true - } + if (enemyCreep.canMove && this.canMove) { + this.leader.assignMoveRequest(enemyCreep.pos) + this.members[1].assignMoveRequest(this.leader.pos) + } + return true + } - const enemyAttacker = findClosestObject(this.leader.pos, enemyAttackers) - if (Game.flags[FlagNames.roomVisuals]) - this.leader.room.visual.line(this.leader.pos, enemyAttacker.pos, { - color: customColors.green, - opacity: 0.3, - }) + const enemyAttacker = findClosestObject(this.leader.pos, enemyAttackers) + if (Game.flags[FlagNames.roomVisuals]) + this.leader.room.visual.line(this.leader.pos, enemyAttacker.pos, { + color: customColors.green, + opacity: 0.3, + }) - // If the range is more than 1 + // If the range is more than 1 - if ( - getRangeXY( - this.leader.pos.x, - enemyAttacker.pos.x, - this.leader.pos.y, - enemyAttacker.pos.y, - ) > 1 - ) { - // Have the create a moveRequest to the enemyAttacker and inform true + if ( + getRangeXY(this.leader.pos.x, enemyAttacker.pos.x, this.leader.pos.y, enemyAttacker.pos.y) > 1 + ) { + // Have the create a moveRequest to the enemyAttacker and inform true - this.createMoveRequest({ - origin: this.leader.pos, - goals: [{ pos: enemyAttacker.pos, range: 1 }], - }) + this.createMoveRequest({ + origin: this.leader.pos, + goals: [{ pos: enemyAttacker.pos, range: 1 }], + }) - return true - } + return true + } - // Otherwise attack + // Otherwise attack - this.leader.attack(enemyAttacker) + this.leader.attack(enemyAttacker) - if (enemyAttacker.canMove && this.canMove) { - this.leader.assignMoveRequest(enemyAttacker.pos) - this.members[1].assignMoveRequest(this.leader.pos) - } - return true + if (enemyAttacker.canMove && this.canMove) { + this.leader.assignMoveRequest(enemyAttacker.pos) + this.members[1].assignMoveRequest(this.leader.pos) } + return true + } - attackStructures() { - const structures = this.leader.room.roomManager.combatStructureTargets - - if (!structures.length) return false + attackStructures() { + const structures = this.leader.room.roomManager.combatStructureTargets - let structure = findClosestObject(this.leader.pos, structures) - if (Game.flags[FlagNames.roomVisuals]) - this.leader.room.visual.line(this.leader.pos, structure.pos, { - color: customColors.green, - opacity: 0.3, - }) + if (!structures.length) return false - if ( - getRangeXY(this.leader.pos.x, structure.pos.x, this.leader.pos.y, structure.pos.y) > 1 - ) { - this.createMoveRequest({ - origin: this.leader.pos, - goals: [{ pos: structure.pos, range: 1 }], - }) + let structure = findClosestObject(this.leader.pos, structures) + if (Game.flags[FlagNames.roomVisuals]) + this.leader.room.visual.line(this.leader.pos, structure.pos, { + color: customColors.green, + opacity: 0.3, + }) - return false - } + if (getRangeXY(this.leader.pos.x, structure.pos.x, this.leader.pos.y, structure.pos.y) > 1) { + this.createMoveRequest({ + origin: this.leader.pos, + goals: [{ pos: structure.pos, range: 1 }], + }) - if (this.leader.attack(structure) !== OK) return false + return false + } - // See if the structure is destroyed next tick + if (this.leader.attack(structure) !== OK) return false - structure.nextHits -= this.leader.parts.attack * ATTACK_POWER - if (structure.nextHits > 0) return true + // See if the structure is destroyed next tick - // Try to find a new structure to preemptively move to + structure.nextHits -= this.leader.parts.attack * ATTACK_POWER + if (structure.nextHits > 0) return true - structures.splice(structures.indexOf(structure), 1) - if (!structures.length) return true + // Try to find a new structure to preemptively move to - structure = findClosestObject(this.leader.pos, structures) + structures.splice(structures.indexOf(structure), 1) + if (!structures.length) return true - if ( - getRangeXY(this.leader.pos.x, structure.pos.y, this.leader.pos.y, structure.pos.y) > 1 - ) { - this.createMoveRequest({ - origin: this.leader.pos, - goals: [{ pos: structure.pos, range: 1 }], - }) - } + structure = findClosestObject(this.leader.pos, structures) - return true + if (getRangeXY(this.leader.pos.x, structure.pos.y, this.leader.pos.y, structure.pos.y) > 1) { + this.createMoveRequest({ + origin: this.leader.pos, + goals: [{ pos: structure.pos, range: 1 }], + }) } - advancedDismantle() { - // Avoid targets we can't dismantle + return true + } - const structures = this.leader.room.roomManager.combatStructureTargets + advancedDismantle() { + // Avoid targets we can't dismantle - if (!structures.length) return false + const structures = this.leader.room.roomManager.combatStructureTargets - let structure = findClosestObject(this.leader.pos, structures) - if (Game.flags[FlagNames.roomVisuals]) - this.leader.room.visual.line(this.leader.pos, structure.pos, { - color: customColors.green, - opacity: 0.3, - }) + if (!structures.length) return false - if ( - getRangeXY(this.leader.pos.x, structure.pos.x, this.leader.pos.y, structure.pos.y) > 1 - ) { - this.createMoveRequest({ - origin: this.leader.pos, - goals: [{ pos: structure.pos, range: 1 }], - }) + let structure = findClosestObject(this.leader.pos, structures) + if (Game.flags[FlagNames.roomVisuals]) + this.leader.room.visual.line(this.leader.pos, structure.pos, { + color: customColors.green, + opacity: 0.3, + }) - return true - } + if (getRangeXY(this.leader.pos.x, structure.pos.x, this.leader.pos.y, structure.pos.y) > 1) { + this.createMoveRequest({ + origin: this.leader.pos, + goals: [{ pos: structure.pos, range: 1 }], + }) - if (this.leader.dismantle(structure) !== OK) return false + return true + } - // See if the structure is destroyed next tick + if (this.leader.dismantle(structure) !== OK) return false - structure.nextHits -= this.leader.parts.work * DISMANTLE_POWER - if (structure.nextHits > 0) return true + // See if the structure is destroyed next tick - // Try to find a new structure to preemptively move to + structure.nextHits -= this.leader.parts.work * DISMANTLE_POWER + if (structure.nextHits > 0) return true - structures.splice(structures.indexOf(structure), 1) - if (!structures.length) return true + // Try to find a new structure to preemptively move to - structure = findClosestObject(this.leader.pos, structures) + structures.splice(structures.indexOf(structure), 1) + if (!structures.length) return true - if ( - getRangeXY(this.leader.pos.x, structure.pos.y, this.leader.pos.y, structure.pos.y) > 1 - ) { - this.createMoveRequest({ - origin: this.leader.pos, - goals: [{ pos: structure.pos, range: 1 }], - }) - } + structure = findClosestObject(this.leader.pos, structures) - return true + if (getRangeXY(this.leader.pos.x, structure.pos.y, this.leader.pos.y, structure.pos.y) > 1) { + this.createMoveRequest({ + origin: this.leader.pos, + goals: [{ pos: structure.pos, range: 1 }], + }) } - stompEnemyCSites?() { - if (this.leader.room.controller && this.leader.room.controller.safeMode) return false + return true + } - // Filter only enemy construction sites worth stomping + stompEnemyCSites?() { + if (this.leader.room.controller && this.leader.room.controller.safeMode) return false - const enemyCSites = this.leader.room.roomManager.notMyConstructionSites.enemy.filter( - cSite => cSite.progress > 0 && !isExit(cSite.pos), - ) + // Filter only enemy construction sites worth stomping - if (!enemyCSites.length) return false + const enemyCSites = this.leader.room.roomManager.notMyConstructionSites.enemy.filter( + cSite => cSite.progress > 0 && !isExit(cSite.pos), + ) - const enemyCSite = findClosestObject(this.leader.pos, enemyCSites) + if (!enemyCSites.length) return false - this.createMoveRequest({ - origin: this.leader.pos, - goals: [{ pos: enemyCSite.pos, range: 0 }], - }) + const enemyCSite = findClosestObject(this.leader.pos, enemyCSites) - return true - } + this.createMoveRequest({ + origin: this.leader.pos, + goals: [{ pos: enemyCSite.pos, range: 0 }], + }) - advancedHeal() { - if (this.members[1].hits < this.members[1].hitsMax) { - this.members[1].heal(this.members[1]) - return - } + return true + } - // If there are no attackers, only heal the leader if it's damaged + advancedHeal() { + if (this.members[1].hits < this.members[1].hitsMax) { + this.members[1].heal(this.members[1]) + return + } - if (!this.leader.room.roomManager.enemyAttackers.length) { - if (this.leader.hits < this.leader.hitsMax) this.members[1].heal(this.leader) - return - } + // If there are no attackers, only heal the leader if it's damaged - this.members[1].heal(this.leader) + if (!this.leader.room.roomManager.enemyAttackers.length) { + if (this.leader.hits < this.leader.hitsMax) this.members[1].heal(this.leader) + return } - _combatStrength: CombatStrength - get combatStrength() { - if (this._combatStrength) return this._combatStrength + this.members[1].heal(this.leader) + } - this._combatStrength = { - dismantle: 0, - melee: 0, - ranged: 0, - heal: 0, - } + _combatStrength: CombatStrength + get combatStrength() { + if (this._combatStrength) return this._combatStrength - for (const member of this.members) { - for (const key in this._combatStrength) { - const combatType = key as keyof CombatStrength + this._combatStrength = { + dismantle: 0, + melee: 0, + ranged: 0, + heal: 0, + } - this._combatStrength[combatType] = member.combatStrength[combatType] - } - } + for (const member of this.members) { + for (const key in this._combatStrength) { + const combatType = key as keyof CombatStrength - return this._combatStrength + this._combatStrength[combatType] = member.combatStrength[combatType] + } } - get canMove() { - for (const member of this.members) if (!member.canMove) return false - return true - } + return this._combatStrength + } + + get canMove() { + for (const member of this.members) if (!member.canMove) return false + return true + } } diff --git a/src/room/creeps/roleManagers/antifa/dynamicSquad.ts b/src/room/creeps/roleManagers/antifa/dynamicSquad.ts index d7dc68c49..b650df8bd 100644 --- a/src/room/creeps/roleManagers/antifa/dynamicSquad.ts +++ b/src/room/creeps/roleManagers/antifa/dynamicSquad.ts @@ -1,7 +1,4 @@ -import { - CombatRequestKeys, - CreepMemoryKeys -} from 'international/constants' +import { CombatRequestKeys, CreepMemoryKeys } from 'constants/general' import { findClosestObject, getRange, Utils } from 'utils/utils' import { Antifa } from './antifa' @@ -156,4 +153,3 @@ export class DynamicSquad { */ private createMoveRequest() {} } - diff --git a/src/room/creeps/roleManagers/antifa/quad.ts b/src/room/creeps/roleManagers/antifa/quad.ts index 0266c32c4..97595665f 100644 --- a/src/room/creeps/roleManagers/antifa/quad.ts +++ b/src/room/creeps/roleManagers/antifa/quad.ts @@ -10,7 +10,7 @@ import { customColors, packedQuadAttackMemberOffsets, quadAttackMemberOffsets, -} from 'international/constants' +} from 'constants/general' import { arePositionsEqual, doesCoordExist, diff --git a/src/room/creeps/roleManagers/commune/builder.ts b/src/room/creeps/roleManagers/commune/builder.ts index 52cad7a04..e436355ea 100644 --- a/src/room/creeps/roleManagers/commune/builder.ts +++ b/src/room/creeps/roleManagers/commune/builder.ts @@ -1,34 +1,34 @@ -import { Result, RoomLogisticsRequestTypes } from 'international/constants' +import { Result, RoomLogisticsRequestTypes } from 'constants/general' import { customLog } from 'utils/logging' import { findObjectWithID, getRange } from 'utils/utils' export class Builder extends Creep { - constructor(creepID: Id) { - super(creepID) - } + constructor(creepID: Id) { + super(creepID) + } - initRun() { - if (this.avoidEnemyThreatCoords()) return + initRun() { + if (this.avoidEnemyThreatCoords()) return - if (!this.room.roomManager.cSiteTarget) return - if (!this.room.communeManager.buildersMakeRequests) return - if (this.usedReserveStore > this.store.getCapacity() * 0.5) return + if (!this.room.roomManager.cSiteTarget) return + if (!this.room.communeManager.buildersMakeRequests) return + if (this.usedReserveStore > this.store.getCapacity() * 0.5) return - this.room.roomManager.room.createRoomLogisticsRequest({ - target: this, - type: RoomLogisticsRequestTypes.transfer, - priority: 100, - }) - } + this.room.roomManager.room.createRoomLogisticsRequest({ + target: this, + type: RoomLogisticsRequestTypes.transfer, + priority: 100, + }) + } - run?() { - if (this.advancedBuild() === Result.fail) this.advancedRecycle() - } + run?() { + if (this.advancedBuild() === Result.fail) this.advancedRecycle() + } - static roleManager(room: Room, creepsOfRole: string[]) { - for (const creepName of creepsOfRole) { - const creep: Builder = Game.creeps[creepName] - creep.run() - } + static roleManager(room: Room, creepsOfRole: string[]) { + for (const creepName of creepsOfRole) { + const creep: Builder = Game.creeps[creepName] + creep.run() } + } } diff --git a/src/room/creeps/roleManagers/commune/controllerUpgrader.ts b/src/room/creeps/roleManagers/commune/controllerUpgrader.ts index 5641e08d3..94c8af43f 100644 --- a/src/room/creeps/roleManagers/commune/controllerUpgrader.ts +++ b/src/room/creeps/roleManagers/commune/controllerUpgrader.ts @@ -1,4 +1,9 @@ -import { CreepMemoryKeys, ReservedCoordTypes, RoomMemoryKeys, packedPosLength } from 'international/constants' +import { + CreepMemoryKeys, + ReservedCoordTypes, + RoomMemoryKeys, + packedPosLength, +} from 'constants/general' import { CreepProcs } from 'room/creeps/creepProcs' import { CreepUtils } from 'room/creeps/creepUtils' import { MyCreepUtils } from 'room/creeps/myCreepUtils' diff --git a/src/room/creeps/roleManagers/commune/defenders/meleeDefender.ts b/src/room/creeps/roleManagers/commune/defenders/meleeDefender.ts index 7198beed0..99095b743 100644 --- a/src/room/creeps/roleManagers/commune/defenders/meleeDefender.ts +++ b/src/room/creeps/roleManagers/commune/defenders/meleeDefender.ts @@ -1,11 +1,11 @@ import { - impassibleStructureTypes, - customColors, - CreepMemoryKeys, - PlayerMemoryKeys, - ReservedCoordTypes, - FlagNames, -} from 'international/constants' + impassibleStructureTypes, + customColors, + CreepMemoryKeys, + PlayerMemoryKeys, + ReservedCoordTypes, + FlagNames, +} from 'constants/general' import { PlayerManager } from 'international/players' import { areCoordsEqual, diff --git a/src/room/creeps/roleManagers/commune/defenders/rangedDefender.ts b/src/room/creeps/roleManagers/commune/defenders/rangedDefender.ts index 26b5167c5..cd7a7c689 100644 --- a/src/room/creeps/roleManagers/commune/defenders/rangedDefender.ts +++ b/src/room/creeps/roleManagers/commune/defenders/rangedDefender.ts @@ -4,7 +4,7 @@ import { rangedMassAttackMultiplierByRange, CreepMemoryKeys, ReservedCoordTypes, -} from 'international/constants' +} from 'constants/general' import { areCoordsEqual, findClosestObject, diff --git a/src/room/creeps/roleManagers/commune/fastFiller.ts b/src/room/creeps/roleManagers/commune/fastFiller.ts index 5d28de8f1..ba348ac41 100644 --- a/src/room/creeps/roleManagers/commune/fastFiller.ts +++ b/src/room/creeps/roleManagers/commune/fastFiller.ts @@ -1,4 +1,4 @@ -import { CreepMemoryKeys, ReservedCoordTypes } from 'international/constants' +import { CreepMemoryKeys, ReservedCoordTypes } from 'constants/general' import { findClosestPos, getRangeXY, getRange } from 'utils/utils' import { packCoord, packPos, unpackCoord, unpackCoordAsPos, unpackPos } from 'other/codec' import { StructureUtils } from 'room/structureUtils' @@ -32,7 +32,9 @@ export class FastFiller extends Creep { this.createMoveRequest({ origin: this.pos, - goals: [{ pos: new RoomPosition(fastFillerCoord.x, fastFillerCoord.y, this.room.name), range: 0 }], + goals: [ + { pos: new RoomPosition(fastFillerCoord.x, fastFillerCoord.y, this.room.name), range: 0 }, + ], }) // And inform true diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index 339813670..c1db0c9bf 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -12,7 +12,7 @@ import { packedPosLength, relayOffsets, RoomStatsKeys, -} from 'international/constants' +} from 'constants/general' import { StatsManager } from 'international/stats' import { packCoord, reversePosList, unpackCoord, unpackPosAt } from 'other/codec' import { CreepProcs } from 'room/creeps/creepProcs' diff --git a/src/room/creeps/roleManagers/commune/hubHauler.ts b/src/room/creeps/roleManagers/commune/hubHauler.ts index 2ff3c1d44..36d869d4a 100644 --- a/src/room/creeps/roleManagers/commune/hubHauler.ts +++ b/src/room/creeps/roleManagers/commune/hubHauler.ts @@ -1,13 +1,13 @@ import { - CreepMemoryKeys, - ReservedCoordTypes, - Result, - RoomLogisticsRequestTypes, - RoomMemoryKeys, - linkReceiveTreshold, - linkSendThreshold, - powerSpawnRefillThreshold, -} from 'international/constants' + CreepMemoryKeys, + ReservedCoordTypes, + Result, + RoomLogisticsRequestTypes, + RoomMemoryKeys, + linkReceiveTreshold, + linkSendThreshold, + powerSpawnRefillThreshold, +} from 'constants/general' import { packCoord, unpackCoord } from 'other/codec' import { CommuneUtils } from 'room/commune/communeUtils' import { CreepProcs } from 'room/creeps/creepProcs' diff --git a/src/room/creeps/roleManagers/commune/maintainer.ts b/src/room/creeps/roleManagers/commune/maintainer.ts index 1a45da934..da5ca73c3 100644 --- a/src/room/creeps/roleManagers/commune/maintainer.ts +++ b/src/room/creeps/roleManagers/commune/maintainer.ts @@ -1,9 +1,4 @@ -import { - CreepMemoryKeys, - ReservedCoordTypes, - Result, - roomDimensions, -} from 'international/constants' +import { CreepMemoryKeys, ReservedCoordTypes, Result, roomDimensions } from 'constants/general' import { StatsManager } from 'international/stats' import { findCoordsInsideRect, findObjectWithID, getRange } from 'utils/utils' import { packCoord } from 'other/codec' diff --git a/src/room/creeps/roleManagers/commune/mineralHarvester.ts b/src/room/creeps/roleManagers/commune/mineralHarvester.ts index d8a0e5c05..06104457b 100644 --- a/src/room/creeps/roleManagers/commune/mineralHarvester.ts +++ b/src/room/creeps/roleManagers/commune/mineralHarvester.ts @@ -1,10 +1,10 @@ import { - CreepMemoryKeys, - ReservedCoordTypes, - Result, - RoomMemoryKeys, - RoomStatsKeys, -} from 'international/constants' + CreepMemoryKeys, + ReservedCoordTypes, + Result, + RoomMemoryKeys, + RoomStatsKeys, +} from 'constants/general' import { StatsManager } from 'international/stats' import { getRangeXY, getRange, areCoordsEqual } from 'utils/utils' import { reversePosList, unpackPos } from 'other/codec' diff --git a/src/room/creeps/roleManagers/commune/sourceHarvester.ts b/src/room/creeps/roleManagers/commune/sourceHarvester.ts index c8bf28ddf..69a3a575f 100644 --- a/src/room/creeps/roleManagers/commune/sourceHarvester.ts +++ b/src/room/creeps/roleManagers/commune/sourceHarvester.ts @@ -1,13 +1,13 @@ import { - CreepMemoryKeys, - packedPosLength, - ReservedCoordTypes, - Result, - RoomLogisticsRequestTypes, - RoomMemoryKeys, - RoomStatsKeys, - WorkTypes, -} from 'international/constants' + CreepMemoryKeys, + packedPosLength, + ReservedCoordTypes, + Result, + RoomLogisticsRequestTypes, + RoomMemoryKeys, + RoomStatsKeys, + WorkTypes, +} from 'constants/general' import { StatsManager } from 'international/stats' import { findCoordsInsideRect, diff --git a/src/room/creeps/roleManagers/international/allyVanguard.ts b/src/room/creeps/roleManagers/international/allyVanguard.ts index e5f35f0bd..e949e8639 100644 --- a/src/room/creeps/roleManagers/international/allyVanguard.ts +++ b/src/room/creeps/roleManagers/international/allyVanguard.ts @@ -1,11 +1,11 @@ import { - WorkRequestKeys, - CreepMemoryKeys, - RoomMemoryKeys, - RoomTypes, - Result, - ReservedCoordTypes, -} from 'international/constants' + WorkRequestKeys, + CreepMemoryKeys, + RoomMemoryKeys, + RoomTypes, + Result, + ReservedCoordTypes, +} from 'constants/general' import { findObjectWithID, getRangeXY, getRange } from 'utils/utils' import { unpackCoord } from 'other/codec' import { CreepUtils } from 'room/creeps/creepUtils' diff --git a/src/room/creeps/roleManagers/international/claimer.ts b/src/room/creeps/roleManagers/international/claimer.ts index 7241ba3b4..0d21cf436 100644 --- a/src/room/creeps/roleManagers/international/claimer.ts +++ b/src/room/creeps/roleManagers/international/claimer.ts @@ -1,4 +1,4 @@ -import { WorkRequestKeys, CreepMemoryKeys, Result, RoomTypes } from 'international/constants' +import { WorkRequestKeys, CreepMemoryKeys, Result, RoomTypes } from 'constants/general' import { MyCreepUtils } from 'room/creeps/myCreepUtils' export class Claimer extends Creep { diff --git a/src/room/creeps/roleManagers/international/requestHauler.ts b/src/room/creeps/roleManagers/international/requestHauler.ts index 359d3471a..775189d21 100644 --- a/src/room/creeps/roleManagers/international/requestHauler.ts +++ b/src/room/creeps/roleManagers/international/requestHauler.ts @@ -1,22 +1,22 @@ -import { CreepMemoryKeys } from 'international/constants' +import { CreepMemoryKeys } from 'constants/general' import { CollectiveManager } from 'international/collective' export class RequestHauler extends Creep { - constructor(creepID: Id) { - super(creepID) - } + constructor(creepID: Id) { + super(creepID) + } - initRun() { - if (Memory.haulRequests[this.memory[CreepMemoryKeys.haulRequest]]) { - CollectiveManager.creepsByHaulRequest[this.memory[CreepMemoryKeys.haulRequest]].push( - this.name, - ) - } + initRun() { + if (Memory.haulRequests[this.memory[CreepMemoryKeys.haulRequest]]) { + CollectiveManager.creepsByHaulRequest[this.memory[CreepMemoryKeys.haulRequest]].push( + this.name, + ) } + } - static roleManager(room: Room, creepsOfRole: string[]) { - for (const creepName of creepsOfRole) { - const creep: RequestHauler = Game.creeps[creepName] - } + static roleManager(room: Room, creepsOfRole: string[]) { + for (const creepName of creepsOfRole) { + const creep: RequestHauler = Game.creeps[creepName] } + } } diff --git a/src/room/creeps/roleManagers/international/scout.ts b/src/room/creeps/roleManagers/international/scout.ts index aa3dd5768..de9b26bcf 100644 --- a/src/room/creeps/roleManagers/international/scout.ts +++ b/src/room/creeps/roleManagers/international/scout.ts @@ -1,11 +1,11 @@ import { - CreepMemoryKeys, - Result, - RoomMemoryKeys, - RoomTypes, - communeSign, - nonCommuneSigns, -} from 'international/constants' + CreepMemoryKeys, + Result, + RoomMemoryKeys, + RoomTypes, + communeSign, + nonCommuneSigns, +} from 'constants/general' import { getRangeXY, getRange, randomOf } from 'utils/utils' import { partial } from 'lodash' import { RoomNameUtils } from 'room/roomNameUtils' diff --git a/src/room/creeps/roleManagers/international/vanguard.ts b/src/room/creeps/roleManagers/international/vanguard.ts index eda37fb8c..c1596e882 100644 --- a/src/room/creeps/roleManagers/international/vanguard.ts +++ b/src/room/creeps/roleManagers/international/vanguard.ts @@ -1,10 +1,10 @@ import { - WorkRequestKeys, - CreepMemoryKeys, - Result, - RoomTypes, - ReservedCoordTypes, -} from 'international/constants' + WorkRequestKeys, + CreepMemoryKeys, + Result, + RoomTypes, + ReservedCoordTypes, +} from 'constants/general' import { findObjectWithID, getRangeXY, getRange } from 'utils/utils' import { unpackCoord } from 'other/codec' import { CreepUtils } from 'room/creeps/creepUtils' diff --git a/src/room/creeps/roleManagers/remote/remoteBuilder.ts b/src/room/creeps/roleManagers/remote/remoteBuilder.ts index c5525cb83..124753b04 100644 --- a/src/room/creeps/roleManagers/remote/remoteBuilder.ts +++ b/src/room/creeps/roleManagers/remote/remoteBuilder.ts @@ -1,10 +1,10 @@ import { - CreepMemoryKeys, - packedPosLength, - Result, - RoomMemoryKeys, - RoomTypes, -} from 'international/constants' + CreepMemoryKeys, + packedPosLength, + Result, + RoomMemoryKeys, + RoomTypes, +} from 'constants/general' import { findCarryPartsRequired, findObjectWithID, diff --git a/src/room/creeps/roleManagers/remote/remoteCoreAttacker.ts b/src/room/creeps/roleManagers/remote/remoteCoreAttacker.ts index 08f5f7b14..69ce5458d 100644 --- a/src/room/creeps/roleManagers/remote/remoteCoreAttacker.ts +++ b/src/room/creeps/roleManagers/remote/remoteCoreAttacker.ts @@ -1,12 +1,12 @@ import { - CreepMemoryKeys, - customColors, - remoteTypeWeights, - Result, - RoomMemoryKeys, - RoomTypes, - SleepFor, -} from 'international/constants' + CreepMemoryKeys, + customColors, + remoteTypeWeights, + Result, + RoomMemoryKeys, + RoomTypes, + SleepFor, +} from 'constants/general' import { getRangeXY, randomIntRange, randomTick } from 'utils/utils' export class RemoteCoreAttacker extends Creep { diff --git a/src/room/creeps/roleManagers/remote/remoteDefender.ts b/src/room/creeps/roleManagers/remote/remoteDefender.ts index 933362f66..7265e1d43 100644 --- a/src/room/creeps/roleManagers/remote/remoteDefender.ts +++ b/src/room/creeps/roleManagers/remote/remoteDefender.ts @@ -1,10 +1,10 @@ import { - CreepMemoryKeys, - Result, - RoomMemoryKeys, - RoomTypes, - remoteTypeWeights, -} from 'international/constants' + CreepMemoryKeys, + Result, + RoomMemoryKeys, + RoomTypes, + remoteTypeWeights, +} from 'constants/general' import { findClosestObject, getRangeXY, randomIntRange } from 'utils/utils' import { packCoord } from 'other/codec' diff --git a/src/room/creeps/roleManagers/remote/remoteDismantler.ts b/src/room/creeps/roleManagers/remote/remoteDismantler.ts index ad04189d4..ff2246392 100644 --- a/src/room/creeps/roleManagers/remote/remoteDismantler.ts +++ b/src/room/creeps/roleManagers/remote/remoteDismantler.ts @@ -1,10 +1,10 @@ import { - CreepMemoryKeys, - Result, - RoomMemoryKeys, - RoomTypes, - remoteTypeWeights, -} from 'international/constants' + CreepMemoryKeys, + Result, + RoomMemoryKeys, + RoomTypes, + remoteTypeWeights, +} from 'constants/general' import { findObjectWithID, getRangeXY, randomTick } from 'utils/utils' export class RemoteDismantler extends Creep { diff --git a/src/room/creeps/roleManagers/remote/remoteReserver.ts b/src/room/creeps/roleManagers/remote/remoteReserver.ts index 38aadaf4e..c61714955 100644 --- a/src/room/creeps/roleManagers/remote/remoteReserver.ts +++ b/src/room/creeps/roleManagers/remote/remoteReserver.ts @@ -5,7 +5,7 @@ import { RoomMemoryKeys, RoomTypes, packedPosLength, -} from 'international/constants' +} from 'constants/general' import { getRange, randomTick } from 'utils/utils' import { packCoord, diff --git a/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts b/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts index f3966038e..4f7467e12 100644 --- a/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts +++ b/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts @@ -7,7 +7,7 @@ import { RoomMemoryKeys, RoomTypes, WorkTypes, -} from 'international/constants' +} from 'constants/general' import { findCarryPartsRequired, findObjectWithID, diff --git a/src/room/creeps/roles/haulerOps.ts b/src/room/creeps/roles/haulerOps.ts index e9e73030e..4cae02ab1 100644 --- a/src/room/creeps/roles/haulerOps.ts +++ b/src/room/creeps/roles/haulerOps.ts @@ -11,7 +11,7 @@ import { customColors, FlagNames, relayOffsets, -} from 'international/constants' +} from 'constants/general' import { StatsManager } from 'international/stats' import { unpackPosAt, reversePosList, packCoord, unpackCoord } from 'other/codec' import { CreepProcs } from 'room/creeps/creepProcs' diff --git a/src/room/logisticsProcs.ts b/src/room/logisticsProcs.ts index 051681a40..678565b43 100644 --- a/src/room/logisticsProcs.ts +++ b/src/room/logisticsProcs.ts @@ -1,4 +1,4 @@ -import { RoomLogisticsRequestTypes } from 'international/constants' +import { RoomLogisticsRequestTypes } from 'constants/general' import { scalePriority } from 'utils/utils' export class LogisticsProcs { @@ -197,7 +197,6 @@ export class LogisticsProcs { } static createCommuneStoringStructureLogisticsRequests(room: Room) { - const storingStructures: AnyStoreStructure[] = [] const storage = room.storage @@ -205,25 +204,25 @@ export class LogisticsProcs { const terminal = room.terminal if (terminal && !terminal.effectsData.get(PWR_DISRUPT_TERMINAL)) - storingStructures.push(terminal) + storingStructures.push(terminal) for (const structure of storingStructures) { - room.createRoomLogisticsRequest({ - target: structure, - onlyFull: true, - type: RoomLogisticsRequestTypes.offer, - priority: 0, - }) + room.createRoomLogisticsRequest({ + target: structure, + onlyFull: true, + type: RoomLogisticsRequestTypes.offer, + priority: 0, + }) - // We are close to full + // We are close to full - if (structure.usedReserveStore > structure.store.getCapacity() * 0.9) continue + if (structure.usedReserveStore > structure.store.getCapacity() * 0.9) continue - room.createRoomLogisticsRequest({ - target: structure, - type: RoomLogisticsRequestTypes.transfer, - priority: 100, - }) + room.createRoomLogisticsRequest({ + target: structure, + type: RoomLogisticsRequestTypes.transfer, + priority: 100, + }) } } } diff --git a/src/room/remotePlanner.ts b/src/room/remotePlanner.ts index 8a880fc57..3811c193b 100644 --- a/src/room/remotePlanner.ts +++ b/src/room/remotePlanner.ts @@ -1,21 +1,21 @@ import { - CPUMaxPerTick, - defaultRoadPlanningPlainCost, - maxRampartGroupSize, - customColors, - roomDimensions, - stamps, - Result, - cardinalOffsets, - adjacentOffsets, - defaultMinCutDepth, - minOnboardingRamparts, - defaultSwampCost, - allStructureTypes, - buildableStructureTypes, - structureTypesToProtectSet, - RoomMemoryKeys, -} from 'international/constants' + CPUMaxPerTick, + defaultRoadPlanningPlainCost, + maxRampartGroupSize, + customColors, + roomDimensions, + stamps, + Result, + cardinalOffsets, + adjacentOffsets, + defaultMinCutDepth, + minOnboardingRamparts, + defaultSwampCost, + allStructureTypes, + buildableStructureTypes, + structureTypesToProtectSet, + RoomMemoryKeys, +} from 'constants/general' import { areCoordsEqual, createPosMap, diff --git a/src/room/remoteProcs.ts b/src/room/remoteProcs.ts index 2adc41738..d9635ed16 100644 --- a/src/room/remoteProcs.ts +++ b/src/room/remoteProcs.ts @@ -1,5 +1,3 @@ -import { RoomLogisticsRequestTypes } from 'international/constants' +import { RoomLogisticsRequestTypes } from 'constants/general' -export class RemoteProcs { - -} +export class RemoteProcs {} diff --git a/src/room/resourceAdditions.ts b/src/room/resourceAdditions.ts index c4c30a4bf..25ec2a8df 100644 --- a/src/room/resourceAdditions.ts +++ b/src/room/resourceAdditions.ts @@ -1,4 +1,4 @@ -import { decayCosts } from "international/constants" +import { decayCosts } from "constants/general" Object.defineProperties(Resource.prototype, { nextAmount: { diff --git a/src/room/room.ts b/src/room/room.ts index 44d06e7d9..518de25d1 100644 --- a/src/room/room.ts +++ b/src/room/room.ts @@ -1,30 +1,30 @@ import { - CreepMemoryKeys, - PlayerMemoryKeys, - ReservedCoordTypes, - Result, - RoomLogisticsRequestTypes, - RoomMemoryKeys, - RoomTypes, - adjacentOffsets, - allStructureTypes, - combatTargetStructureTypes, - creepRoles, - customColors, - defaultRoadPlanningPlainCost, - defaultStructureTypesByBuildPriority, - defaultSwampCost, - dynamicScoreRoomRange, - impassibleStructureTypes, - maxControllerLevel, - packedPosLength, - powerCreepClassNames, - preferredCommuneRange, - quadAttackMemberOffsets, - remoteTypeWeights, - roomDimensions, - roomTypesUsedForStats, -} from 'international/constants' + CreepMemoryKeys, + PlayerMemoryKeys, + ReservedCoordTypes, + Result, + RoomLogisticsRequestTypes, + RoomMemoryKeys, + RoomTypes, + adjacentOffsets, + allStructureTypes, + combatTargetStructureTypes, + creepRoles, + customColors, + defaultRoadPlanningPlainCost, + defaultStructureTypesByBuildPriority, + defaultSwampCost, + dynamicScoreRoomRange, + impassibleStructureTypes, + maxControllerLevel, + packedPosLength, + powerCreepClassNames, + preferredCommuneRange, + quadAttackMemberOffsets, + remoteTypeWeights, + roomDimensions, + roomTypesUsedForStats, +} from 'constants/general' import { findClosestObject, findHighestScore, diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index 6efb90f97..02f15bac8 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -16,7 +16,7 @@ import { RemoteResourcePathTypes, FlagNames, RoomStatusKeys, -} from 'international/constants' +} from 'constants/general' import { findAdjacentCoordsToCoord, findCoordsInsideRect, diff --git a/src/room/roomNameProcs.ts b/src/room/roomNameProcs.ts index c770c4838..478ddc450 100644 --- a/src/room/roomNameProcs.ts +++ b/src/room/roomNameProcs.ts @@ -1,4 +1,4 @@ -import { Result, RoomMemoryKeys, RoomStatusKeys, RoomTypes } from 'international/constants' +import { Result, RoomMemoryKeys, RoomStatusKeys, RoomTypes } from 'constants/general' export class RoomNameProcs { static findAndRecordStatus(roomName: string, roomMemory = Memory.rooms[roomName]) { @@ -9,7 +9,6 @@ export class RoomNameProcs { } static findAndRecordConstantType(roomName: string) { - // Find the numbers in the room's name const [EWstring, NSstring] = roomName.match(/\d+/g) diff --git a/src/room/roomNameUtils.ts b/src/room/roomNameUtils.ts index b0ca68548..55d0731e0 100644 --- a/src/room/roomNameUtils.ts +++ b/src/room/roomNameUtils.ts @@ -11,7 +11,7 @@ import { roomDimensions, roomTypeProperties, roomTypes, -} from 'international/constants' +} from 'constants/general' import { CollectiveManager } from 'international/collective' import { findAdjacentCoordsToCoord, diff --git a/src/room/roomObjectAdditions.ts b/src/room/roomObjectAdditions.ts index d8982fdbb..d3a58d0cf 100644 --- a/src/room/roomObjectAdditions.ts +++ b/src/room/roomObjectAdditions.ts @@ -1,134 +1,134 @@ -import { allResources, customColors } from 'international/constants' +import { allResources, customColors } from 'constants/general' import { customLog } from 'utils/logging' import { findObjectWithID } from 'utils/utils' Object.defineProperties(RoomObject.prototype, { - effectsData: { - get() { - if (this._effectsData) return this._effectsData + effectsData: { + get() { + if (this._effectsData) return this._effectsData - this._effectsData = new Map() - if (!this.effects) return this._effectsData + this._effectsData = new Map() + if (!this.effects) return this._effectsData - for (const effectData of this.effects) { - this._effectsData.set(effectData.effect, effectData) - } + for (const effectData of this.effects) { + this._effectsData.set(effectData.effect, effectData) + } - return this._effectsData - }, + return this._effectsData }, - nextHits: { - get(this: RoomObject & { hits: number }) { - if (this._nextHits) return this._nextHits + }, + nextHits: { + get(this: RoomObject & { hits: number }) { + if (this._nextHits) return this._nextHits - return (this._nextHits = this.hits) - }, - set(newNextHits: number) { - this._nextHits = newNextHits - }, + return (this._nextHits = this.hits) }, - reserveHits: { - get(this: RoomObject & { hits: number }) { - if (this._reserveHits) return this._reserveHits + set(newNextHits: number) { + this._nextHits = newNextHits + }, + }, + reserveHits: { + get(this: RoomObject & { hits: number }) { + if (this._reserveHits) return this._reserveHits - return (this._reserveHits = this.hits) - }, - set(newReserveHits: number) { - this._reserveHits = newReserveHits - }, + return (this._reserveHits = this.hits) }, - nextStore: { - get(this: AnyStoreStructure) { - if (this._nextStore) return this._nextStore - - const parent = this - const referenceStore = Object.assign({}, this.store) - - this._nextStore = new Proxy(referenceStore, { - get(target: CustomStore, resourceType: ResourceConstant) { - return target[resourceType] ?? 0 - }, - set(target: CustomStore, resourceType: ResourceConstant, newAmount) { - if (parent._usedNextStore !== undefined) { - parent._usedNextStore += newAmount - (target[resourceType] ?? 0) - } - // Update the change - - target[resourceType] = newAmount - return true - }, - }) - - return this._nextStore + set(newReserveHits: number) { + this._reserveHits = newReserveHits + }, + }, + nextStore: { + get(this: AnyStoreStructure) { + if (this._nextStore) return this._nextStore + + const parent = this + const referenceStore = Object.assign({}, this.store) + + this._nextStore = new Proxy(referenceStore, { + get(target: CustomStore, resourceType: ResourceConstant) { + return target[resourceType] ?? 0 }, + set(target: CustomStore, resourceType: ResourceConstant, newAmount) { + if (parent._usedNextStore !== undefined) { + parent._usedNextStore += newAmount - (target[resourceType] ?? 0) + } + // Update the change + + target[resourceType] = newAmount + return true + }, + }) + + return this._nextStore }, - usedNextStore: { - get(this: RoomObject & { store?: StoreDefinition }) { - if (this._usedNextStore !== undefined) return this._usedNextStore + }, + usedNextStore: { + get(this: RoomObject & { store?: StoreDefinition }) { + if (this._usedNextStore !== undefined) return this._usedNextStore - this._usedNextStore = 0 + this._usedNextStore = 0 - for (const key in this.nextStore) { - this._usedNextStore += this.nextStore[key as ResourceConstant] - } + for (const key in this.nextStore) { + this._usedNextStore += this.nextStore[key as ResourceConstant] + } - return this._usedNextStore - }, + return this._usedNextStore }, - freeNextStore: { - get(this: RoomObject & { store?: StoreDefinition }) { - return this.store.getCapacity() - this.usedNextStore - }, + }, + freeNextStore: { + get(this: RoomObject & { store?: StoreDefinition }) { + return this.store.getCapacity() - this.usedNextStore }, - reserveStore: { - get(this: AnyStoreStructure) { - if (this._reserveStore) return this._reserveStore - - const parent = this - const referenceStore = Object.assign({}, this.store) - - this._reserveStore = new Proxy(referenceStore, { - get(target: CustomStore, resourceType: ResourceConstant) { - return target[resourceType] ?? 0 - }, - set(target: CustomStore, resourceType: ResourceConstant, newAmount) { - if (parent._usedReserveStore !== undefined) { - parent._usedReserveStore += newAmount - (target[resourceType] ?? 0) - } - - // Update the change - - target[resourceType] = newAmount - return true - }, - }) - - return this._reserveStore + }, + reserveStore: { + get(this: AnyStoreStructure) { + if (this._reserveStore) return this._reserveStore + + const parent = this + const referenceStore = Object.assign({}, this.store) + + this._reserveStore = new Proxy(referenceStore, { + get(target: CustomStore, resourceType: ResourceConstant) { + return target[resourceType] ?? 0 }, + set(target: CustomStore, resourceType: ResourceConstant, newAmount) { + if (parent._usedReserveStore !== undefined) { + parent._usedReserveStore += newAmount - (target[resourceType] ?? 0) + } + + // Update the change + + target[resourceType] = newAmount + return true + }, + }) + + return this._reserveStore }, - usedReserveStore: { - get(this: RoomObject & { store?: StoreDefinition }) { - if (this._usedReserveStore !== undefined) return this._usedReserveStore + }, + usedReserveStore: { + get(this: RoomObject & { store?: StoreDefinition }) { + if (this._usedReserveStore !== undefined) return this._usedReserveStore - this._usedReserveStore = 0 + this._usedReserveStore = 0 - for (const key in this.reserveStore) { - this._usedReserveStore += this.reserveStore[key as ResourceConstant] - } + for (const key in this.reserveStore) { + this._usedReserveStore += this.reserveStore[key as ResourceConstant] + } - return this._usedReserveStore - }, + return this._usedReserveStore }, - freeReserveStore: { - get(this: RoomObject & { store?: StoreDefinition }) { - return this.store.getCapacity() - this.usedReserveStore - }, + }, + freeReserveStore: { + get(this: RoomObject & { store?: StoreDefinition }) { + return this.store.getCapacity() - this.usedReserveStore }, - reservePowers: { - get() { - if (this._reservePowers) return this._reservePowers + }, + reservePowers: { + get() { + if (this._reservePowers) return this._reservePowers - return (this._reservePowers = new Set()) - }, + return (this._reservePowers = new Set()) }, + }, } as PropertyDescriptorMap & ThisType) diff --git a/src/room/roomObjectUtils.ts b/src/room/roomObjectUtils.ts index 25545901b..b00f877a1 100644 --- a/src/room/roomObjectUtils.ts +++ b/src/room/roomObjectUtils.ts @@ -1,9 +1,15 @@ -import { separateStoreStructureTypes } from "international/constants" +import { separateStoreStructureTypes } from 'constants/general' export class RoomObjectUtils { - static freeNextStoreOf(roomObject: RoomObject & { store: StoreDefinition }, resourceType: ResourceConstant) { + static freeNextStoreOf( + roomObject: RoomObject & { store: StoreDefinition }, + resourceType: ResourceConstant, + ) { // If our storing system is like a lab, nuker, power spawn - if (roomObject instanceof Structure && separateStoreStructureTypes.has(roomObject.structureType)) { + if ( + roomObject instanceof Structure && + separateStoreStructureTypes.has(roomObject.structureType) + ) { return roomObject.store.getCapacity(resourceType) - roomObject.nextStore[resourceType] } @@ -15,7 +21,10 @@ export class RoomObjectUtils { resourceType: ResourceConstant, ) { // If our storing system is like a lab, nuker, power spawn - if (roomObject instanceof Structure && separateStoreStructureTypes.has(roomObject.structureType)) { + if ( + roomObject instanceof Structure && + separateStoreStructureTypes.has(roomObject.structureType) + ) { return roomObject.store.getCapacity(resourceType) - roomObject.reserveStore[resourceType] } diff --git a/src/room/roomOps.ts b/src/room/roomOps.ts index c117eba1c..94d47a9fc 100644 --- a/src/room/roomOps.ts +++ b/src/room/roomOps.ts @@ -7,7 +7,7 @@ import { RoomTypes, roomDimensions, allStructureTypes, -} from 'international/constants' +} from 'constants/general' import { StatsManager } from 'international/stats' import { Dashboard, Rectangle, Table } from 'screeps-viz' import { packXYAsNum, randomTick } from 'utils/utils' diff --git a/src/room/roomServices.ts b/src/room/roomServices.ts index f9c1af328..d47941438 100644 --- a/src/room/roomServices.ts +++ b/src/room/roomServices.ts @@ -1,10 +1,10 @@ import { - RoomMemoryKeys, - RoomStatsKeys, - RoomTypes, - customColors, - roomTypesUsedForStats, -} from '../international/constants' + RoomMemoryKeys, + RoomStatsKeys, + RoomTypes, + customColors, + roomTypesUsedForStats, +} from '../constants/general' import './roomFunctions' diff --git a/src/room/roomUtils.ts b/src/room/roomUtils.ts index 71e9b7297..85805ad63 100644 --- a/src/room/roomUtils.ts +++ b/src/room/roomUtils.ts @@ -1,4 +1,4 @@ -import { RoomMemoryKeys, RoomTypes, roomDimensions } from 'international/constants' +import { RoomMemoryKeys, RoomTypes, roomDimensions } from 'constants/general' import { packCoord, packXYAsCoord, unpackCoord } from 'other/codec' import { RoomDataOps, roomData } from './roomData' import { findObjectWithID, forAdjacentCoords, Utils } from 'utils/utils' diff --git a/src/room/roomVisuals.ts b/src/room/roomVisuals.ts index bb7143627..4b35e7ebc 100644 --- a/src/room/roomVisuals.ts +++ b/src/room/roomVisuals.ts @@ -1,15 +1,15 @@ import { - WorkRequestKeys, - CombatRequestKeys, - HaulRequestKeys, - customColors, - roomDimensions, - stamps, - packedPosLength, - RoomMemoryKeys, - RoomTypes, - FlagNames, -} from 'international/constants' + WorkRequestKeys, + CombatRequestKeys, + HaulRequestKeys, + customColors, + roomDimensions, + stamps, + packedPosLength, + RoomMemoryKeys, + RoomTypes, + FlagNames, +} from 'constants/general' import { StatsManager } from 'international/stats' import { customLog } from 'utils/logging' import { findObjectWithID, unpackNumAsCoord } from 'utils/utils' diff --git a/src/room/structureUtils.ts b/src/room/structureUtils.ts index 59981e0ae..6b8ea5e66 100644 --- a/src/room/structureUtils.ts +++ b/src/room/structureUtils.ts @@ -1,4 +1,4 @@ -import { RoomMemoryKeys } from "international/constants" +import { RoomMemoryKeys } from 'constants/general' export class StructureUtils { static isRCLActionable(structure: Structure) { diff --git a/src/types.d.ts b/src/types.d.ts index b09b8f9dd..7eafea4f7 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -26,7 +26,7 @@ import { MovedTypes, RoomStatsKeys, RoomStatusKeys, -} from 'international/constants' +} from 'constants/general' import { Operator } from 'room/creeps/powerCreeps/operator' import { MeleeDefender } from 'room/creeps/roleManagers/commune/defenders/meleeDefender' import { Settings } from 'international/settingsDefault' diff --git a/src/types/creepTasks.ts b/src/types/creepTasks.ts index e78e38f38..80a5c4588 100644 --- a/src/types/creepTasks.ts +++ b/src/types/creepTasks.ts @@ -1,4 +1,4 @@ -import { CreepPowerTaskKeys, CreepTaskKeys, CreepTaskNames } from '../international/constants' +import { CreepPowerTaskKeys, CreepTaskKeys, CreepTaskNames } from '../constants/general' export type CreepTaskTargets = Structure | Creep | Tombstone | Ruin | Resource diff --git a/src/types/internationalRequests.ts b/src/types/internationalRequests.ts index 4e0409fde..4a08cd702 100644 --- a/src/types/internationalRequests.ts +++ b/src/types/internationalRequests.ts @@ -1,61 +1,67 @@ -import { CombatRequestKeys, DepositRequestKeys, HaulRequestKeys, NukeRequestKeys, WorkRequestKeys } from "international/constants" +import { + CombatRequestKeys, + DepositRequestKeys, + HaulRequestKeys, + NukeRequestKeys, + WorkRequestKeys, +} from 'constants/general' export interface WorkRequest { - [WorkRequestKeys.claimer]?: number - [WorkRequestKeys.vanguard]?: number - [WorkRequestKeys.abandon]?: number - [WorkRequestKeys.responder]?: string - [WorkRequestKeys.priority]?: number - [WorkRequestKeys.allyVanguard]?: number - [WorkRequestKeys.forAlly]?: boolean - [WorkRequestKeys.hauler]?: boolean + [WorkRequestKeys.claimer]?: number + [WorkRequestKeys.vanguard]?: number + [WorkRequestKeys.abandon]?: number + [WorkRequestKeys.responder]?: string + [WorkRequestKeys.priority]?: number + [WorkRequestKeys.allyVanguard]?: number + [WorkRequestKeys.forAlly]?: boolean + [WorkRequestKeys.hauler]?: boolean } export type CombatRequestTypes = 'attack' | 'harass' | 'defend' export interface CombatRequest { - [CombatRequestKeys.abandon]: number - [CombatRequestKeys.rangedAttack]: number - [CombatRequestKeys.abandon]: number - [CombatRequestKeys.dismantle]: number - [CombatRequestKeys.downgrade]: number - [CombatRequestKeys.minDamage]: number - [CombatRequestKeys.minMeleeHeal]: number - [CombatRequestKeys.minRangedHeal]: number - [CombatRequestKeys.maxTowerDamage]: number - [CombatRequestKeys.quads]: number - [CombatRequestKeys.priority]: number - [CombatRequestKeys.quadQuota]: number - [CombatRequestKeys.inactionTimerMax]: number - [CombatRequestKeys.inactionTimer]: number - [CombatRequestKeys.maxThreat]: number - [CombatRequestKeys.abandonments]: number - [CombatRequestKeys.type]: CombatRequestTypes - [CombatRequestKeys.responder]: string - [CombatRequestKeys.dynamicSquads]: number - [CombatRequestKeys.dynamicSquadQuota]: number + [CombatRequestKeys.abandon]: number + [CombatRequestKeys.rangedAttack]: number + [CombatRequestKeys.abandon]: number + [CombatRequestKeys.dismantle]: number + [CombatRequestKeys.downgrade]: number + [CombatRequestKeys.minDamage]: number + [CombatRequestKeys.minMeleeHeal]: number + [CombatRequestKeys.minRangedHeal]: number + [CombatRequestKeys.maxTowerDamage]: number + [CombatRequestKeys.quads]: number + [CombatRequestKeys.priority]: number + [CombatRequestKeys.quadQuota]: number + [CombatRequestKeys.inactionTimerMax]: number + [CombatRequestKeys.inactionTimer]: number + [CombatRequestKeys.maxThreat]: number + [CombatRequestKeys.abandonments]: number + [CombatRequestKeys.type]: CombatRequestTypes + [CombatRequestKeys.responder]: string + [CombatRequestKeys.dynamicSquads]: number + [CombatRequestKeys.dynamicSquadQuota]: number } export interface NukeRequest { - [NukeRequestKeys.y]: number - [NukeRequestKeys.x]: number - [NukeRequestKeys.responder]: string - [NukeRequestKeys.priority]: number + [NukeRequestKeys.y]: number + [NukeRequestKeys.x]: number + [NukeRequestKeys.responder]: string + [NukeRequestKeys.priority]: number } export interface HaulRequest { - [HaulRequestKeys.type]: 'transfer' | 'withdraw' - [HaulRequestKeys.distance]: number - [HaulRequestKeys.timer]: number - [HaulRequestKeys.priority]: number - [HaulRequestKeys.abandon]: number - [HaulRequestKeys.responder]: string + [HaulRequestKeys.type]: 'transfer' | 'withdraw' + [HaulRequestKeys.distance]: number + [HaulRequestKeys.timer]: number + [HaulRequestKeys.priority]: number + [HaulRequestKeys.abandon]: number + [HaulRequestKeys.responder]: string } export interface DepositRequest { - [DepositRequestKeys.depositHarvester]: number - [DepositRequestKeys.depositHauler]: number - [DepositRequestKeys.abandon]: number - [DepositRequestKeys.responder]: string - [DepositRequestKeys.type]: DepositConstant + [DepositRequestKeys.depositHarvester]: number + [DepositRequestKeys.depositHauler]: number + [DepositRequestKeys.abandon]: number + [DepositRequestKeys.responder]: string + [DepositRequestKeys.type]: DepositConstant } diff --git a/src/types/players.ts b/src/types/players.ts index 63e28c08b..a67eb75b0 100644 --- a/src/types/players.ts +++ b/src/types/players.ts @@ -1,5 +1,5 @@ -import { PlayerRelationships } from 'international/constants' -import { PlayerMemoryKeys } from 'international/constants' +import { PlayerRelationships } from 'constants/general' +import { PlayerMemoryKeys } from 'constants/general' export interface PlayerMemory { [PlayerMemoryKeys.offensiveThreat]: number diff --git a/src/types/roomLogistics.ts b/src/types/roomLogistics.ts index eac2217d8..681443e2b 100644 --- a/src/types/roomLogistics.ts +++ b/src/types/roomLogistics.ts @@ -1,4 +1,4 @@ -import { CreepLogisticsRequestKeys, RoomLogisticsRequestTypes } from 'international/constants' +import { CreepLogisticsRequestKeys, RoomLogisticsRequestTypes } from 'constants/general' export type RoomLogisticsTargets = AnyStoreStructure | Creep | Tombstone | Ruin | Resource @@ -61,14 +61,14 @@ export interface CreateRoomLogisticsRequestArgs { } export interface FindNewRoomLogisticsRequestArgs { - types?: Set - /** - * Use this to command certain resourceTypes - */ - resourceTypes?: Set - noDelivery?: boolean - /** - * DO NOT USE THIS TO COMMAND CERTAIN RESOURCETYPES, instead use resourceTypes - */ - conditions?(request: RoomLogisticsRequest): any + types?: Set + /** + * Use this to command certain resourceTypes + */ + resourceTypes?: Set + noDelivery?: boolean + /** + * DO NOT USE THIS TO COMMAND CERTAIN RESOURCETYPES, instead use resourceTypes + */ + conditions?(request: RoomLogisticsRequest): any } diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 8dda2bb4b..380dbf696 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -1,9 +1,13 @@ import { ErrorMapper } from 'other/ErrorMapper' import { - customColors, roomDimensions, PlayerMemoryKeys, Result, FlagNames -} from '../international/constants' + customColors, + roomDimensions, + PlayerMemoryKeys, + Result, + FlagNames, +} from '../constants/general' import { customLog } from './logging' -import { PlayerRelationships } from 'international/constants' +import { PlayerRelationships } from 'constants/general' import { RoomNameUtils } from 'room/roomNameUtils' import { Dashboard, Rectangle, Table } from 'screeps-viz' From 0340236a037f44d8c63ebe5d4763f27691336546 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 30 Jan 2024 20:11:43 -0800 Subject: [PATCH 132/190] clarify DESIGN.md --- DESIGN.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/DESIGN.md b/DESIGN.md index f5558d42f..9fd7c1c01 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -74,11 +74,10 @@ The MarketManager handles caching market related data, updating / deleting it as ## Use of classes -Classes should be static, and static classes should not be instantiated. If a class needs to be instantiated, there is probably a better way to do it. +Classes should be static, and static classes should not be instantiated. If a class "needs" to be instantiated, there is probably a better way to do it. Inherence of classes should be avoided. - -Mixing state and state modifiers (functions) in classes should be avoided. +classes should no contain state and alter state. They should do only one or the other. # Creep Tasks From e2add203fb7a0ed716b67c406b1cdd69f404db3b Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 30 Jan 2024 20:13:26 -0800 Subject: [PATCH 133/190] fix spelling error readme.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cc9812b11..cbfb43eb9 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ First you'll want to download or fork the repository. Start by selecting a branc Ensure you have downloaded [Node](https://nodejs.org/en/) -**Consider using Node version is 20.10.0 if you have issues** +**Consider using Node version if 20.10.0 if you have issues** You can check your node version with: From 8c01424fa0b9993fb6535d2d2071e3efcd06e927 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Tue, 30 Jan 2024 20:40:55 -0800 Subject: [PATCH 134/190] CommuneProcs -> CommuneOps --- src/other/profilerRegister.ts | 4 ++-- src/room/commune/combatRequest.ts | 12 ++++++------ src/room/commune/{communeProcs.ts => communeOps.ts} | 6 +++--- src/room/commune/remotesManager.ts | 6 +++--- src/room/commune/spawning/spawnRequests.ts | 10 ++++------ src/room/commune/workRequest.ts | 4 ++-- src/room/room.ts | 2 +- src/room/roomOps.ts | 9 ++++----- src/room/roomServices.ts | 7 ++----- 9 files changed, 27 insertions(+), 33 deletions(-) rename src/room/commune/{communeProcs.ts => communeOps.ts} (98%) diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index de5dd464d..c99cb6cb6 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -80,7 +80,7 @@ import { RoomDataOps } from 'room/roomData' import { CommuneDataOps } from 'room/commune/communeData' import { MyCreepUtils } from 'room/creeps/myCreepUtils' import { CreepMoveProcs } from 'room/creeps/creepMoveProcs' -import { CommuneProcs } from 'room/commune/communeProcs' +import { CommuneOps } from 'room/commune/communeOps' import { PowerCreepProcs } from 'room/creeps/powerCreeps/powerCreepProcs' import { PowerCreepUtils } from 'room/creeps/powerCreeps/powerCreepUtils' import { CreepProcs } from 'room/creeps/creepProcs' @@ -179,7 +179,7 @@ export function profilerRegister() { profiler.registerClass(CommuneUtils, 'CommuneUtils') profiler.registerClass(RoomDataOps, 'RoomDataProcs') profiler.registerClass(CommuneDataOps, 'CommuneDataProcs') - profiler.registerClass(CommuneProcs, 'CommuneProc') + profiler.registerClass(CommuneOps, 'CommuneProc') profiler.registerClass(RoomObjectUtils, 'RoomObjectUtils') profiler.registerClass(StructureUtils, 'StructureUtils') profiler.registerClass(RemoteProcs, 'RemoteProcs') diff --git a/src/room/commune/combatRequest.ts b/src/room/commune/combatRequest.ts index 62691d7c1..61cec8778 100644 --- a/src/room/commune/combatRequest.ts +++ b/src/room/commune/combatRequest.ts @@ -3,7 +3,7 @@ import { CommuneManager } from './commune' import { StatsManager } from 'international/stats' import { randomIntRange, Utils } from 'utils/utils' import { CombatRequest } from 'types/internationalRequests' -import { CommuneProcs } from './communeProcs' +import { CommuneOps } from './communeOps' const checkRoomStatusInverval = randomIntRange(200, 500) @@ -176,7 +176,7 @@ export class CombatRequestManager { if (threateningAttacker) { request[CombatRequestKeys.abandon] = 1500 - CommuneProcs.deleteCombatRequest(room, requestName, index) + CommuneOps.deleteCombatRequest(room, requestName, index) return } @@ -186,7 +186,7 @@ export class CombatRequestManager { this.manageInaction(requestName, index) } else { if (!request[CombatRequestKeys.inactionTimerMax]) { - CommuneProcs.deleteCombatRequest(room, requestName, index) + CommuneOps.deleteCombatRequest(room, requestName, index) return } @@ -243,7 +243,7 @@ export class CombatRequestManager { this.manageInaction(requestName, index) } else { if (!request[CombatRequestKeys.inactionTimerMax]) { - CommuneProcs.deleteCombatRequest(room, requestName, index) + CommuneOps.deleteCombatRequest(room, requestName, index) return } @@ -255,7 +255,7 @@ export class CombatRequestManager { const request = Memory.combatRequests[requestName] if (request[CombatRequestKeys.inactionTimer] <= 0) { - CommuneProcs.deleteCombatRequest(this.communeManager.room, requestName, index) + CommuneOps.deleteCombatRequest(this.communeManager.room, requestName, index) return } } @@ -266,7 +266,7 @@ export class CombatRequestManager { if (request[CombatRequestKeys.abandonments] >= 3) { // Delete the request - CommuneProcs.deleteCombatRequest(this.communeManager.room, requestName, index) + CommuneOps.deleteCombatRequest(this.communeManager.room, requestName, index) return } diff --git a/src/room/commune/communeProcs.ts b/src/room/commune/communeOps.ts similarity index 98% rename from src/room/commune/communeProcs.ts rename to src/room/commune/communeOps.ts index a475448b5..46bc9e855 100644 --- a/src/room/commune/communeProcs.ts +++ b/src/room/commune/communeOps.ts @@ -27,7 +27,7 @@ import { CommuneManager } from './commune' /** * Minor processes for communes */ -export class CommuneProcs { +export class CommuneOps { static clean(communeManager: CommuneManager) { delete communeManager._maxCombatRequests delete communeManager._defensiveRamparts @@ -91,7 +91,7 @@ export class CommuneProcs { roomMemory[RoomMemoryKeys.greatestRCL] = room.controller.level } - CommuneProcs.getRCLUpdate(room) + CommuneOps.getRCLUpdate(room) if (!roomMemory[RoomMemoryKeys.combatRequests]) roomMemory[RoomMemoryKeys.combatRequests] = [] if (!roomMemory[RoomMemoryKeys.haulRequests]) roomMemory[RoomMemoryKeys.haulRequests] = [] @@ -202,7 +202,7 @@ export class CommuneProcs { room.roomManager.creepRoleManager.run() room.roomManager.powerCreepRoleManager.run() - CommuneProcs.tryUpdateMinHaulerCost(room) + CommuneOps.tryUpdateMinHaulerCost(room) SpawningStructureProcs.tryRunSpawning(room) SpawningStructureProcs.tryRegisterSpawningMovement(room) diff --git a/src/room/commune/remotesManager.ts b/src/room/commune/remotesManager.ts index d081924c1..045051324 100644 --- a/src/room/commune/remotesManager.ts +++ b/src/room/commune/remotesManager.ts @@ -21,7 +21,7 @@ import { unpackPosList } from 'other/codec' import { CommuneManager } from './commune' import { RoomNameUtils } from 'room/roomNameUtils' import { StructureUtils } from 'room/structureUtils' -import { CommuneProcs } from './communeProcs' +import { CommuneOps } from './communeOps' type RemoteSourcePathTypes = | RoomMemoryKeys.remoteSourceFastFillerPaths @@ -93,7 +93,7 @@ export class RemotesManager { remoteMemory[RoomMemoryKeys.type] !== RoomTypes.remote || remoteMemory[RoomMemoryKeys.commune] !== room.name ) { - CommuneProcs.removeRemote(room, remoteName, index) + CommuneOps.removeRemote(room, remoteName, index) continue } @@ -106,7 +106,7 @@ export class RemotesManager { Utils.isTickInterval(checkRoomStatusInterval) && Memory.rooms[room.name][RoomMemoryKeys.status] !== remoteMemory[RoomMemoryKeys.status] ) { - CommuneProcs.removeRemote(room, remoteName, index) + CommuneOps.removeRemote(room, remoteName, index) continue } diff --git a/src/room/commune/spawning/spawnRequests.ts b/src/room/commune/spawning/spawnRequests.ts index 95e56ec50..b334d572d 100644 --- a/src/room/commune/spawning/spawnRequests.ts +++ b/src/room/commune/spawning/spawnRequests.ts @@ -12,7 +12,7 @@ import { CommuneManager } from '../commune' import { SpawnRequestArgs, SpawnRequestTypes } from 'types/spawnRequest' import { CommuneUtils } from '../communeUtils' import { StructureUtils } from 'room/structureUtils' -import { CommuneProcs } from '../communeProcs' +import { CommuneOps } from '../communeOps' import { Utils } from 'utils/utils' import { RoomUtils } from 'room/roomUtils' @@ -1686,9 +1686,7 @@ export class SpawnRequestsManager { minRangedAttackCost / (BODYPART_COST[RANGED_ATTACK] + BODYPART_COST[MOVE]), ) - const minAttackCost = Utils.findMinMeleeAttackCost( - request[CombatRequestKeys.minDamage], - ) + const minAttackCost = Utils.findMinMeleeAttackCost(request[CombatRequestKeys.minDamage]) const attackAmount = Math.floor(minAttackCost / (BODYPART_COST[ATTACK] + BODYPART_COST[MOVE])) const minMeleeHealCost = Utils.findMinHealCost( @@ -1720,7 +1718,7 @@ export class SpawnRequestsManager { (rangedAttackAmount + rangedHealAmount) * 2 > 50 || attackAmount * 2 > 50 ) { - CommuneProcs.deleteCombatRequest(this.communeManager.room, requestName, i) + CommuneOps.deleteCombatRequest(this.communeManager.room, requestName, i) continue } @@ -1847,7 +1845,7 @@ export class SpawnRequestsManager { minAttackCost + minMeleeHealCost > this.communeManager.room.energyCapacityAvailable || minAttackCost > this.communeManager.room.energyCapacityAvailable ) { - CommuneProcs.deleteCombatRequest(this.communeManager.room, requestName, i) + CommuneOps.deleteCombatRequest(this.communeManager.room, requestName, i) continue } diff --git a/src/room/commune/workRequest.ts b/src/room/commune/workRequest.ts index aad09add1..f02ee3947 100644 --- a/src/room/commune/workRequest.ts +++ b/src/room/commune/workRequest.ts @@ -10,7 +10,7 @@ import { CollectiveManager } from 'international/collective' import { CommuneManager } from './commune' import { StatsManager } from 'international/stats' import { WorkRequest } from 'types/internationalRequests' -import { CommuneProcs } from './communeProcs' +import { CommuneOps } from './communeOps' const checkRoomStatusInverval = randomIntRange(200, 500) @@ -192,7 +192,7 @@ export class WorkRequestManager { if (combatRequest[CombatRequestKeys.responder]) { const combatRequestResponder = Game.rooms[combatRequest[CombatRequestKeys.responder]] - CommuneProcs.deleteCombatRequest( + CommuneOps.deleteCombatRequest( combatRequestResponder, combatRequest[CombatRequestKeys.responder], combatRequestResponder.memory[RoomMemoryKeys.combatRequests].indexOf(workRequestName), diff --git a/src/room/room.ts b/src/room/room.ts index 518de25d1..0287005c1 100644 --- a/src/room/room.ts +++ b/src/room/room.ts @@ -65,7 +65,7 @@ import { CollectiveManager } from 'international/collective' import { customLog } from 'utils/logging' import { StructureUtils } from './structureUtils' import { LogisticsProcs } from './logisticsProcs' -import { CommuneProcs } from './commune/communeProcs' +import { CommuneOps } from './commune/communeOps' import { roomData } from './roomData' import { RoomOps } from './roomOps' diff --git a/src/room/roomOps.ts b/src/room/roomOps.ts index 94d47a9fc..82c860487 100644 --- a/src/room/roomOps.ts +++ b/src/room/roomOps.ts @@ -13,7 +13,7 @@ import { Dashboard, Rectangle, Table } from 'screeps-viz' import { packXYAsNum, randomTick } from 'utils/utils' import { RoomNameUtils } from './roomNameUtils' import { CommuneManager } from './commune/commune' -import { CommuneProcs } from './commune/communeProcs' +import { CommuneOps } from './commune/communeOps' import { LogisticsProcs } from './logisticsProcs' import { customLog } from 'utils/logging' import { unpackCoord } from 'other/codec' @@ -23,7 +23,6 @@ import { roomData } from './roomData' import { RoomManager } from './room' export class RoomOps { - /** * Not perfect, but should help reduce heap usage until RoomManagers are deprecated. */ @@ -169,13 +168,13 @@ export class RoomOps { CommuneManager.communeManagers[room.name] = room.communeManager } - CommuneProcs.update(room) + CommuneOps.update(room) return true } static initRun(room: Room) { if (room.communeManager) { - CommuneProcs.initRun(room) + CommuneOps.initRun(room) return } } @@ -183,7 +182,7 @@ export class RoomOps { static run(room: Room) { const roomMemory = Memory.rooms[room.name] if (roomMemory[RoomMemoryKeys.type] === RoomTypes.commune) { - CommuneProcs.run(room) + CommuneOps.run(room) return } diff --git a/src/room/roomServices.ts b/src/room/roomServices.ts index d47941438..ed56626d2 100644 --- a/src/room/roomServices.ts +++ b/src/room/roomServices.ts @@ -21,21 +21,18 @@ import { CommuneManager } from './commune/commune' import { RoomManager } from './room' import { LogTypes, customLog } from 'utils/logging' import { RoomOps } from './roomOps' -import { CommuneProcs } from './commune/communeProcs' +import { CommuneOps } from './commune/communeOps' export class RoomServices { static cleanManagers() { - for (const roomName in RoomManager.roomManagers) { - const roomManager = RoomManager.roomManagers[roomName] RoomOps.clean(roomManager) } for (const roomName in CommuneManager.communeManagers) { - const communeManager = CommuneManager.communeManagers[roomName] - CommuneProcs.clean(communeManager) + CommuneOps.clean(communeManager) } } From 1d164096785b979c6b75307d29fdc0ba937bb58f Mon Sep 17 00:00:00 2001 From: acesu <30669146+realacesu@users.noreply.github.com> Date: Wed, 31 Jan 2024 01:15:25 -0500 Subject: [PATCH 135/190] =?UTF-8?q?=F0=9F=91=81=EF=B8=8F=20where=20will=20?= =?UTF-8?q?this=20push=3F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/constants/general.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/constants/general.ts b/src/constants/general.ts index 144f21e67..103ec91d7 100644 --- a/src/constants/general.ts +++ b/src/constants/general.ts @@ -1411,6 +1411,7 @@ export const preferredCommuneRange = 5.5 export const defaultDataDecay = 0.99999 export const revolutionary = 'MarvinTMB' export const maxSegmentsOpen = 10 +export const testingcommitdata = 'test' /** * The max possible spawn energy capacity rooms can have */ From aa4530ff64fa6520f742ed6c104cfc870f5c2a5e Mon Sep 17 00:00:00 2001 From: acesu <30669146+realacesu@users.noreply.github.com> Date: Wed, 31 Jan 2024 01:23:33 -0500 Subject: [PATCH 136/190] =?UTF-8?q?Revert=20"=F0=9F=91=81=EF=B8=8F=20where?= =?UTF-8?q?=20will=20this=20push=3F"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 1d164096785b979c6b75307d29fdc0ba937bb58f. --- src/constants/general.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/constants/general.ts b/src/constants/general.ts index 103ec91d7..144f21e67 100644 --- a/src/constants/general.ts +++ b/src/constants/general.ts @@ -1411,7 +1411,6 @@ export const preferredCommuneRange = 5.5 export const defaultDataDecay = 0.99999 export const revolutionary = 'MarvinTMB' export const maxSegmentsOpen = 10 -export const testingcommitdata = 'test' /** * The max possible spawn energy capacity rooms can have */ From 542b39ab14890c78ce853e944c123b24ba27e5ce Mon Sep 17 00:00:00 2001 From: acesu <30669146+realacesu@users.noreply.github.com> Date: Wed, 31 Jan 2024 03:53:57 -0500 Subject: [PATCH 137/190] =?UTF-8?q?=F0=9F=9A=A7=20notMyCreeps.invader?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit WIP for invader threat assessment See TODO --- src/room/room.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/room/room.ts b/src/room/room.ts index 518de25d1..8723bf8b6 100644 --- a/src/room/room.ts +++ b/src/room/room.ts @@ -85,6 +85,7 @@ export interface DeadCreepNames { export interface NotMyCreeps { ally: Creep[] enemy: Creep[] + invader: Creep[] } export interface NotMyConstructionSites { @@ -892,6 +893,7 @@ export class RoomManager { const notMyCreeps: NotMyCreeps = { ally: [], enemy: [], + invader: [], } for (const creep of this.room.find(FIND_HOSTILE_CREEPS)) { @@ -900,6 +902,14 @@ export class RoomManager { continue } + if (creep.owner.username == 'Invader') { + notMyCreeps.invader.push(creep) + + // TODO: Clean up invader checks on notMyCreeps.enemy(attackers) references + + // continue // Remove once TODO is completed + } + // The creep isn't of an ally, so it's of an enemy! notMyCreeps.enemy.push(creep) From 4276e17be22695b54e5d1496b7709f4cca1cc438 Mon Sep 17 00:00:00 2001 From: acesu <30669146+realacesu@users.noreply.github.com> Date: Wed, 31 Jan 2024 10:09:21 -0500 Subject: [PATCH 138/190] solve complier problem with various other errors --- src/constants/general.ts | 14 +++++++------- src/constants/structures.ts | 1 + src/international/endTick.ts | 2 +- src/international/simpleAllies/simpleAllies.ts | 2 +- src/international/simpleAllies/types.ts | 4 ++-- src/main.ts | 4 ++-- src/other/codec.ts | 2 +- src/other/errorExporter.ts | 2 +- src/room/commune/combatRequest.ts | 2 +- src/room/commune/commune.ts | 2 +- src/room/commune/communeProcs.ts | 2 +- src/room/commune/communeUtils.ts | 2 +- src/room/commune/defenceProcs.ts | 2 +- src/room/commune/defenceUtils.ts | 2 +- src/room/commune/factory.ts | 2 +- src/room/commune/haulRequestManager.ts | 2 +- src/room/commune/haulerNeedOps.ts | 2 +- src/room/commune/labs.ts | 2 +- src/room/commune/links.ts | 2 +- src/room/commune/nukerProcs.ts | 2 +- src/room/commune/observerProcs.ts | 2 +- src/room/commune/powerSpawnProcs.ts | 2 +- src/room/commune/remotesManager.ts | 2 +- .../commune/spawning/spawnRequestConstructors.ts | 2 +- src/room/commune/spawning/spawnRequests.ts | 2 +- .../commune/spawning/spawningStructureProcs.ts | 2 +- .../commune/spawning/spawningStructureUtils.ts | 2 +- src/room/commune/terminal/terminal.old.ts | 2 +- src/room/commune/terminal/terminalProcs.ts | 2 +- src/room/commune/terminal/tradingUtils.ts | 2 +- src/room/commune/towerProcs.ts | 2 +- src/room/commune/towerUtils.ts | 2 +- src/room/commune/workRequest.ts | 2 +- src/room/construction/basePlans.ts | 2 +- src/room/construction/communePlanner.ts | 2 +- src/room/construction/construction.ts | 2 +- src/room/construction/minCut.ts | 2 +- src/room/construction/rampartPlans.ts | 2 +- src/room/creeps/creepAdditions.ts | 2 +- src/room/creeps/creepMoveProcs.ts | 2 +- src/room/creeps/creepProcs.ts | 2 +- src/room/creeps/creepPrototypes/creepFunctions.ts | 2 +- .../creeps/creepPrototypes/creepMoveFunctions.ts | 2 +- src/room/creeps/creepRoleManager.ts | 2 +- src/room/creeps/creepUtils.ts | 2 +- src/room/creeps/endTickCreepManager.ts | 2 +- src/room/creeps/powerCreepRoleManager.ts | 2 +- src/room/creeps/powerCreeps/operator.ts | 4 ++-- src/room/creeps/roleManagers/antifa/antifa.ts | 2 +- src/room/creeps/roleManagers/antifa/duo.ts | 2 +- .../creeps/roleManagers/antifa/dynamicSquad.ts | 2 +- src/room/creeps/roleManagers/antifa/quad.ts | 2 +- src/room/creeps/roleManagers/commune/builder.ts | 2 +- .../roleManagers/commune/controllerUpgrader.ts | 2 +- .../commune/defenders/meleeDefender.ts | 2 +- .../commune/defenders/rangedDefender.ts | 2 +- src/room/creeps/roleManagers/commune/fastFiller.ts | 2 +- src/room/creeps/roleManagers/commune/hauler.ts | 2 +- src/room/creeps/roleManagers/commune/hubHauler.ts | 2 +- src/room/creeps/roleManagers/commune/maintainer.ts | 2 +- .../roleManagers/commune/mineralHarvester.ts | 2 +- .../creeps/roleManagers/commune/sourceHarvester.ts | 2 +- .../roleManagers/international/allyVanguard.ts | 2 +- .../creeps/roleManagers/international/claimer.ts | 2 +- .../roleManagers/international/requestHauler.ts | 2 +- .../creeps/roleManagers/international/scout.ts | 2 +- .../creeps/roleManagers/international/vanguard.ts | 2 +- .../creeps/roleManagers/remote/remoteBuilder.ts | 2 +- .../roleManagers/remote/remoteCoreAttacker.ts | 2 +- .../creeps/roleManagers/remote/remoteDefender.ts | 2 +- .../creeps/roleManagers/remote/remoteDismantler.ts | 2 +- .../creeps/roleManagers/remote/remoteReserver.ts | 2 +- .../roleManagers/remote/remoteSourceHarvester.ts | 2 +- src/room/creeps/roles/haulerOps.ts | 2 +- src/room/logisticsProcs.ts | 2 +- src/room/remotePlanner.ts | 2 +- src/room/remoteProcs.ts | 2 +- src/room/resourceAdditions.ts | 2 +- src/room/room.ts | 2 +- src/room/roomFunctions.ts | 2 +- src/room/roomNameProcs.ts | 2 +- src/room/roomNameUtils.ts | 2 +- src/room/roomObjectAdditions.ts | 2 +- src/room/roomObjectUtils.ts | 2 +- src/room/roomOps.ts | 2 +- src/room/roomUtils.ts | 2 +- src/room/roomVisuals.ts | 2 +- src/room/structureUtils.ts | 2 +- src/types.d.ts | 2 +- src/types/internationalRequests.ts | 2 +- src/types/players.ts | 4 ++-- src/types/roomLogistics.ts | 2 +- src/utils/utils.ts | 2 +- 93 files changed, 103 insertions(+), 102 deletions(-) diff --git a/src/constants/general.ts b/src/constants/general.ts index 103ec91d7..0e0b39261 100644 --- a/src/constants/general.ts +++ b/src/constants/general.ts @@ -203,7 +203,7 @@ export enum CreepTaskKeys { export enum CreepTaskNames { // Creep - harvestMineral, + // harvestMineral, // Power Creep @@ -1021,12 +1021,12 @@ export const antifaRoles: ( | 'antifaDismantler' | 'antifaDowngrader' )[] = [ - 'antifaRangedAttacker', - 'antifaAttacker', - 'antifaHealer', - 'antifaDismantler', - 'antifaDowngrader', -] + 'antifaRangedAttacker', + 'antifaAttacker', + 'antifaHealer', + 'antifaDismantler', + 'antifaDowngrader', + ] /** * Roles for which to provide spawnGroups for based on their shared remoteName diff --git a/src/constants/structures.ts b/src/constants/structures.ts index e69de29bb..e7b6a25fb 100644 --- a/src/constants/structures.ts +++ b/src/constants/structures.ts @@ -0,0 +1 @@ +export const makecomplierhappy = "happy!" diff --git a/src/international/endTick.ts b/src/international/endTick.ts index 8433c0095..f45876a81 100644 --- a/src/international/endTick.ts +++ b/src/international/endTick.ts @@ -1,4 +1,4 @@ -import { customColors } from 'constants/general' +import { customColors } from '../constants/general' import { LogTypes, customLog } from 'utils/logging' import { findCPUColor, findCPUOf } from 'utils/utils' import { CollectiveManager } from './collective' diff --git a/src/international/simpleAllies/simpleAllies.ts b/src/international/simpleAllies/simpleAllies.ts index c64c80464..ac9a1888d 100644 --- a/src/international/simpleAllies/simpleAllies.ts +++ b/src/international/simpleAllies/simpleAllies.ts @@ -108,7 +108,7 @@ export class SimpleAllies { const newSegmentData: SimpleAlliesSegment = { requests: this.myRequests as AllyRequests, - commands: CollectiveManager.myCommands, + // commands: CollectiveManager.myCommands, updated: Game.time, } diff --git a/src/international/simpleAllies/types.ts b/src/international/simpleAllies/types.ts index cb7f0087d..f911df35d 100644 --- a/src/international/simpleAllies/types.ts +++ b/src/international/simpleAllies/types.ts @@ -1,4 +1,4 @@ -import { Command } from '../collectivizer' +// import { Command } from '../collectivizer' /** * Represents the segment data for simpleAllies. @@ -7,7 +7,7 @@ export interface SimpleAlliesSegment { econ?: EconInfo requests: AllyRequests updated: number - commands: Command[] + // commands: Command[] } /** diff --git a/src/main.ts b/src/main.ts index 269962c15..73ec0fb67 100644 --- a/src/main.ts +++ b/src/main.ts @@ -5,12 +5,12 @@ import './debug/debugUtils' import { CollectiveManager } from './international/collective' import { RoomServices } from 'room/roomServices' import './room/resourceAdditions' -import './room/roomObjectFunctions' +// import './room/roomObjectFunctions' import './room/roomObjectAdditions' import './room/creeps/creepAdditions' import './other/profilerRegister' import { MemoryHack } from 'other/memoryHack' -import { CPUMaxPerTick, FlagNames, Result } from 'constants/general' +import { CPUMaxPerTick, FlagNames, Result } from './constants/general' import { InitManager } from './international/init' import { MigrationManager } from 'international/migration' import { RespawnManager } from './international/respawn' diff --git a/src/other/codec.ts b/src/other/codec.ts index 9a2fbf5ad..5b7dcb57e 100644 --- a/src/other/codec.ts +++ b/src/other/codec.ts @@ -1,5 +1,5 @@ // eslint-disable -import { buildableStructureTypes, packedPosLength, stampKeys } from 'constants/general' +import { buildableStructureTypes, packedPosLength, stampKeys } from '../constants/general' import { encode, decode } from 'base32768' /** diff --git a/src/other/errorExporter.ts b/src/other/errorExporter.ts index 93717bb8b..903274260 100644 --- a/src/other/errorExporter.ts +++ b/src/other/errorExporter.ts @@ -1,4 +1,4 @@ -import { SegmentIDs } from 'constants/general' +import { SegmentIDs } from '../constants/general' /** * Rather cpu intensive and unavoidably inefficient. Try to avoid this needing to ba called diff --git a/src/room/commune/combatRequest.ts b/src/room/commune/combatRequest.ts index 62691d7c1..525a249dd 100644 --- a/src/room/commune/combatRequest.ts +++ b/src/room/commune/combatRequest.ts @@ -1,4 +1,4 @@ -import { CombatRequestKeys, RoomMemoryKeys, customColors } from 'constants/general' +import { CombatRequestKeys, RoomMemoryKeys, customColors } from '../../constants/general' import { CommuneManager } from './commune' import { StatsManager } from 'international/stats' import { randomIntRange, Utils } from 'utils/utils' diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index 5329fe427..c9b2f66c3 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -13,7 +13,7 @@ import { RemoteResourcePathTypes, ReservedCoordTypes, RoomStatsKeys, -} from 'constants/general' +} from '../../constants/general' import './factory' import { LabManager } from './labs' import './links' diff --git a/src/room/commune/communeProcs.ts b/src/room/commune/communeProcs.ts index a475448b5..aa98931ab 100644 --- a/src/room/commune/communeProcs.ts +++ b/src/room/commune/communeProcs.ts @@ -8,7 +8,7 @@ import { RoomTypes, creepRoles, haulerUpdateDefault, -} from 'constants/general' +} from '../../constants/general' import { Utils, randomIntRange, randomTick } from 'utils/utils' import { CollectiveManager } from 'international/collective' import { RoomNameUtils } from 'room/roomNameUtils' diff --git a/src/room/commune/communeUtils.ts b/src/room/commune/communeUtils.ts index 8d78a39cb..efbf632c6 100644 --- a/src/room/commune/communeUtils.ts +++ b/src/room/commune/communeUtils.ts @@ -8,7 +8,7 @@ import { generalRepairStructureTypes, packedPosLength, structureTypesToProtectSet, -} from 'constants/general' +} from '../../constants/general' import { CollectiveManager } from 'international/collective' import { RoomUtils } from 'room/roomUtils' import { StructureUtils } from 'room/structureUtils' diff --git a/src/room/commune/defenceProcs.ts b/src/room/commune/defenceProcs.ts index fec4ef3ca..596b04326 100644 --- a/src/room/commune/defenceProcs.ts +++ b/src/room/commune/defenceProcs.ts @@ -6,7 +6,7 @@ import { PlayerMemoryKeys, CombatRequestKeys, defaultDataDecay, -} from 'constants/general' +} from '../../constants/general' import { PlayerManager } from "international/players" import { simpleAllies } from "international/simpleAllies/simpleAllies" import { packCoord } from "other/codec" diff --git a/src/room/commune/defenceUtils.ts b/src/room/commune/defenceUtils.ts index afa2e3c2f..8271c7760 100644 --- a/src/room/commune/defenceUtils.ts +++ b/src/room/commune/defenceUtils.ts @@ -1,5 +1,5 @@ import { CollectiveManager } from "international/collective" -import { Result, ourImpassibleStructuresSet } from 'constants/general' +import { Result, ourImpassibleStructuresSet } from '../../constants/general' import { packCoord } from "other/codec" import { RoomNameUtils } from "room/roomNameUtils" import { findObjectWithID, isAlly } from "utils/utils" diff --git a/src/room/commune/factory.ts b/src/room/commune/factory.ts index f0042dbe8..70f52a1c8 100644 --- a/src/room/commune/factory.ts +++ b/src/room/commune/factory.ts @@ -1,4 +1,4 @@ -import { RoomMemoryKeys } from 'constants/general' +import { RoomMemoryKeys } from '../../constants/general' import { CommuneManager, ResourceTargets } from './commune' import { CommuneUtils } from './communeUtils' diff --git a/src/room/commune/haulRequestManager.ts b/src/room/commune/haulRequestManager.ts index 295ea2940..f71e5cae9 100644 --- a/src/room/commune/haulRequestManager.ts +++ b/src/room/commune/haulRequestManager.ts @@ -1,4 +1,4 @@ -import { customColors, HaulRequestKeys, CombatRequestKeys, RoomMemoryKeys } from 'constants/general' +import { customColors, HaulRequestKeys, CombatRequestKeys, RoomMemoryKeys } from '../../constants/general' import { randomIntRange, randomTick, Utils } from 'utils/utils' import { CommuneManager } from './commune' import { CommuneUtils } from './communeUtils' diff --git a/src/room/commune/haulerNeedOps.ts b/src/room/commune/haulerNeedOps.ts index 5944c34c2..18a7c4652 100644 --- a/src/room/commune/haulerNeedOps.ts +++ b/src/room/commune/haulerNeedOps.ts @@ -1,4 +1,4 @@ -import { RoomMemoryKeys, RoomStatsKeys, packedPosLength, stamps } from 'constants/general' +import { RoomMemoryKeys, RoomStatsKeys, packedPosLength, stamps } from '../../constants/general' import { StructureUtils } from 'room/structureUtils' import { findCarryPartsRequired } from 'utils/utils' import { CommuneUtils } from './communeUtils' diff --git a/src/room/commune/labs.ts b/src/room/commune/labs.ts index b4d8a9cb8..599f4b845 100644 --- a/src/room/commune/labs.ts +++ b/src/room/commune/labs.ts @@ -1,4 +1,4 @@ -import { RoomLogisticsRequestTypes, minerals } from 'constants/general' +import { RoomLogisticsRequestTypes, minerals } from '../../constants/general' import { CommuneManager } from './commune' import { Hauler } from '../creeps/roleManagers/commune/hauler' import { findObjectWithID, getRange, randomTick, scalePriority } from 'utils/utils' diff --git a/src/room/commune/links.ts b/src/room/commune/links.ts index 31025fb0b..65bfad0bd 100644 --- a/src/room/commune/links.ts +++ b/src/room/commune/links.ts @@ -2,7 +2,7 @@ import { RoomLogisticsRequestTypes, linkReceiveTreshold, linkSendThreshold, -} from 'constants/general' +} from '../../constants/general' import { customLog } from 'utils/logging' import { CommuneManager } from './commune' import { StructureUtils } from 'room/structureUtils' diff --git a/src/room/commune/nukerProcs.ts b/src/room/commune/nukerProcs.ts index 7b3c862c3..1c8b44eef 100644 --- a/src/room/commune/nukerProcs.ts +++ b/src/room/commune/nukerProcs.ts @@ -3,7 +3,7 @@ import { Result, NukeRequestKeys, RoomLogisticsRequestTypes, -} from 'constants/general' +} from '../../constants/general' import { RoomObjectUtils } from 'room/roomObjectUtils' const nukerResources = [RESOURCE_ENERGY, RESOURCE_GHODIUM] diff --git a/src/room/commune/observerProcs.ts b/src/room/commune/observerProcs.ts index 7d01a5b92..1e1bce7ab 100644 --- a/src/room/commune/observerProcs.ts +++ b/src/room/commune/observerProcs.ts @@ -1,4 +1,4 @@ -import { RoomMemoryKeys } from 'constants/general' +import { RoomMemoryKeys } from '../../constants/general' import { RoomNameUtils } from 'room/roomNameUtils' import { forRoomNamesAroundRangeXY, Utils } from 'utils/utils' diff --git a/src/room/commune/powerSpawnProcs.ts b/src/room/commune/powerSpawnProcs.ts index 8e0470329..56e14d869 100644 --- a/src/room/commune/powerSpawnProcs.ts +++ b/src/room/commune/powerSpawnProcs.ts @@ -1,5 +1,5 @@ import { CollectiveManager } from 'international/collective' -import { RoomLogisticsRequestTypes, RoomStatsKeys } from 'constants/general' +import { RoomLogisticsRequestTypes, RoomStatsKeys } from '../../constants/general' import { StatsManager } from 'international/stats' import { scalePriority } from 'utils/utils' import { CommuneUtils } from './communeUtils' diff --git a/src/room/commune/remotesManager.ts b/src/room/commune/remotesManager.ts index d081924c1..2e4d392e4 100644 --- a/src/room/commune/remotesManager.ts +++ b/src/room/commune/remotesManager.ts @@ -7,7 +7,7 @@ import { RoomTypes, defaultDataDecay, maxRemotePathDistance, -} from 'constants/general' +} from '../../constants/general' import { findCarryPartsRequired, findLowestScore, diff --git a/src/room/commune/spawning/spawnRequestConstructors.ts b/src/room/commune/spawning/spawnRequestConstructors.ts index 2508c1755..1e0264637 100644 --- a/src/room/commune/spawning/spawnRequestConstructors.ts +++ b/src/room/commune/spawning/spawnRequestConstructors.ts @@ -1,7 +1,7 @@ import { SpawnRequest } from 'types/spawnRequest' import { LogTypes, customLog } from 'utils/logging' import { SpawnRequestArgs } from 'types/spawnRequest' -import { CreepMemoryKeys, FlagNames } from 'constants/general' +import { CreepMemoryKeys, FlagNames } from '../../../constants/general' export type SpawnRequestConstructor = (room: Room, args: SpawnRequestArgs) => SpawnRequest[] diff --git a/src/room/commune/spawning/spawnRequests.ts b/src/room/commune/spawning/spawnRequests.ts index 95e56ec50..b46f72b76 100644 --- a/src/room/commune/spawning/spawnRequests.ts +++ b/src/room/commune/spawning/spawnRequests.ts @@ -6,7 +6,7 @@ import { CreepMemoryKeys, RoomMemoryKeys, RoomTypes, -} from 'constants/general' +} from '../../../constants/general' import { CollectiveManager } from 'international/collective' import { CommuneManager } from '../commune' import { SpawnRequestArgs, SpawnRequestTypes } from 'types/spawnRequest' diff --git a/src/room/commune/spawning/spawningStructureProcs.ts b/src/room/commune/spawning/spawningStructureProcs.ts index 633d15c07..b9e6638a1 100644 --- a/src/room/commune/spawning/spawningStructureProcs.ts +++ b/src/room/commune/spawning/spawningStructureProcs.ts @@ -11,7 +11,7 @@ import { MovedTypes, RoomStatsKeys, FlagNames, -} from 'constants/general' +} from '../../../constants/general' import { StatsManager } from 'international/stats' import { unpackPosAt, packCoord, unpackCoord } from 'other/codec' import { CreepProcs } from 'room/creeps/creepProcs' diff --git a/src/room/commune/spawning/spawningStructureUtils.ts b/src/room/commune/spawning/spawningStructureUtils.ts index 38b213ec3..48577b1cf 100644 --- a/src/room/commune/spawning/spawningStructureUtils.ts +++ b/src/room/commune/spawning/spawningStructureUtils.ts @@ -1,6 +1,6 @@ import { StructureUtils } from 'room/structureUtils' import { OrganizedSpawns } from './spawningStructureProcs' import { CreepProcs } from 'room/creeps/creepProcs' -import { CreepMemoryKeys } from 'constants/general' +import { CreepMemoryKeys } from '../../../constants/general' export class SpawningStructureUtils {} diff --git a/src/room/commune/terminal/terminal.old.ts b/src/room/commune/terminal/terminal.old.ts index b2166fc0e..934f37085 100644 --- a/src/room/commune/terminal/terminal.old.ts +++ b/src/room/commune/terminal/terminal.old.ts @@ -1,4 +1,4 @@ -import { minerals, Result, RoomMemoryKeys } from 'constants/general' +import { minerals, Result, RoomMemoryKeys } from '../../../constants/general' import { customLog } from 'utils/logging' import { newID, roundTo } from 'utils/utils' import './tradingUtils' diff --git a/src/room/commune/terminal/terminalProcs.ts b/src/room/commune/terminal/terminalProcs.ts index 2a3e8086c..c6ecab185 100644 --- a/src/room/commune/terminal/terminalProcs.ts +++ b/src/room/commune/terminal/terminalProcs.ts @@ -1,5 +1,5 @@ import { CollectiveManager } from 'international/collective' -import { Result } from 'constants/general' +import { Result } from '../../../constants/general' import { MarketManager } from 'international/market/marketOrders' import { simpleAllies } from 'international/simpleAllies/simpleAllies' import { StructureUtils } from 'room/structureUtils' diff --git a/src/room/commune/terminal/tradingUtils.ts b/src/room/commune/terminal/tradingUtils.ts index b9475ced2..11d879f67 100644 --- a/src/room/commune/terminal/tradingUtils.ts +++ b/src/room/commune/terminal/tradingUtils.ts @@ -3,7 +3,7 @@ import { findLowestScore, roundTo } from 'utils/utils' import { CollectiveManager } from 'international/collective' import { StatsManager } from 'international/stats' import { MarketManager } from 'international/market/marketOrders' -import { Result, RoomStatsKeys } from 'constants/general' +import { Result, RoomStatsKeys } from '../../../constants/general' export class TradingUtils { static advancedSell(room: Room, resourceType: ResourceConstant, amount: number) { diff --git a/src/room/commune/towerProcs.ts b/src/room/commune/towerProcs.ts index 3f6eaaf65..d8718d0f0 100644 --- a/src/room/commune/towerProcs.ts +++ b/src/room/commune/towerProcs.ts @@ -1,4 +1,4 @@ -import { PlayerMemoryKeys, RoomLogisticsRequestTypes, RoomStatsKeys } from 'constants/general' +import { PlayerMemoryKeys, RoomLogisticsRequestTypes, RoomStatsKeys } from '../../constants/general' import { PlayerManager } from 'international/players' import { StatsManager } from 'international/stats' import { packCoord } from 'other/codec' diff --git a/src/room/commune/towerUtils.ts b/src/room/commune/towerUtils.ts index 036729a75..936c7e85e 100644 --- a/src/room/commune/towerUtils.ts +++ b/src/room/commune/towerUtils.ts @@ -1,4 +1,4 @@ -import { towerPowers } from 'constants/general' +import { towerPowers } from '../../constants/general' import { findWithLowestScore, getRange } from 'utils/utils' import { CommuneDataOps, communeData } from './communeData' import { CommuneUtils } from './communeUtils' diff --git a/src/room/commune/workRequest.ts b/src/room/commune/workRequest.ts index aad09add1..956288844 100644 --- a/src/room/commune/workRequest.ts +++ b/src/room/commune/workRequest.ts @@ -4,7 +4,7 @@ import { RoomMemoryKeys, RoomTypes, customColors, -} from 'constants/general' +} from '../../constants/general' import { randomIntRange, randomTick, Utils } from 'utils/utils' import { CollectiveManager } from 'international/collective' import { CommuneManager } from './commune' diff --git a/src/room/construction/basePlans.ts b/src/room/construction/basePlans.ts index 37125f532..80f9d1187 100644 --- a/src/room/construction/basePlans.ts +++ b/src/room/construction/basePlans.ts @@ -2,7 +2,7 @@ import { customLog } from 'utils/logging' import { packXYAsNum, splitStringAt } from 'utils/utils' import { packCoord, packBasePlanCoord, packXYAsCoord, unpackBasePlanCoords } from 'other/codec' import { encode, decode } from 'base32768' -import { allStructureTypes } from 'constants/general' +import { allStructureTypes } from '../../constants/general' export class BasePlans { /** diff --git a/src/room/construction/communePlanner.ts b/src/room/construction/communePlanner.ts index ebe8cde3d..5f085f0c8 100644 --- a/src/room/construction/communePlanner.ts +++ b/src/room/construction/communePlanner.ts @@ -16,7 +16,7 @@ import { structureTypesToProtectSet, RoomMemoryKeys, basePlanCPUBucketThreshold, -} from 'constants/general' +} from '../../constants/general' import { areCoordsEqual, createPosMap, diff --git a/src/room/construction/construction.ts b/src/room/construction/construction.ts index 43fb03c23..0ec7d02df 100644 --- a/src/room/construction/construction.ts +++ b/src/room/construction/construction.ts @@ -6,7 +6,7 @@ import { Result, RoomMemoryKeys, structureTypesToProtectSet, -} from 'constants/general' +} from '../../constants/general' import { customLog } from 'utils/logging' import { findObjectWithID, packAsNum, randomIntRange, randomTick, Utils } from 'utils/utils' import { packCoord, unpackCoord } from 'other/codec' diff --git a/src/room/construction/minCut.ts b/src/room/construction/minCut.ts index e9aaa757a..dbce9a7a4 100644 --- a/src/room/construction/minCut.ts +++ b/src/room/construction/minCut.ts @@ -64,7 +64,7 @@ * each round of bfs. See the comments in the code for details. */ -import { customColors, roomDimensions } from 'constants/general' +import { customColors, roomDimensions } from '../../constants/general' import { CollectiveManager } from 'international/collective' import { findCoordsInRangeXY, isXYInBorder, packXYAsNum, unpackNumAsCoord } from 'utils/utils' diff --git a/src/room/construction/rampartPlans.ts b/src/room/construction/rampartPlans.ts index 857948f6f..dd00b2d9c 100644 --- a/src/room/construction/rampartPlans.ts +++ b/src/room/construction/rampartPlans.ts @@ -1,7 +1,7 @@ import { packXYAsNum } from 'utils/utils' import { packCoord, packRampartPlanCoord, packXYAsCoord } from 'other/codec' import { encode, decode } from 'base32768' -import { allStructureTypes } from 'constants/general' +import { allStructureTypes } from '../../constants/general' export class RampartPlans { /** diff --git a/src/room/creeps/creepAdditions.ts b/src/room/creeps/creepAdditions.ts index 25464dc50..76edf2a3d 100644 --- a/src/room/creeps/creepAdditions.ts +++ b/src/room/creeps/creepAdditions.ts @@ -5,7 +5,7 @@ import { dismantleBoostsSet, roomDimensions, towerPowers, -} from 'constants/general' +} from '../../constants/general' import { customLog } from 'utils/logging' import { getRangeXY, getRange, isXYExit, isExit } from 'utils/utils' import { profiler } from 'other/profiler' diff --git a/src/room/creeps/creepMoveProcs.ts b/src/room/creeps/creepMoveProcs.ts index 19e1a1e92..495b275ed 100644 --- a/src/room/creeps/creepMoveProcs.ts +++ b/src/room/creeps/creepMoveProcs.ts @@ -8,7 +8,7 @@ import { defaultCreepSwampCost, defaultPlainCost, packedPosLength, -} from 'constants/general' +} from '../../constants/general' import { CustomPathFinderArgs, PathGoal, CustomPathFinder } from 'international/customPathFinder' import { packCoord, packPos, packPosList, unpackPos, unpackPosAt } from 'other/codec' import { areCoordsEqual, arePositionsEqual, findObjectWithID, getRange } from 'utils/utils' diff --git a/src/room/creeps/creepProcs.ts b/src/room/creeps/creepProcs.ts index 2e5cbba1a..15e919f71 100644 --- a/src/room/creeps/creepProcs.ts +++ b/src/room/creeps/creepProcs.ts @@ -16,7 +16,7 @@ import { RoomLogisticsRequestTypes, offsetsByDirection, RoomStatsKeys, -} from 'constants/general' +} from '../../constants/general' import { CreepUtils } from './creepUtils' import { CommuneUtils } from 'room/commune/communeUtils' import { diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index 0c902afd5..a90f67b4f 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -9,7 +9,7 @@ import { WorkTypes, RoomLogisticsRequestTypes, RoomStatsKeys, -} from 'constants/general' +} from '../../../constants/general' import { findClosestObject, findObjectWithID, diff --git a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts index f09fca260..28ec21957 100644 --- a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts @@ -9,7 +9,7 @@ import { ReservedCoordTypes, MovedTypes, FlagNames, -} from 'constants/general' +} from '../../../constants/general' import { CollectiveManager } from 'international/collective' import { areCoordsEqual, diff --git a/src/room/creeps/creepRoleManager.ts b/src/room/creeps/creepRoleManager.ts index 54fae100b..2d138b362 100644 --- a/src/room/creeps/creepRoleManager.ts +++ b/src/room/creeps/creepRoleManager.ts @@ -1,7 +1,7 @@ import './creepPrototypes/creepFunctions' import './creepPrototypes/creepMoveFunctions' -import { creepRoles, customColors } from 'constants/general' +import { creepRoles, customColors } from '../../constants/general' import { LogTypes, customLog } from 'utils/logging' import { RoomManager } from 'room/room' import { StatsManager } from 'international/stats' diff --git a/src/room/creeps/creepUtils.ts b/src/room/creeps/creepUtils.ts index 661cb2503..8e617f034 100644 --- a/src/room/creeps/creepUtils.ts +++ b/src/room/creeps/creepUtils.ts @@ -12,7 +12,7 @@ import { packedPosLength, roomLogisticsRoles, storingStructureTypesSet, -} from 'constants/general' +} from '../../constants/general' import { StatsManager } from 'international/stats' import { arePositionsEqual, findObjectWithID, findWithLowestScore, getRange } from 'utils/utils' import { CreepRoleManager } from './creepRoleManager' diff --git a/src/room/creeps/endTickCreepManager.ts b/src/room/creeps/endTickCreepManager.ts index 3563a5776..532ce64c1 100644 --- a/src/room/creeps/endTickCreepManager.ts +++ b/src/room/creeps/endTickCreepManager.ts @@ -6,7 +6,7 @@ import { enemyDieChants, friendlyDieChants, powerCreepClassNames, -} from 'constants/general' +} from '../../constants/general' import { StatsManager } from 'international/stats' import { customLog } from 'utils/logging' import { forCoordsInRange, randomOf, randomRange, randomTick } from 'utils/utils' diff --git a/src/room/creeps/powerCreepRoleManager.ts b/src/room/creeps/powerCreepRoleManager.ts index e3fb5f181..61ba0f300 100644 --- a/src/room/creeps/powerCreepRoleManager.ts +++ b/src/room/creeps/powerCreepRoleManager.ts @@ -1,4 +1,4 @@ -import { customColors, powerCreepClassNames } from 'constants/general' +import { customColors, powerCreepClassNames } from '../../constants/general' import { statsManager } from 'international/stats' import { customLog } from 'utils/logging' import { RoomManager } from 'room/room' diff --git a/src/room/creeps/powerCreeps/operator.ts b/src/room/creeps/powerCreeps/operator.ts index 493f2016e..0f6e3a485 100644 --- a/src/room/creeps/powerCreeps/operator.ts +++ b/src/room/creeps/powerCreeps/operator.ts @@ -5,7 +5,7 @@ import { CreepPowerTaskKeys, CreepTaskKeys, CreepTaskNames, -} from 'constants/general' +} from '../../../constants/general' import { CommuneUtils } from 'room/commune/communeUtils' import { CreepPowerTask, PowerRequest } from 'types/creepTasks' import { customLog } from 'utils/logging' @@ -38,7 +38,7 @@ export class Operator extends PowerCreep { taskTarget._reservePowers.add(task[CreepPowerTaskKeys.power]) } - endRun() {} + endRun() { } // Basic tasks diff --git a/src/room/creeps/roleManagers/antifa/antifa.ts b/src/room/creeps/roleManagers/antifa/antifa.ts index 9322d2666..3680a4d2e 100644 --- a/src/room/creeps/roleManagers/antifa/antifa.ts +++ b/src/room/creeps/roleManagers/antifa/antifa.ts @@ -6,7 +6,7 @@ import { antifaRoles, customColors, squadQuotas, -} from 'constants/general' +} from '../../../../constants/general' import { customLog } from 'utils/logging' import { findClosestObject, getRangeXY, isExit, isXYExit } from 'utils/utils' import { CollectiveManager } from 'international/collective' diff --git a/src/room/creeps/roleManagers/antifa/duo.ts b/src/room/creeps/roleManagers/antifa/duo.ts index 819b02275..57077614f 100644 --- a/src/room/creeps/roleManagers/antifa/duo.ts +++ b/src/room/creeps/roleManagers/antifa/duo.ts @@ -5,7 +5,7 @@ import { RoomTypes, customColors, roomDimensions, -} from 'constants/general' +} from '../../../../constants/general' import { findClosestObject, getRangeXY, getRange, isExit, isXYExit } from 'utils/utils' import { Antifa } from './antifa' import { CustomPathFinderArgs } from 'international/customPathFinder' diff --git a/src/room/creeps/roleManagers/antifa/dynamicSquad.ts b/src/room/creeps/roleManagers/antifa/dynamicSquad.ts index b650df8bd..3b04ecc5e 100644 --- a/src/room/creeps/roleManagers/antifa/dynamicSquad.ts +++ b/src/room/creeps/roleManagers/antifa/dynamicSquad.ts @@ -1,4 +1,4 @@ -import { CombatRequestKeys, CreepMemoryKeys } from 'constants/general' +import { CombatRequestKeys, CreepMemoryKeys } from '../../../../constants/general' import { findClosestObject, getRange, Utils } from 'utils/utils' import { Antifa } from './antifa' diff --git a/src/room/creeps/roleManagers/antifa/quad.ts b/src/room/creeps/roleManagers/antifa/quad.ts index 97595665f..58078dbb2 100644 --- a/src/room/creeps/roleManagers/antifa/quad.ts +++ b/src/room/creeps/roleManagers/antifa/quad.ts @@ -10,7 +10,7 @@ import { customColors, packedQuadAttackMemberOffsets, quadAttackMemberOffsets, -} from 'constants/general' +} from '../../../../constants/general' import { arePositionsEqual, doesCoordExist, diff --git a/src/room/creeps/roleManagers/commune/builder.ts b/src/room/creeps/roleManagers/commune/builder.ts index e436355ea..ae50187f0 100644 --- a/src/room/creeps/roleManagers/commune/builder.ts +++ b/src/room/creeps/roleManagers/commune/builder.ts @@ -1,4 +1,4 @@ -import { Result, RoomLogisticsRequestTypes } from 'constants/general' +import { Result, RoomLogisticsRequestTypes } from '../../../../constants/general' import { customLog } from 'utils/logging' import { findObjectWithID, getRange } from 'utils/utils' diff --git a/src/room/creeps/roleManagers/commune/controllerUpgrader.ts b/src/room/creeps/roleManagers/commune/controllerUpgrader.ts index 94c8af43f..e08a77dfb 100644 --- a/src/room/creeps/roleManagers/commune/controllerUpgrader.ts +++ b/src/room/creeps/roleManagers/commune/controllerUpgrader.ts @@ -3,7 +3,7 @@ import { ReservedCoordTypes, RoomMemoryKeys, packedPosLength, -} from 'constants/general' +} from '../../../../constants/general' import { CreepProcs } from 'room/creeps/creepProcs' import { CreepUtils } from 'room/creeps/creepUtils' import { MyCreepUtils } from 'room/creeps/myCreepUtils' diff --git a/src/room/creeps/roleManagers/commune/defenders/meleeDefender.ts b/src/room/creeps/roleManagers/commune/defenders/meleeDefender.ts index 99095b743..6037e703b 100644 --- a/src/room/creeps/roleManagers/commune/defenders/meleeDefender.ts +++ b/src/room/creeps/roleManagers/commune/defenders/meleeDefender.ts @@ -5,7 +5,7 @@ import { PlayerMemoryKeys, ReservedCoordTypes, FlagNames, -} from 'constants/general' +} from '../../../../../constants/general' import { PlayerManager } from 'international/players' import { areCoordsEqual, diff --git a/src/room/creeps/roleManagers/commune/defenders/rangedDefender.ts b/src/room/creeps/roleManagers/commune/defenders/rangedDefender.ts index cd7a7c689..09c5dcd75 100644 --- a/src/room/creeps/roleManagers/commune/defenders/rangedDefender.ts +++ b/src/room/creeps/roleManagers/commune/defenders/rangedDefender.ts @@ -4,7 +4,7 @@ import { rangedMassAttackMultiplierByRange, CreepMemoryKeys, ReservedCoordTypes, -} from 'constants/general' +} from '../../../../../constants/general' import { areCoordsEqual, findClosestObject, diff --git a/src/room/creeps/roleManagers/commune/fastFiller.ts b/src/room/creeps/roleManagers/commune/fastFiller.ts index ba348ac41..7db3cfeca 100644 --- a/src/room/creeps/roleManagers/commune/fastFiller.ts +++ b/src/room/creeps/roleManagers/commune/fastFiller.ts @@ -1,4 +1,4 @@ -import { CreepMemoryKeys, ReservedCoordTypes } from 'constants/general' +import { CreepMemoryKeys, ReservedCoordTypes } from '../../../../constants/general' import { findClosestPos, getRangeXY, getRange } from 'utils/utils' import { packCoord, packPos, unpackCoord, unpackCoordAsPos, unpackPos } from 'other/codec' import { StructureUtils } from 'room/structureUtils' diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index c1db0c9bf..c386c7907 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -12,7 +12,7 @@ import { packedPosLength, relayOffsets, RoomStatsKeys, -} from 'constants/general' +} from '../../../../constants/general' import { StatsManager } from 'international/stats' import { packCoord, reversePosList, unpackCoord, unpackPosAt } from 'other/codec' import { CreepProcs } from 'room/creeps/creepProcs' diff --git a/src/room/creeps/roleManagers/commune/hubHauler.ts b/src/room/creeps/roleManagers/commune/hubHauler.ts index 36d869d4a..b99518f09 100644 --- a/src/room/creeps/roleManagers/commune/hubHauler.ts +++ b/src/room/creeps/roleManagers/commune/hubHauler.ts @@ -7,7 +7,7 @@ import { linkReceiveTreshold, linkSendThreshold, powerSpawnRefillThreshold, -} from 'constants/general' +} from '../../../../constants/general' import { packCoord, unpackCoord } from 'other/codec' import { CommuneUtils } from 'room/commune/communeUtils' import { CreepProcs } from 'room/creeps/creepProcs' diff --git a/src/room/creeps/roleManagers/commune/maintainer.ts b/src/room/creeps/roleManagers/commune/maintainer.ts index da5ca73c3..0fb57740f 100644 --- a/src/room/creeps/roleManagers/commune/maintainer.ts +++ b/src/room/creeps/roleManagers/commune/maintainer.ts @@ -1,4 +1,4 @@ -import { CreepMemoryKeys, ReservedCoordTypes, Result, roomDimensions } from 'constants/general' +import { CreepMemoryKeys, ReservedCoordTypes, Result, roomDimensions } from '../../../../constants/general' import { StatsManager } from 'international/stats' import { findCoordsInsideRect, findObjectWithID, getRange } from 'utils/utils' import { packCoord } from 'other/codec' diff --git a/src/room/creeps/roleManagers/commune/mineralHarvester.ts b/src/room/creeps/roleManagers/commune/mineralHarvester.ts index 06104457b..ad2f26f83 100644 --- a/src/room/creeps/roleManagers/commune/mineralHarvester.ts +++ b/src/room/creeps/roleManagers/commune/mineralHarvester.ts @@ -4,7 +4,7 @@ import { Result, RoomMemoryKeys, RoomStatsKeys, -} from 'constants/general' +} from '../../../../constants/general' import { StatsManager } from 'international/stats' import { getRangeXY, getRange, areCoordsEqual } from 'utils/utils' import { reversePosList, unpackPos } from 'other/codec' diff --git a/src/room/creeps/roleManagers/commune/sourceHarvester.ts b/src/room/creeps/roleManagers/commune/sourceHarvester.ts index 69a3a575f..6c882b455 100644 --- a/src/room/creeps/roleManagers/commune/sourceHarvester.ts +++ b/src/room/creeps/roleManagers/commune/sourceHarvester.ts @@ -7,7 +7,7 @@ import { RoomMemoryKeys, RoomStatsKeys, WorkTypes, -} from 'constants/general' +} from '../../../../constants/general' import { StatsManager } from 'international/stats' import { findCoordsInsideRect, diff --git a/src/room/creeps/roleManagers/international/allyVanguard.ts b/src/room/creeps/roleManagers/international/allyVanguard.ts index e949e8639..4c941ab79 100644 --- a/src/room/creeps/roleManagers/international/allyVanguard.ts +++ b/src/room/creeps/roleManagers/international/allyVanguard.ts @@ -5,7 +5,7 @@ import { RoomTypes, Result, ReservedCoordTypes, -} from 'constants/general' +} from '../../../../constants/general' import { findObjectWithID, getRangeXY, getRange } from 'utils/utils' import { unpackCoord } from 'other/codec' import { CreepUtils } from 'room/creeps/creepUtils' diff --git a/src/room/creeps/roleManagers/international/claimer.ts b/src/room/creeps/roleManagers/international/claimer.ts index 0d21cf436..fe994949a 100644 --- a/src/room/creeps/roleManagers/international/claimer.ts +++ b/src/room/creeps/roleManagers/international/claimer.ts @@ -1,4 +1,4 @@ -import { WorkRequestKeys, CreepMemoryKeys, Result, RoomTypes } from 'constants/general' +import { WorkRequestKeys, CreepMemoryKeys, Result, RoomTypes } from '../../../../constants/general' import { MyCreepUtils } from 'room/creeps/myCreepUtils' export class Claimer extends Creep { diff --git a/src/room/creeps/roleManagers/international/requestHauler.ts b/src/room/creeps/roleManagers/international/requestHauler.ts index 775189d21..a9f28a778 100644 --- a/src/room/creeps/roleManagers/international/requestHauler.ts +++ b/src/room/creeps/roleManagers/international/requestHauler.ts @@ -1,4 +1,4 @@ -import { CreepMemoryKeys } from 'constants/general' +import { CreepMemoryKeys } from '../../../../constants/general' import { CollectiveManager } from 'international/collective' export class RequestHauler extends Creep { diff --git a/src/room/creeps/roleManagers/international/scout.ts b/src/room/creeps/roleManagers/international/scout.ts index de9b26bcf..5a4cb86c7 100644 --- a/src/room/creeps/roleManagers/international/scout.ts +++ b/src/room/creeps/roleManagers/international/scout.ts @@ -5,7 +5,7 @@ import { RoomTypes, communeSign, nonCommuneSigns, -} from 'constants/general' +} from '../../../../constants/general' import { getRangeXY, getRange, randomOf } from 'utils/utils' import { partial } from 'lodash' import { RoomNameUtils } from 'room/roomNameUtils' diff --git a/src/room/creeps/roleManagers/international/vanguard.ts b/src/room/creeps/roleManagers/international/vanguard.ts index c1596e882..fd59d323e 100644 --- a/src/room/creeps/roleManagers/international/vanguard.ts +++ b/src/room/creeps/roleManagers/international/vanguard.ts @@ -4,7 +4,7 @@ import { Result, RoomTypes, ReservedCoordTypes, -} from 'constants/general' +} from '../../../../constants/general' import { findObjectWithID, getRangeXY, getRange } from 'utils/utils' import { unpackCoord } from 'other/codec' import { CreepUtils } from 'room/creeps/creepUtils' diff --git a/src/room/creeps/roleManagers/remote/remoteBuilder.ts b/src/room/creeps/roleManagers/remote/remoteBuilder.ts index 124753b04..52ca3fdd6 100644 --- a/src/room/creeps/roleManagers/remote/remoteBuilder.ts +++ b/src/room/creeps/roleManagers/remote/remoteBuilder.ts @@ -4,7 +4,7 @@ import { Result, RoomMemoryKeys, RoomTypes, -} from 'constants/general' +} from '../../../../constants/general' import { findCarryPartsRequired, findObjectWithID, diff --git a/src/room/creeps/roleManagers/remote/remoteCoreAttacker.ts b/src/room/creeps/roleManagers/remote/remoteCoreAttacker.ts index 69ce5458d..934b09c47 100644 --- a/src/room/creeps/roleManagers/remote/remoteCoreAttacker.ts +++ b/src/room/creeps/roleManagers/remote/remoteCoreAttacker.ts @@ -6,7 +6,7 @@ import { RoomMemoryKeys, RoomTypes, SleepFor, -} from 'constants/general' +} from '../../../../constants/general' import { getRangeXY, randomIntRange, randomTick } from 'utils/utils' export class RemoteCoreAttacker extends Creep { diff --git a/src/room/creeps/roleManagers/remote/remoteDefender.ts b/src/room/creeps/roleManagers/remote/remoteDefender.ts index 7265e1d43..a3e458a01 100644 --- a/src/room/creeps/roleManagers/remote/remoteDefender.ts +++ b/src/room/creeps/roleManagers/remote/remoteDefender.ts @@ -4,7 +4,7 @@ import { RoomMemoryKeys, RoomTypes, remoteTypeWeights, -} from 'constants/general' +} from '../../../../constants/general' import { findClosestObject, getRangeXY, randomIntRange } from 'utils/utils' import { packCoord } from 'other/codec' diff --git a/src/room/creeps/roleManagers/remote/remoteDismantler.ts b/src/room/creeps/roleManagers/remote/remoteDismantler.ts index ff2246392..7cdf0053b 100644 --- a/src/room/creeps/roleManagers/remote/remoteDismantler.ts +++ b/src/room/creeps/roleManagers/remote/remoteDismantler.ts @@ -4,7 +4,7 @@ import { RoomMemoryKeys, RoomTypes, remoteTypeWeights, -} from 'constants/general' +} from '../../../../constants/general' import { findObjectWithID, getRangeXY, randomTick } from 'utils/utils' export class RemoteDismantler extends Creep { diff --git a/src/room/creeps/roleManagers/remote/remoteReserver.ts b/src/room/creeps/roleManagers/remote/remoteReserver.ts index c61714955..5dae3d58e 100644 --- a/src/room/creeps/roleManagers/remote/remoteReserver.ts +++ b/src/room/creeps/roleManagers/remote/remoteReserver.ts @@ -5,7 +5,7 @@ import { RoomMemoryKeys, RoomTypes, packedPosLength, -} from 'constants/general' +} from '../../../../constants/general' import { getRange, randomTick } from 'utils/utils' import { packCoord, diff --git a/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts b/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts index 4f7467e12..357f85160 100644 --- a/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts +++ b/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts @@ -7,7 +7,7 @@ import { RoomMemoryKeys, RoomTypes, WorkTypes, -} from 'constants/general' +} from '../../../../constants/general' import { findCarryPartsRequired, findObjectWithID, diff --git a/src/room/creeps/roles/haulerOps.ts b/src/room/creeps/roles/haulerOps.ts index 4cae02ab1..95c3fcb3b 100644 --- a/src/room/creeps/roles/haulerOps.ts +++ b/src/room/creeps/roles/haulerOps.ts @@ -11,7 +11,7 @@ import { customColors, FlagNames, relayOffsets, -} from 'constants/general' +} from '../../../constants/general' import { StatsManager } from 'international/stats' import { unpackPosAt, reversePosList, packCoord, unpackCoord } from 'other/codec' import { CreepProcs } from 'room/creeps/creepProcs' diff --git a/src/room/logisticsProcs.ts b/src/room/logisticsProcs.ts index 678565b43..66271279f 100644 --- a/src/room/logisticsProcs.ts +++ b/src/room/logisticsProcs.ts @@ -1,4 +1,4 @@ -import { RoomLogisticsRequestTypes } from 'constants/general' +import { RoomLogisticsRequestTypes } from '../constants/general' import { scalePriority } from 'utils/utils' export class LogisticsProcs { diff --git a/src/room/remotePlanner.ts b/src/room/remotePlanner.ts index 3811c193b..620545f58 100644 --- a/src/room/remotePlanner.ts +++ b/src/room/remotePlanner.ts @@ -15,7 +15,7 @@ import { buildableStructureTypes, structureTypesToProtectSet, RoomMemoryKeys, -} from 'constants/general' +} from '../constants/general' import { areCoordsEqual, createPosMap, diff --git a/src/room/remoteProcs.ts b/src/room/remoteProcs.ts index d9635ed16..d17314d69 100644 --- a/src/room/remoteProcs.ts +++ b/src/room/remoteProcs.ts @@ -1,3 +1,3 @@ -import { RoomLogisticsRequestTypes } from 'constants/general' +import { RoomLogisticsRequestTypes } from '../constants/general' export class RemoteProcs {} diff --git a/src/room/resourceAdditions.ts b/src/room/resourceAdditions.ts index 25ec2a8df..d0221183b 100644 --- a/src/room/resourceAdditions.ts +++ b/src/room/resourceAdditions.ts @@ -1,4 +1,4 @@ -import { decayCosts } from "constants/general" +import { decayCosts } from "../constants/general" Object.defineProperties(Resource.prototype, { nextAmount: { diff --git a/src/room/room.ts b/src/room/room.ts index 8723bf8b6..4dcde0ead 100644 --- a/src/room/room.ts +++ b/src/room/room.ts @@ -24,7 +24,7 @@ import { remoteTypeWeights, roomDimensions, roomTypesUsedForStats, -} from 'constants/general' +} from '../constants/general' import { findClosestObject, findHighestScore, diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index 02f15bac8..dec970975 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -16,7 +16,7 @@ import { RemoteResourcePathTypes, FlagNames, RoomStatusKeys, -} from 'constants/general' +} from '../constants/general' import { findAdjacentCoordsToCoord, findCoordsInsideRect, diff --git a/src/room/roomNameProcs.ts b/src/room/roomNameProcs.ts index 478ddc450..9ced9be84 100644 --- a/src/room/roomNameProcs.ts +++ b/src/room/roomNameProcs.ts @@ -1,4 +1,4 @@ -import { Result, RoomMemoryKeys, RoomStatusKeys, RoomTypes } from 'constants/general' +import { Result, RoomMemoryKeys, RoomStatusKeys, RoomTypes } from '../constants/general' export class RoomNameProcs { static findAndRecordStatus(roomName: string, roomMemory = Memory.rooms[roomName]) { diff --git a/src/room/roomNameUtils.ts b/src/room/roomNameUtils.ts index 55d0731e0..cc0df8798 100644 --- a/src/room/roomNameUtils.ts +++ b/src/room/roomNameUtils.ts @@ -11,7 +11,7 @@ import { roomDimensions, roomTypeProperties, roomTypes, -} from 'constants/general' +} from '../constants/general' import { CollectiveManager } from 'international/collective' import { findAdjacentCoordsToCoord, diff --git a/src/room/roomObjectAdditions.ts b/src/room/roomObjectAdditions.ts index d3a58d0cf..115aff218 100644 --- a/src/room/roomObjectAdditions.ts +++ b/src/room/roomObjectAdditions.ts @@ -1,4 +1,4 @@ -import { allResources, customColors } from 'constants/general' +import { allResources, customColors } from '../constants/general' import { customLog } from 'utils/logging' import { findObjectWithID } from 'utils/utils' diff --git a/src/room/roomObjectUtils.ts b/src/room/roomObjectUtils.ts index b00f877a1..735f9d407 100644 --- a/src/room/roomObjectUtils.ts +++ b/src/room/roomObjectUtils.ts @@ -1,4 +1,4 @@ -import { separateStoreStructureTypes } from 'constants/general' +import { separateStoreStructureTypes } from '../constants/general' export class RoomObjectUtils { static freeNextStoreOf( diff --git a/src/room/roomOps.ts b/src/room/roomOps.ts index 94d47a9fc..adcb87a8a 100644 --- a/src/room/roomOps.ts +++ b/src/room/roomOps.ts @@ -7,7 +7,7 @@ import { RoomTypes, roomDimensions, allStructureTypes, -} from 'constants/general' +} from '../constants/general' import { StatsManager } from 'international/stats' import { Dashboard, Rectangle, Table } from 'screeps-viz' import { packXYAsNum, randomTick } from 'utils/utils' diff --git a/src/room/roomUtils.ts b/src/room/roomUtils.ts index 85805ad63..0d4017af0 100644 --- a/src/room/roomUtils.ts +++ b/src/room/roomUtils.ts @@ -1,4 +1,4 @@ -import { RoomMemoryKeys, RoomTypes, roomDimensions } from 'constants/general' +import { RoomMemoryKeys, RoomTypes, roomDimensions } from '../constants/general' import { packCoord, packXYAsCoord, unpackCoord } from 'other/codec' import { RoomDataOps, roomData } from './roomData' import { findObjectWithID, forAdjacentCoords, Utils } from 'utils/utils' diff --git a/src/room/roomVisuals.ts b/src/room/roomVisuals.ts index 4b35e7ebc..e15ef2d51 100644 --- a/src/room/roomVisuals.ts +++ b/src/room/roomVisuals.ts @@ -9,7 +9,7 @@ import { RoomMemoryKeys, RoomTypes, FlagNames, -} from 'constants/general' +} from '../constants/general' import { StatsManager } from 'international/stats' import { customLog } from 'utils/logging' import { findObjectWithID, unpackNumAsCoord } from 'utils/utils' diff --git a/src/room/structureUtils.ts b/src/room/structureUtils.ts index 6b8ea5e66..e03170cb1 100644 --- a/src/room/structureUtils.ts +++ b/src/room/structureUtils.ts @@ -1,4 +1,4 @@ -import { RoomMemoryKeys } from 'constants/general' +import { RoomMemoryKeys } from '../constants/general' export class StructureUtils { static isRCLActionable(structure: Structure) { diff --git a/src/types.d.ts b/src/types.d.ts index 7eafea4f7..6ddc3abf3 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -26,7 +26,7 @@ import { MovedTypes, RoomStatsKeys, RoomStatusKeys, -} from 'constants/general' +} from './constants/general' import { Operator } from 'room/creeps/powerCreeps/operator' import { MeleeDefender } from 'room/creeps/roleManagers/commune/defenders/meleeDefender' import { Settings } from 'international/settingsDefault' diff --git a/src/types/internationalRequests.ts b/src/types/internationalRequests.ts index 4a08cd702..e0537ec32 100644 --- a/src/types/internationalRequests.ts +++ b/src/types/internationalRequests.ts @@ -4,7 +4,7 @@ import { HaulRequestKeys, NukeRequestKeys, WorkRequestKeys, -} from 'constants/general' +} from '../constants/general' export interface WorkRequest { [WorkRequestKeys.claimer]?: number diff --git a/src/types/players.ts b/src/types/players.ts index a67eb75b0..0f82a237e 100644 --- a/src/types/players.ts +++ b/src/types/players.ts @@ -1,5 +1,5 @@ -import { PlayerRelationships } from 'constants/general' -import { PlayerMemoryKeys } from 'constants/general' +import { PlayerRelationships } from '../constants/general' +import { PlayerMemoryKeys } from '../constants/general' export interface PlayerMemory { [PlayerMemoryKeys.offensiveThreat]: number diff --git a/src/types/roomLogistics.ts b/src/types/roomLogistics.ts index 681443e2b..d03e4b75a 100644 --- a/src/types/roomLogistics.ts +++ b/src/types/roomLogistics.ts @@ -1,4 +1,4 @@ -import { CreepLogisticsRequestKeys, RoomLogisticsRequestTypes } from 'constants/general' +import { CreepLogisticsRequestKeys, RoomLogisticsRequestTypes } from '../constants/general' export type RoomLogisticsTargets = AnyStoreStructure | Creep | Tombstone | Ruin | Resource diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 380dbf696..ba23e1fa6 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -7,7 +7,7 @@ import { FlagNames, } from '../constants/general' import { customLog } from './logging' -import { PlayerRelationships } from 'constants/general' +import { PlayerRelationships } from '../constants/general' import { RoomNameUtils } from 'room/roomNameUtils' import { Dashboard, Rectangle, Table } from 'screeps-viz' From 709e54933316a6cd4062cfc5dfeba4ff3417cac2 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Fri, 2 Feb 2024 19:17:56 -0800 Subject: [PATCH 139/190] import consants/structures --- src/constants/general.ts | 20 - src/constants/structures.ts | 8 + src/international/collective.ts | 62 +- src/room/commune/communeUtils.ts | 4 +- .../spawning/spawnRequestConstructors.ts | 26 +- .../creepPrototypes/creepMoveFunctions.ts | 542 +++++++++--------- src/room/roomObjectUtils.ts | 2 +- 7 files changed, 346 insertions(+), 318 deletions(-) diff --git a/src/constants/general.ts b/src/constants/general.ts index 144f21e67..f409fd5af 100644 --- a/src/constants/general.ts +++ b/src/constants/general.ts @@ -751,15 +751,6 @@ export const combatTargetStructureTypes: Set = new Set([ export const generalRepairStructureTypes = new Set([STRUCTURE_ROAD, STRUCTURE_CONTAINER]) -/** - * These structures have seperate store capacities for different resources. For example, labs can hold minerals and energy, but at different amounts and without conflict - */ -export const separateStoreStructureTypes = new Set([ - STRUCTURE_LAB, - STRUCTURE_NUKER, - STRUCTURE_POWER_SPAWN, -]) - export const customColors = { white: '#ffffff', lightGrey: '#eaeaea', @@ -1052,17 +1043,6 @@ export const relayRoles: Set = new Set(['hauler']) */ export const cacheAmountModifier = 25 -/** - * Which structures should be safemoded when attacked - */ -export const safemodeTargets: StructureConstant[] = [ - STRUCTURE_SPAWN, - STRUCTURE_TOWER, - STRUCTURE_STORAGE, - STRUCTURE_TERMINAL, -] -export const safemodeTargetsSet = new Set(safemodeTargets) - /** * The number of ticks to wait between hauler size updates */ diff --git a/src/constants/structures.ts b/src/constants/structures.ts index e69de29bb..610835727 100644 --- a/src/constants/structures.ts +++ b/src/constants/structures.ts @@ -0,0 +1,8 @@ +/** + * These structures have seperate store capacities for different resources. For example, labs can hold minerals and energy, but at different amounts and without conflict + */ +export const separateStoreStructureTypes = new Set([ + STRUCTURE_LAB, + STRUCTURE_NUKER, + STRUCTURE_POWER_SPAWN, +]) diff --git a/src/international/collective.ts b/src/international/collective.ts index 7fed60337..44b7ad0f6 100644 --- a/src/international/collective.ts +++ b/src/international/collective.ts @@ -280,27 +280,9 @@ export class CollectiveManager { * {y, y, y, x, y}. * The last room wants to be funneled, however, only the first 3 rooms will be, excluding the last 2: {y, y, y, x, x}. */ - static getFunnelingRoomNames() { + /* static getFunnelingRoomNames() { if (this._funnelingRoomNames) return this._funnelingRoomNames - /* if (this._funnelingRoomNames) return this._funnelingRoomNames - - const funnelingRoomNames = new Set() - const funnelTargets = this.funnelOrder - - for (const roomName of funnelTargets) { - const room = Game.rooms[roomName] - if (!room.considerFunneled) { - funnelingRoomNames.add(roomName) - break - } - // Consider it funneled - - funnelingRoomNames.add(roomName) - } - - this._funnelingRoomNames = funnelingRoomNames - return funnelingRoomNames */ const funnelOrder = this.getFunnelOrder() // Rooms that want to get funneled might not get to be if they aren't in line for funneling @@ -320,7 +302,7 @@ export class CollectiveManager { this._funnelingRoomNames = funnelingRoomNames return funnelingRoomNames - } + } */ /** * Qualifying rooms either want to be funneled, or the room next in line to get funneled wants to be funneled. @@ -328,7 +310,7 @@ export class CollectiveManager { * CollectiveManager function will work from back to front so that if a previous room wants to be funneled, so will the proceeding one. * In CollectiveManager example, the set should convert to {y, y, y, y, x} */ - private static getFunnelWanters(funnelOrder: string[]) { + /* private static getFunnelWanters(funnelOrder: string[]) { const funnelWanters = new Set() let previousWantsToBeIndependentlyFunneled: boolean @@ -338,7 +320,7 @@ export class CollectiveManager { const roomName = funnelOrder[i] const room = Game.rooms[roomName] - const wantsToBeFunneledIndependent = CommuneUtils.wantsToBeFunneledIndependent(room) + const wantsToBeFunneledIndependent = CommuneUtils.getUpgradeCapacity(room) if (!(previousWantsToBeIndependentlyFunneled && wantsToBeFunneledIndependent)) { previousWantsToBeIndependentlyFunneled = false @@ -350,6 +332,42 @@ export class CollectiveManager { } return funnelWanters + } */ + + static getFunnelingRoomNames() { + + const funnelTargets = new Set() + // How much energy we are allowed to distribute each tick of funneling + let funnelDistribution = 0 + const funnelTargetQuotas: {[roomName: string]: number} = {} + + for (const roomName of CollectiveManager.communes) { + const room = Game.rooms[roomName] + + const desiredStrength = CommuneUtils.getDesiredUpgraderStrength(room) + const maxUpgradeStrength = CommuneUtils.getMaxUpgradeStrength(room) + // We do not have enough desire + if (desiredStrength > maxUpgradeStrength) { + + funnelDistribution += desiredStrength - maxUpgradeStrength + continue + } + + funnelTargetQuotas[roomName] = maxUpgradeStrength + } + + if (funnelDistribution === 0) return funnelTargets + + for (const roomName in funnelTargetQuotas) { + const funnelQuota = funnelTargetQuotas[roomName] + + funnelTargets.add(roomName) + + funnelDistribution -= funnelQuota + if (funnelDistribution <= 0) break + } + + return funnelTargets } static _resourcesInStoringStructures: Partial<{ [key in ResourceConstant]: number }> diff --git a/src/room/commune/communeUtils.ts b/src/room/commune/communeUtils.ts index 8d78a39cb..8501c2866 100644 --- a/src/room/commune/communeUtils.ts +++ b/src/room/commune/communeUtils.ts @@ -263,14 +263,14 @@ export class CommuneUtils { * Wether the commune wants to be funneled for upgrading, independent of what other rooms want. * Assumes the room already meats the requirements to be a funnel target */ - static wantsToBeFunneledIndependent(room: Room) { + static getUpgradeCapacity(room: Room) { const desiredStrength = this.getDesiredUpgraderStrength(room) const maxStrength = this.getMaxUpgradeStrength(room) // We do not have enough desire if (desiredStrength < maxStrength) return false // We have enough desired strength to register our room as fully funneled - return true + return maxStrength } static getResourceTargets(room: Room) { diff --git a/src/room/commune/spawning/spawnRequestConstructors.ts b/src/room/commune/spawning/spawnRequestConstructors.ts index 2508c1755..a695635e0 100644 --- a/src/room/commune/spawning/spawnRequestConstructors.ts +++ b/src/room/commune/spawning/spawnRequestConstructors.ts @@ -208,6 +208,11 @@ export class SpawnRequestConstructors { : room.creepsFromRoom[args.role].length } + let extraPartsCost = 0 + for (const part of args.extraParts) { + extraPartsCost += BODYPART_COST[part] + } + // So long as there are totalExtraParts left to assign while (totalExtraParts >= args.extraParts.length && args.maxCreeps > 0) { @@ -250,10 +255,25 @@ export class SpawnRequestConstructors { } } + // Apply extraParts once without restrictions + + tier += 1 + + for (const part of args.extraParts) { + + cost += BODYPART_COST[part] + bodyPartCounts[part] += 1 + + remainingAllowedParts -= 1 + totalExtraParts -= 1 + } + + // Apply additional extraParts with restrictions + let stop = false // So long as the cost is less than the maxCostPerCreep and the size is below max size - while (cost < maxCostPerCreep && remainingAllowedParts - args.extraParts.length >= 0) { + while (cost - extraPartsCost <= maxCostPerCreep && remainingAllowedParts - args.extraParts.length >= 0) { tier += 1 @@ -266,7 +286,7 @@ export class SpawnRequestConstructors { break } - cost += BODYPART_COST[part] + cost += partCost bodyPartCounts[part] += 1 remainingAllowedParts -= 1 @@ -376,7 +396,7 @@ export class SpawnRequestConstructors { break } - cost += BODYPART_COST[part] + cost += partCost bodyPartCounts[part] += 1 partsCount += 1 } diff --git a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts index f09fca260..8b80f1532 100644 --- a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts @@ -161,162 +161,158 @@ PowerCreep.prototype.createMoveRequest = Creep.prototype.createMoveRequest = fun } PowerCreep.prototype.assignMoveRequest = Creep.prototype.assignMoveRequest = function (coord) { - const { room } = this - const packedCoord = packCoord(coord) + const { room } = this + const packedCoord = packCoord(coord) - this.moveRequest = packedCoord + this.moveRequest = packedCoord - room.moveRequests[packedCoord] - ? room.moveRequests[packedCoord].push(this.name) - : (room.moveRequests[packedCoord] = [this.name]) + room.moveRequests[packedCoord] + ? room.moveRequests[packedCoord].push(this.name) + : (room.moveRequests[packedCoord] = [this.name]) } PowerCreep.prototype.findShoveCoord = Creep.prototype.findShoveCoord = function ( - avoidPackedCoords, - targetCoord, + avoidPackedCoords, + targetCoord, ) { - const { room } = this - const terrain = room.getTerrain() - - let shoveCoord: Coord - let lowestScore = Infinity - - forAdjacentCoords(this.pos, coord => { - const packedCoord = packCoord(coord) - - const creepAtPosName = room.creepPositions[packedCoord] - if (creepAtPosName) { - const creepAtPos = Game.creeps[creepAtPosName] - if (creepAtPos.fatigue > 0) return - if (creepAtPos.moved) return - if (creepAtPos.moveRequest) return - if (creepAtPos.getActiveBodyparts(MOVE)) return - } + const { room } = this + const terrain = room.getTerrain() - /* + let shoveCoord: Coord + let lowestScore = Infinity + + forAdjacentCoords(this.pos, coord => { + const packedCoord = packCoord(coord) + + const creepAtPosName = room.creepPositions[packedCoord] + if (creepAtPosName) { + const creepAtPos = Game.creeps[creepAtPosName] + if (creepAtPos.fatigue > 0) return + if (creepAtPos.moved) return + if (creepAtPos.moveRequest) return + if (creepAtPos.getActiveBodyparts(MOVE)) return + } + + /* if (room.creepPositions[packedCoord]) continue if (room.powerCreepPositions[packedCoord]) continue */ - if (avoidPackedCoords.has(packedCoord)) return + if (avoidPackedCoords.has(packedCoord)) return - if (isExit(coord)) return + if (isExit(coord)) return - const terrainType = terrain.get(coord.x, coord.y) - if (terrainType === TERRAIN_MASK_WALL) return + const terrainType = terrain.get(coord.x, coord.y) + if (terrainType === TERRAIN_MASK_WALL) return - // Use scoring to determine the cost of using the coord compared to potential others + // Use scoring to determine the cost of using the coord compared to potential others - let score = 0 - if (targetCoord) { - score += getRangeEuc(coord, targetCoord) * 3 - } + let score = 0 + if (targetCoord) { + score += getRangeEuc(coord, targetCoord) * 3 + } - if (terrainType === TERRAIN_MASK_SWAMP) score += 1 - if (room.creepPositions[packedCoord] || room.powerCreepPositions[packedCoord]) score += 1 + if (terrainType === TERRAIN_MASK_SWAMP) score += 1 + if (room.creepPositions[packedCoord] || room.powerCreepPositions[packedCoord]) score += 1 - // If the coord is reserved, increase score porportional to importance of the reservation - const reservationType = this.room.roomManager.reservedCoords.get(packedCoord) - // Don't shove onto spawning-reserved coords - if (reservationType === ReservedCoordTypes.spawning) return - // Score based on value of reservation - if (reservationType !== undefined) score += reservationType * 2 + // If the coord is reserved, increase score porportional to importance of the reservation + const reservationType = this.room.roomManager.reservedCoords.get(packedCoord) + // Don't shove onto spawning-reserved coords + if (reservationType === ReservedCoordTypes.spawning) return + // Score based on value of reservation + if (reservationType !== undefined) score += reservationType * 2 - if (Game.flags[FlagNames.roomVisuals]) - this.room.visual.text(score.toString(), coord.x, coord.y) + if (Game.flags[FlagNames.roomVisuals]) this.room.visual.text(score.toString(), coord.x, coord.y) - // Preference for lower-scoring coords - if (score >= lowestScore) return + // Preference for lower-scoring coords + if (score >= lowestScore) return - // If the coord isn't safe to stand on + // If the coord isn't safe to stand on - if (room.roomManager.enemyThreatCoords.has(packedCoord)) return + if (room.roomManager.enemyThreatCoords.has(packedCoord)) return - if (room.coordHasStructureTypes(coord, impassibleStructureTypesSet)) return + if (room.coordHasStructureTypes(coord, impassibleStructureTypesSet)) return - if ( - this.memory[CreepMemoryKeys.rampartOnlyShoving] && - !room.findStructureAtCoord( - coord, - structure => structure.structureType === STRUCTURE_RAMPART, - ) - ) - return + if ( + this.memory[CreepMemoryKeys.rampartOnlyShoving] && + !room.findStructureAtCoord(coord, structure => structure.structureType === STRUCTURE_RAMPART) + ) + return - let hasImpassibleStructure + let hasImpassibleStructure - for (const cSite of room.lookForAt(LOOK_CONSTRUCTION_SITES, coord.x, coord.y)) { - if (!cSite.my && !global.settings.allies.includes(cSite.owner.username)) continue + for (const cSite of room.lookForAt(LOOK_CONSTRUCTION_SITES, coord.x, coord.y)) { + if (!cSite.my && !global.settings.allies.includes(cSite.owner.username)) continue - if (impassibleStructureTypesSet.has(cSite.structureType)) { - hasImpassibleStructure = true - break - } - } + if (impassibleStructureTypesSet.has(cSite.structureType)) { + hasImpassibleStructure = true + break + } + } - if (hasImpassibleStructure) return + if (hasImpassibleStructure) return - lowestScore = score - shoveCoord = coord - }) + lowestScore = score + shoveCoord = coord + }) - return shoveCoord + return shoveCoord } PowerCreep.prototype.shove = Creep.prototype.shove = function (avoidPackedCoords) { - const { room } = this + const { room } = this - let targetCoord = this.actionCoord - if (!targetCoord && this.memory[CreepMemoryKeys.goalPos]) - targetCoord = unpackPos(this.memory[CreepMemoryKeys.goalPos]) + let targetCoord = this.actionCoord + if (!targetCoord && this.memory[CreepMemoryKeys.goalPos]) + targetCoord = unpackPos(this.memory[CreepMemoryKeys.goalPos]) - avoidPackedCoords.add(packCoord(this.pos)) + avoidPackedCoords.add(packCoord(this.pos)) - const shoveCoord = this.findShoveCoord(avoidPackedCoords, targetCoord) - if (!shoveCoord) return false + const shoveCoord = this.findShoveCoord(avoidPackedCoords, targetCoord) + if (!shoveCoord) return false - const packedShoveCoord = packCoord(shoveCoord) - const creepAtPosName = - room.creepPositions[packedShoveCoord] || room.powerCreepPositions[packedShoveCoord] + const packedShoveCoord = packCoord(shoveCoord) + const creepAtPosName = + room.creepPositions[packedShoveCoord] || room.powerCreepPositions[packedShoveCoord] - // If there is a creep make sure we aren't overlapping with other shoves + // If there is a creep make sure we aren't overlapping with other shoves - if (creepAtPosName) { - avoidPackedCoords.add(packCoord(this.pos)) - avoidPackedCoords.add(packedShoveCoord) + if (creepAtPosName) { + avoidPackedCoords.add(packCoord(this.pos)) + avoidPackedCoords.add(packedShoveCoord) - const creepAtPos = Game.creeps[creepAtPosName] || Game.powerCreeps[creepAtPosName] - if (!creepAtPos.shove(avoidPackedCoords)) return false - } + const creepAtPos = Game.creeps[creepAtPosName] || Game.powerCreeps[creepAtPosName] + if (!creepAtPos.shove(avoidPackedCoords)) return false + } - this.assignMoveRequest(shoveCoord) + this.assignMoveRequest(shoveCoord) - if (Game.flags[FlagNames.roomVisuals]) - room.visual.circle(this.pos, { - fill: '', - stroke: customColors.red, - radius: 0.5, - strokeWidth: 0.15, - }) + if (Game.flags[FlagNames.roomVisuals]) + room.visual.circle(this.pos, { + fill: '', + stroke: customColors.red, + radius: 0.5, + strokeWidth: 0.15, + }) - if (!this.moveRequest) return false + if (!this.moveRequest) return false - if (Game.flags[FlagNames.roomVisuals]) { - room.visual.circle(this.pos, { - fill: '', - stroke: customColors.yellow, - radius: 0.5, - strokeWidth: 0.15, - opacity: 0.3, - }) + if (Game.flags[FlagNames.roomVisuals]) { + room.visual.circle(this.pos, { + fill: '', + stroke: customColors.yellow, + radius: 0.5, + strokeWidth: 0.15, + opacity: 0.3, + }) - room.visual.line(this.pos, unpackCoordAsPos(this.moveRequest, this.room.name), { - color: customColors.yellow, - }) - } + room.visual.line(this.pos, unpackCoordAsPos(this.moveRequest, this.room.name), { + color: customColors.yellow, + }) + } - this.runMoveRequest() - return true - /* + this.runMoveRequest() + return true + /* this.recurseMoveRequest() if (this.moved) return true @@ -324,68 +320,68 @@ PowerCreep.prototype.shove = Creep.prototype.shove = function (avoidPackedCoords } PowerCreep.prototype.runMoveRequest = Creep.prototype.runMoveRequest = function () { - const { room } = this + const { room } = this - // If requests are not allowed for this pos, inform false + // If requests are not allowed for this pos, inform false - if (!room.moveRequests[this.moveRequest]) return false + if (!room.moveRequests[this.moveRequest]) return false - if (this.move(this.pos.getDirectionTo(unpackCoordAsPos(this.moveRequest, room.name))) !== OK) - return false + if (this.move(this.pos.getDirectionTo(unpackCoordAsPos(this.moveRequest, room.name))) !== OK) + return false - this.room.roomManager.runMoveRequestOrder += 1 + this.room.roomManager.runMoveRequestOrder += 1 - if (Game.flags[FlagNames.roomVisuals]) - room.visual.rect(this.pos.x - 0.5, this.pos.y - 0.5, 1, 1, { - fill: customColors.lightBlue, - opacity: 0.2, - }) + if (Game.flags[FlagNames.roomVisuals]) + room.visual.rect(this.pos.x - 0.5, this.pos.y - 0.5, 1, 1, { + fill: customColors.lightBlue, + opacity: 0.2, + }) - // Record where the creep is tying to move + // Record where the creep is tying to move - this.moved = this.moveRequest + this.moved = this.moveRequest - // Remove all moveRequests to the position + // Remove all moveRequests to the position - delete room.moveRequests[this.moveRequest] - delete this.moveRequest + delete room.moveRequests[this.moveRequest] + delete this.moveRequest - // Remove record of the creep being on its current position + // Remove record of the creep being on its current position - /* room.creepPositions[packAsNum(this.pos)] = undefined */ + /* room.creepPositions[packAsNum(this.pos)] = undefined */ - // Record the creep at its new position + // Record the creep at its new position - /* room.creepPositions[this.moveRequest] = this.name */ + /* room.creepPositions[this.moveRequest] = this.name */ - return true + return true } PowerCreep.prototype.recurseMoveRequest = Creep.prototype.recurseMoveRequest = function ( - queue = [], + queue = [], ) { - const { room } = this + const { room } = this - if (this.spawning) return - if (!this.moveRequest) return - if (!room.moveRequests[this.moveRequest]) { - this.moved = MovedTypes.moved - return - } + if (this.spawning) return + if (!this.moveRequest) return + if (!room.moveRequests[this.moveRequest]) { + this.moved = MovedTypes.moved + return + } - this.room.roomManager.recurseMoveRequestOrder += 1 + this.room.roomManager.recurseMoveRequestOrder += 1 - queue.push(this.name) + queue.push(this.name) - // Try to find the name of the creep at pos + // Try to find the name of the creep at pos - const creepNameAtPos = - room.creepPositions[this.moveRequest] || room.powerCreepPositions[this.moveRequest] + const creepNameAtPos = + room.creepPositions[this.moveRequest] || room.powerCreepPositions[this.moveRequest] - // If there is no creep at the pos + // If there is no creep at the pos - if (!creepNameAtPos) { - /* if (this.spawning) { + if (!creepNameAtPos) { + /* if (this.spawning) { this.moved = this.moveRequest delete room.moveRequests[this.moveRequest] @@ -400,49 +396,49 @@ PowerCreep.prototype.recurseMoveRequest = Creep.prototype.recurseMoveRequest = f return } */ - // loop through each index of the queue, drawing visuals + // loop through each index of the queue, drawing visuals - if (Game.flags[FlagNames.roomVisuals]) { - const moveRequestPos = unpackCoordAsPos(this.moveRequest, room.name) + if (Game.flags[FlagNames.roomVisuals]) { + const moveRequestPos = unpackCoordAsPos(this.moveRequest, room.name) - room.visual.rect(moveRequestPos.x - 0.5, moveRequestPos.y - 0.5, 1, 1, { - fill: customColors.green, - opacity: 0.2, - }) + room.visual.rect(moveRequestPos.x - 0.5, moveRequestPos.y - 0.5, 1, 1, { + fill: customColors.green, + opacity: 0.2, + }) - for (let index = queue.length - 1; index >= 0; index--) { - const creep = Game.creeps[queue[index]] || Game.powerCreeps[queue[index]] + for (let index = queue.length - 1; index >= 0; index--) { + const creep = Game.creeps[queue[index]] || Game.powerCreeps[queue[index]] - room.visual.rect(creep.pos.x - 0.5, creep.pos.y - 0.5, 1, 1, { - fill: customColors.yellow, - opacity: 0.2, - }) - } + room.visual.rect(creep.pos.x - 0.5, creep.pos.y - 0.5, 1, 1, { + fill: customColors.yellow, + opacity: 0.2, + }) } + } - // Have each member of the queue run its moveRequest + // Have each member of the queue run its moveRequest - for (let index = queue.length - 1; index >= 0; index--) { - ;(Game.creeps[queue[index]] || Game.powerCreeps[queue[index]]).runMoveRequest() - } - - return + for (let index = queue.length - 1; index >= 0; index--) { + ;(Game.creeps[queue[index]] || Game.powerCreeps[queue[index]]).runMoveRequest() } - const packedCoord = packCoord(this.pos) - // Get the creepAtPos with the name - const creepAtPos = Game.creeps[creepNameAtPos] || Game.powerCreeps[creepNameAtPos] + return + } - // if creepAtPos is fatigued it is useless to us + const packedCoord = packCoord(this.pos) + // Get the creepAtPos with the name + const creepAtPos = Game.creeps[creepNameAtPos] || Game.powerCreeps[creepNameAtPos] - if ((creepAtPos as Creep).fatigue > 0) { - this.moved = MovedTypes.wait + // if creepAtPos is fatigued it is useless to us - /* delete room.moveRequests[this.moved] */ - delete this.moveRequest - return - } - /* + if ((creepAtPos as Creep).fatigue > 0) { + this.moved = MovedTypes.wait + + /* delete room.moveRequests[this.moved] */ + delete this.moveRequest + return + } + /* // We're spawning, just get us space to move into if (this.spawning) { @@ -466,59 +462,59 @@ PowerCreep.prototype.recurseMoveRequest = Creep.prototype.recurseMoveRequest = f return } */ - if (creepAtPos.moved) { - // might not be what we want. uncomment if (more) stuck bugs appear - /* if (creepAtPos.moved === 'moved') { + if (creepAtPos.moved) { + // might not be what we want. uncomment if (more) stuck bugs appear + /* if (creepAtPos.moved === 'moved') { delete this.moveRequest this.moved = 'moved' return } */ - if (creepAtPos.moved === MovedTypes.moved) { - this.runMoveRequest() + if (creepAtPos.moved === MovedTypes.moved) { + this.runMoveRequest() + return + } + + if (creepAtPos.moved === MovedTypes.wait) { + if (creepAtPos instanceof PowerCreep) { + delete this.moveRequest + this.moved = MovedTypes.wait return } - if (creepAtPos.moved === MovedTypes.wait) { - if (creepAtPos instanceof PowerCreep) { - delete this.moveRequest - this.moved = MovedTypes.wait - return - } - - // Don't allow swapping in the queue if we might move a creep out of the commune - // Will trade if: - // remotes are different - // sourceIndexes are different - // Traffic priorities are by default different - // One is around empty while the other is around full - - if ( - (!this.isOnExit || !communeCreepRoles.has(creepAtPos.role)) && - (this.memory[CreepMemoryKeys.remote] !== creepAtPos.memory[CreepMemoryKeys.remote] || - this.memory[CreepMemoryKeys.sourceIndex] !== - creepAtPos.memory[CreepMemoryKeys.sourceIndex] || - TrafficPriorities[this.role] + (this.needsResources() ? 0.1 : 0) > - TrafficPriorities[creepAtPos.role] + (this.needsResources() ? 0.1 : 0)) - ) { - // Have the creep move to its moveRequest + // Don't allow swapping in the queue if we might move a creep out of the commune + // Will trade if: + // remotes are different + // sourceIndexes are different + // Traffic priorities are by default different + // One is around empty while the other is around full + + if ( + (!this.isOnExit || !communeCreepRoles.has(creepAtPos.role)) && + (this.memory[CreepMemoryKeys.remote] !== creepAtPos.memory[CreepMemoryKeys.remote] || + this.memory[CreepMemoryKeys.sourceIndex] !== + creepAtPos.memory[CreepMemoryKeys.sourceIndex] || + TrafficPriorities[this.role] + (this.needsResources() ? 0.1 : 0) > + TrafficPriorities[creepAtPos.role] + (this.needsResources() ? 0.1 : 0)) + ) { + // Have the creep move to its moveRequest - this.runMoveRequest() + this.runMoveRequest() - // Have the creepAtPos move to the creep and inform true + // Have the creepAtPos move to the creep and inform true - creepAtPos.moveRequest = packedCoord - room.moveRequests[packedCoord] = [creepAtPos.name] - creepAtPos.runMoveRequest() - return - } - - delete this.moveRequest - this.moved = MovedTypes.wait + creepAtPos.moveRequest = packedCoord + room.moveRequests[packedCoord] = [creepAtPos.name] + creepAtPos.runMoveRequest() return } - // If the creep is where the creepAtPos is trying to move to - /* + delete this.moveRequest + this.moved = MovedTypes.wait + return + } + + // If the creep is where the creepAtPos is trying to move to + /* if (packedCoord === creepAtPos.moved) { if (Game.flags[FlagNames.roomVisuals]) room.visual.rect(creepAtPos.pos.x - 0.5, creepAtPos.pos.y - 0.5, 1, 1, { @@ -530,38 +526,38 @@ PowerCreep.prototype.recurseMoveRequest = Creep.prototype.recurseMoveRequest = f return } */ - if (Game.flags[FlagNames.roomVisuals]) - room.visual.rect(creepAtPos.pos.x - 0.5, creepAtPos.pos.y - 0.5, 1, 1, { - fill: customColors.white, - opacity: 0.2, - }) + if (Game.flags[FlagNames.roomVisuals]) + room.visual.rect(creepAtPos.pos.x - 0.5, creepAtPos.pos.y - 0.5, 1, 1, { + fill: customColors.white, + opacity: 0.2, + }) - // Otherwise, loop through each index of the queue + // Otherwise, loop through each index of the queue - for (let index = queue.length - 1; index >= 0; index--) { - // Have the creep run its moveRequest + for (let index = queue.length - 1; index >= 0; index--) { + // Have the creep run its moveRequest - ;(Game.creeps[queue[index]] || Game.powerCreeps[queue[index]]).runMoveRequest() - } + ;(Game.creeps[queue[index]] || Game.powerCreeps[queue[index]]).runMoveRequest() + } - // loop through each index of the queue, drawing visuals + // loop through each index of the queue, drawing visuals - if (Game.flags[FlagNames.roomVisuals]) - for (let index = queue.length - 1; index >= 0; index--) - room.visual.rect(creepAtPos.pos.x - 0.5, creepAtPos.pos.y - 0.5, 1, 1, { - fill: customColors.yellow, - opacity: 0.2, - }) - return - } + if (Game.flags[FlagNames.roomVisuals]) + for (let index = queue.length - 1; index >= 0; index--) + room.visual.rect(creepAtPos.pos.x - 0.5, creepAtPos.pos.y - 0.5, 1, 1, { + fill: customColors.yellow, + opacity: 0.2, + }) + return + } - // If the creepAtPos has a moveRequest + // If the creepAtPos has a moveRequest - if (creepAtPos.moveRequest) { - // If it's not valid + if (creepAtPos.moveRequest) { + // If it's valid - if (!room.moveRequests[creepAtPos.moveRequest]) { - /* + if (room.moveRequests[creepAtPos.moveRequest]) { + /* if (Game.flags[FlagNames.roomVisuals]) room.visual.rect(creepAtPos.pos.x - 0.5, creepAtPos.pos.y - 0.5, 1, 1, { fill: customColors.teal, @@ -578,8 +574,6 @@ PowerCreep.prototype.recurseMoveRequest = Creep.prototype.recurseMoveRequest = f room.moveRequests.set(packedCoord, [creepAtPos.name]) creepAtPos.runMoveRequest() */ - return - } // If the creepAtPos wants to move to creep @@ -706,40 +700,48 @@ PowerCreep.prototype.recurseMoveRequest = Creep.prototype.recurseMoveRequest = f creepAtPos.recurseMoveRequest(queue) return - } + } else { + // the moveRequest isn't valid - // Otherwise the creepAtPos has no moveRequest, try to shove - if (creepAtPos.shove(new Set([packedCoord]))) { - this.room.visual.text('S', creepAtPos.pos) - this.runMoveRequest() - return + delete creepAtPos.moveRequest } + } - if (this.isOnExit) return + // Otherwise the creepAtPos has no moveRequest. Try to shove - if (Game.flags[FlagNames.roomVisuals]) - room.visual.rect(creepAtPos.pos.x - 0.5, creepAtPos.pos.y - 0.5, 1, 1, { - fill: customColors.teal, - opacity: 0.2, - }) + if (creepAtPos.shove(new Set([packedCoord]))) { + this.room.visual.text('S', creepAtPos.pos) + this.runMoveRequest() + return + } - // Run creep's moveRequest, trading places with creepAtPos + // Otherwise see if we can swap places, doing so if we can - this.runMoveRequest() + if (this.isOnExit) return - creepAtPos.moveRequest = packedCoord - room.moveRequests[packedCoord] = [creepAtPos.name] - creepAtPos.runMoveRequest() + if (Game.flags[FlagNames.roomVisuals]) + room.visual.rect(creepAtPos.pos.x - 0.5, creepAtPos.pos.y - 0.5, 1, 1, { + fill: customColors.teal, + opacity: 0.2, + }) + + // Run creep's moveRequest, trading places with creepAtPos + + this.runMoveRequest() + + creepAtPos.moveRequest = packedCoord + room.moveRequests[packedCoord] = [creepAtPos.name] + creepAtPos.runMoveRequest() } PowerCreep.prototype.avoidEnemyThreatCoords = Creep.prototype.avoidEnemyThreatCoords = function () { - if (!this.room.roomManager.enemyThreatCoords.has(packCoord(this.pos))) return false + if (!this.room.roomManager.enemyThreatCoords.has(packCoord(this.pos))) return false - this.createMoveRequest({ - origin: this.pos, - goals: this.room.roomManager.enemyThreatGoals, - flee: true, - }) + this.createMoveRequest({ + origin: this.pos, + goals: this.room.roomManager.enemyThreatGoals, + flee: true, + }) - return true + return true } diff --git a/src/room/roomObjectUtils.ts b/src/room/roomObjectUtils.ts index b00f877a1..1a83404e3 100644 --- a/src/room/roomObjectUtils.ts +++ b/src/room/roomObjectUtils.ts @@ -1,4 +1,4 @@ -import { separateStoreStructureTypes } from 'constants/general' +import { separateStoreStructureTypes } from "constants/structures" export class RoomObjectUtils { static freeNextStoreOf( From f83a85bad01abcb0825172af88f0d928a8f18f08 Mon Sep 17 00:00:00 2001 From: CarsonBurke Date: Fri, 2 Feb 2024 19:18:58 -0800 Subject: [PATCH 140/190] remove roomObjectAdditions import --- src/main.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main.ts b/src/main.ts index 269962c15..622c00f30 100644 --- a/src/main.ts +++ b/src/main.ts @@ -5,7 +5,6 @@ import './debug/debugUtils' import { CollectiveManager } from './international/collective' import { RoomServices } from 'room/roomServices' import './room/resourceAdditions' -import './room/roomObjectFunctions' import './room/roomObjectAdditions' import './room/creeps/creepAdditions' import './other/profilerRegister' From 1d7bc445b44041d4b1725746f85b545499da8c6f Mon Sep 17 00:00:00 2001 From: Carson Date: Sat, 3 Feb 2024 12:52:47 -0800 Subject: [PATCH 141/190] fix constant replanning --- src/room/commune/communeOps.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/room/commune/communeOps.ts b/src/room/commune/communeOps.ts index 88b671d3b..6bffc8e75 100644 --- a/src/room/commune/communeOps.ts +++ b/src/room/commune/communeOps.ts @@ -57,6 +57,8 @@ export class CommuneOps { const roomMemory = Memory.rooms[room.name] + roomMemory[RoomMemoryKeys.lastScout] = Game.time + // If we should abandon the room if (roomMemory[RoomMemoryKeys.abandonCommune] === true) { From 0e4714b1adbb4d21e3f1dbcf917a49c0dd2b0b0f Mon Sep 17 00:00:00 2001 From: Carson Date: Sat, 3 Feb 2024 13:00:01 -0800 Subject: [PATCH 142/190] correct references to DebugUtils --- src/other/profilerRegister.ts | 2 +- src/room/commune/spawning/spawningStructureProcs.ts | 3 ++- src/utils/logging.ts | 3 ++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index c99cb6cb6..8cc09ad39 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -222,7 +222,7 @@ export function profilerRegister() { // Objects - profiler.registerObject(global.DebugUtils, 'DebugUtils') + profiler.registerObject(DebugUtils, 'DebugUtils') // Room objects diff --git a/src/room/commune/spawning/spawningStructureProcs.ts b/src/room/commune/spawning/spawningStructureProcs.ts index b9e6638a1..982244b31 100644 --- a/src/room/commune/spawning/spawningStructureProcs.ts +++ b/src/room/commune/spawning/spawningStructureProcs.ts @@ -21,6 +21,7 @@ import { customLog, LogTypes } from 'utils/logging' import { getRange, findAdjacentCoordsToCoord, Utils } from 'utils/utils' import { SpawnRequestConstructor, SpawnRequestConstructors } from './spawnRequestConstructors' import { CommuneUtils } from '../communeUtils' +import { DebugUtils } from 'debug/debugUtils' export class SpawningStructureProcs { public static tryRunSpawning(room: Room) { @@ -156,7 +157,7 @@ export class SpawningStructureProcs { if (result !== OK) { customLog( 'Failed to spawn: spawning failed', - `error: ${result}, request: ${global.DebugUtils.stringify(request)}`, + `error: ${result}, request: ${DebugUtils.stringify(request)}`, { type: LogTypes.error, position: 3, diff --git a/src/utils/logging.ts b/src/utils/logging.ts index 848879323..8616401cf 100644 --- a/src/utils/logging.ts +++ b/src/utils/logging.ts @@ -1,3 +1,4 @@ +import { DebugUtils } from 'debug/debugUtils' import { CollectiveManager } from 'international/collective' const customColors = { white: '#ffffff', @@ -82,5 +83,5 @@ export function customLog(title: any, message?: any, opts?: LogOpts) { } export function stringifyLog(title: any, message: any, opts?: LogOpts) { - return customLog(title, global.DebugUtils.stringify(message), opts) + return customLog(title, DebugUtils.stringify(message), opts) } From 61b9351c07049efb8013997a071704a2cd5e67d1 Mon Sep 17 00:00:00 2001 From: Carson Date: Sat, 3 Feb 2024 14:26:02 -0800 Subject: [PATCH 143/190] organize and potentially fix scouting --- src/international/init.ts | 10 +- src/international/migration.ts | 4 +- src/other/profilerRegister.ts | 4 +- src/room/commune/communeOps.ts | 7 +- src/room/commune/haulerNeedOps.ts | 28 +++-- .../roleManagers/international/scout.ts | 11 +- src/room/roomFunctions.ts | 118 +----------------- src/room/roomNameOps.ts | 83 ++++++++++++ src/room/roomNameProcs.ts | 40 ------ src/room/roomNameUtils.ts | 44 +------ src/room/roomOps.ts | 80 +++++++++++- src/types.d.ts | 8 -- 12 files changed, 201 insertions(+), 236 deletions(-) create mode 100644 src/room/roomNameOps.ts delete mode 100644 src/room/roomNameProcs.ts diff --git a/src/international/init.ts b/src/international/init.ts index 5d93b7909..e6674e5f0 100644 --- a/src/international/init.ts +++ b/src/international/init.ts @@ -22,7 +22,6 @@ export class InitManager { this.initSegments() - Memory.breakingVersion = global.settings.breakingVersion Memory.me = getMe() /* (Object.values(Game.structures)[0] as OwnedStructure)?.owner?.username || Object.values(Game.creeps)[0]?.owner?.username || @@ -42,6 +41,8 @@ export class InitManager { Memory.haulRequests = {} Memory.nukeRequests = {} StatsManager.internationalConfig() + + Memory.breakingVersion = global.settings.breakingVersion } /** @@ -50,14 +51,9 @@ export class InitManager { private static initGlobal() { if (global.constructed) return - global.constructed = true - this.initPlayers() - for (const roomName in Memory.rooms) { - - RoomNameUtils.basicScout(roomName) - } + global.constructed = true } private static initPlayers() { diff --git a/src/international/migration.ts b/src/international/migration.ts index 477f76151..01ec54b09 100644 --- a/src/international/migration.ts +++ b/src/international/migration.ts @@ -1,6 +1,6 @@ import { RoomNameUtils } from 'room/roomNameUtils' import { RoomMemoryKeys, RoomTypes, SegmentIDs, majorVersion } from '../constants/general' -import { RoomNameProcs } from 'room/roomNameProcs' +import { RoomNameOps } from 'room/roomNameOps' /** * Migrate version by performing actions, if required @@ -76,7 +76,7 @@ export class MigrationManager { } if (Memory.breakingVersion === 126) { for (const roomName in Memory.rooms) { - RoomNameProcs.findAndRecordStatus(roomName) + RoomNameOps.findAndRecordStatus(roomName) } Memory.breakingVersion += 1 } diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index 8cc09ad39..a7ce09293 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -102,7 +102,7 @@ import { NukerProcs } from 'room/commune/nukerProcs' import { ObserverProcs } from 'room/commune/observerProcs' import { PowerSpawnProcs } from 'room/commune/powerSpawnProcs' import { RoomOps } from 'room/roomOps' -import { RoomNameProcs } from 'room/roomNameProcs' +import { RoomNameOps } from 'room/roomNameOps' import { SegmentsManager } from 'international/segments' import { wasm } from './wasmInit' import { initSync } from '../wasm/pkg/commiebot_wasm.js' @@ -173,7 +173,7 @@ export function profilerRegister() { profiler.registerClass(RoomVisualsManager, 'RoomVisualsManager') profiler.registerClass(Operator, 'Operator') profiler.registerClass(RoomNameUtils, 'RoomNameUtils') - profiler.registerClass(RoomNameProcs, 'RoomNameProcs') + profiler.registerClass(RoomNameOps, 'RoomNameOps') profiler.registerClass(RoomUtils, 'RoomUtils') profiler.registerClass(RoomOps, 'RoomProcs') profiler.registerClass(CommuneUtils, 'CommuneUtils') diff --git a/src/room/commune/communeOps.ts b/src/room/commune/communeOps.ts index 6bffc8e75..35fa3a247 100644 --- a/src/room/commune/communeOps.ts +++ b/src/room/commune/communeOps.ts @@ -23,6 +23,7 @@ import { SpawningStructureProcs } from './spawning/spawningStructureProcs' import { TowerProcs } from './towerProcs' import { HaulerNeedOps } from './haulerNeedOps' import { CommuneManager } from './commune' +import { RoomOps } from 'room/roomOps' /** * Minor processes for communes @@ -57,7 +58,9 @@ export class CommuneOps { const roomMemory = Memory.rooms[room.name] - roomMemory[RoomMemoryKeys.lastScout] = Game.time + if (roomMemory[RoomMemoryKeys.lastScout] === undefined) { + RoomOps.advancedScout(room, room) + } // If we should abandon the room @@ -319,4 +322,6 @@ export class CommuneOps { remoteMemory[RoomMemoryKeys.type] = RoomTypes.neutral RoomNameUtils.cleanMemory(remoteName) } + + } diff --git a/src/room/commune/haulerNeedOps.ts b/src/room/commune/haulerNeedOps.ts index 18a7c4652..2d50faff8 100644 --- a/src/room/commune/haulerNeedOps.ts +++ b/src/room/commune/haulerNeedOps.ts @@ -12,25 +12,17 @@ export class HaulerNeedOps { room.memory[RoomMemoryKeys.mineralPath].length / packedPosLength + 3, (room.communeManager.mineralHarvestStrength / EXTRACTOR_COOLDOWN) * 1.1, ) - room.communeManager.communeHaulerNeed += room.roomManager.structures.lab.length + const structures = room.roomManager.structures + room.communeManager.communeHaulerNeed += structures.lab.length - const extensions = - room.roomManager.structures.extension.length - stamps.fastFiller.structures.extension.length + const extensions = structures.extension.length - stamps.fastFiller.structures.extension.length if (extensions > 0) { - room.roomManager.structures.extension.length / (room.towerInferiority ? 1.5 : 4) + structures.extension.length / (room.towerInferiority ? 1.5 : 4) } /* haulerNeed += room.roomManager.structures.extension.length / 10 */ - if ( - (room.controller.level >= 4 && room.storage) || - (room.terminal && room.controller.level >= 6) - ) { - room.communeManager.communeHaulerNeed += - Memory.stats.rooms[room.name][RoomStatsKeys.EnergyOutputSpawn] / 10 - room.communeManager.communeHaulerNeed += - Memory.stats.rooms[room.name][RoomStatsKeys.SpawnUsagePercentage] * 8 - } + this.storingStructureNeed(room) room.communeManager.communeHaulerNeed = Math.round(room.communeManager.communeHaulerNeed) } @@ -98,4 +90,14 @@ export class HaulerNeedOps { ) return } + + private static storingStructureNeed(room: Room) { + const storingStructures = CommuneUtils.storingStructures(room) + if (!storingStructures.length) return + + room.communeManager.communeHaulerNeed += + Memory.stats.rooms[room.name][RoomStatsKeys.EnergyOutputSpawn] / 10 + room.communeManager.communeHaulerNeed += + Memory.stats.rooms[room.name][RoomStatsKeys.SpawnUsagePercentage] * 8 + } } diff --git a/src/room/creeps/roleManagers/international/scout.ts b/src/room/creeps/roleManagers/international/scout.ts index 5a4cb86c7..047a05f24 100644 --- a/src/room/creeps/roleManagers/international/scout.ts +++ b/src/room/creeps/roleManagers/international/scout.ts @@ -9,6 +9,8 @@ import { import { getRangeXY, getRange, randomOf } from 'utils/utils' import { partial } from 'lodash' import { RoomNameUtils } from 'room/roomNameUtils' +import { RoomNameOps } from 'room/roomNameOps' +import { RoomOps } from 'room/roomOps' export class Scout extends Creep { scoutedRooms?: string[] @@ -235,16 +237,9 @@ export class Scout extends Creep { if (creepMemory[CreepMemoryKeys.scoutTarget] === room.name) { creep.message = '👁️' - // Get information about the room - - room.advancedScout(creep.commune) - - // Clean the room's memory - + RoomOps.advancedScout(room, creep.commune) RoomNameUtils.cleanMemory(room.name) - // And delete the creep's scoutTarget - delete creepMemory[CreepMemoryKeys.scoutTarget] } diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index dec970975..e6f38a8d3 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -35,7 +35,7 @@ import { PlayerManager } from 'international/players' import { RoomNameUtils } from './roomNameUtils' import { customLog } from 'utils/logging' import { RoomObjectUtils } from './roomObjectUtils' -import { RoomNameProcs } from './roomNameProcs' +import { RoomNameOps } from './roomNameOps' import { RoomOps } from './roomOps' /** @@ -68,7 +68,11 @@ Room.prototype.actionVisual = function (pos1, pos2, type?) { room.visual.line(pos1, pos2, { color }) } -Room.prototype.targetVisual = function (coord1, coord2, visualize = !!Game.flags[FlagNames.roomVisuals]) { +Room.prototype.targetVisual = function ( + coord1, + coord2, + visualize = !!Game.flags[FlagNames.roomVisuals], +) { if (!visualize) return this.visual.line(coord1.x, coord1.y, coord2.x, coord2.y, { @@ -619,116 +623,6 @@ Room.prototype.scoutEnemyRoom = function () { return roomMemory[RoomMemoryKeys.type] } -Room.prototype.basicScout = function () { - const { controller } = this - const roomMemory = Memory.rooms[this.name] - - if (roomMemory[RoomMemoryKeys.lastScout] === undefined) { - RoomNameProcs.findAndRecordStatus(this.name, roomMemory) - } - - // Record that the room was scouted this tick - roomMemory[RoomMemoryKeys.lastScout] = Game.time - - if (!controller) return roomMemory[RoomMemoryKeys.type] - - // If the contoller is owned - if (controller.owner) { - // Stop if the controller is owned by me - - if (controller.my) return roomMemory[RoomMemoryKeys.type] - - const owner = controller.owner.username - roomMemory[RoomMemoryKeys.owner] = owner - - // If the controller is owned by an ally - - if (global.settings.allies.includes(owner)) - return (roomMemory[RoomMemoryKeys.type] = RoomTypes.ally) - - return this.scoutEnemyRoom() - } - - this.createWorkRequest() - - // There is no controller owner - - if (this.scoutRemote()) return roomMemory[RoomMemoryKeys.type] - - return (roomMemory[RoomMemoryKeys.type] = RoomTypes.neutral) -} - -Room.prototype.advancedScout = function (scoutingRoom: Room) { - const roomMemory = Memory.rooms[this.name] - - if (roomMemory[RoomMemoryKeys.lastScout] === undefined) { - RoomNameProcs.findAndRecordStatus(this.name, roomMemory) - } - - // Record that the room was scouted this tick - roomMemory[RoomMemoryKeys.lastScout] = Game.time - - // If the room already has a type and its type is constant, no need to go further - if (constantRoomTypes.has(roomMemory[RoomMemoryKeys.type])) { - return roomMemory[RoomMemoryKeys.type] - } - - const { controller } = this - if (controller) { - roomMemory[RoomMemoryKeys.controllerCoord] = packCoord(controller.pos) - } - - const sources = this.find(FIND_SOURCES) - if (sources.length) { - const packedSourceCoords = packCoordList(sources.map(source => source.pos)) - roomMemory[RoomMemoryKeys.sourceCoords] = packedSourceCoords - } - - const roomNameScoutType = RoomNameProcs.findAndRecordConstantType(this.name) - if (roomNameScoutType !== Result.fail) { - if (roomNameScoutType === RoomTypes.sourceKeeper) { - // Record the positions of keeper lairs - - const lairCoords = this.roomManager.structures.keeperLair.map(lair => lair.pos) - roomMemory[RoomMemoryKeys.keeperLairCoords] = packCoordList(lairCoords) - } - - return roomMemory[RoomMemoryKeys.type] - } - - // If there is a controller - if (controller) { - // If the contoller is owned - - if (controller.owner) { - // Stop if the controller is owned by me - - if (controller.my) return roomMemory[RoomMemoryKeys.type] - - const owner = controller.owner.username - - roomMemory[RoomMemoryKeys.owner] = owner - - // If the controller is owned by an ally - - if (global.settings.allies.includes(owner)) - return (roomMemory[RoomMemoryKeys.type] = RoomTypes.ally) - - return this.scoutEnemyRoom() - } - - this.createWorkRequest() - - // No controlller owner - - if (this.scoutRemote(scoutingRoom)) return roomMemory[RoomMemoryKeys.type] - - return (roomMemory[RoomMemoryKeys.type] = RoomTypes.neutral) - } - - return roomMemory[RoomMemoryKeys.type] -} - Room.prototype.createAttackCombatRequest = function (opts) { if (!global.settings.autoAttack) return if (this.controller && this.controller.safeMode) return diff --git a/src/room/roomNameOps.ts b/src/room/roomNameOps.ts new file mode 100644 index 000000000..4d5d1e4a2 --- /dev/null +++ b/src/room/roomNameOps.ts @@ -0,0 +1,83 @@ +import { packCoord, packCoordList } from 'other/codec' +import { Result, RoomMemoryKeys, RoomStatusKeys, RoomTypes, constantRoomTypes } from '../constants/general' +import { isAlly } from 'utils/utils' + +export class RoomNameOps { + static findAndRecordStatus(roomName: string, roomMemory = Memory.rooms[roomName]) { + const status = Game.map.getRoomStatus(roomName).status + roomMemory[RoomMemoryKeys.status] = RoomStatusKeys[status] + + return status + } + + static findAndRecordConstantType(roomName: string) { + // Find the numbers in the room's name + const [EWstring, NSstring] = roomName.match(/\d+/g) + + // Convert he numbers from strings into actual numbers + + const EW = parseInt(EWstring) + const NS = parseInt(NSstring) + + const roomMemory = Memory.rooms[roomName] + + // Use the numbers to deduce some room types - cheaply! + + if (EW % 10 === 0 && NS % 10 === 0) { + return (roomMemory[RoomMemoryKeys.type] = RoomTypes.intersection) + } + + if (EW % 10 === 0 || NS % 10 === 0) { + return (roomMemory[RoomMemoryKeys.type] = RoomTypes.highway) + } + if (EW % 5 === 0 && NS % 5 === 0) { + return (roomMemory[RoomMemoryKeys.type] = RoomTypes.center) + } + if (Math.abs(5 - (EW % 10)) <= 1 && Math.abs(5 - (NS % 10)) <= 1) { + return (roomMemory[RoomMemoryKeys.type] = RoomTypes.sourceKeeper) + } + + return Result.fail + } + + static basicScout(roomName: string) { + const roomMemory = Memory.rooms[roomName] + + if (roomMemory[RoomMemoryKeys.status] === undefined) { + RoomNameOps.findAndRecordStatus(roomName, roomMemory) + } + + // Record that the room was scouted this tick + roomMemory[RoomMemoryKeys.lastScout] = Game.time + + const room = Game.rooms[roomName] + if (!room) return roomMemory[RoomMemoryKeys.type] + if (!room.controller) return roomMemory[RoomMemoryKeys.type] + + // If the contoller is owned + if (room.controller.owner) { + // Stop if the controller is owned by me + + if (room.controller.my) return roomMemory[RoomMemoryKeys.type] + + const owner = room.controller.owner.username + roomMemory[RoomMemoryKeys.owner] = owner + + // If the controller is owned by an ally + + if (isAlly(owner)) { + roomMemory[RoomMemoryKeys.type] = RoomTypes.ally + } + + return room.scoutEnemyRoom() + } + + room.createWorkRequest() + + // There is no controller owner + + if (room.scoutRemote()) return roomMemory[RoomMemoryKeys.type] + + return (roomMemory[RoomMemoryKeys.type] = RoomTypes.neutral) + } +} diff --git a/src/room/roomNameProcs.ts b/src/room/roomNameProcs.ts deleted file mode 100644 index 9ced9be84..000000000 --- a/src/room/roomNameProcs.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Result, RoomMemoryKeys, RoomStatusKeys, RoomTypes } from '../constants/general' - -export class RoomNameProcs { - static findAndRecordStatus(roomName: string, roomMemory = Memory.rooms[roomName]) { - const status = Game.map.getRoomStatus(roomName).status - roomMemory[RoomMemoryKeys.status] = RoomStatusKeys[status] - - return status - } - - static findAndRecordConstantType(roomName: string) { - // Find the numbers in the room's name - const [EWstring, NSstring] = roomName.match(/\d+/g) - - // Convert he numbers from strings into actual numbers - - const EW = parseInt(EWstring) - const NS = parseInt(NSstring) - - const roomMemory = Memory.rooms[roomName] - - // Use the numbers to deduce some room types - cheaply! - - if (EW % 10 === 0 && NS % 10 === 0) { - return (roomMemory[RoomMemoryKeys.type] = RoomTypes.intersection) - } - - if (EW % 10 === 0 || NS % 10 === 0) { - return (roomMemory[RoomMemoryKeys.type] = RoomTypes.highway) - } - if (EW % 5 === 0 && NS % 5 === 0) { - return (roomMemory[RoomMemoryKeys.type] = RoomTypes.center) - } - if (Math.abs(5 - (EW % 10)) <= 1 && Math.abs(5 - (NS % 10)) <= 1) { - return (roomMemory[RoomMemoryKeys.type] = RoomTypes.sourceKeeper) - } - - return Result.fail - } -} diff --git a/src/room/roomNameUtils.ts b/src/room/roomNameUtils.ts index cc0df8798..49b27ec89 100644 --- a/src/room/roomNameUtils.ts +++ b/src/room/roomNameUtils.ts @@ -18,6 +18,7 @@ import { forAdjacentCoords, forRoomNamesAroundRangeXY, getRange, + isAlly, packAsNum, packXYAsNum, roundTo, @@ -26,7 +27,7 @@ import { unpackPosAt } from 'other/codec' import { CommuneManager } from './commune/commune' import { customLog } from 'utils/logging' import { RoomOps } from './roomOps' -import { RoomNameProcs } from './roomNameProcs' +import { RoomNameOps } from './roomNameOps' import { RoomUtils } from './roomUtils' /** @@ -342,7 +343,7 @@ export class RoomNameUtils { const roomMemory = Memory.rooms[roomName] if (roomMemory === undefined) { const roomMemory = (Memory.rooms[roomName] = {} as RoomMemory) - RoomNameUtils.basicScout(roomName) + RoomNameOps.basicScout(roomName) return roomMemory[RoomMemoryKeys.status] } @@ -351,43 +352,4 @@ export class RoomNameUtils { return roomMemory[RoomMemoryKeys.status] } - - static basicScout(roomName: string, room = Game.rooms[roomName]) { - const roomMemory = Memory.rooms[roomName] - - if (roomMemory[RoomMemoryKeys.lastScout] === undefined) { - RoomNameProcs.findAndRecordStatus(roomName, roomMemory) - } - - // Record that the room was scouted this tick - roomMemory[RoomMemoryKeys.lastScout] = Game.time - - if (!room) return roomMemory[RoomMemoryKeys.type] - if (!room.controller) return roomMemory[RoomMemoryKeys.type] - - // If the contoller is owned - if (room.controller.owner) { - // Stop if the controller is owned by me - - if (room.controller.my) return roomMemory[RoomMemoryKeys.type] - - const owner = room.controller.owner.username - roomMemory[RoomMemoryKeys.owner] = owner - - // If the controller is owned by an ally - - if (global.settings.allies.includes(owner)) - return (roomMemory[RoomMemoryKeys.type] = RoomTypes.ally) - - return room.scoutEnemyRoom() - } - - room.createWorkRequest() - - // There is no controller owner - - if (room.scoutRemote()) return roomMemory[RoomMemoryKeys.type] - - return (roomMemory[RoomMemoryKeys.type] = RoomTypes.neutral) - } } diff --git a/src/room/roomOps.ts b/src/room/roomOps.ts index e6ef8d406..991d019c8 100644 --- a/src/room/roomOps.ts +++ b/src/room/roomOps.ts @@ -7,6 +7,8 @@ import { RoomTypes, roomDimensions, allStructureTypes, + Result, + constantRoomTypes, } from '../constants/general' import { StatsManager } from 'international/stats' import { Dashboard, Rectangle, Table } from 'screeps-viz' @@ -16,11 +18,12 @@ import { CommuneManager } from './commune/commune' import { CommuneOps } from './commune/communeOps' import { LogisticsProcs } from './logisticsProcs' import { customLog } from 'utils/logging' -import { unpackCoord } from 'other/codec' +import { packCoord, packCoordList, unpackCoord } from 'other/codec' import { HaulerServices } from './creeps/roles/haulerServices' import { HaulerOps } from './creeps/roles/haulerOps' import { roomData } from './roomData' import { RoomManager } from './room' +import { RoomNameOps } from './roomNameOps' export class RoomOps { /** @@ -91,7 +94,7 @@ export class RoomOps { // If it hasn't been scouted for 100~ ticks if (Game.time - roomMemory[RoomMemoryKeys.lastScout] > Math.floor(Math.random() * 200)) { - room.basicScout() + RoomNameOps.basicScout(room.name) RoomNameUtils.cleanMemory(room.name) } @@ -294,4 +297,77 @@ export class RoomOps { room.structures = structures return structures } + + static advancedScout(room: Room, scoutingRoom: Room) { + const roomMemory = Memory.rooms[room.name] + + if (roomMemory[RoomMemoryKeys.status] === undefined) { + RoomNameOps.findAndRecordStatus(room.name, roomMemory) + } + + // Record that the room was scouted this tick + roomMemory[RoomMemoryKeys.lastScout] = Game.time + + if (!roomMemory[RoomMemoryKeys.controllerCoord]) { + if (room.controller) { + roomMemory[RoomMemoryKeys.controllerCoord] = packCoord(room.controller.pos) + } + } + + if (!roomMemory[RoomMemoryKeys.sourceCoords]) { + const sources = room.find(FIND_SOURCES) + if (sources.length) { + const packedSourceCoords = packCoordList(sources.map(source => source.pos)) + roomMemory[RoomMemoryKeys.sourceCoords] = packedSourceCoords + } + } + + // If the room already has a type and its type is constant, no need to go further + if (constantRoomTypes.has(roomMemory[RoomMemoryKeys.type])) { + return roomMemory[RoomMemoryKeys.type] + } + + const roomNameScoutType = RoomNameOps.findAndRecordConstantType(room.name) + if (roomNameScoutType !== Result.fail) { + if (roomNameScoutType === RoomTypes.sourceKeeper) { + // Record the positions of keeper lairs + + const lairCoords = room.roomManager.structures.keeperLair.map(lair => lair.pos) + roomMemory[RoomMemoryKeys.keeperLairCoords] = packCoordList(lairCoords) + } + + return roomMemory[RoomMemoryKeys.type] + } + + // If there is a controller + if (room.controller) { + // If the contoller is owned + + if (room.controller.owner) { + // Stop if the controller is owned by me + + if (room.controller.my) return roomMemory[RoomMemoryKeys.type] + + const owner = room.controller.owner.username + roomMemory[RoomMemoryKeys.owner] = owner + + // If the controller is owned by an ally + + if (global.settings.allies.includes(owner)) + return (roomMemory[RoomMemoryKeys.type] = RoomTypes.ally) + + return room.scoutEnemyRoom() + } + + room.createWorkRequest() + + // No controlller owner + + if (room.scoutRemote(scoutingRoom)) return roomMemory[RoomMemoryKeys.type] + + return (roomMemory[RoomMemoryKeys.type] = RoomTypes.neutral) + } + + return roomMemory[RoomMemoryKeys.type] + } } diff --git a/src/types.d.ts b/src/types.d.ts index 6ddc3abf3..2ffe2ecf1 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -551,14 +551,6 @@ declare global { scoutEnemyRoom(): number - basicScout(): number - - /** - * Finds the type of a room and initializes its custom properties - * @param scoutingRoom The room that is performing the scout operation - */ - advancedScout(scoutingRoom: Room): number - makeRemote(scoutingRoom: Room): boolean createAttackCombatRequest(opts?: Partial): void From 6710176bf0f00db6d977c29e7dd7129b09a584ff Mon Sep 17 00:00:00 2001 From: Carson Date: Sat, 3 Feb 2024 20:07:04 -0800 Subject: [PATCH 144/190] general stability fixes --- src/constants/general.ts | 3 ++ src/international/collective.ts | 4 +- src/international/creepOrganizer.ts | 8 ++- src/international/flags/flags.ts | 5 +- src/international/migration.ts | 6 +-- src/international/players.ts | 3 +- src/main.ts | 2 +- src/other/profilerRegister.ts | 6 +-- src/room/commune/communeOps.ts | 51 ++++++++++++++----- src/room/commune/communeUtils.ts | 2 +- src/room/commune/defenceProcs.ts | 5 +- .../spawning/spawnRequestConstructors.ts | 15 +++--- ...uctureProcs.ts => spawningStructureOps.ts} | 13 ++--- .../spawning/spawningStructureUtils.ts | 6 --- src/room/roomUtils.ts | 5 +- src/types.d.ts | 6 ++- 16 files changed, 87 insertions(+), 53 deletions(-) rename src/room/commune/spawning/{spawningStructureProcs.ts => spawningStructureOps.ts} (95%) delete mode 100644 src/room/commune/spawning/spawningStructureUtils.ts diff --git a/src/constants/general.ts b/src/constants/general.ts index 3d1e211d7..78b298ac7 100644 --- a/src/constants/general.ts +++ b/src/constants/general.ts @@ -295,6 +295,9 @@ export enum RoomMemoryKeys { nukeRequest, threatened, lastAttackedBy, + /** + * The ideal cost for haulers, not rounded or bounded by the room's spawn energy capacity + */ minHaulerCost, minHaulerCostUpdate, greatestRCL, diff --git a/src/international/collective.ts b/src/international/collective.ts index 44b7ad0f6..e45888df8 100644 --- a/src/international/collective.ts +++ b/src/international/collective.ts @@ -153,9 +153,9 @@ export class CollectiveManager { if (Game.time - Memory.minHaulerCostUpdate < haulerUpdateDefault) return // cpu limit is potentially variable if GCL changes - const targetCPU = (Game.cpu.limit * 0.9) / Game.cpu.limit + const targetCPUPercent = (Game.cpu.limit * 0.9) / Game.cpu.limit // How far off we are from our ideal cpu usage - Memory.minHaulerCostError = roundTo(targetCPU - Memory.stats.cpu.usage / Game.cpu.limit, 4) + Memory.minHaulerCostError = roundTo(targetCPUPercent - Memory.stats.cpu.usage / Game.cpu.limit, 4) Memory.minHaulerCost -= Math.floor((Memory.minHaulerCost * Memory.minHaulerCostError) / 2) diff --git a/src/international/creepOrganizer.ts b/src/international/creepOrganizer.ts index b34ddb02f..c38de382c 100644 --- a/src/international/creepOrganizer.ts +++ b/src/international/creepOrganizer.ts @@ -39,9 +39,15 @@ export class CreepOrganizer { return } + const creepMemory = Memory.creeps[creepName] + + if (!creepMemory[CreepMemoryKeys.commune]) { + throw Error(`${creepName} has no recorded commune`) + } + // Kill the creep if it has no valid commune (we don't know what to do with it) - const commune = creep.commune + const commune = Game.rooms[creepMemory[CreepMemoryKeys.commune]] if (!commune || !commune.controller.my) { creep.suicide() return diff --git a/src/international/flags/flags.ts b/src/international/flags/flags.ts index a8d8d3096..40771058d 100644 --- a/src/international/flags/flags.ts +++ b/src/international/flags/flags.ts @@ -18,7 +18,7 @@ import { packCoord } from 'other/codec' import { findObjectWithID, isAlly } from 'utils/utils' import { customLog } from 'utils/logging' import { RoomUtils } from 'room/roomUtils' -import { SpawnRequestConstructorsByType } from 'room/commune/spawning/spawningStructureProcs' +import { SpawnRequestConstructorsByType } from 'room/commune/spawning/spawningStructureOps' import { RoomOps } from 'room/roomOps' export class FlagManager { @@ -210,6 +210,9 @@ export class FlagManager { if (!roomMemory) { flag.setColor(COLOR_RED) + flag.remove() + + return } if (roomMemory[RoomMemoryKeys.communePlanned] !== Result.success) { diff --git a/src/international/migration.ts b/src/international/migration.ts index 01ec54b09..f550ab44c 100644 --- a/src/international/migration.ts +++ b/src/international/migration.ts @@ -80,11 +80,7 @@ export class MigrationManager { } Memory.breakingVersion += 1 } - if (Memory.breakingVersion === 127) { - global.killCreeps() - global.killPowerCreeps() - Memory.breakingVersion += 1 - } + } private static hardMigration() { diff --git a/src/international/players.ts b/src/international/players.ts index 6400c87dc..9306b4d75 100644 --- a/src/international/players.ts +++ b/src/international/players.ts @@ -3,6 +3,7 @@ import { PlayerMemoryKeys, defaultDataDecay, playerDecayKeys } from '../constant import { randomTick } from '../utils/utils' import { Sleepable, StaticSleepable } from '../utils/sleepable' import { PlayerRelationships } from '../constants/general' +import { PlayerMemory } from 'types/players' export class PlayerManager extends StaticSleepable { /** @@ -42,7 +43,7 @@ export class PlayerManager extends StaticSleepable { } } - static initPlayer(playerName: string) { + static initPlayer(playerName: string): Partial { return (Memory.players[playerName] = { [PlayerMemoryKeys.offensiveThreat]: 0, diff --git a/src/main.ts b/src/main.ts index 8a1eeb7a6..c7aacba1c 100644 --- a/src/main.ts +++ b/src/main.ts @@ -63,8 +63,8 @@ export function originalLoop() { wasm.collaborator() RoomServices.cleanManagers() - RoomDataOps.initRooms() RoomDataOps.updateRooms() + RoomDataOps.initRooms() RoomServices.updateRun() TransactionsManager.run() RequestsManager.run() diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index a7ce09293..af9fa7474 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -96,8 +96,7 @@ import { TowerUtils } from 'room/commune/towerUtils' import { SourceProcs } from 'room/sourceProcs' import { SourceUtils } from 'room/sourceUtils' import { TerminalProcs } from 'room/commune/terminal/terminalProcs' -import { SpawningStructureProcs } from 'room/commune/spawning/spawningStructureProcs' -import { SpawningStructureUtils } from 'room/commune/spawning/spawningStructureUtils' +import { SpawningStructureOps } from 'room/commune/spawning/spawningStructureOps' import { NukerProcs } from 'room/commune/nukerProcs' import { ObserverProcs } from 'room/commune/observerProcs' import { PowerSpawnProcs } from 'room/commune/powerSpawnProcs' @@ -191,8 +190,7 @@ export function profilerRegister() { profiler.registerClass(SourceProcs, 'SourceProcs') profiler.registerClass(SourceUtils, 'SourceUtils') profiler.registerClass(TerminalProcs, 'TerminalProcs') - profiler.registerClass(SpawningStructureProcs, 'SpawningStructureProcs') - profiler.registerClass(SpawningStructureUtils, 'SpawningStructureUtils') + profiler.registerClass(SpawningStructureOps, 'SpawningStructureOps') profiler.registerClass(NukerProcs, 'NukerProcs') profiler.registerClass(ObserverProcs, 'ObserverProcs') profiler.registerClass(PowerSpawnProcs, 'PowerSpawnProcs') diff --git a/src/room/commune/communeOps.ts b/src/room/commune/communeOps.ts index 35fa3a247..a2abcca64 100644 --- a/src/room/commune/communeOps.ts +++ b/src/room/commune/communeOps.ts @@ -9,7 +9,7 @@ import { creepRoles, haulerUpdateDefault, } from '../../constants/general' -import { Utils, randomIntRange, randomTick } from 'utils/utils' +import { Utils, randomIntRange, randomTick, roundTo } from 'utils/utils' import { CollectiveManager } from 'international/collective' import { RoomNameUtils } from 'room/roomNameUtils' import { customLog, LogTypes } from 'utils/logging' @@ -19,7 +19,7 @@ import { LogisticsProcs } from 'room/logisticsProcs' import { SourceProcs } from 'room/sourceProcs' import { DefenceProcs } from './defenceProcs' import { PowerSpawnProcs } from './powerSpawnProcs' -import { SpawningStructureProcs } from './spawning/spawningStructureProcs' +import { SpawningStructureOps } from './spawning/spawningStructureOps' import { TowerProcs } from './towerProcs' import { HaulerNeedOps } from './haulerNeedOps' import { CommuneManager } from './commune' @@ -192,7 +192,7 @@ export class CommuneOps { communeManager.remotesManager.run() HaulerNeedOps.run(room) - SpawningStructureProcs.createRoomLogisticsRequests(room) + SpawningStructureOps.createRoomLogisticsRequests(room) LogisticsProcs.createCommuneStoringStructureLogisticsRequests(room) communeManager.factoryManager.run() LogisticsProcs.createCommuneContainerLogisticsRequests(room) @@ -202,15 +202,15 @@ export class CommuneOps { communeManager.linkManager.run() communeManager.labManager.run() PowerSpawnProcs.run(room) - SpawningStructureProcs.createPowerTasks(room) + SpawningStructureOps.createPowerTasks(room) room.roomManager.creepRoleManager.run() room.roomManager.powerCreepRoleManager.run() CommuneOps.tryUpdateMinHaulerCost(room) - SpawningStructureProcs.tryRunSpawning(room) + SpawningStructureOps.tryRunSpawning(room) - SpawningStructureProcs.tryRegisterSpawningMovement(room) + SpawningStructureOps.tryRegisterSpawningMovement(room) room.roomManager.endTickCreepManager.run() room.roomManager.roomVisualsManager.run() @@ -271,7 +271,7 @@ export class CommuneOps { if (roomMemory[RoomMemoryKeys.minHaulerCost] === undefined) { roomMemory[RoomMemoryKeys.minHaulerCost] = Math.max( Memory.minHaulerCost, - 200 * room.roomManager.structures.spawn.length, + BODYPART_COST[CARRY] * 2 + BODYPART_COST[MOVE], ) roomMemory[RoomMemoryKeys.minHaulerCostUpdate] = Game.time + randomIntRange(1500, 3000) return @@ -279,15 +279,44 @@ export class CommuneOps { if (Game.time - roomMemory[RoomMemoryKeys.minHaulerCostUpdate] < haulerUpdateDefault) return - // update the min hauler cost - + // Update the raw hauler cost roomMemory[RoomMemoryKeys.minHaulerCost] = Math.max( + this.findHaulerCountBasedHaulerCost(room, roomMemory), Memory.minHaulerCost, - 100 * room.roomManager.structures.spawn.length, ) + + // Bound the raw hauler cost + + // Lower bound + roomMemory[RoomMemoryKeys.minHaulerCost] = Math.max( + roomMemory[RoomMemoryKeys.minHaulerCost], + BODYPART_COST[CARRY] * 2 + BODYPART_COST[MOVE], + ) + + // Upper bound + roomMemory[RoomMemoryKeys.minHaulerCost] = Math.min( + roomMemory[RoomMemoryKeys.minHaulerCost], + BODYPART_COST[MOVE] * MAX_CREEP_SIZE * 1.2, + ) + roomMemory[RoomMemoryKeys.minHaulerCostUpdate] = Game.time + randomIntRange(0, 10) } + static findHaulerCountBasedHaulerCost(room: Room, roomMemory: RoomMemory): number { + const targetHaulers = 50 + // We want this many haulers + const targetHaulersPercent = (targetHaulers * 0.9) / targetHaulers + // How far off we are from our ideal hauler count + const costError = roundTo( + targetHaulersPercent - room.creepsFromRoom.hauler.length / targetHaulers, + 4, + ) + const costDelta = Math.floor((roomMemory[RoomMemoryKeys.minHaulerCost] * costError) / 2) + + const cost = roomMemory[RoomMemoryKeys.minHaulerCost] - costDelta + return cost + } + static registerRampartDamage(room: Room) { if (!room.roomManager.enemyAttackers.length) return @@ -322,6 +351,4 @@ export class CommuneOps { remoteMemory[RoomMemoryKeys.type] = RoomTypes.neutral RoomNameUtils.cleanMemory(remoteName) } - - } diff --git a/src/room/commune/communeUtils.ts b/src/room/commune/communeUtils.ts index 2aa128962..794fa5618 100644 --- a/src/room/commune/communeUtils.ts +++ b/src/room/commune/communeUtils.ts @@ -12,7 +12,7 @@ import { import { CollectiveManager } from 'international/collective' import { RoomUtils } from 'room/roomUtils' import { StructureUtils } from 'room/structureUtils' -import { OrganizedSpawns } from './spawning/spawningStructureProcs' +import { OrganizedSpawns } from './spawning/spawningStructureOps' import { ResourceTargets } from './commune' export class CommuneUtils { diff --git a/src/room/commune/defenceProcs.ts b/src/room/commune/defenceProcs.ts index 596b04326..74aa244da 100644 --- a/src/room/commune/defenceProcs.ts +++ b/src/room/commune/defenceProcs.ts @@ -219,10 +219,7 @@ export class DefenceProcs { for (const playerName in presentThreat.byPlayers) { const threat = presentThreat.byPlayers[playerName] - const player = Memory.players[playerName] - if (!player) { - PlayerManager.initPlayer(playerName) - } + const player = Memory.players[playerName] || PlayerManager.initPlayer(playerName) player[PlayerMemoryKeys.offensiveThreat] = Math.max( threat, diff --git a/src/room/commune/spawning/spawnRequestConstructors.ts b/src/room/commune/spawning/spawnRequestConstructors.ts index a2c06828c..1c5fd8225 100644 --- a/src/room/commune/spawning/spawnRequestConstructors.ts +++ b/src/room/commune/spawning/spawnRequestConstructors.ts @@ -171,7 +171,7 @@ export class SpawnRequestConstructors { } const maxCostPerCreep = Math.max( - args.maxCostPerCreep ?? room.energyCapacityAvailable, + Math.min(args.maxCostPerCreep, room.energyCapacityAvailable), args.minCostPerCreep, ) @@ -273,7 +273,7 @@ export class SpawnRequestConstructors { let stop = false // So long as the cost is less than the maxCostPerCreep and the size is below max size - while (cost - extraPartsCost <= maxCostPerCreep && remainingAllowedParts - args.extraParts.length >= 0) { + while (cost < maxCostPerCreep && remainingAllowedParts - args.extraParts.length >= 0) { tier += 1 @@ -329,16 +329,17 @@ export class SpawnRequestConstructors { throw Error('extraParts of length 0 for ' + room.name + ' and role ' + args.role) } - const maxCostPerCreep = Math.max( - args.maxCostPerCreep ?? room.energyCapacityAvailable, - args.minCostPerCreep, - ) - if (maxCostPerCreep < args.minCostPerCreep) { + if (args.maxCostPerCreep < args.minCostPerCreep) { customLog('maxCostPerCreep is less than minCostPerCreep, unable to continue spawn request for role: ' + args.role) return spawnRequests } + const maxCostPerCreep = Math.max( + Math.min(args.maxCostPerCreep, room.energyCapacityAvailable), + args.minCostPerCreep, + ) + if (args.maxCreeps === undefined) { args.maxCreeps = Number.MAX_SAFE_INTEGER } diff --git a/src/room/commune/spawning/spawningStructureProcs.ts b/src/room/commune/spawning/spawningStructureOps.ts similarity index 95% rename from src/room/commune/spawning/spawningStructureProcs.ts rename to src/room/commune/spawning/spawningStructureOps.ts index 982244b31..e2d34292c 100644 --- a/src/room/commune/spawning/spawningStructureProcs.ts +++ b/src/room/commune/spawning/spawningStructureOps.ts @@ -23,7 +23,7 @@ import { SpawnRequestConstructor, SpawnRequestConstructors } from './spawnReques import { CommuneUtils } from '../communeUtils' import { DebugUtils } from 'debug/debugUtils' -export class SpawningStructureProcs { +export class SpawningStructureOps { public static tryRunSpawning(room: Room) { const spawns = room.roomManager.structures.spawn if (!spawns.length) return @@ -131,7 +131,7 @@ export class SpawningStructureProcs { if (testSpawnResult === ERR_NOT_ENOUGH_ENERGY) { customLog( 'Failed to spawn: dryrun failed', - `request: ${testSpawnResult}, role: ${request.role}, cost: ${request.cost} / ${room.communeManager.nextSpawnEnergyAvailable}, body: (${body.length}) ${body}`, + `request: ${testSpawnResult}, role: ${request.role}, ID: ${ID}, cost: ${request.cost} / ${room.communeManager.nextSpawnEnergyAvailable}, body: (${body.length}) ${body}`, { type: LogTypes.error, }, @@ -141,7 +141,7 @@ export class SpawningStructureProcs { customLog( 'Failed to spawn: dryrun failed', - `request: ${testSpawnResult}, role: ${request.role}, cost: ${request.cost} / ${room.communeManager.nextSpawnEnergyAvailable}, body: (${body.length}) ${body}`, + `request: ${testSpawnResult}, role: ${request.role}, ID: ${ID}, cost: ${request.cost} / ${room.communeManager.nextSpawnEnergyAvailable}, body: (${body.length}) ${body}`, { type: LogTypes.error, }, @@ -153,7 +153,7 @@ export class SpawningStructureProcs { // Spawn the creep for real request.extraOpts.directions = this.findDirections(room, spawn.pos) - const result = this.advancedSpawn(spawn, request, body, ID) + const result = this.advancedSpawn(room, spawn, request, body, ID) if (result !== OK) { customLog( 'Failed to spawn: spawning failed', @@ -279,6 +279,7 @@ export class SpawningStructureProcs { } private static advancedSpawn( + room: Room, spawn: StructureSpawn, spawnRequest: SpawnRequest, body: BodyPartConstant[], @@ -286,9 +287,9 @@ export class SpawningStructureProcs { ) { const creepName = `${creepRoles.indexOf(spawnRequest.role)}_${requestID}` - spawnRequest.extraOpts.energyStructures = spawn.room.communeManager.spawningStructuresByPriority + spawnRequest.extraOpts.energyStructures = room.communeManager.spawningStructuresByPriority - spawnRequest.extraOpts.memory[CreepMemoryKeys.commune] = spawn.room.name + spawnRequest.extraOpts.memory[CreepMemoryKeys.commune] = room.name spawnRequest.extraOpts.memory[CreepMemoryKeys.defaultParts] = spawnRequest.defaultParts spawnRequest.extraOpts.memory[CreepMemoryKeys.cost] = spawnRequest.cost diff --git a/src/room/commune/spawning/spawningStructureUtils.ts b/src/room/commune/spawning/spawningStructureUtils.ts deleted file mode 100644 index 48577b1cf..000000000 --- a/src/room/commune/spawning/spawningStructureUtils.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { StructureUtils } from 'room/structureUtils' -import { OrganizedSpawns } from './spawningStructureProcs' -import { CreepProcs } from 'room/creeps/creepProcs' -import { CreepMemoryKeys } from '../../../constants/general' - -export class SpawningStructureUtils {} diff --git a/src/room/roomUtils.ts b/src/room/roomUtils.ts index 0d4017af0..176e72f8f 100644 --- a/src/room/roomUtils.ts +++ b/src/room/roomUtils.ts @@ -85,8 +85,11 @@ export class RoomUtils { const sourcedFastFillerCoords = this.getSourcedFastFillerCoords(room) if (!sourcedFastFillerCoords) { + + const fastFillerCoords = new Array() data.fastFillerCoords = [] - room.fastFillerCoords = [] + room.fastFillerCoords = fastFillerCoords + return fastFillerCoords } const structureCoords = room.roomManager.structureCoords const fastFillerCoords: Coord[] = [] diff --git a/src/types.d.ts b/src/types.d.ts index 2ffe2ecf1..53dc47cb7 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -44,7 +44,7 @@ import { import { UserScriptTemplate } from 'other/userScript/userScript.example' import { StatsMemory } from 'types/stats' import { WeightLayers, WeightsByID } from 'room/construction/neuralNetwork/network' -import { OrganizedSpawns } from 'room/commune/spawning/spawningStructureProcs' +import { OrganizedSpawns } from 'room/commune/spawning/spawningStructureOps' import { CreepTask, CreepPowerTask, PowerRequest } from 'types/creepTasks' declare global { @@ -959,9 +959,13 @@ declare global { */ readonly role: CreepRoles + /** + * @deprecated + */ _commune: Room | undefined /** * The name of the room the creep is from + * @deprecated */ readonly commune: Room | undefined From 35a928f4776e96a200915676f40983babb869d20 Mon Sep 17 00:00:00 2001 From: Carson Date: Sat, 3 Feb 2024 22:53:12 -0800 Subject: [PATCH 145/190] general improvements, logistics request swapping fix --- src/constants/general.ts | 2 + src/international/collective.ts | 8 ++-- src/international/commands.ts | 5 ++- src/international/flags/flags.ts | 4 -- src/international/requests.ts | 4 +- .../spawning/spawnRequestConstructors.ts | 4 +- src/room/creeps/creepUtils.ts | 39 ++++++++++++------- .../creeps/roleManagers/commune/hauler.ts | 17 ++++---- .../roleManagers/international/claimer.ts | 13 ++++++- 9 files changed, 60 insertions(+), 36 deletions(-) diff --git a/src/constants/general.ts b/src/constants/general.ts index 78b298ac7..e216d78da 100644 --- a/src/constants/general.ts +++ b/src/constants/general.ts @@ -617,6 +617,8 @@ export const nonCommuneSigns = [ 'Religion is the opium of the people - Karl Marx', ] +export const tauntSign = '✊🛠️' + /** * What to say when one of our creeps dies */ diff --git a/src/international/collective.ts b/src/international/collective.ts index e45888df8..6d2f045c6 100644 --- a/src/international/collective.ts +++ b/src/international/collective.ts @@ -191,9 +191,11 @@ export class CollectiveManager { return (this._workRequestsByScore = Object.keys(Memory.workRequests).sort( (a, b) => (Memory.workRequests[a][WorkRequestKeys.priority] ?? - Memory.rooms[a][RoomMemoryKeys.score] + Memory.rooms[a][RoomMemoryKeys.dynamicScore]) - - (Memory.workRequests[b][WorkRequestKeys.priority] ?? - Memory.rooms[b][RoomMemoryKeys.score] + Memory.rooms[b][RoomMemoryKeys.dynamicScore]), + Memory.rooms[a][RoomMemoryKeys.score]) + + Memory.rooms[a][RoomMemoryKeys.dynamicScore] - + ((Memory.workRequests[b][WorkRequestKeys.priority] ?? + Memory.rooms[b][RoomMemoryKeys.score]) + + Memory.rooms[b][RoomMemoryKeys.dynamicScore]), )) } diff --git a/src/international/commands.ts b/src/international/commands.ts index f43e571c7..ce9625394 100644 --- a/src/international/commands.ts +++ b/src/international/commands.ts @@ -189,14 +189,15 @@ global.claim = function (requestName, communeName, priority = 0, override?: bool const request = Memory.workRequests[requestName] request[WorkRequestKeys.priority] = priority - request[WorkRequestKeys.abandon] = 0 + delete request[WorkRequestKeys.abandon] if (communeName) { const roomMemory = Memory.rooms[communeName] if (!roomMemory) return `No memory for ${communeName}` - if (roomMemory[RoomMemoryKeys.workRequest]) + if (roomMemory[RoomMemoryKeys.workRequest]) { delete Memory.workRequests[roomMemory[RoomMemoryKeys.workRequest]][WorkRequestKeys.responder] + } roomMemory[RoomMemoryKeys.workRequest] = requestName request[WorkRequestKeys.responder] = communeName diff --git a/src/international/flags/flags.ts b/src/international/flags/flags.ts index 40771058d..2c23c5c50 100644 --- a/src/international/flags/flags.ts +++ b/src/international/flags/flags.ts @@ -210,9 +210,6 @@ export class FlagManager { if (!roomMemory) { flag.setColor(COLOR_RED) - flag.remove() - - return } if (roomMemory[RoomMemoryKeys.communePlanned] !== Result.success) { @@ -229,7 +226,6 @@ export class FlagManager { } global.claim(roomName, communeName, score) - flag.remove() } diff --git a/src/international/requests.ts b/src/international/requests.ts index 2659acc0c..3a7d88af6 100644 --- a/src/international/requests.ts +++ b/src/international/requests.ts @@ -209,8 +209,8 @@ export class RequestsManager extends StaticSleepable { // If there is no GCL left to claim with if (Game.gcl.level <= reservedGCL) { const room = Game.rooms[roomName] - // If we don't own the request room's contorller already, then we should stop - if (room && !room.controller.my) { + // If we don't own the request room's controller already, then we should stop + if (!room || !room.controller.my) { return false } } diff --git a/src/room/commune/spawning/spawnRequestConstructors.ts b/src/room/commune/spawning/spawnRequestConstructors.ts index 1c5fd8225..f4c8c670a 100644 --- a/src/room/commune/spawning/spawnRequestConstructors.ts +++ b/src/room/commune/spawning/spawnRequestConstructors.ts @@ -171,7 +171,7 @@ export class SpawnRequestConstructors { } const maxCostPerCreep = Math.max( - Math.min(args.maxCostPerCreep, room.energyCapacityAvailable), + Math.min(args.maxCostPerCreep ?? room.energyCapacityAvailable, room.energyCapacityAvailable), args.minCostPerCreep, ) @@ -336,7 +336,7 @@ export class SpawnRequestConstructors { } const maxCostPerCreep = Math.max( - Math.min(args.maxCostPerCreep, room.energyCapacityAvailable), + Math.min(args.maxCostPerCreep ?? room.energyCapacityAvailable, room.energyCapacityAvailable), args.minCostPerCreep, ) diff --git a/src/room/creeps/creepUtils.ts b/src/room/creeps/creepUtils.ts index 8e617f034..2d1ddf98c 100644 --- a/src/room/creeps/creepUtils.ts +++ b/src/room/creeps/creepUtils.ts @@ -180,7 +180,9 @@ export class CreepUtils { ) if (creepRequest === Result.fail) return Result.fail - } else { + } + // Otherwise we found a request + else { creepRequest = { [CreepLogisticsRequestKeys.type]: bestRequest.type, [CreepLogisticsRequestKeys.target]: bestRequest.targetID, @@ -190,19 +192,25 @@ export class CreepUtils { } if (bestRequest.delivery) { - // creep request will preceed the one we've accepted to provide for the delivery + // creep request will preceed the one we've accepted to provide for the delivery (withdraw task) let nextCreepRequest: CreepLogisticsRequest const storingStructure = findObjectWithID(bestRequest.delivery as Id) if (storingStructure) { + + const amount = Math.min( + storingStructure.reserveStore[bestRequest.resourceType], + Math.max( + creep.nextStore[bestRequest.resourceType] + RoomObjectUtils.freeNextStoreOf(creep, bestRequest.resourceType), + creepRequest[CreepLogisticsRequestKeys.amount], + ) + ), + nextCreepRequest = { [CreepLogisticsRequestKeys.type]: RoomLogisticsRequestTypes.withdraw, [CreepLogisticsRequestKeys.target]: storingStructure.id, [CreepLogisticsRequestKeys.resourceType]: bestRequest.resourceType, - [CreepLogisticsRequestKeys.amount]: Math.min( - storingStructure.reserveStore[bestRequest.resourceType], - creepRequest[CreepLogisticsRequestKeys.amount], - ), + [CreepLogisticsRequestKeys.amount]: amount, [CreepLogisticsRequestKeys.noReserve]: bestRequest.noReserve, [CreepLogisticsRequestKeys.delivery]: true, } @@ -210,7 +218,7 @@ export class CreepUtils { storingStructure.reserveStore[nextCreepRequest[CreepLogisticsRequestKeys.resourceType]] -= nextCreepRequest[CreepLogisticsRequestKeys.amount] } else { - // The delivery provider is + // The delivery provider is based on a request (withdraw) const nextRequest = creep.room.roomLogisticsRequests[RoomLogisticsRequestTypes.withdraw][ @@ -221,14 +229,19 @@ export class CreepUtils { ] || creep.room.roomLogisticsRequests[RoomLogisticsRequestTypes.pickup][bestRequest.delivery] + const amount = Math.min( + nextRequest.amount, + Math.max( + creep.nextStore[bestRequest.resourceType] + RoomObjectUtils.freeNextStoreOf(creep, bestRequest.resourceType), + creepRequest[CreepLogisticsRequestKeys.amount], + ) + ) + nextCreepRequest = { [CreepLogisticsRequestKeys.type]: nextRequest.type, [CreepLogisticsRequestKeys.target]: nextRequest.targetID, [CreepLogisticsRequestKeys.resourceType]: nextRequest.resourceType, - [CreepLogisticsRequestKeys.amount]: Math.min( - creep.nextStore[nextRequest.resourceType] + creep.freeNextStore, - creepRequest[CreepLogisticsRequestKeys.amount], - ), + [CreepLogisticsRequestKeys.amount]: amount, [CreepLogisticsRequestKeys.noReserve]: creepRequest[CreepLogisticsRequestKeys.noReserve], [CreepLogisticsRequestKeys.delivery]: true, @@ -562,9 +575,9 @@ export class CreepUtils { if (request.delivery) { // Take extra energy in case its needed - if (request.resourceType === RESOURCE_ENERGY) { +/* if (request.resourceType === RESOURCE_ENERGY) { return creep.nextStore[request.resourceType] + creepFreeNextStore - } + } */ return Math.min(request.amount, creep.nextStore[request.resourceType] + creepFreeNextStore) } diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index c386c7907..f8118cf45 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -179,7 +179,7 @@ export class Hauler extends Creep { // Ensure the creep and the remote have the same opinions on roads if ( !!remoteMemory[RoomMemoryKeys.roads][sourceIndex] != - !!Memory.creeps[this.name][CreepMemoryKeys.preferRoads] + Memory.creeps[this.name][CreepMemoryKeys.preferRoads] ) return false @@ -1015,19 +1015,20 @@ export class Hauler extends Creep { runRestrictedCommuneLogistics?() { const creepMemory = Memory.creeps[this.name] // let it respond to its remote - if (Memory.creeps[this.name][CreepMemoryKeys.remote]) return false + if (creepMemory[CreepMemoryKeys.remote]) return false // We aren't in the commune - if (this.room.name !== this.commune.name) return false + const commune = Game.rooms[creepMemory[CreepMemoryKeys.commune]] + if (this.room.name !== commune.name) return false - if (this.commune.communeManager.hasSufficientRoads) { + if (commune.communeManager.hasSufficientRoads) { // If we have a body not optimized for roads, try to respond to a remote instead - if (!creepMemory[CreepMemoryKeys.preferRoads]) return false + if (creepMemory[CreepMemoryKeys.preferRoads] !== true) return false } // If there is no need for more commune haulers if ( - this.commune.communeManager.communeHaulerNeed < - this.commune.communeManager.communeHaulerCarryParts + commune.communeManager.communeHaulerNeed < + commune.communeManager.communeHaulerCarryParts ) { return false } @@ -1036,7 +1037,7 @@ export class Hauler extends Creep { if (!creepMemory[CreepMemoryKeys.taskRoom]) { creepMemory[CreepMemoryKeys.taskRoom] = this.room.name - this.commune.communeManager.communeHaulerCarryParts += MyCreepUtils.parts(this).carry + commune.communeManager.communeHaulerCarryParts += MyCreepUtils.parts(this).carry } this.runCommuneLogistics() diff --git a/src/room/creeps/roleManagers/international/claimer.ts b/src/room/creeps/roleManagers/international/claimer.ts index fe994949a..c650343df 100644 --- a/src/room/creeps/roleManagers/international/claimer.ts +++ b/src/room/creeps/roleManagers/international/claimer.ts @@ -1,4 +1,4 @@ -import { WorkRequestKeys, CreepMemoryKeys, Result, RoomTypes } from '../../../../constants/general' +import { WorkRequestKeys, CreepMemoryKeys, Result, RoomTypes, tauntSign } from '../../../../constants/general' import { MyCreepUtils } from 'room/creeps/myCreepUtils' export class Claimer extends Creep { @@ -15,6 +15,13 @@ export class Claimer extends Creep { request[WorkRequestKeys.claimer] -= 1 } + findSwampCost?() { + const moveParts = MyCreepUtils.parts(this) + if (moveParts.move >= 5) return 1 + + return undefined + } + /** * Claims a room specified in the creep's commune workRequest */ @@ -34,7 +41,7 @@ export class Claimer extends Creep { goals: [{ pos: room.controller.pos, range: 1 }], avoidEnemyRanges: true, plainCost: 1, - swampCost: MyCreepUtils.parts(this).move >= 5 ? 1 : undefined, + swampCost: this.findSwampCost(), }) return @@ -55,6 +62,8 @@ export class Claimer extends Creep { if (!creep.claimController(room.controller)) return // We claimed the controller + + creep.signController(room.controller, tauntSign) } static roleManager(room: Room, creepsOfRole: string[]) { From 38c3e7ab4e737ae0458f92f029f1dec677e68c37 Mon Sep 17 00:00:00 2001 From: Carson Date: Sat, 3 Feb 2024 23:34:58 -0800 Subject: [PATCH 146/190] additional hauler relaying and logistics fixes --- src/room/creeps/creepUtils.ts | 30 +++++++++---------- .../creeps/roleManagers/commune/hauler.ts | 19 +++++++----- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/src/room/creeps/creepUtils.ts b/src/room/creeps/creepUtils.ts index 2d1ddf98c..6050dd736 100644 --- a/src/room/creeps/creepUtils.ts +++ b/src/room/creeps/creepUtils.ts @@ -197,14 +197,13 @@ export class CreepUtils { const storingStructure = findObjectWithID(bestRequest.delivery as Id) if (storingStructure) { - const amount = Math.min( storingStructure.reserveStore[bestRequest.resourceType], Math.max( - creep.nextStore[bestRequest.resourceType] + RoomObjectUtils.freeNextStoreOf(creep, bestRequest.resourceType), + RoomObjectUtils.freeNextStoreOf(creep, bestRequest.resourceType), creepRequest[CreepLogisticsRequestKeys.amount], - ) - ), + ), + ) nextCreepRequest = { [CreepLogisticsRequestKeys.type]: RoomLogisticsRequestTypes.withdraw, @@ -229,13 +228,13 @@ export class CreepUtils { ] || creep.room.roomLogisticsRequests[RoomLogisticsRequestTypes.pickup][bestRequest.delivery] - const amount = Math.min( - nextRequest.amount, - Math.max( - creep.nextStore[bestRequest.resourceType] + RoomObjectUtils.freeNextStoreOf(creep, bestRequest.resourceType), - creepRequest[CreepLogisticsRequestKeys.amount], - ) - ) + const amount = Math.min( + nextRequest.amount, + Math.max( + RoomObjectUtils.freeNextStoreOf(creep, bestRequest.resourceType), + creepRequest[CreepLogisticsRequestKeys.amount], + ), + ) nextCreepRequest = { [CreepLogisticsRequestKeys.type]: nextRequest.type, @@ -575,7 +574,7 @@ export class CreepUtils { if (request.delivery) { // Take extra energy in case its needed -/* if (request.resourceType === RESOURCE_ENERGY) { + /* if (request.resourceType === RESOURCE_ENERGY) { return creep.nextStore[request.resourceType] + creepFreeNextStore } */ @@ -659,7 +658,6 @@ export class CreepUtils { * Find the closest open fast filler coord, if exists. Then assign it to the creep */ static findNewFastFillerCoord(creep: Creep, creepMemory = Memory.creeps[creep.name]) { - const fastFillerCoords = RoomUtils.getFastFillerCoords(creep.room) if (!fastFillerCoords.length) return false @@ -674,8 +672,10 @@ export class CreepUtils { return result.coord } - private static findOpenFastFillerCoord(creep: Creep, reservedCoords: Map) { - + private static findOpenFastFillerCoord( + creep: Creep, + reservedCoords: Map, + ) { const packedFastFillerCoords = roomData[creep.room.name].fastFillerCoords let lowestScore = Infinity diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index f8118cf45..1c63237ea 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -179,7 +179,7 @@ export class Hauler extends Creep { // Ensure the creep and the remote have the same opinions on roads if ( !!remoteMemory[RoomMemoryKeys.roads][sourceIndex] != - Memory.creeps[this.name][CreepMemoryKeys.preferRoads] + !!Memory.creeps[this.name][CreepMemoryKeys.preferRoads] ) return false @@ -786,12 +786,20 @@ export class Hauler extends Creep { ) return false + const creepAtPosMemory = Memory.creeps[creepAtPos.name] + // ensure we aren't relaying with the same creep as last tick (from the other creep's perspective) + if ( + creepAtPosMemory[CreepMemoryKeys.previousRelayer] && + creepAtPosMemory[CreepMemoryKeys.previousRelayer][0] === creepAtPos.name + ) + return false + // ensure the creep receiving creep is empty /* if (creepAtPos.store.getUsedCapacity() > 0) return false */ if (creepAtPos.store.getUsedCapacity() > 0) return false // Ensure that they have the same opinions on roads - if (creepMemory[CreepMemoryKeys.preferRoads] !== creepMemory[CreepMemoryKeys.preferRoads]) + if (creepMemory[CreepMemoryKeys.preferRoads] !== creepAtPosMemory[CreepMemoryKeys.preferRoads]) return false /* const logisticsRequest = Memory.creeps[this.name][CreepMemoryKeys.roomLogisticsRequests][0] @@ -837,8 +845,6 @@ export class Hauler extends Creep { delete this.moved delete creepAtPos.moved - const creepAtPosMemory = Memory.creeps[creepAtPos.name] - // Trade paths so they might reuse them const path = creepMemory[CreepMemoryKeys.path] @@ -1026,10 +1032,7 @@ export class Hauler extends Creep { } // If there is no need for more commune haulers - if ( - commune.communeManager.communeHaulerNeed < - commune.communeManager.communeHaulerCarryParts - ) { + if (commune.communeManager.communeHaulerNeed < commune.communeManager.communeHaulerCarryParts) { return false } From 334d66d7bb07b2250c800db0faeb990b47da04d6 Mon Sep 17 00:00:00 2001 From: Carson Date: Sun, 4 Feb 2024 00:18:05 -0800 Subject: [PATCH 147/190] structures for role ops and services --- src/room/commune/communeOps.ts | 2 +- src/room/creeps/defaultRoleManager.ts | 23 ----------------------- src/room/creeps/defaultRoleOps.ts | 21 +++++++++++++++++++++ src/room/creeps/defaultRoleServices.ts | 6 ++++++ src/room/creeps/roles/haulerServices.ts | 3 ++- 5 files changed, 30 insertions(+), 25 deletions(-) delete mode 100644 src/room/creeps/defaultRoleManager.ts create mode 100644 src/room/creeps/defaultRoleOps.ts create mode 100644 src/room/creeps/defaultRoleServices.ts diff --git a/src/room/commune/communeOps.ts b/src/room/commune/communeOps.ts index a2abcca64..2b15d9d36 100644 --- a/src/room/commune/communeOps.ts +++ b/src/room/commune/communeOps.ts @@ -303,8 +303,8 @@ export class CommuneOps { } static findHaulerCountBasedHaulerCost(room: Room, roomMemory: RoomMemory): number { - const targetHaulers = 50 // We want this many haulers + const targetHaulers = 40 const targetHaulersPercent = (targetHaulers * 0.9) / targetHaulers // How far off we are from our ideal hauler count const costError = roundTo( diff --git a/src/room/creeps/defaultRoleManager.ts b/src/room/creeps/defaultRoleManager.ts deleted file mode 100644 index 7e73faa8b..000000000 --- a/src/room/creeps/defaultRoleManager.ts +++ /dev/null @@ -1,23 +0,0 @@ -export class DefaultRoleManager { - role: CreepRoles - - isCreepDying(creep: Creep) { - - - } - - runUpdateCreep(creep: Creep) { - - - } - - runInitialCreep(creep: Creep) { - - - } - - runCreep(creep: Creep) { - - - } -} diff --git a/src/room/creeps/defaultRoleOps.ts b/src/room/creeps/defaultRoleOps.ts new file mode 100644 index 000000000..1707a4c2e --- /dev/null +++ b/src/room/creeps/defaultRoleOps.ts @@ -0,0 +1,21 @@ +export class DefaultRoleOpts { + isCreepDying(creep: Creep) { + + + } + + runUpdateCreep(creep: Creep) { + + + } + + runInitialCreep(creep: Creep) { + + + } + + runCreep(creep: Creep) { + + + } +} diff --git a/src/room/creeps/defaultRoleServices.ts b/src/room/creeps/defaultRoleServices.ts new file mode 100644 index 000000000..342e3ea7d --- /dev/null +++ b/src/room/creeps/defaultRoleServices.ts @@ -0,0 +1,6 @@ +export class DefaultRoleServices { + runCreeps(creepNames: string[]) { + + + } +} diff --git a/src/room/creeps/roles/haulerServices.ts b/src/room/creeps/roles/haulerServices.ts index 118e52a95..c052c46eb 100644 --- a/src/room/creeps/roles/haulerServices.ts +++ b/src/room/creeps/roles/haulerServices.ts @@ -1,6 +1,7 @@ +import { DefaultRoleServices } from '../defaultRoleServices' import { HaulerOps } from './haulerOps' -export class HaulerServices { +export class HaulerServices extends DefaultRoleServices { static runCreeps(creepNames: string[]) { for (const creepName of creepNames) { const creep = Game.creeps[creepName] From e52f4a9785680ca8cc9f1f8be2e1bd88fb957e2d Mon Sep 17 00:00:00 2001 From: Carson Date: Sun, 4 Feb 2024 00:35:01 -0800 Subject: [PATCH 148/190] fix recursive shove other creep interaction issues --- .../creeps/creepPrototypes/creepMoveFunctions.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts index ab960455e..5e23d5b8f 100644 --- a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts @@ -19,6 +19,7 @@ import { getRange, isExit, forAdjacentCoords, + isAlly, } from 'utils/utils' import { packCoord, @@ -189,8 +190,9 @@ PowerCreep.prototype.findShoveCoord = Creep.prototype.findShoveCoord = function const creepAtPos = Game.creeps[creepAtPosName] if (creepAtPos.fatigue > 0) return if (creepAtPos.moved) return + // maybe want to reconsider this parameter if (creepAtPos.moveRequest) return - if (creepAtPos.getActiveBodyparts(MOVE)) return + if (creepAtPos.getActiveBodyparts(MOVE) === 0) return } /* @@ -235,13 +237,19 @@ PowerCreep.prototype.findShoveCoord = Creep.prototype.findShoveCoord = function if ( this.memory[CreepMemoryKeys.rampartOnlyShoving] && !room.findStructureAtCoord(coord, structure => structure.structureType === STRUCTURE_RAMPART) - ) + ) { return + } let hasImpassibleStructure for (const cSite of room.lookForAt(LOOK_CONSTRUCTION_SITES, coord.x, coord.y)) { - if (!cSite.my && !global.settings.allies.includes(cSite.owner.username)) continue + + // If the construction site is owned by an ally, don't allow its position + if (!cSite.my && isAlly(cSite.owner.username)) { + hasImpassibleStructure = true + break + } if (impassibleStructureTypesSet.has(cSite.structureType)) { hasImpassibleStructure = true From 8307adf20f95495853763ec30040b51a6179b112 Mon Sep 17 00:00:00 2001 From: Carson Date: Sun, 4 Feb 2024 00:42:11 -0800 Subject: [PATCH 149/190] remove deprecated shove code --- src/room/creeps/creepPrototypes/creepMoveFunctions.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts index 5e23d5b8f..077915a29 100644 --- a/src/room/creeps/creepPrototypes/creepMoveFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepMoveFunctions.ts @@ -195,10 +195,6 @@ PowerCreep.prototype.findShoveCoord = Creep.prototype.findShoveCoord = function if (creepAtPos.getActiveBodyparts(MOVE) === 0) return } - /* - if (room.creepPositions[packedCoord]) continue - if (room.powerCreepPositions[packedCoord]) continue - */ if (avoidPackedCoords.has(packedCoord)) return if (isExit(coord)) return From 074cb05a33ed29f48e46c5d7e62a42b1b149f983 Mon Sep 17 00:00:00 2001 From: Carson Date: Sun, 4 Feb 2024 01:31:24 -0800 Subject: [PATCH 150/190] better source caching, remote source road improvement --- src/international/customPathFinder.ts | 3 +- src/room/commune/communeUtils.ts | 3 +- src/room/commune/haulerNeedOps.ts | 10 ++++-- src/room/construction/communePlanner.ts | 16 ++++++---- .../creeps/creepPrototypes/creepFunctions.ts | 5 ++- .../international/allyVanguard.ts | 3 +- src/room/room.ts | 14 ++++++--- src/room/roomData.ts | 1 - src/room/roomFunctions.ts | 17 +++++----- src/room/roomOps.ts | 31 +++++++++++++++++-- src/room/roomUtils.ts | 13 -------- src/room/sourceProcs.ts | 3 +- src/types.d.ts | 2 ++ 13 files changed, 78 insertions(+), 43 deletions(-) diff --git a/src/international/customPathFinder.ts b/src/international/customPathFinder.ts index 9269f80d8..d1d81be83 100644 --- a/src/international/customPathFinder.ts +++ b/src/international/customPathFinder.ts @@ -287,7 +287,8 @@ export class CustomPathFinder { // Weight potential and actual stationary positions - for (const index in room.find(FIND_SOURCES)) { + const sourcesCount = roomMemory[RoomMemoryKeys.sourceCoords].length + for (let index = 0; index < sourcesCount; index++) { // Loop through each position of harvestPositions, have creeps prefer to avoid for (const pos of room.roomManager.sourceHarvestPositions[index]) { diff --git a/src/room/commune/communeUtils.ts b/src/room/commune/communeUtils.ts index 794fa5618..e4df36a42 100644 --- a/src/room/commune/communeUtils.ts +++ b/src/room/commune/communeUtils.ts @@ -14,6 +14,7 @@ import { RoomUtils } from 'room/roomUtils' import { StructureUtils } from 'room/structureUtils' import { OrganizedSpawns } from './spawning/spawningStructureOps' import { ResourceTargets } from './commune' +import { RoomOps } from 'room/roomOps' export class CommuneUtils { static getGeneralRepairStructures(room: Room) { @@ -192,7 +193,7 @@ export class CommuneUtils { const data = communeData[room.name] if (data.estimatedCommuneSourceIncome !== undefined) return data.estimatedCommuneSourceIncome - const sources = RoomUtils.getSources(room) + const sources = RoomOps.getSources(room) const estimatedIncome: number[] = [] for (let i = 0; i < sources.length; i += 1) { diff --git a/src/room/commune/haulerNeedOps.ts b/src/room/commune/haulerNeedOps.ts index 2d50faff8..1f8088a28 100644 --- a/src/room/commune/haulerNeedOps.ts +++ b/src/room/commune/haulerNeedOps.ts @@ -35,7 +35,10 @@ export class HaulerNeedOps { if (hubLink && StructureUtils.isRCLActionable(hubLink)) { // There is a valid hubLink - for (let index in room.find(FIND_SOURCES)) { + const roomMemory = Memory.rooms[this.name] + const sourceCount = roomMemory[RoomMemoryKeys.sourceCoords].length + + for (let index = 0; index < sourceCount; index++) { const sourceLink = room.communeManager.sourceLinks[index] if (sourceLink && StructureUtils.isRCLActionable(sourceLink)) continue @@ -50,7 +53,10 @@ export class HaulerNeedOps { // There is no valid hubLink - for (let index in room.find(FIND_SOURCES)) { + const roomMemory = Memory.rooms[this.name] + const sourceCount = roomMemory[RoomMemoryKeys.sourceCoords].length + + for (let index = 0; index < sourceCount; index++) { room.communeManager.communeHaulerNeed += findCarryPartsRequired( packedSourcePaths[index].length / packedPosLength + 3, estimatedSourceIncome[index] * 1.1, diff --git a/src/room/construction/communePlanner.ts b/src/room/construction/communePlanner.ts index 5f085f0c8..a8968e7a0 100644 --- a/src/room/construction/communePlanner.ts +++ b/src/room/construction/communePlanner.ts @@ -437,8 +437,10 @@ export class CommunePlanner { // Both sources - const sources = this.room.find(FIND_SOURCES) - for (const source of sources) startCoords.push(source.pos) + const sources = RoomOps.getSources(this.room) + for (const source of sources) { + startCoords.push(source.pos) + } // Find the closest source pos and its path to the controller @@ -921,7 +923,8 @@ export class CommunePlanner { private avoidSources() { if (this.markSourcesAvoid) return - for (const source of this.room.find(FIND_SOURCES)) { + const sources = RoomOps.getSources(this.room) + for (const source of sources) { forAdjacentCoords(source.pos, adjCoord => { const packedCoord = packAsNum(adjCoord) @@ -962,7 +965,7 @@ export class CommunePlanner { this.stampAnchors.fastFiller[0].y, this.room.name, ) - const sources = this.room.find(FIND_SOURCES) + const sources = RoomOps.getSources(this.room) sortBy( sources, ({ pos }) => @@ -1844,7 +1847,7 @@ export class CommunePlanner { this.roadCoords[packedCoord] = 255 const fastFillerPos = new RoomPosition(stampAnchor.x, stampAnchor.y, this.room.name) - const sources = this.room.find(FIND_SOURCES) + const sources = RoomOps.getSources(this.room) sortBy( sources, ({ pos }) => @@ -1960,7 +1963,8 @@ export class CommunePlanner { let closestSource: Source let closestSourceDistance = Infinity - for (const source of this.room.find(FIND_SOURCES)) { + const sources = RoomOps.getSources(this.room) + for (const source of sources) { const range = CustomPathFinder.findPath({ origin: source.pos, goals: [ diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index a90f67b4f..6c64eeb30 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -374,12 +374,15 @@ Creep.prototype.findSourceIndex = function () { let creepThreshold = 1 + const roomMemory = Memory.rooms[this.name] + const sourceCount = roomMemory[RoomMemoryKeys.sourceCoords].length + // So long as the creepThreshold is less than 4 while (creepThreshold < 4) { // Find the first source with open spots - for (let i = 0; i < this.room.find(FIND_SOURCES).length; i++) { + for (let i = 0; i < sourceCount; i++) { // If there are still creeps needed to harvest a source under the creepThreshold if ( diff --git a/src/room/creeps/roleManagers/international/allyVanguard.ts b/src/room/creeps/roleManagers/international/allyVanguard.ts index 4c941ab79..263600bec 100644 --- a/src/room/creeps/roleManagers/international/allyVanguard.ts +++ b/src/room/creeps/roleManagers/international/allyVanguard.ts @@ -11,6 +11,7 @@ import { unpackCoord } from 'other/codec' import { CreepUtils } from 'room/creeps/creepUtils' import { MyCreepUtils } from 'room/creeps/myCreepUtils' import { CreepProcs } from 'room/creeps/creepProcs' +import { RoomOps } from 'room/roomOps' export class AllyVanguard extends Creep { update() { @@ -97,7 +98,7 @@ export class AllyVanguard extends Creep { // Try to normally harvest. Iterate if creep harvested - const source = room.find(FIND_SOURCES)[sourceIndex] + const source = RoomOps.getSources(room)[sourceIndex] if (CreepUtils.harvestSource(this, source) === Result.fail) return } diff --git a/src/room/room.ts b/src/room/room.ts index 6910460ac..bfbbfe5af 100644 --- a/src/room/room.ts +++ b/src/room/room.ts @@ -133,7 +133,7 @@ export class RoomManager { const anchor = commune.roomManager.anchor if (!anchor) throw Error('No anchor for remote source harvest positions ' + this.room.name) - const sources = this.room.find(FIND_SOURCES) + const sources = RoomOps.getSources(this.room) sortBy( sources, @@ -196,8 +196,11 @@ export class RoomManager { const sourcePaths: RoomPosition[][] = [] - for (const positions of packedRemoteSourceHarvestPositions) { + for (let i = packedRemoteSourceHarvestPositions.length - 1; i >= 0; i -= 1) { + + const positions = packedRemoteSourceHarvestPositions[i] const origin = unpackPosAt(positions, 0) + const path = CustomPathFinder.findPath({ origin, goals: [{ pos: anchor, range: 3 }], @@ -260,8 +263,11 @@ export class RoomManager { const sourcePaths: RoomPosition[][] = [] - for (const positions of packedRemoteSourceHarvestPositions) { + for (let i = packedRemoteSourceHarvestPositions.length - 1; i >= 0; i -= 1) { + + const positions = packedRemoteSourceHarvestPositions[i] const origin = unpackPosAt(positions, 0) + const path = CustomPathFinder.findPath({ origin, goals: [{ pos: goalPos, range: 1 }], @@ -484,7 +490,7 @@ export class RoomManager { const sourceHarvestPositions: RoomPosition[][] = [] const terrain = this.room.getTerrain() - const sources = this.room.find(FIND_SOURCES) + const sources = RoomOps.getSources(this.room) for (let i = 0; i < sources.length; i++) { const source = sources[i] diff --git a/src/room/roomData.ts b/src/room/roomData.ts index d830ac62e..766f94911 100644 --- a/src/room/roomData.ts +++ b/src/room/roomData.ts @@ -2,7 +2,6 @@ import { Utils } from 'utils/utils' import { CommuneDataOps } from './commune/communeData' export interface RoomData { - sourceIDs: Id[] fastFillerContainerLeftId: Id | false fastFillerContainerRightId: Id | false fastFillerCoords: string[] diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index e6f38a8d3..0f2f15d79 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -101,11 +101,10 @@ Room.prototype.scoutEnemyReservedRemote = function () { if ( !this.roomManager.structures.road && !this.roomManager.structures.container && - !this.find(FIND_SOURCES, { - filter: source => source.ticksToRegeneration > 0, - }) - ) + !RoomOps.getSources(this).find(source => source.ticksToRegeneration > 0) + ) { return false + } // If the controller is not reserved by an ally @@ -128,10 +127,8 @@ Room.prototype.scoutEnemyUnreservedRemote = function () { if (controller.reservation.username === 'Invader') return false } - const harvestedSources = this.find(FIND_SOURCES, { - filter: source => source.ticksToRegeneration > 0, - }) - if (!harvestedSources.length) return false + const harvestedSources = RoomOps.getSources(this).find(source => source.ticksToRegeneration > 0) + if (!harvestedSources) return false // Find creeps that I don't own that aren't invaders @@ -1345,12 +1342,12 @@ Room.prototype.findAdjacentPositions = function (rx, ry) { } Room.prototype.createWorkRequest = function () { - if (this.find(FIND_SOURCES).length < 2) return false + const roomMemory = Memory.rooms[this.name] + if (roomMemory[RoomMemoryKeys.sourceCoords].length < 2) return false if (Memory.workRequests[this.name]) return false RoomNameUtils.findDynamicScore(this.name) - const roomMemory = Memory.rooms[this.name] const communePlanned = roomMemory[RoomMemoryKeys.communePlanned] if (communePlanned !== undefined) return false diff --git a/src/room/roomOps.ts b/src/room/roomOps.ts index 991d019c8..0f305fe63 100644 --- a/src/room/roomOps.ts +++ b/src/room/roomOps.ts @@ -121,7 +121,9 @@ export class RoomOps { room.powerRequests = {} room.creepsOfSource = [] - for (const index in room.find(FIND_SOURCES)) room.creepsOfSource.push([]) + + const sourceCount = roomMemory[RoomMemoryKeys.sourceCoords].length + for (let i = 0; i < sourceCount; i++) room.creepsOfSource.push([]) room.squadRequests = new Set() @@ -315,7 +317,7 @@ export class RoomOps { } if (!roomMemory[RoomMemoryKeys.sourceCoords]) { - const sources = room.find(FIND_SOURCES) + const sources = this.getSources(room) if (sources.length) { const packedSourceCoords = packCoordList(sources.map(source => source.pos)) roomMemory[RoomMemoryKeys.sourceCoords] = packedSourceCoords @@ -370,4 +372,29 @@ export class RoomOps { return roomMemory[RoomMemoryKeys.type] } + + /** + * Cached sources using recorded source coords + */ + static getSources(room: Room) { + if (room.sources !== undefined) return room.sources + + const sourceCoords = Memory.rooms[room.name][RoomMemoryKeys.sourceCoords] + if (!sourceCoords) { + throw Error('no sourceCoords') + } + + const sources = new Array() + + for (const packedCoord of sourceCoords) { + const coord = unpackCoord(packedCoord) + + for (const source of room.lookForAt(LOOK_SOURCES, coord.x, coord.y)) { + sources.push(source) + } + } + + room.sources = sources + return sources + } } diff --git a/src/room/roomUtils.ts b/src/room/roomUtils.ts index 176e72f8f..2d7d9766e 100644 --- a/src/room/roomUtils.ts +++ b/src/room/roomUtils.ts @@ -11,19 +11,6 @@ export class RoomUtils { const repairStructures: (StructureContainer | StructureRoad)[] = [] } - static getSources(room: Room): Source[] { - const data = roomData[room.name] - if (data.sourceIDs !== undefined) { - return data.sourceIDs.map(ID => findObjectWithID(ID)) - } - - const sources = room.find(FIND_SOURCES) - const sourceIDs = sources.map(source => source.id) - - data.sourceIDs = sourceIDs - return sources - } - /** * returns a container if exists and is RCL actionable */ diff --git a/src/room/sourceProcs.ts b/src/room/sourceProcs.ts index 02d4f74e8..93daf4345 100644 --- a/src/room/sourceProcs.ts +++ b/src/room/sourceProcs.ts @@ -1,10 +1,11 @@ import { RoomUtils } from 'room/roomUtils' +import { RoomOps } from './roomOps' export class SourceProcs { static createPowerTasks(room: Room) { if (!room.myPowerCreeps.length) return - const sources = RoomUtils.getSources(room) + const sources = RoomOps.getSources(room) for (const source of sources) { room.createPowerRequest(source, PWR_REGEN_SOURCE, 10) } diff --git a/src/types.d.ts b/src/types.d.ts index 53dc47cb7..3a69aa692 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -525,6 +525,8 @@ declare global { structures: OrganizedStructures + sources: Source[] + // Commune // Functions From b9e642a7861e814c0263120d18a81327663e5ab4 Mon Sep 17 00:00:00 2001 From: Carson Date: Sun, 4 Feb 2024 01:36:49 -0800 Subject: [PATCH 151/190] cached sources fix --- src/international/customPathFinder.ts | 4 ++-- src/room/roomOps.ts | 17 ++++++++++------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/international/customPathFinder.ts b/src/international/customPathFinder.ts index d1d81be83..f47c4f066 100644 --- a/src/international/customPathFinder.ts +++ b/src/international/customPathFinder.ts @@ -287,8 +287,8 @@ export class CustomPathFinder { // Weight potential and actual stationary positions - const sourcesCount = roomMemory[RoomMemoryKeys.sourceCoords].length - for (let index = 0; index < sourcesCount; index++) { + const sourceCount = roomMemory[RoomMemoryKeys.sourceCoords].length + for (let index = 0; index < sourceCount; index++) { // Loop through each position of harvestPositions, have creeps prefer to avoid for (const pos of room.roomManager.sourceHarvestPositions[index]) { diff --git a/src/room/roomOps.ts b/src/room/roomOps.ts index 0f305fe63..73d0d7b2d 100644 --- a/src/room/roomOps.ts +++ b/src/room/roomOps.ts @@ -18,7 +18,7 @@ import { CommuneManager } from './commune/commune' import { CommuneOps } from './commune/communeOps' import { LogisticsProcs } from './logisticsProcs' import { customLog } from 'utils/logging' -import { packCoord, packCoordList, unpackCoord } from 'other/codec' +import { packCoord, packCoordList, unpackCoord, unpackCoordList } from 'other/codec' import { HaulerServices } from './creeps/roles/haulerServices' import { HaulerOps } from './creeps/roles/haulerOps' import { roomData } from './roomData' @@ -122,8 +122,11 @@ export class RoomOps { room.creepsOfSource = [] - const sourceCount = roomMemory[RoomMemoryKeys.sourceCoords].length - for (let i = 0; i < sourceCount; i++) room.creepsOfSource.push([]) + const packedSourceCoords = roomMemory[RoomMemoryKeys.sourceCoords] + if (packedSourceCoords) { + const sourceCount = packedSourceCoords.length + for (let i = 0; i < sourceCount; i++) room.creepsOfSource.push([]) + } room.squadRequests = new Set() @@ -379,15 +382,15 @@ export class RoomOps { static getSources(room: Room) { if (room.sources !== undefined) return room.sources - const sourceCoords = Memory.rooms[room.name][RoomMemoryKeys.sourceCoords] - if (!sourceCoords) { + const packedSourceCoords = Memory.rooms[room.name][RoomMemoryKeys.sourceCoords] + if (!packedSourceCoords) { throw Error('no sourceCoords') } const sources = new Array() - for (const packedCoord of sourceCoords) { - const coord = unpackCoord(packedCoord) + const sourceCoords = unpackCoordList(packedSourceCoords) + for (const coord of sourceCoords) { for (const source of room.lookForAt(LOOK_SOURCES, coord.x, coord.y)) { sources.push(source) From 6007f83f482774cfe100e25ecf37abbbc9565d1b Mon Sep 17 00:00:00 2001 From: Carson Date: Sun, 4 Feb 2024 01:40:16 -0800 Subject: [PATCH 152/190] cached sources - handle rooms without sources --- src/room/roomOps.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/room/roomOps.ts b/src/room/roomOps.ts index 73d0d7b2d..10b738ce2 100644 --- a/src/room/roomOps.ts +++ b/src/room/roomOps.ts @@ -384,7 +384,10 @@ export class RoomOps { const packedSourceCoords = Memory.rooms[room.name][RoomMemoryKeys.sourceCoords] if (!packedSourceCoords) { - throw Error('no sourceCoords') + const sources = new Array() + + room.sources = sources + return sources } const sources = new Array() From 5e2d1fdd680f86f69acda41ca0a5fd9d94021083 Mon Sep 17 00:00:00 2001 From: Carson Date: Sun, 4 Feb 2024 01:41:18 -0800 Subject: [PATCH 153/190] proper roomMemory reference in haulerNeedOps --- src/room/commune/haulerNeedOps.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/room/commune/haulerNeedOps.ts b/src/room/commune/haulerNeedOps.ts index 1f8088a28..b69a426fd 100644 --- a/src/room/commune/haulerNeedOps.ts +++ b/src/room/commune/haulerNeedOps.ts @@ -37,7 +37,7 @@ export class HaulerNeedOps { const roomMemory = Memory.rooms[this.name] const sourceCount = roomMemory[RoomMemoryKeys.sourceCoords].length - + for (let index = 0; index < sourceCount; index++) { const sourceLink = room.communeManager.sourceLinks[index] if (sourceLink && StructureUtils.isRCLActionable(sourceLink)) continue @@ -53,7 +53,7 @@ export class HaulerNeedOps { // There is no valid hubLink - const roomMemory = Memory.rooms[this.name] + const roomMemory = Memory.rooms[room.name] const sourceCount = roomMemory[RoomMemoryKeys.sourceCoords].length for (let index = 0; index < sourceCount; index++) { From 17f6938c5cdd4f6bb976df3f2666050c6abed3cf Mon Sep 17 00:00:00 2001 From: Carson Date: Sun, 4 Feb 2024 01:49:47 -0800 Subject: [PATCH 154/190] sourceCoords use fixes and improvements --- src/international/customPathFinder.ts | 4 +++- src/room/commune/haulerNeedOps.ts | 13 +++++++------ src/room/creeps/creepPrototypes/creepFunctions.ts | 3 ++- src/room/roomFunctions.ts | 4 +++- src/room/roomOps.ts | 3 ++- 5 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/international/customPathFinder.ts b/src/international/customPathFinder.ts index f47c4f066..f38dd688d 100644 --- a/src/international/customPathFinder.ts +++ b/src/international/customPathFinder.ts @@ -11,12 +11,14 @@ import { defaultSwampCost, impassibleStructureTypes, impassibleStructureTypesSet, + packedCoordLength, roomDimensions, } from '../constants/general' import { packCoord, unpackCoord, unpackCoordList, unpackPosAt, unpackPosList } from 'other/codec' import { LogTypes, customLog } from 'utils/logging' import { forCoordsAroundRange, unpackNumAsCoord, visualizePath } from '../utils/utils' import { RoomUtils } from 'room/roomUtils' +import { RoomOps } from 'room/roomOps' export interface PathGoal { pos: RoomPosition @@ -287,7 +289,7 @@ export class CustomPathFinder { // Weight potential and actual stationary positions - const sourceCount = roomMemory[RoomMemoryKeys.sourceCoords].length + const sourceCount = roomMemory[RoomMemoryKeys.sourceCoords].length / packedCoordLength for (let index = 0; index < sourceCount; index++) { // Loop through each position of harvestPositions, have creeps prefer to avoid diff --git a/src/room/commune/haulerNeedOps.ts b/src/room/commune/haulerNeedOps.ts index b69a426fd..4bf17f77e 100644 --- a/src/room/commune/haulerNeedOps.ts +++ b/src/room/commune/haulerNeedOps.ts @@ -1,7 +1,8 @@ -import { RoomMemoryKeys, RoomStatsKeys, packedPosLength, stamps } from '../../constants/general' +import { RoomMemoryKeys, RoomStatsKeys, packedCoordLength, packedPosLength, stamps } from '../../constants/general' import { StructureUtils } from 'room/structureUtils' import { findCarryPartsRequired } from 'utils/utils' import { CommuneUtils } from './communeUtils' +import { RoomOps } from 'room/roomOps' export class HaulerNeedOps { static run(room: Room) { @@ -28,15 +29,15 @@ export class HaulerNeedOps { } private static sourceNeed(room: Room) { - const packedSourcePaths = Memory.rooms[room.name][RoomMemoryKeys.communeSourcePaths] + const roomMemory = Memory.rooms[room.name] + const packedSourcePaths = roomMemory[RoomMemoryKeys.communeSourcePaths] const estimatedSourceIncome = CommuneUtils.getEstimatedSourceIncome(room) const hubLink = room.roomManager.hubLink if (hubLink && StructureUtils.isRCLActionable(hubLink)) { // There is a valid hubLink - const roomMemory = Memory.rooms[this.name] - const sourceCount = roomMemory[RoomMemoryKeys.sourceCoords].length + const sourceCount = roomMemory[RoomMemoryKeys.sourceCoords].length / packedCoordLength for (let index = 0; index < sourceCount; index++) { const sourceLink = room.communeManager.sourceLinks[index] @@ -53,10 +54,10 @@ export class HaulerNeedOps { // There is no valid hubLink - const roomMemory = Memory.rooms[room.name] - const sourceCount = roomMemory[RoomMemoryKeys.sourceCoords].length + const sourceCount = roomMemory[RoomMemoryKeys.sourceCoords].length / packedCoordLength for (let index = 0; index < sourceCount; index++) { + room.communeManager.communeHaulerNeed += findCarryPartsRequired( packedSourcePaths[index].length / packedPosLength + 3, estimatedSourceIncome[index] * 1.1, diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index 6c64eeb30..0ad53f10c 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -9,6 +9,7 @@ import { WorkTypes, RoomLogisticsRequestTypes, RoomStatsKeys, + packedCoordLength, } from '../../../constants/general' import { findClosestObject, @@ -375,7 +376,7 @@ Creep.prototype.findSourceIndex = function () { let creepThreshold = 1 const roomMemory = Memory.rooms[this.name] - const sourceCount = roomMemory[RoomMemoryKeys.sourceCoords].length + const sourceCount = roomMemory[RoomMemoryKeys.sourceCoords].length / packedCoordLength // So long as the creepThreshold is less than 4 diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index 0f2f15d79..58799618e 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -16,6 +16,7 @@ import { RemoteResourcePathTypes, FlagNames, RoomStatusKeys, + packedCoordLength, } from '../constants/general' import { findAdjacentCoordsToCoord, @@ -1343,7 +1344,8 @@ Room.prototype.findAdjacentPositions = function (rx, ry) { Room.prototype.createWorkRequest = function () { const roomMemory = Memory.rooms[this.name] - if (roomMemory[RoomMemoryKeys.sourceCoords].length < 2) return false + + if (roomMemory[RoomMemoryKeys.sourceCoords].length / packedCoordLength < 2) return false if (Memory.workRequests[this.name]) return false RoomNameUtils.findDynamicScore(this.name) diff --git a/src/room/roomOps.ts b/src/room/roomOps.ts index 10b738ce2..759f4b923 100644 --- a/src/room/roomOps.ts +++ b/src/room/roomOps.ts @@ -9,6 +9,7 @@ import { allStructureTypes, Result, constantRoomTypes, + packedCoordLength, } from '../constants/general' import { StatsManager } from 'international/stats' import { Dashboard, Rectangle, Table } from 'screeps-viz' @@ -124,7 +125,7 @@ export class RoomOps { const packedSourceCoords = roomMemory[RoomMemoryKeys.sourceCoords] if (packedSourceCoords) { - const sourceCount = packedSourceCoords.length + const sourceCount = packedSourceCoords.length / packedCoordLength for (let i = 0; i < sourceCount; i++) room.creepsOfSource.push([]) } From 105854f9abf34dbdf6217607209193e96dd578c5 Mon Sep 17 00:00:00 2001 From: Carson Date: Sun, 4 Feb 2024 12:56:27 -0800 Subject: [PATCH 155/190] fix operator memory references --- src/room/commune/communeOps.ts | 2 +- src/room/creeps/powerCreeps/operator.ts | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/room/commune/communeOps.ts b/src/room/commune/communeOps.ts index 2b15d9d36..0be17f59b 100644 --- a/src/room/commune/communeOps.ts +++ b/src/room/commune/communeOps.ts @@ -304,7 +304,7 @@ export class CommuneOps { static findHaulerCountBasedHaulerCost(room: Room, roomMemory: RoomMemory): number { // We want this many haulers - const targetHaulers = 40 + const targetHaulers = 50 const targetHaulersPercent = (targetHaulers * 0.9) / targetHaulers // How far off we are from our ideal hauler count const costError = roundTo( diff --git a/src/room/creeps/powerCreeps/operator.ts b/src/room/creeps/powerCreeps/operator.ts index 0f6e3a485..4783f6d41 100644 --- a/src/room/creeps/powerCreeps/operator.ts +++ b/src/room/creeps/powerCreeps/operator.ts @@ -22,7 +22,7 @@ export class Operator extends PowerCreep { } managePowerTask?() { - const creepMemory = Memory.creeps[this.name] + const creepMemory = Memory.powerCreeps[this.name] const task = creepMemory[CreepMemoryKeys.powerTask] if (!task) return @@ -43,7 +43,7 @@ export class Operator extends PowerCreep { // Basic tasks runTask?() { - const creepMemory = Memory.creeps[this.name] + const creepMemory = Memory.powerCreeps[this.name] const task = creepMemory[CreepMemoryKeys.task] if (!task && !this.findTask()) return Result.fail @@ -68,7 +68,7 @@ export class Operator extends PowerCreep { const powerSpawn = this.room.roomManager.powerSpawn if (!powerSpawn) return false - const creepMemory = Memory.creeps[this.name] + const creepMemory = Memory.powerCreeps[this.name] creepMemory[CreepMemoryKeys.task] = { [CreepTaskKeys.taskName]: CreepTaskNames.advancedRenew, [CreepTaskKeys.target]: powerSpawn.id, @@ -106,7 +106,7 @@ export class Operator extends PowerCreep { if (controller.isPowerEnabled) return false - const creepMemory = Memory.creeps[this.name] + const creepMemory = Memory.powerCreeps[this.name] creepMemory[CreepMemoryKeys.task] = { [CreepTaskKeys.taskName]: CreepTaskNames.advancedEnablePower, } @@ -145,7 +145,7 @@ export class Operator extends PowerCreep { if (power.cooldown) return false - const creepMemory = Memory.creeps[this.name] + const creepMemory = Memory.powerCreeps[this.name] creepMemory[CreepMemoryKeys.task] = { [CreepTaskKeys.taskName]: CreepTaskNames.advancedGenerateOps, } @@ -171,7 +171,7 @@ export class Operator extends PowerCreep { const storingStructure = CommuneUtils.storingStructures(this.room)[0] if (!storingStructure) return false - const creepMemory = Memory.creeps[this.name] + const creepMemory = Memory.powerCreeps[this.name] creepMemory[CreepMemoryKeys.task] = { [CreepTaskKeys.taskName]: CreepTaskNames.transferOps, [CreepTaskKeys.target]: storingStructure.id, @@ -194,7 +194,7 @@ export class Operator extends PowerCreep { // Complex power tasks findPowerTask?() { - const creepMemory = Memory.creeps[this.name] + const creepMemory = Memory.powerCreeps[this.name] let task = creepMemory[CreepMemoryKeys.powerTask] if (task) { return task @@ -302,7 +302,7 @@ export class Operator extends PowerCreep { // this.powered = true - delete Memory.creeps[CreepMemoryKeys.powerTask] + delete Memory.powerCreeps[CreepMemoryKeys.powerTask] return Result.success } From 032b8713228f526b38c6cb5c1cec49393da8421d Mon Sep 17 00:00:00 2001 From: Carson Date: Sun, 4 Feb 2024 13:03:11 -0800 Subject: [PATCH 156/190] fix lab reaction snoozing --- src/room/commune/labs.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/room/commune/labs.ts b/src/room/commune/labs.ts index 599f4b845..563efe558 100644 --- a/src/room/commune/labs.ts +++ b/src/room/commune/labs.ts @@ -523,6 +523,7 @@ export class LabManager { if (!nextReaction) { this.assignNoReaction() this.snoozeUntil = Game.time + 30 + return } // was... But I kept getting negative values in the targetAmount. I think I jusut need to get to the cycleAmount instead. From f97bd9fa330c8d34e663374bb1abd7c4a24dddc1 Mon Sep 17 00:00:00 2001 From: Carson Date: Sun, 4 Feb 2024 13:46:50 -0800 Subject: [PATCH 157/190] fix operator task running, invalid sourceCoord references --- src/room/creeps/powerCreeps/operator.ts | 9 +++++---- src/room/roomFunctions.ts | 4 +++- src/room/roomNameOps.ts | 2 -- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/room/creeps/powerCreeps/operator.ts b/src/room/creeps/powerCreeps/operator.ts index 4783f6d41..720779886 100644 --- a/src/room/creeps/powerCreeps/operator.ts +++ b/src/room/creeps/powerCreeps/operator.ts @@ -38,16 +38,17 @@ export class Operator extends PowerCreep { taskTarget._reservePowers.add(task[CreepPowerTaskKeys.power]) } - endRun() { } + endRun() {} // Basic tasks runTask?() { const creepMemory = Memory.powerCreeps[this.name] - const task = creepMemory[CreepMemoryKeys.task] - if (!task && !this.findTask()) return Result.fail + if (!creepMemory[CreepMemoryKeys.task] && !this.findTask()) { + return Result.fail + } - const taskResult = (this as any)[task[CreepTaskKeys.taskName]]() + const taskResult = (this as any)[creepMemory[CreepMemoryKeys.task][CreepTaskKeys.taskName]]() if (!taskResult) return taskResult === Result.fail delete creepMemory[CreepMemoryKeys.task] diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index 58799618e..b0e328a1c 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -1344,8 +1344,10 @@ Room.prototype.findAdjacentPositions = function (rx, ry) { Room.prototype.createWorkRequest = function () { const roomMemory = Memory.rooms[this.name] + const packedSourceCoords = roomMemory[RoomMemoryKeys.sourceCoords] - if (roomMemory[RoomMemoryKeys.sourceCoords].length / packedCoordLength < 2) return false + if (!packedSourceCoords) return false + if (packedSourceCoords.length / packedCoordLength < 2) return false if (Memory.workRequests[this.name]) return false RoomNameUtils.findDynamicScore(this.name) diff --git a/src/room/roomNameOps.ts b/src/room/roomNameOps.ts index 4d5d1e4a2..0d7c7c32a 100644 --- a/src/room/roomNameOps.ts +++ b/src/room/roomNameOps.ts @@ -72,8 +72,6 @@ export class RoomNameOps { return room.scoutEnemyRoom() } - room.createWorkRequest() - // There is no controller owner if (room.scoutRemote()) return roomMemory[RoomMemoryKeys.type] From c8e717360308ff7a3f66c629555740a1f18bb333 Mon Sep 17 00:00:00 2001 From: Carson Date: Mon, 5 Feb 2024 00:14:02 -0800 Subject: [PATCH 158/190] css classes for logging --- src/main.ts | 2 ++ src/room/commune/workRequest.ts | 5 +++ src/utils/logging.ts | 58 +++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+) diff --git a/src/main.ts b/src/main.ts index c7aacba1c..7562f7c4d 100644 --- a/src/main.ts +++ b/src/main.ts @@ -38,6 +38,7 @@ import { Utils } from 'utils/utils' import { Procs } from 'utils/procs' import { CommuneDataOps } from 'room/commune/communeData' import { GarbageCollector } from 'international/garbageCollector' +import { LogOps } from 'utils/logging' export function originalLoop() { MemoryHack.runHack() @@ -56,6 +57,7 @@ export function originalLoop() { InitManager.tryInit() TickInit.configGeneral() + LogOps.registerStyles() StatsManager.tickInit() CollectiveManager.update() GarbageCollector.tryRun() diff --git a/src/room/commune/workRequest.ts b/src/room/commune/workRequest.ts index 832e9e25a..1b5649fab 100644 --- a/src/room/commune/workRequest.ts +++ b/src/room/commune/workRequest.ts @@ -95,6 +95,11 @@ export class WorkRequestManager { } const requestRoom = Game.rooms[requestName] + if (!requestRoom && Game.gcl.level === CollectiveManager.communes.size) { + this.stopResponse(true) + return + } + if (!request[WorkRequestKeys.forAlly] && (!requestRoom || !requestRoom.controller.my)) { request[WorkRequestKeys.claimer] = 1 return diff --git a/src/utils/logging.ts b/src/utils/logging.ts index 8616401cf..b066349e2 100644 --- a/src/utils/logging.ts +++ b/src/utils/logging.ts @@ -58,6 +58,9 @@ interface LogOpts { const positionPaddingPixels = 8 +/** + * @deprecated + */ export function customLog(title: any, message?: any, opts?: LogOpts) { if (!global.settings.logging) return @@ -82,6 +85,61 @@ export function customLog(title: any, message?: any, opts?: LogOpts) { }` } +/** + * @deprecated + */ export function stringifyLog(title: any, message: any, opts?: LogOpts) { return customLog(title, DebugUtils.stringify(message), opts) } + +export class LogOps { + static customLog(title: any, message?: any, opts?: LogOpts) { + if (!global.settings.logging) return + + if (!opts) opts = {} + if (!global.settings.debugLogging && opts.type === LogTypes.debug) return + + const logType = opts.type ?? LogTypes.info + const logProperties = logTypeProperties[logType] + + const BGColor = opts.BGColor ?? logProperties.BGColor + const textColor = opts.textColor ?? logProperties.textColor + + // Create the title + CollectiveManager.logs += `
${logProperties.preface} ${title}:
` + + CollectiveManager.logs += `
${message ?? ''}
` + } + + static stringifyLog(title: any, message: any, opts?: LogOpts) { + return this.customLog(title, DebugUtils.stringify(message), opts) + } + + static registerStyles() { + const stylesID = 'styles' + const css = + `.consolePrefaceParent { + style='width: 100vw; text-align: center; align-items: center; justify-content: left; display: flex; + }` + + `consolePrefaceChild { + padding: 3px; font-size: 14px; font-weight: 600; + }` + + `.consoleMessage { + background-color: rgb(0, 0, 0, 0.15); border-radius:5px; padding: 1px 10px 1px 10px; font-size: 14px; font-weight: 200; + }` + + console.log( + ``, + ) + } +} From d279ce726e40d77e0d95df5f4fbd804691cd863b Mon Sep 17 00:00:00 2001 From: Pieter Date: Mon, 5 Feb 2024 10:59:39 +0000 Subject: [PATCH 159/190] Upgraded screeps-performance-server --- package-lock.json | 18 +++++++++--------- package.json | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9f11931ce..fa1fae274 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "the-international-screeps-bot", - "version": "2.118.0", + "version": "2.119.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "the-international-screeps-bot", - "version": "2.118.0", + "version": "2.119.0", "license": "GNU GPLv3", "dependencies": { "base32768": "^3.0.1", @@ -53,7 +53,7 @@ "rollup-plugin-typescript2": "^0.36.0", "screeps-grafana-go_carbon": "^1.0.5", "screeps-jest": "^2.0.2", - "screeps-performance-server": "^1.12.3", + "screeps-performance-server": "^1.13.0", "screeps-viz": "^2.1.3", "sinon": "^6.3.5", "sinon-chai": "^3.2.0", @@ -19387,9 +19387,9 @@ } }, "node_modules/screeps-performance-server": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.12.3.tgz", - "integrity": "sha512-WIiOIggaiRN+jpRo7jFiMKSKmujkPS2dgV/srxvqTgEpaCw8GmpkXVsmPAA4zVbQL+8skIHQF0TvEr8z1/UYnQ==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.13.0.tgz", + "integrity": "sha512-Q/xm6ththLS9VJsXJbRyK1EhbakNngxohPOC2eO09YZj+b+iF3HapTImoB/fJH8nMRSH+PALUYqShww/zJYbNA==", "dev": true, "dependencies": { "@octokit/core": "^4.2.0", @@ -34945,9 +34945,9 @@ "requires": {} }, "screeps-performance-server": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.12.3.tgz", - "integrity": "sha512-WIiOIggaiRN+jpRo7jFiMKSKmujkPS2dgV/srxvqTgEpaCw8GmpkXVsmPAA4zVbQL+8skIHQF0TvEr8z1/UYnQ==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.13.0.tgz", + "integrity": "sha512-Q/xm6ththLS9VJsXJbRyK1EhbakNngxohPOC2eO09YZj+b+iF3HapTImoB/fJH8nMRSH+PALUYqShww/zJYbNA==", "dev": true, "requires": { "@octokit/core": "^4.2.0", diff --git a/package.json b/package.json index ea00a8d7e..16c40b030 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "rollup-plugin-typescript2": "^0.36.0", "screeps-grafana-go_carbon": "^1.0.5", "screeps-jest": "^2.0.2", - "screeps-performance-server": "^1.12.3", + "screeps-performance-server": "^1.13.0", "screeps-viz": "^2.1.3", "sinon": "^6.3.5", "sinon-chai": "^3.2.0", From 6fbdf039e7a40dba921ff69ebffc8a3b92fbb9a6 Mon Sep 17 00:00:00 2001 From: Pieter Date: Mon, 5 Feb 2024 13:06:27 +0000 Subject: [PATCH 160/190] Upgraded screeps performance server --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index fa1fae274..645ff7c64 100644 --- a/package-lock.json +++ b/package-lock.json @@ -53,7 +53,7 @@ "rollup-plugin-typescript2": "^0.36.0", "screeps-grafana-go_carbon": "^1.0.5", "screeps-jest": "^2.0.2", - "screeps-performance-server": "^1.13.0", + "screeps-performance-server": "^1.13.1", "screeps-viz": "^2.1.3", "sinon": "^6.3.5", "sinon-chai": "^3.2.0", @@ -19387,9 +19387,9 @@ } }, "node_modules/screeps-performance-server": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.13.0.tgz", - "integrity": "sha512-Q/xm6ththLS9VJsXJbRyK1EhbakNngxohPOC2eO09YZj+b+iF3HapTImoB/fJH8nMRSH+PALUYqShww/zJYbNA==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.13.1.tgz", + "integrity": "sha512-v2C67M+bgZPQJd/nURDvmxPR0vg036Kk4FbKijkn7s0G4sACukDCJV3O2o9dRalVy2nfiQAKqRTJ/jwtayy1yw==", "dev": true, "dependencies": { "@octokit/core": "^4.2.0", @@ -34945,9 +34945,9 @@ "requires": {} }, "screeps-performance-server": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.13.0.tgz", - "integrity": "sha512-Q/xm6ththLS9VJsXJbRyK1EhbakNngxohPOC2eO09YZj+b+iF3HapTImoB/fJH8nMRSH+PALUYqShww/zJYbNA==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.13.1.tgz", + "integrity": "sha512-v2C67M+bgZPQJd/nURDvmxPR0vg036Kk4FbKijkn7s0G4sACukDCJV3O2o9dRalVy2nfiQAKqRTJ/jwtayy1yw==", "dev": true, "requires": { "@octokit/core": "^4.2.0", diff --git a/package.json b/package.json index 16c40b030..4b8df7edf 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "rollup-plugin-typescript2": "^0.36.0", "screeps-grafana-go_carbon": "^1.0.5", "screeps-jest": "^2.0.2", - "screeps-performance-server": "^1.13.0", + "screeps-performance-server": "^1.13.1", "screeps-viz": "^2.1.3", "sinon": "^6.3.5", "sinon-chai": "^3.2.0", From c86633635d3fc9e1973e83313081d949d45c7e39 Mon Sep 17 00:00:00 2001 From: Pieter Date: Mon, 5 Feb 2024 13:18:22 +0000 Subject: [PATCH 161/190] Upgrade screeps-performance-server --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 645ff7c64..4a8af583e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -53,7 +53,7 @@ "rollup-plugin-typescript2": "^0.36.0", "screeps-grafana-go_carbon": "^1.0.5", "screeps-jest": "^2.0.2", - "screeps-performance-server": "^1.13.1", + "screeps-performance-server": "^1.13.2", "screeps-viz": "^2.1.3", "sinon": "^6.3.5", "sinon-chai": "^3.2.0", @@ -19387,9 +19387,9 @@ } }, "node_modules/screeps-performance-server": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.13.1.tgz", - "integrity": "sha512-v2C67M+bgZPQJd/nURDvmxPR0vg036Kk4FbKijkn7s0G4sACukDCJV3O2o9dRalVy2nfiQAKqRTJ/jwtayy1yw==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.13.2.tgz", + "integrity": "sha512-NSdc94XYxTiY0m4t4F7RlpKGeJmeupRDJFQeayxFjv/plekH9/nUBtGrx5KynTz9qNhApQTexUOJrK864FD3yw==", "dev": true, "dependencies": { "@octokit/core": "^4.2.0", @@ -34945,9 +34945,9 @@ "requires": {} }, "screeps-performance-server": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.13.1.tgz", - "integrity": "sha512-v2C67M+bgZPQJd/nURDvmxPR0vg036Kk4FbKijkn7s0G4sACukDCJV3O2o9dRalVy2nfiQAKqRTJ/jwtayy1yw==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.13.2.tgz", + "integrity": "sha512-NSdc94XYxTiY0m4t4F7RlpKGeJmeupRDJFQeayxFjv/plekH9/nUBtGrx5KynTz9qNhApQTexUOJrK864FD3yw==", "dev": true, "requires": { "@octokit/core": "^4.2.0", diff --git a/package.json b/package.json index 4b8df7edf..deebce7cd 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "rollup-plugin-typescript2": "^0.36.0", "screeps-grafana-go_carbon": "^1.0.5", "screeps-jest": "^2.0.2", - "screeps-performance-server": "^1.13.1", + "screeps-performance-server": "^1.13.2", "screeps-viz": "^2.1.3", "sinon": "^6.3.5", "sinon-chai": "^3.2.0", From 85efe7c084aac4311a872b7779e2c98498c9e50b Mon Sep 17 00:00:00 2001 From: Carson Date: Mon, 5 Feb 2024 15:46:55 -0800 Subject: [PATCH 162/190] dysfunctional log css classes --- src/international/creepOrganizer.ts | 2 +- src/international/customPathFinder.ts | 4 +- src/international/endTick.ts | 12 +- src/international/flags/flags.ts | 8 +- src/international/market/marketOrders.ts | 2 +- src/international/powerCreepOrganizer.ts | 2 +- src/international/respawn.ts | 2 +- src/international/stats.ts | 4 +- src/main.ts | 2 +- src/room/commune/communeOps.ts | 8 +- src/room/commune/defenceProcs.ts | 11 +- src/room/commune/links.ts | 2 +- .../spawning/spawnRequestConstructors.ts | 667 +++++++++--------- src/room/commune/spawning/spawnRequests.ts | 2 +- .../commune/spawning/spawningStructureOps.ts | 16 +- src/room/commune/terminal/terminal.old.ts | 2 +- src/room/commune/terminal/terminalProcs.ts | 6 +- src/room/commune/terminal/tradingUtils.ts | 2 +- src/room/construction/basePlans.ts | 2 +- src/room/construction/construction.ts | 2 +- src/room/creeps/creepAdditions.ts | 2 +- src/room/creeps/creepProcs.ts | 30 +- src/room/creeps/creepRoleManager.ts | 82 +-- src/room/creeps/endTickCreepManager.ts | 2 +- src/room/creeps/myCreepServices.ts | 6 +- src/room/creeps/powerCreepRoleManager.ts | 4 +- src/room/creeps/powerCreeps/operator.ts | 6 +- src/room/creeps/roleManagers/antifa/antifa.ts | 2 +- .../creeps/roleManagers/commune/builder.ts | 2 +- src/room/room.ts | 2 +- src/room/roomFunctions.ts | 4 +- src/room/roomNameUtils.ts | 4 +- src/room/roomObjectAdditions.ts | 2 +- src/room/roomOps.ts | 5 +- src/room/roomServices.ts | 4 +- src/room/roomVisuals.ts | 2 +- src/types/settings.ts | 2 +- src/utils/{logging.ts => logOps.ts} | 67 +- src/utils/procs.ts | 4 +- src/utils/utils.ts | 4 +- 40 files changed, 507 insertions(+), 487 deletions(-) rename src/utils/{logging.ts => logOps.ts} (67%) diff --git a/src/international/creepOrganizer.ts b/src/international/creepOrganizer.ts index c38de382c..db2ec1f63 100644 --- a/src/international/creepOrganizer.ts +++ b/src/international/creepOrganizer.ts @@ -5,7 +5,7 @@ import { remoteRoles, roomLogisticsRoles, } from '../constants/general' -import { customLog } from 'utils/logging' +import { LogOps } from 'utils/logOps' import { CollectiveManager } from './collective' import { packCoord } from 'other/codec' import { StatsManager } from './stats' diff --git a/src/international/customPathFinder.ts b/src/international/customPathFinder.ts index f38dd688d..480c3e2fe 100644 --- a/src/international/customPathFinder.ts +++ b/src/international/customPathFinder.ts @@ -15,7 +15,7 @@ import { roomDimensions, } from '../constants/general' import { packCoord, unpackCoord, unpackCoordList, unpackPosAt, unpackPosList } from 'other/codec' -import { LogTypes, customLog } from 'utils/logging' +import { LogTypes, LogOps } from 'utils/logOps' import { forCoordsAroundRange, unpackNumAsCoord, visualizePath } from '../utils/utils' import { RoomUtils } from 'room/roomUtils' import { RoomOps } from 'room/roomOps' @@ -448,7 +448,7 @@ export class CustomPathFinder { // If the pathFindResult is incomplete, inform an empty array if (pathFinderResult.incomplete) { - customLog( + LogOps.log( 'Incomplete Path', `${args.origin} -> ${args.goals[0].pos} range: ${args.goals[0].range} goals: ${ args.goals.length diff --git a/src/international/endTick.ts b/src/international/endTick.ts index f45876a81..299bd19a6 100644 --- a/src/international/endTick.ts +++ b/src/international/endTick.ts @@ -1,5 +1,5 @@ import { customColors } from '../constants/general' -import { LogTypes, customLog } from 'utils/logging' +import { LogTypes, LogOps } from 'utils/logOps' import { findCPUColor, findCPUOf } from 'utils/utils' import { CollectiveManager } from './collective' @@ -15,16 +15,16 @@ export class EndTickManager { // Fill up the console with empty logs for (let i = 0; i < interval; i += 1) console.log() - customLog('General data', '⬇️') - customLog('Creeps total', Memory.stats.creeps, { position: 1 }) - customLog('Heap used', global.usedHeap(), { position: 1 }) - customLog('Tick', Game.time, { position: 1 }) + LogOps.log('General data', '⬇️') + LogOps.log('Creeps total', Memory.stats.creeps, { position: 1 }) + LogOps.log('Heap used', global.usedHeap(), { position: 1 }) + LogOps.log('Tick', Game.time, { position: 1 }) // Get the CPU color based on the amount of used CPU const CPUColor = findCPUColor() - customLog( + LogOps.log( 'CPU used total', `${Game.cpu.getUsed().toFixed(2)} / ${Game.cpu.limit} CPU Bucket: ${Game.cpu.bucket}`, { diff --git a/src/international/flags/flags.ts b/src/international/flags/flags.ts index 2c23c5c50..03bb11ac2 100644 --- a/src/international/flags/flags.ts +++ b/src/international/flags/flags.ts @@ -16,7 +16,7 @@ import { CombatRequestTypes } from 'types/internationalRequests' import { RoomNameUtils } from 'room/roomNameUtils' import { packCoord } from 'other/codec' import { findObjectWithID, isAlly } from 'utils/utils' -import { customLog } from 'utils/logging' +import { LogOps } from 'utils/logOps' import { RoomUtils } from 'room/roomUtils' import { SpawnRequestConstructorsByType } from 'room/commune/spawning/spawningStructureOps' import { RoomOps } from 'room/roomOps' @@ -423,10 +423,10 @@ export class FlagManager { const stampAnchors = room.roomManager.stampAnchors if (!stampAnchors) return - customLog('sourceLinks stampAnchors', JSON.stringify(stampAnchors.sourceLink)) + LogOps.log('sourceLinks stampAnchors', JSON.stringify(stampAnchors.sourceLink)) const links = room.communeManager.sourceLinks - customLog('sourceLinks', links) + LogOps.log('sourceLinks', links) for (let sourceIndex = 0; sourceIndex < links.length; sourceIndex++) { const link = links[sourceIndex] if (!link) continue @@ -458,7 +458,7 @@ export class FlagManager { const roomName = flagNameParts[1] || flag.pos.roomName const dynamicScore = RoomNameUtils.findDynamicScore(roomName) - customLog('dynamic score for ' + roomName, dynamicScore) + LogOps.log('dynamic score for ' + roomName, dynamicScore) } private spawnRequestVisuals(flagName: string, flagNameParts: string[]) { diff --git a/src/international/market/marketOrders.ts b/src/international/market/marketOrders.ts index d43661148..fe1b1a73d 100644 --- a/src/international/market/marketOrders.ts +++ b/src/international/market/marketOrders.ts @@ -1,7 +1,7 @@ import { findHighestScore, randomIntRange, randomTick, Utils } from 'utils/utils' import { PlayerMemoryKeys, Result, RoomMemoryKeys } from '../../constants/general' import { CollectiveManager } from '../collective' -import { customLog } from 'utils/logging' +import { LogOps } from 'utils/logOps' const optimizeOrdersInterval = randomIntRange(900, 1000) diff --git a/src/international/powerCreepOrganizer.ts b/src/international/powerCreepOrganizer.ts index 6617399e0..3a0ca411e 100644 --- a/src/international/powerCreepOrganizer.ts +++ b/src/international/powerCreepOrganizer.ts @@ -1,6 +1,6 @@ import { creepClasses } from 'room/creeps/creepClasses' import { customColors, remoteRoles } from '../constants/general' -import { customLog } from 'utils/logging' +import { LogOps } from 'utils/logOps' import { CollectiveManager } from './collective' import { packCoord } from 'other/codec' import { powerCreepClasses } from 'room/creeps/powerCreepClasses' diff --git a/src/international/respawn.ts b/src/international/respawn.ts index 1eafcfd81..fb0f0a9fc 100644 --- a/src/international/respawn.ts +++ b/src/international/respawn.ts @@ -1,4 +1,4 @@ -import { customLog } from 'utils/logging' +import { LogOps } from 'utils/logOps' /** * Credit to SemperRabbit for this nice piece of code! diff --git a/src/international/stats.ts b/src/international/stats.ts index 3f84cc3e9..ef75d12aa 100644 --- a/src/international/stats.ts +++ b/src/international/stats.ts @@ -6,7 +6,7 @@ import { RoomStatsKeys, RoomTypes, } from '../constants/general' -import { customLog, LogTypes } from 'utils/logging' +import { LogOps, LogTypes } from 'utils/logOps' import { CollectiveManager } from './collective' export interface RoomStats { @@ -326,7 +326,7 @@ export class StatsManager { ? Game.cpu.getUsed() : // limit * time step from last stats recording Game.cpu.limit * (Game.time - Memory.stats.lastTick) - /* customLog('STATS' + (Game.time - Memory.stats.lastTick), usedCPU) */ + /* LogOps.LogOps'STATS' + (Game.time - Memory.stats.lastTick), usedCPU) */ Memory.stats.cpu = { bucket: Game.cpu.bucket, limit: Game.cpu.limit, diff --git a/src/main.ts b/src/main.ts index 7562f7c4d..9d0ffc47b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -38,7 +38,7 @@ import { Utils } from 'utils/utils' import { Procs } from 'utils/procs' import { CommuneDataOps } from 'room/commune/communeData' import { GarbageCollector } from 'international/garbageCollector' -import { LogOps } from 'utils/logging' +import { LogOps } from 'utils/logOps' export function originalLoop() { MemoryHack.runHack() diff --git a/src/room/commune/communeOps.ts b/src/room/commune/communeOps.ts index 0be17f59b..c2a5125e2 100644 --- a/src/room/commune/communeOps.ts +++ b/src/room/commune/communeOps.ts @@ -12,7 +12,7 @@ import { import { Utils, randomIntRange, randomTick, roundTo } from 'utils/utils' import { CollectiveManager } from 'international/collective' import { RoomNameUtils } from 'room/roomNameUtils' -import { customLog, LogTypes } from 'utils/logging' +import { LogOps, LogTypes } from 'utils/logOps' import { ObserverProcs } from './observerProcs' import { TerminalProcs } from './terminal/terminalProcs' import { LogisticsProcs } from 'room/logisticsProcs' @@ -166,7 +166,7 @@ export class CommuneOps { let CPUUsed = Game.cpu.getUsed() - customLog('CPU TEST 1 ' + room.name, Game.cpu.getUsed() - CPUUsed, { + LogOps.log('CPU TEST 1 ' + room.name, Game.cpu.getUsed() - CPUUsed, { type: LogTypes.info, }) } @@ -222,7 +222,7 @@ export class CommuneOps { let CPUUsed = Game.cpu.getUsed() - customLog('CPU TEST 1 ' + room.name, Game.cpu.getUsed() - CPUUsed, { + LogOps.log('CPU TEST 1 ' + room.name, Game.cpu.getUsed() - CPUUsed, { type: LogTypes.info, }) } @@ -231,7 +231,7 @@ export class CommuneOps { * Debug */ static visualizeSpawningStructuresByNeed(room: Room) { - customLog('spawningStructuresByNeed', room.communeManager.spawningStructuresByNeed, { + LogOps.log('spawningStructuresByNeed', room.communeManager.spawningStructuresByNeed, { type: LogTypes.error, }) for (const structure of room.communeManager.spawningStructuresByNeed) { diff --git a/src/room/commune/defenceProcs.ts b/src/room/commune/defenceProcs.ts index 74aa244da..96261989c 100644 --- a/src/room/commune/defenceProcs.ts +++ b/src/room/commune/defenceProcs.ts @@ -11,9 +11,9 @@ import { PlayerManager } from "international/players" import { simpleAllies } from "international/simpleAllies/simpleAllies" import { packCoord } from "other/codec" import { RoomNameUtils } from "room/roomNameUtils" -import { customLog, LogTypes } from "utils/logging" -import { findObjectWithID, isAlly, randomIntRange } from "utils/utils" -import { DefenceUtils } from "./defenceUtils" +import { LogOps, LogTypes } from 'utils/logOps' +import { findObjectWithID, isAlly, randomIntRange } from 'utils/utils' +import { DefenceUtils } from './defenceUtils' export class DefenceProcs { static run(room: Room) { @@ -89,7 +89,6 @@ export class DefenceProcs { } private static assignDefenceTargets(room: Room) { - // Sort by estimated percent health change const defenderEnemyTargetsByDamage = Array.from( @@ -106,7 +105,7 @@ export class DefenceProcs { ) }) - customLog('ENEMY TARGETS BY DAMAGE', defenderEnemyTargetsByDamage, { + LogOps.log('ENEMY TARGETS BY DAMAGE', defenderEnemyTargetsByDamage, { type: LogTypes.warning, }) @@ -151,7 +150,6 @@ export class DefenceProcs { } static manageDefenceRequests(room: Room) { - if (!room.towerInferiority) return const hasTowers = !!room.roomManager.structures.tower.length @@ -194,7 +192,6 @@ export class DefenceProcs { } static manageThreat(room: Room) { - const presentThreat = DefenceUtils.findPresentThreat(room) const roomMemory = Memory.rooms[room.name] diff --git a/src/room/commune/links.ts b/src/room/commune/links.ts index 65bfad0bd..7056f65ff 100644 --- a/src/room/commune/links.ts +++ b/src/room/commune/links.ts @@ -3,7 +3,7 @@ import { linkReceiveTreshold, linkSendThreshold, } from '../../constants/general' -import { customLog } from 'utils/logging' +import { LogOps } from 'utils/logOps' import { CommuneManager } from './commune' import { StructureUtils } from 'room/structureUtils' import { CommuneUtils } from './communeUtils' diff --git a/src/room/commune/spawning/spawnRequestConstructors.ts b/src/room/commune/spawning/spawnRequestConstructors.ts index f4c8c670a..e9813ad44 100644 --- a/src/room/commune/spawning/spawnRequestConstructors.ts +++ b/src/room/commune/spawning/spawnRequestConstructors.ts @@ -1,430 +1,425 @@ import { SpawnRequest } from 'types/spawnRequest' -import { LogTypes, customLog } from 'utils/logging' +import { LogTypes, LogOps } from 'utils/logOps' import { SpawnRequestArgs } from 'types/spawnRequest' import { CreepMemoryKeys, FlagNames } from '../../../constants/general' export type SpawnRequestConstructor = (room: Room, args: SpawnRequestArgs) => SpawnRequest[] export class SpawnRequestConstructors { - /** - * Generally, all creeps will have the same bodies - */ - static spawnRequestIndividualUniform(room: Room, args: SpawnRequestArgs) { - const spawnRequests: SpawnRequest[] = [] - - const maxCostPerCreep = Math.max( - args.maxCostPerCreep ?? room.energyCapacityAvailable, - args.minCostPerCreep, - ) - - // So long as minCreeps is more than the current number of creeps - - while ( - args.creepsQuota > - (args.spawnGroup ? args.spawnGroup.length : room.creepsFromRoom[args.role].length) - ) { - // Construct important imformation for the spawnRequest - - let bodyPartCounts: { [key in PartsByPriority]: number } = { - tough: 0, - claim: 0, - attack: 0, - ranged_attack: 0, - secondaryTough: 0, - work: 0, - carry: 0, - move: 0, - secondaryAttack: 0, - heal: 0, - } - - let tier = 0 - let cost = 0 - - let partCost - - // If there are defaultParts - - if (args.defaultParts.length) { - tier += 1 - - // Loop through defaultParts - - for (const part of args.defaultParts) { - partCost = BODYPART_COST[part] - if (cost + partCost > maxCostPerCreep) break - - cost += partCost - bodyPartCounts[part] += 1 - } - } - - // If there are extraParts - - if (args.extraParts.length) { - // Use the partsMultiplier to decide how many extraParts are needed on top of the defaultParts, at a max of 50 - - let remainingAllowedParts = Math.min( - 50 - args.defaultParts.length, - args.extraParts.length * args.partsMultiplier, - ) + /** + * Generally, all creeps will have the same bodies + */ + static spawnRequestIndividualUniform(room: Room, args: SpawnRequestArgs) { + const spawnRequests: SpawnRequest[] = [] + + const maxCostPerCreep = Math.max( + args.maxCostPerCreep ?? room.energyCapacityAvailable, + args.minCostPerCreep, + ) + + // So long as minCreeps is more than the current number of creeps + + while ( + args.creepsQuota > + (args.spawnGroup ? args.spawnGroup.length : room.creepsFromRoom[args.role].length) + ) { + // Construct important imformation for the spawnRequest + + let bodyPartCounts: { [key in PartsByPriority]: number } = { + tough: 0, + claim: 0, + attack: 0, + ranged_attack: 0, + secondaryTough: 0, + work: 0, + carry: 0, + move: 0, + secondaryAttack: 0, + heal: 0, + } + + let tier = 0 + let cost = 0 + + let partCost + + // If there are defaultParts + + if (args.defaultParts.length) { + tier += 1 + + // Loop through defaultParts + + for (const part of args.defaultParts) { + partCost = BODYPART_COST[part] + if (cost + partCost > maxCostPerCreep) break + + cost += partCost + bodyPartCounts[part] += 1 + } + } - // So long as the cost is less than the maxCostPerCreep and there are remainingAllowedParts + // If there are extraParts - while (cost < maxCostPerCreep && remainingAllowedParts > 0) { - const addedParts: BodyPartConstant[] = [] + if (args.extraParts.length) { + // Use the partsMultiplier to decide how many extraParts are needed on top of the defaultParts, at a max of 50 - // Loop through each part in extraParts + let remainingAllowedParts = Math.min( + 50 - args.defaultParts.length, + args.extraParts.length * args.partsMultiplier, + ) - for (const part of args.extraParts) { - // And add the part's cost to the cost + // So long as the cost is less than the maxCostPerCreep and there are remainingAllowedParts - cost += BODYPART_COST[part] + while (cost < maxCostPerCreep && remainingAllowedParts > 0) { + const addedParts: BodyPartConstant[] = [] - // Otherwise add the part the the body + // Loop through each part in extraParts - addedParts.push(part) + for (const part of args.extraParts) { + // And add the part's cost to the cost - // Reduce remainingAllowedParts + cost += BODYPART_COST[part] - remainingAllowedParts -= 1 - } + // Otherwise add the part the the body - // If the cost is more than the maxCostPerCreep or there are negative remainingAllowedParts + addedParts.push(part) - if (cost > maxCostPerCreep || remainingAllowedParts < 0) { - // Assign partIndex as the length of extraParts + // Reduce remainingAllowedParts - let partIndex = args.extraParts.length - 1 + remainingAllowedParts -= 1 + } - while (partIndex >= 0) { - const part = args.extraParts[partIndex] + // If the cost is more than the maxCostPerCreep or there are negative remainingAllowedParts - // Get the cost of the part + if (cost > maxCostPerCreep || remainingAllowedParts < 0) { + // Assign partIndex as the length of extraParts - partCost = BODYPART_COST[part] + let partIndex = args.extraParts.length - 1 - // If the cost minus partCost is below minCost, stop the loop + while (partIndex >= 0) { + const part = args.extraParts[partIndex] - if (cost - partCost < args.minCostPerCreep) break + // Get the cost of the part - // And remove the part's cost to the cost + partCost = BODYPART_COST[part] - cost -= partCost + // If the cost minus partCost is below minCost, stop the loop - // Remove the last part in the body + if (cost - partCost < args.minCostPerCreep) break - addedParts.pop() + // And remove the part's cost to the cost - // Increase remainingAllowedParts + cost -= partCost - remainingAllowedParts += 1 + // Remove the last part in the body - // Decrease the partIndex + addedParts.pop() - partIndex -= 1 - } + // Increase remainingAllowedParts - // Increase tier by a percentage (2 decimals) of the extraParts it added + remainingAllowedParts += 1 - tier += Math.floor((addedParts.length / args.extraParts.length) * 100) / 100 - for (const part of addedParts) bodyPartCounts[part] += 1 - break - } + // Decrease the partIndex - tier += 1 - for (const part of addedParts) bodyPartCounts[part] += 1 - } + partIndex -= 1 } - // Create a spawnRequest using previously constructed information - - spawnRequests.push({ - role: args.role, - priority: args.priority, - defaultParts: args.defaultParts.length, - bodyPartCounts, - spawnTarget: args.spawnTarget, - tier, - cost, - extraOpts: { - memory: args.memoryAdditions as CreepMemory, - }, - }) - - args.creepsQuota -= 1 - } + // Increase tier by a percentage (2 decimals) of the extraParts it added - return spawnRequests - } - - static spawnRequestGroupDiverse(room: Room, args: SpawnRequestArgs) { - - const spawnRequests: SpawnRequest[] = [] - - // Guard against bad arguments, otherwise it can cause the block below to get into an infinate loop and crash. - if (args.extraParts.length == 0) { - customLog('spawnRequestByGroup', '0 length extraParts?' + JSON.stringify(args), { - type: LogTypes.error, - }) - return spawnRequests - } - - const maxCostPerCreep = Math.max( - Math.min(args.maxCostPerCreep ?? room.energyCapacityAvailable, room.energyCapacityAvailable), - args.minCostPerCreep, - ) - - // Find the totalExtraParts using the partsMultiplier + tier += Math.floor((addedParts.length / args.extraParts.length) * 100) / 100 + for (const part of addedParts) bodyPartCounts[part] += 1 + break + } - let totalExtraParts = Math.floor(args.extraParts.length * args.partsMultiplier) - - // Construct from totalExtraParts at a max of 50 - number of defaultParts - - const maxPartsPerCreep = Math.min(50 - args.defaultParts.length, totalExtraParts) - - // Add up non-default parts from the spawnGroup - - for (const creepName of args.spawnGroup || room.creepsFromRoom[args.role]) { - const creep = Game.creeps[creepName] - - // Take away the amount of parts the creep with the name has from totalExtraParts - - const defaultParts = Memory.creeps[creepName][CreepMemoryKeys.defaultParts] - totalExtraParts -= creep.body.length - defaultParts + tier += 1 + for (const part of addedParts) bodyPartCounts[part] += 1 } + } + + // Create a spawnRequest using previously constructed information + + spawnRequests.push({ + role: args.role, + priority: args.priority, + defaultParts: args.defaultParts.length, + bodyPartCounts, + spawnTarget: args.spawnTarget, + tier, + cost, + extraOpts: { + memory: args.memoryAdditions as CreepMemory, + }, + }) + + args.creepsQuota -= 1 + } - // If there aren't enough requested parts to justify spawning a creep, stop + return spawnRequests + } - if (totalExtraParts < maxPartsPerCreep * (args.threshold ?? 0.25)) return spawnRequests + static spawnRequestGroupDiverse(room: Room, args: SpawnRequestArgs) { + const spawnRequests: SpawnRequest[] = [] - if (args.maxCreeps === undefined) { - args.maxCreeps = Number.MAX_SAFE_INTEGER - } - // Subtract maxCreeps by the existing number of creeps of this role - else { - args.maxCreeps -= args.spawnGroup - ? args.spawnGroup.length - : room.creepsFromRoom[args.role].length - } - - let extraPartsCost = 0 - for (const part of args.extraParts) { - extraPartsCost += BODYPART_COST[part] - } + // Guard against bad arguments, otherwise it can cause the block below to get into an infinate loop and crash. + if (args.extraParts.length == 0) { + LogOps.log('spawnRequestByGroup', '0 length extraParts?' + JSON.stringify(args), { + type: LogTypes.error, + }) + return spawnRequests + } - // So long as there are totalExtraParts left to assign - - while (totalExtraParts >= args.extraParts.length && args.maxCreeps > 0) { - // Construct important imformation for the spawnRequest - - let bodyPartCounts: { [key in PartsByPriority]: number } = { - tough: 0, - claim: 0, - attack: 0, - ranged_attack: 0, - secondaryTough: 0, - work: 0, - carry: 0, - move: 0, - secondaryAttack: 0, - heal: 0, - } - let tier = 0 - let cost = 0 + const maxCostPerCreep = Math.max( + Math.min(args.maxCostPerCreep ?? room.energyCapacityAvailable, room.energyCapacityAvailable), + args.minCostPerCreep, + ) - // Construct from totalExtraParts at a max of 50, at equal to extraOpts's length + // Find the totalExtraParts using the partsMultiplier - let remainingAllowedParts = maxPartsPerCreep + let totalExtraParts = Math.floor(args.extraParts.length * args.partsMultiplier) - // If there are defaultParts + // Construct from totalExtraParts at a max of 50 - number of defaultParts - if (args.defaultParts.length) { - // Increment tier + const maxPartsPerCreep = Math.min(50 - args.defaultParts.length, totalExtraParts) - tier += 1 + // Add up non-default parts from the spawnGroup - // Loop through defaultParts + for (const creepName of args.spawnGroup || room.creepsFromRoom[args.role]) { + const creep = Game.creeps[creepName] - for (const part of args.defaultParts) { - const partCost = BODYPART_COST[part] - if (cost + partCost > maxCostPerCreep) break + // Take away the amount of parts the creep with the name has from totalExtraParts - cost += partCost - bodyPartCounts[part] += 1 - } - } + const defaultParts = Memory.creeps[creepName][CreepMemoryKeys.defaultParts] + totalExtraParts -= creep.body.length - defaultParts + } - // Apply extraParts once without restrictions + // If there aren't enough requested parts to justify spawning a creep, stop - tier += 1 + if (totalExtraParts < maxPartsPerCreep * (args.threshold ?? 0.25)) return spawnRequests - for (const part of args.extraParts) { + if (args.maxCreeps === undefined) { + args.maxCreeps = Number.MAX_SAFE_INTEGER + } + // Subtract maxCreeps by the existing number of creeps of this role + else { + args.maxCreeps -= args.spawnGroup + ? args.spawnGroup.length + : room.creepsFromRoom[args.role].length + } - cost += BODYPART_COST[part] - bodyPartCounts[part] += 1 + let extraPartsCost = 0 + for (const part of args.extraParts) { + extraPartsCost += BODYPART_COST[part] + } - remainingAllowedParts -= 1 - totalExtraParts -= 1 - } + // So long as there are totalExtraParts left to assign - // Apply additional extraParts with restrictions + while (totalExtraParts >= args.extraParts.length && args.maxCreeps > 0) { + // Construct important imformation for the spawnRequest - let stop = false + let bodyPartCounts: { [key in PartsByPriority]: number } = { + tough: 0, + claim: 0, + attack: 0, + ranged_attack: 0, + secondaryTough: 0, + work: 0, + carry: 0, + move: 0, + secondaryAttack: 0, + heal: 0, + } + let tier = 0 + let cost = 0 - // So long as the cost is less than the maxCostPerCreep and the size is below max size - while (cost < maxCostPerCreep && remainingAllowedParts - args.extraParts.length >= 0) { + // Construct from totalExtraParts at a max of 50, at equal to extraOpts's length - tier += 1 + let remainingAllowedParts = maxPartsPerCreep - for (const part of args.extraParts) { + // If there are defaultParts - const partCost = BODYPART_COST[part] - // If the new cost will make us too expensive and we already fulfill the min cost, stop - if (cost + partCost > maxCostPerCreep && cost >= args.minCostPerCreep) { - stop = true - break - } + if (args.defaultParts.length) { + // Increment tier - cost += partCost - bodyPartCounts[part] += 1 + tier += 1 - remainingAllowedParts -= 1 - totalExtraParts -= 1 - } + // Loop through defaultParts - if (stop) break - } + for (const part of args.defaultParts) { + const partCost = BODYPART_COST[part] + if (cost + partCost > maxCostPerCreep) break - // Create a spawnRequest using previously constructed information - - spawnRequests.push({ - role: args.role, - priority: args.priority, - defaultParts: args.defaultParts.length, - bodyPartCounts, - spawnTarget: args.spawnTarget, - tier, - cost, - extraOpts: { - memory: args.memoryAdditions as CreepMemory, - }, - }) - - args.maxCreeps -= 1 + cost += partCost + bodyPartCounts[part] += 1 } + } - return spawnRequests - } + // Apply extraParts once without restrictions - static spawnRequestGroupUniform(room: Room, args: SpawnRequestArgs) { - const spawnRequests: SpawnRequest[] = [] + tier += 1 - if (Game.flags[FlagNames.debugSpawning]) { - console.log('role', args.role, 'parts', args.partsQuota) - } + for (const part of args.extraParts) { + cost += BODYPART_COST[part] + bodyPartCounts[part] += 1 - // Guard against bad arguments, otherwise it can cause the block below to get into an infinate loop and crash. - if (args.extraParts.length == 0) { - throw Error('extraParts of length 0 for ' + room.name + ' and role ' + args.role) - } + remainingAllowedParts -= 1 + totalExtraParts -= 1 + } - if (args.maxCostPerCreep < args.minCostPerCreep) { + // Apply additional extraParts with restrictions - customLog('maxCostPerCreep is less than minCostPerCreep, unable to continue spawn request for role: ' + args.role) - return spawnRequests - } + let stop = false - const maxCostPerCreep = Math.max( - Math.min(args.maxCostPerCreep ?? room.energyCapacityAvailable, room.energyCapacityAvailable), - args.minCostPerCreep, - ) + // So long as the cost is less than the maxCostPerCreep and the size is below max size + while (cost < maxCostPerCreep && remainingAllowedParts - args.extraParts.length >= 0) { + tier += 1 - if (args.maxCreeps === undefined) { - args.maxCreeps = Number.MAX_SAFE_INTEGER + for (const part of args.extraParts) { + const partCost = BODYPART_COST[part] + // If the new cost will make us too expensive and we already fulfill the min cost, stop + if (cost + partCost > maxCostPerCreep && cost >= args.minCostPerCreep) { + stop = true + break + } + + cost += partCost + bodyPartCounts[part] += 1 + + remainingAllowedParts -= 1 + totalExtraParts -= 1 } - // Run if we haven't yet fulfilled the parts quota and can still add more creeps - while (args.partsQuota > 0 && args.maxCreeps > 0) { - // Construct important imformation for the spawnRequest - - let bodyPartCounts: { [key in PartsByPriority]: number } = { - tough: 0, - claim: 0, - attack: 0, - ranged_attack: 0, - secondaryTough: 0, - work: 0, - carry: 0, - move: 0, - secondaryAttack: 0, - heal: 0, - } - let partsCount = 0 - let tier = 0 - let cost = 0 - - // Apply default parts if there are any - - if (args.defaultParts.length) { + if (stop) break + } + + // Create a spawnRequest using previously constructed information + + spawnRequests.push({ + role: args.role, + priority: args.priority, + defaultParts: args.defaultParts.length, + bodyPartCounts, + spawnTarget: args.spawnTarget, + tier, + cost, + extraOpts: { + memory: args.memoryAdditions as CreepMemory, + }, + }) + + args.maxCreeps -= 1 + } - tier += 1 + return spawnRequests + } - for (const part of args.defaultParts) { - const partCost = BODYPART_COST[part] - if (cost + partCost > maxCostPerCreep) break + static spawnRequestGroupUniform(room: Room, args: SpawnRequestArgs) { + const spawnRequests: SpawnRequest[] = [] - cost += partCost - bodyPartCounts[part] += 1 - partsCount += 1 - } - } + if (Game.flags[FlagNames.debugSpawning]) { + console.log('role', args.role, 'parts', args.partsQuota) + } - let stop = false + // Guard against bad arguments, otherwise it can cause the block below to get into an infinate loop and crash. + if (args.extraParts.length == 0) { + throw Error('extraParts of length 0 for ' + room.name + ' and role ' + args.role) + } - // So long as the cost is less than the maxCostPerCreep and the size is below max size + if (args.maxCostPerCreep < args.minCostPerCreep) { + LogOps.log( + 'maxCostPerCreep is less than minCostPerCreep, unable to continue spawn request for role: ' + + args.role, + ) + return spawnRequests + } - while (cost < maxCostPerCreep && partsCount + args.extraParts.length <= MAX_CREEP_SIZE) { + const maxCostPerCreep = Math.max( + Math.min(args.maxCostPerCreep ?? room.energyCapacityAvailable, room.energyCapacityAvailable), + args.minCostPerCreep, + ) - tier += 1 + if (args.maxCreeps === undefined) { + args.maxCreeps = Number.MAX_SAFE_INTEGER + } - for (const part of args.extraParts) { + // Run if we haven't yet fulfilled the parts quota and can still add more creeps + while (args.partsQuota > 0 && args.maxCreeps > 0) { + // Construct important imformation for the spawnRequest + + let bodyPartCounts: { [key in PartsByPriority]: number } = { + tough: 0, + claim: 0, + attack: 0, + ranged_attack: 0, + secondaryTough: 0, + work: 0, + carry: 0, + move: 0, + secondaryAttack: 0, + heal: 0, + } + let partsCount = 0 + let tier = 0 + let cost = 0 + + // Apply default parts if there are any + + if (args.defaultParts.length) { + tier += 1 + + for (const part of args.defaultParts) { + const partCost = BODYPART_COST[part] + if (cost + partCost > maxCostPerCreep) break + + cost += partCost + bodyPartCounts[part] += 1 + partsCount += 1 + } + } - const partCost = BODYPART_COST[part] - // If the new cost will make us too expensive and we already fulfill the min cost, stop - if (cost + partCost > maxCostPerCreep /* && cost >= args.minCostPerCreep */) { - stop = true - break - } + let stop = false - cost += partCost - bodyPartCounts[part] += 1 - partsCount += 1 - } + // So long as the cost is less than the maxCostPerCreep and the size is below max size - if (stop) break - } + while (cost < maxCostPerCreep && partsCount + args.extraParts.length <= MAX_CREEP_SIZE) { + tier += 1 - // Create a spawnRequest using previously constructed information - - spawnRequests.push({ - role: args.role, - priority: args.priority, - defaultParts: args.defaultParts.length, - bodyPartCounts, - spawnTarget: args.spawnTarget, - tier, - cost, - extraOpts: { - memory: args.memoryAdditions as CreepMemory, - }, - }) - - // Prepare values for next iteration check - args.partsQuota -= partsCount - args.maxCreeps -= 1 + for (const part of args.extraParts) { + const partCost = BODYPART_COST[part] + // If the new cost will make us too expensive and we already fulfill the min cost, stop + if (cost + partCost > maxCostPerCreep /* && cost >= args.minCostPerCreep */) { + stop = true + break + } + + cost += partCost + bodyPartCounts[part] += 1 + partsCount += 1 } - return spawnRequests + if (stop) break + } + + // Create a spawnRequest using previously constructed information + + spawnRequests.push({ + role: args.role, + priority: args.priority, + defaultParts: args.defaultParts.length, + bodyPartCounts, + spawnTarget: args.spawnTarget, + tier, + cost, + extraOpts: { + memory: args.memoryAdditions as CreepMemory, + }, + }) + + // Prepare values for next iteration check + args.partsQuota -= partsCount + args.maxCreeps -= 1 } + + return spawnRequests + } } diff --git a/src/room/commune/spawning/spawnRequests.ts b/src/room/commune/spawning/spawnRequests.ts index 777610ade..d8eb7c229 100644 --- a/src/room/commune/spawning/spawnRequests.ts +++ b/src/room/commune/spawning/spawnRequests.ts @@ -627,7 +627,7 @@ export class SpawnRequestsManager { (REPAIR_POWER * 0.3) } - /* customLog('e', partsMultiplier) */ + /* LogOps.LogOps'e', partsMultiplier) */ const role = 'maintainer' if (this.communeManager.hasSufficientRoads) { diff --git a/src/room/commune/spawning/spawningStructureOps.ts b/src/room/commune/spawning/spawningStructureOps.ts index e2d34292c..0a8a3bbb8 100644 --- a/src/room/commune/spawning/spawningStructureOps.ts +++ b/src/room/commune/spawning/spawningStructureOps.ts @@ -17,7 +17,7 @@ import { unpackPosAt, packCoord, unpackCoord } from 'other/codec' import { CreepProcs } from 'room/creeps/creepProcs' import { StructureUtils } from 'room/structureUtils' import { SpawnRequest, BodyPartCounts, SpawnRequestTypes } from 'types/spawnRequest' -import { customLog, LogTypes } from 'utils/logging' +import { LogOps, LogTypes } from 'utils/logOps' import { getRange, findAdjacentCoordsToCoord, Utils } from 'utils/utils' import { SpawnRequestConstructor, SpawnRequestConstructors } from './spawnRequestConstructors' import { CommuneUtils } from '../communeUtils' @@ -85,7 +85,7 @@ export class SpawningStructureOps { // If this is ran then there is a bug in spawnRequest creation if (request.cost > room.energyCapacityAvailable) { - customLog( + LogOps.log( 'Failed to spawn: not enough energy', `cost greater then energyCapacityAvailable, role: ${request.role}, cost: ${ room.energyCapacityAvailable @@ -99,7 +99,7 @@ export class SpawningStructureOps { } if (request.cost > room.communeManager.nextSpawnEnergyAvailable) { - customLog( + LogOps.log( 'Failed to spawn: not enough energy', `cost greater then nextSpawnEnergyAvailable, role: ${request.role}, cost: ${ request.cost @@ -129,7 +129,7 @@ export class SpawningStructureOps { if (testSpawnResult !== OK) { if (testSpawnResult === ERR_NOT_ENOUGH_ENERGY) { - customLog( + LogOps.log( 'Failed to spawn: dryrun failed', `request: ${testSpawnResult}, role: ${request.role}, ID: ${ID}, cost: ${request.cost} / ${room.communeManager.nextSpawnEnergyAvailable}, body: (${body.length}) ${body}`, { @@ -139,7 +139,7 @@ export class SpawningStructureOps { return Result.fail } - customLog( + LogOps.log( 'Failed to spawn: dryrun failed', `request: ${testSpawnResult}, role: ${request.role}, ID: ${ID}, cost: ${request.cost} / ${room.communeManager.nextSpawnEnergyAvailable}, body: (${body.length}) ${body}`, { @@ -155,7 +155,7 @@ export class SpawningStructureOps { request.extraOpts.directions = this.findDirections(room, spawn.pos) const result = this.advancedSpawn(room, spawn, request, body, ID) if (result !== OK) { - customLog( + LogOps.log( 'Failed to spawn: spawning failed', `error: ${result}, request: ${DebugUtils.stringify(request)}`, { @@ -346,13 +346,13 @@ export class SpawningStructureOps { for (const request of spawnRequestsArgs) { if (request.role === 'remoteSourceHarvester') { - customLog( + LogOps.log( 'SPAWN REQUEST ARGS', request.role + request.memoryAdditions[CreepMemoryKeys.remote] + ', ' + request.priority, ) continue } - customLog('SPAWN REQUEST ARGS', request.role + ', ' + request.priority) + LogOps.log('SPAWN REQUEST ARGS', request.role + ', ' + request.priority) } } diff --git a/src/room/commune/terminal/terminal.old.ts b/src/room/commune/terminal/terminal.old.ts index 934f37085..3ca7d866c 100644 --- a/src/room/commune/terminal/terminal.old.ts +++ b/src/room/commune/terminal/terminal.old.ts @@ -1,5 +1,5 @@ import { minerals, Result, RoomMemoryKeys } from '../../../constants/general' -import { customLog } from 'utils/logging' +import { LogOps } from 'utils/logOps' import { newID, roundTo } from 'utils/utils' import './tradingUtils' import { CollectiveManager } from 'international/collective' diff --git a/src/room/commune/terminal/terminalProcs.ts b/src/room/commune/terminal/terminalProcs.ts index c6ecab185..e1c801cac 100644 --- a/src/room/commune/terminal/terminalProcs.ts +++ b/src/room/commune/terminal/terminalProcs.ts @@ -3,7 +3,7 @@ import { Result } from '../../../constants/general' import { MarketManager } from 'international/market/marketOrders' import { simpleAllies } from 'international/simpleAllies/simpleAllies' import { StructureUtils } from 'room/structureUtils' -import { customLog } from 'utils/logging' +import { LogOps } from 'utils/logOps' import { newID, Utils } from 'utils/utils' import { ResourceTargets } from '../commune' import { TradingUtils } from './tradingUtils' @@ -120,7 +120,7 @@ export class TerminalProcs { const consequentSend = storedResource - equivalentAmount - customLog( + LogOps.log( 'TERMINAL SEND SPECIAL VALUES', `${equivalentAmount} vs ${storedResource} vs ${ Game.rooms[request.roomName].roomManager.resourcesInStoringStructures[request.resource] @@ -145,7 +145,7 @@ export class TerminalProcs { room.name, request.roomName, ) / 2 - customLog( + LogOps.log( 'TERMINAL REQUEST ' + request.resource, maxSendAmount + ' ,' + diff --git a/src/room/commune/terminal/tradingUtils.ts b/src/room/commune/terminal/tradingUtils.ts index 11d879f67..9e63195bc 100644 --- a/src/room/commune/terminal/tradingUtils.ts +++ b/src/room/commune/terminal/tradingUtils.ts @@ -1,4 +1,4 @@ -import { customLog } from 'utils/logging' +import { LogOps } from 'utils/logOps' import { findLowestScore, roundTo } from 'utils/utils' import { CollectiveManager } from 'international/collective' import { StatsManager } from 'international/stats' diff --git a/src/room/construction/basePlans.ts b/src/room/construction/basePlans.ts index 80f9d1187..028664826 100644 --- a/src/room/construction/basePlans.ts +++ b/src/room/construction/basePlans.ts @@ -1,4 +1,4 @@ -import { customLog } from 'utils/logging' +import { LogOps } from 'utils/logOps' import { packXYAsNum, splitStringAt } from 'utils/utils' import { packCoord, packBasePlanCoord, packXYAsCoord, unpackBasePlanCoords } from 'other/codec' import { encode, decode } from 'base32768' diff --git a/src/room/construction/construction.ts b/src/room/construction/construction.ts index 0ec7d02df..cff9ebe83 100644 --- a/src/room/construction/construction.ts +++ b/src/room/construction/construction.ts @@ -7,7 +7,7 @@ import { RoomMemoryKeys, structureTypesToProtectSet, } from '../../constants/general' -import { customLog } from 'utils/logging' +import { LogOps } from 'utils/logOps' import { findObjectWithID, packAsNum, randomIntRange, randomTick, Utils } from 'utils/utils' import { packCoord, unpackCoord } from 'other/codec' import { CommuneManager } from 'room/commune/commune' diff --git a/src/room/creeps/creepAdditions.ts b/src/room/creeps/creepAdditions.ts index 76edf2a3d..fda74f2e5 100644 --- a/src/room/creeps/creepAdditions.ts +++ b/src/room/creeps/creepAdditions.ts @@ -6,7 +6,7 @@ import { roomDimensions, towerPowers, } from '../../constants/general' -import { customLog } from 'utils/logging' +import { LogOps } from 'utils/logOps' import { getRangeXY, getRange, isXYExit, isExit } from 'utils/utils' import { profiler } from 'other/profiler' import { CreepUtils } from './creepUtils' diff --git a/src/room/creeps/creepProcs.ts b/src/room/creeps/creepProcs.ts index 15e919f71..2b02aed26 100644 --- a/src/room/creeps/creepProcs.ts +++ b/src/room/creeps/creepProcs.ts @@ -25,7 +25,7 @@ import { RoomLogisticsRequest, RoomLogisticsTargets, } from '../../types/roomLogistics' -import { customLog, stringifyLog } from 'utils/logging' +import { LogOps } from 'utils/logOps' import { RoomObjectUtils } from 'room/roomObjectUtils' import { StructureUtils } from 'room/structureUtils' import { packCoord } from 'other/codec' @@ -117,7 +117,11 @@ export class CreepProcs { // Add control points to total controlPoints counter and say the success - StatsManager.updateStat(creep.room.name, RoomStatsKeys.EnergyOutputRepairOther, energySpentOnRepairs) + StatsManager.updateStat( + creep.room.name, + RoomStatsKeys.EnergyOutputRepairOther, + energySpentOnRepairs, + ) creep.message += `🔧${energySpentOnRepairs * REPAIR_POWER}` } } @@ -207,7 +211,11 @@ export class CreepProcs { MyCreepUtils.parts(creep).work * UPGRADE_CONTROLLER_POWER, ) - StatsManager.updateStat(creep.room.name, RoomStatsKeys.EnergyOutputUpgrade, energySpentOnUpgrades) + StatsManager.updateStat( + creep.room.name, + RoomStatsKeys.EnergyOutputUpgrade, + energySpentOnUpgrades, + ) creep.message = `🔋${energySpentOnUpgrades}` // Inform true @@ -264,10 +272,18 @@ export class CreepProcs { // Record the repair attempt in different places for barricades than other structures if (target.structureType === STRUCTURE_RAMPART || target.structureType === STRUCTURE_WALL) { - StatsManager.updateStat(creep.room.name, RoomStatsKeys.EnergyOutputRepairWallOrRampart, energySpentOnRepair) + StatsManager.updateStat( + creep.room.name, + RoomStatsKeys.EnergyOutputRepairWallOrRampart, + energySpentOnRepair, + ) creep.message = `🧱${energySpentOnRepair * REPAIR_POWER}` } else { - StatsManager.updateStat(creep.room.name, RoomStatsKeys.EnergyOutputRepairOther, energySpentOnRepair) + StatsManager.updateStat( + creep.room.name, + RoomStatsKeys.EnergyOutputRepairOther, + energySpentOnRepair, + ) creep.message = `🔧${energySpentOnRepair * REPAIR_POWER}` } @@ -490,7 +506,7 @@ export class CreepProcs { creep.pos, { font: 0.2 }, ) - customLog( + LogOps.log( 'not enough free store', creep.name + ', ' + @@ -523,7 +539,7 @@ export class CreepProcs { creep.pos, { font: 0.2 }, ) - customLog( + LogOps.log( 'not enough amount', creep.name + ', ' + diff --git a/src/room/creeps/creepRoleManager.ts b/src/room/creeps/creepRoleManager.ts index 2d138b362..542644a76 100644 --- a/src/room/creeps/creepRoleManager.ts +++ b/src/room/creeps/creepRoleManager.ts @@ -2,56 +2,56 @@ import './creepPrototypes/creepFunctions' import './creepPrototypes/creepMoveFunctions' import { creepRoles, customColors } from '../../constants/general' -import { LogTypes, customLog } from 'utils/logging' +import { LogTypes, LogOps } from 'utils/logOps' import { RoomManager } from 'room/room' import { StatsManager } from 'international/stats' import { creepClasses } from './creepClasses' export class CreepRoleManager { - roomManager: RoomManager + roomManager: RoomManager - constructor(roomManager: RoomManager) { - this.roomManager = roomManager - } - - public newRun() { - for (const role in creepClasses) { - creepClasses[role as CreepRoles].run() - } - } - - public run() { - const { room } = this.roomManager - - for (const role of creepRoles) { + constructor(roomManager: RoomManager) { + this.roomManager = roomManager + } - this.runManager(role) - } + public newRun() { + for (const role in creepClasses) { + creepClasses[role as CreepRoles].run() } + } - private runManager(role: CreepRoles) { - // If there are no creeps for this manager, iterate - - if (!this.roomManager.room.myCreepsByRole[role].length) return - - const roleCPUStart = Game.cpu.getUsed() - console.log(role) - creepClasses[role].roleManager(this.roomManager.room, this.roomManager.room.myCreepsByRole[role]) - - // Log role stats - - const creepsOfRoleAmount = this.roomManager.room.myCreepsByRole[role].length + public run() { + const { room } = this.roomManager - customLog( - `${role}s`, - `Creeps: ${creepsOfRoleAmount}, CPU: ${(Game.cpu.getUsed() - roleCPUStart).toFixed( - 2, - )}, CPU Per Creep: ${((Game.cpu.getUsed() - roleCPUStart) / creepsOfRoleAmount).toFixed( - 2, - )}`, - { - position: 3, - }, - ) + for (const role of creepRoles) { + this.runManager(role) } + } + + private runManager(role: CreepRoles) { + // If there are no creeps for this manager, iterate + + if (!this.roomManager.room.myCreepsByRole[role].length) return + + const roleCPUStart = Game.cpu.getUsed() + console.log(role) + creepClasses[role].roleManager( + this.roomManager.room, + this.roomManager.room.myCreepsByRole[role], + ) + + // Log role stats + + const creepsOfRoleAmount = this.roomManager.room.myCreepsByRole[role].length + + LogOps.log( + `${role}s`, + `Creeps: ${creepsOfRoleAmount}, CPU: ${(Game.cpu.getUsed() - roleCPUStart).toFixed( + 2, + )}, CPU Per Creep: ${((Game.cpu.getUsed() - roleCPUStart) / creepsOfRoleAmount).toFixed(2)}`, + { + position: 3, + }, + ) + } } diff --git a/src/room/creeps/endTickCreepManager.ts b/src/room/creeps/endTickCreepManager.ts index 532ce64c1..3d0f49b4d 100644 --- a/src/room/creeps/endTickCreepManager.ts +++ b/src/room/creeps/endTickCreepManager.ts @@ -8,7 +8,7 @@ import { powerCreepClassNames, } from '../../constants/general' import { StatsManager } from 'international/stats' -import { customLog } from 'utils/logging' +import { LogOps } from 'utils/logOps' import { forCoordsInRange, randomOf, randomRange, randomTick } from 'utils/utils' import { RoomManager } from '../room' import { packCoord, unpackCoord } from 'other/codec' diff --git a/src/room/creeps/myCreepServices.ts b/src/room/creeps/myCreepServices.ts index 29b2e3ce1..6a93de477 100644 --- a/src/room/creeps/myCreepServices.ts +++ b/src/room/creeps/myCreepServices.ts @@ -1,4 +1,4 @@ -import { customLog } from 'utils/logging' +import { LogOps } from 'utils/logOps' import { HaulerServices } from './roles/haulerServices' export class MyCreepServices { @@ -12,8 +12,8 @@ export class MyCreepServices { HaulerServices.runCreeps(creepNames) break default: - customLog('No server for role', role) - /* throw Error(`No service for role ${role}`) */ + LogOps.log('No server for role', role) + /* throw Error(`No service for role ${role}`) */ } } } diff --git a/src/room/creeps/powerCreepRoleManager.ts b/src/room/creeps/powerCreepRoleManager.ts index 61ba0f300..89ea16540 100644 --- a/src/room/creeps/powerCreepRoleManager.ts +++ b/src/room/creeps/powerCreepRoleManager.ts @@ -1,6 +1,6 @@ import { customColors, powerCreepClassNames } from '../../constants/general' import { statsManager } from 'international/stats' -import { customLog } from 'utils/logging' +import { LogOps } from 'utils/logOps' import { RoomManager } from 'room/room' import { Operator } from './powerCreeps/operator' @@ -38,7 +38,7 @@ export class PowerCreepRoleManager { // Log className cpu - customLog( + LogOps.log( `${className}s`, `Creeps: ${creepsOfRoleAmount}, CPU: ${(Game.cpu.getUsed() - roleCPUStart).toFixed( 2, diff --git a/src/room/creeps/powerCreeps/operator.ts b/src/room/creeps/powerCreeps/operator.ts index 720779886..e12162b16 100644 --- a/src/room/creeps/powerCreeps/operator.ts +++ b/src/room/creeps/powerCreeps/operator.ts @@ -8,7 +8,7 @@ import { } from '../../../constants/general' import { CommuneUtils } from 'room/commune/communeUtils' import { CreepPowerTask, PowerRequest } from 'types/creepTasks' -import { customLog } from 'utils/logging' +import { LogOps } from 'utils/logOps' import { findObjectWithID, getRange } from 'utils/utils' export class Operator extends PowerCreep { @@ -264,7 +264,7 @@ export class Operator extends PowerCreep { const target = findObjectWithID(task[CreepPowerTaskKeys.target]) // We aren't in range, get closer - customLog('TRY TASK', target) + LogOps.log('TRY TASK', target) const minRange = (POWER_INFO[task[CreepPowerTaskKeys.power]] as any).range if (minRange && getRange(this.pos, target.pos) > minRange) { this.createMoveRequest({ @@ -285,7 +285,7 @@ export class Operator extends PowerCreep { this.usePower(task[CreepPowerTaskKeys.power], target) // We did the power - customLog('WE DID THE POWA', target) + LogOps.log('WE DID THE POWA', target) // Assume the power consumed ops if it does so diff --git a/src/room/creeps/roleManagers/antifa/antifa.ts b/src/room/creeps/roleManagers/antifa/antifa.ts index 3680a4d2e..8e626f187 100644 --- a/src/room/creeps/roleManagers/antifa/antifa.ts +++ b/src/room/creeps/roleManagers/antifa/antifa.ts @@ -7,7 +7,7 @@ import { customColors, squadQuotas, } from '../../../../constants/general' -import { customLog } from 'utils/logging' +import { LogOps } from 'utils/logOps' import { findClosestObject, getRangeXY, isExit, isXYExit } from 'utils/utils' import { CollectiveManager } from 'international/collective' import { Duo } from './duo' diff --git a/src/room/creeps/roleManagers/commune/builder.ts b/src/room/creeps/roleManagers/commune/builder.ts index ae50187f0..1d91462e9 100644 --- a/src/room/creeps/roleManagers/commune/builder.ts +++ b/src/room/creeps/roleManagers/commune/builder.ts @@ -1,5 +1,5 @@ import { Result, RoomLogisticsRequestTypes } from '../../../../constants/general' -import { customLog } from 'utils/logging' +import { LogOps } from 'utils/logOps' import { findObjectWithID, getRange } from 'utils/utils' export class Builder extends Creep { diff --git a/src/room/room.ts b/src/room/room.ts index bfbbfe5af..8dc18ba82 100644 --- a/src/room/room.ts +++ b/src/room/room.ts @@ -62,7 +62,7 @@ import { RampartPlans } from './construction/rampartPlans' import { PathGoal, CustomPathFinder } from 'international/customPathFinder' import { RoomNameUtils } from './roomNameUtils' import { CollectiveManager } from 'international/collective' -import { customLog } from 'utils/logging' +import { LogOps } from 'utils/logOps' import { StructureUtils } from './structureUtils' import { LogisticsProcs } from './logisticsProcs' import { CommuneOps } from './commune/communeOps' diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index b0e328a1c..0a162b01e 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -34,7 +34,7 @@ import { CollectiveManager } from 'international/collective' import { packCoord, packCoordList, packXYAsCoord, unpackPosList } from 'other/codec' import { PlayerManager } from 'international/players' import { RoomNameUtils } from './roomNameUtils' -import { customLog } from 'utils/logging' +import { LogOps } from 'utils/logOps' import { RoomObjectUtils } from './roomObjectUtils' import { RoomNameOps } from './roomNameOps' import { RoomOps } from './roomOps' @@ -1444,7 +1444,7 @@ Room.prototype.coordHasStructureTypes = function (coord, types) { Room.prototype.createPowerRequest = function (target, powerType, priority) { // There is already has a power creep responding to this target with the power - customLog('MADE POWER TASK FOR', target) + LogOps.log('MADE POWER TASK FOR', target) if (target.reservePowers.has(powerType)) return false // Create a power task with info on the cooldown diff --git a/src/room/roomNameUtils.ts b/src/room/roomNameUtils.ts index 49b27ec89..7a77b3bb4 100644 --- a/src/room/roomNameUtils.ts +++ b/src/room/roomNameUtils.ts @@ -25,7 +25,7 @@ import { } from 'utils/utils' import { unpackPosAt } from 'other/codec' import { CommuneManager } from './commune/commune' -import { customLog } from 'utils/logging' +import { LogOps } from 'utils/logOps' import { RoomOps } from './roomOps' import { RoomNameOps } from './roomNameOps' import { RoomUtils } from './roomUtils' @@ -113,7 +113,7 @@ export class RoomNameUtils { dynamicScore += mineralScore * 40 dynamicScore = roundTo(dynamicScore, 2) - /* customLog('Dynamic scores', `enemy ${closestEnemy} commune ${communeScore} ally ${allyScore} mineralScore ${mineralScore} val1 ${Math.round(Math.pow(closestEnemy, -0.8) * 25)} val2 ${Math.round(communeScore * 50)} val3 ${mineralScore * 40} val4 ${dynamicScore}`) */ + /* LogOps.LogOps'Dynamic scores', `enemy ${closestEnemy} commune ${communeScore} ally ${allyScore} mineralScore ${mineralScore} val1 ${Math.round(Math.pow(closestEnemy, -0.8) * 25)} val2 ${Math.round(communeScore * 50)} val3 ${mineralScore * 40} val4 ${dynamicScore}`) */ roomMemory[RoomMemoryKeys.dynamicScore] = dynamicScore roomMemory[RoomMemoryKeys.dynamicScoreUpdate] = Game.time diff --git a/src/room/roomObjectAdditions.ts b/src/room/roomObjectAdditions.ts index 115aff218..05aec80ad 100644 --- a/src/room/roomObjectAdditions.ts +++ b/src/room/roomObjectAdditions.ts @@ -1,5 +1,5 @@ import { allResources, customColors } from '../constants/general' -import { customLog } from 'utils/logging' +import { LogOps } from 'utils/logOps' import { findObjectWithID } from 'utils/utils' Object.defineProperties(RoomObject.prototype, { diff --git a/src/room/roomOps.ts b/src/room/roomOps.ts index 759f4b923..3d1155f20 100644 --- a/src/room/roomOps.ts +++ b/src/room/roomOps.ts @@ -18,7 +18,7 @@ import { RoomNameUtils } from './roomNameUtils' import { CommuneManager } from './commune/commune' import { CommuneOps } from './commune/communeOps' import { LogisticsProcs } from './logisticsProcs' -import { customLog } from 'utils/logging' +import { LogOps } from 'utils/logOps' import { packCoord, packCoordList, unpackCoord, unpackCoordList } from 'other/codec' import { HaulerServices } from './creeps/roles/haulerServices' import { HaulerOps } from './creeps/roles/haulerOps' @@ -220,7 +220,7 @@ export class RoomOps { visualizeReservedCoords(room: Room) { const roomManager = room.roomManager - customLog('reservedCoords', JSON.stringify([...roomManager.reservedCoords])) + LogOps.log('reservedCoords', JSON.stringify([...roomManager.reservedCoords])) for (const [packedCoord, reserveType] of roomManager.reservedCoords) { const coord = unpackCoord(packedCoord) room.coordVisual(coord.x, coord.y, `hsl(${200}${reserveType * 50}, 100%, 60%)`) @@ -395,7 +395,6 @@ export class RoomOps { const sourceCoords = unpackCoordList(packedSourceCoords) for (const coord of sourceCoords) { - for (const source of room.lookForAt(LOOK_SOURCES, coord.x, coord.y)) { sources.push(source) } diff --git a/src/room/roomServices.ts b/src/room/roomServices.ts index ed56626d2..307ff1f5e 100644 --- a/src/room/roomServices.ts +++ b/src/room/roomServices.ts @@ -19,7 +19,7 @@ import { StatsManager } from 'international/stats' import './creeps/endTickCreepManager' import { CommuneManager } from './commune/commune' import { RoomManager } from './room' -import { LogTypes, customLog } from 'utils/logging' +import { LogTypes, LogOps } from 'utils/logOps' import { RoomOps } from './roomOps' import { CommuneOps } from './commune/communeOps' @@ -76,7 +76,7 @@ export class RoomServices { const roomMemory = Memory.rooms[room.name] const roomType = roomMemory[RoomMemoryKeys.type] - customLog( + LogOps.log( `${room.name}`, `Type: ${RoomTypes[roomType]} Creeps: ${room.myCreeps.length}`, { diff --git a/src/room/roomVisuals.ts b/src/room/roomVisuals.ts index e15ef2d51..1eddd6d1d 100644 --- a/src/room/roomVisuals.ts +++ b/src/room/roomVisuals.ts @@ -11,7 +11,7 @@ import { FlagNames, } from '../constants/general' import { StatsManager } from 'international/stats' -import { customLog } from 'utils/logging' +import { LogOps } from 'utils/logOps' import { findObjectWithID, unpackNumAsCoord } from 'utils/utils' import { RoomManager } from './room' import { Rectangle, Table, Dial, Grid, Bar, Dashboard, LineChart, Label } from 'screeps-viz' diff --git a/src/types/settings.ts b/src/types/settings.ts index 5e569dd2f..1b3a96aa4 100644 --- a/src/types/settings.ts +++ b/src/types/settings.ts @@ -56,7 +56,7 @@ export interface Settings { marketUsage: boolean /** - * The number of ticks to publish customLogs for. 0 disabled logging. Cannot be more than 100 + * The number of ticks to publish LogOpss for. 0 disabled logging. Cannot be more than 100 */ logging: number diff --git a/src/utils/logging.ts b/src/utils/logOps.ts similarity index 67% rename from src/utils/logging.ts rename to src/utils/logOps.ts index b066349e2..4df8c3888 100644 --- a/src/utils/logging.ts +++ b/src/utils/logOps.ts @@ -58,10 +58,7 @@ interface LogOpts { const positionPaddingPixels = 8 -/** - * @deprecated - */ -export function customLog(title: any, message?: any, opts?: LogOpts) { +/* export function LogOps.LogOpstitle: any, message?: any, opts?: LogOpts) { if (!global.settings.logging) return if (!opts) opts = {} @@ -83,17 +80,10 @@ export function customLog(title: any, message?: any, opts?: LogOpts) { CollectiveManager.logs += `
${ message ?? '' }
` -} - -/** - * @deprecated - */ -export function stringifyLog(title: any, message: any, opts?: LogOpts) { - return customLog(title, DebugUtils.stringify(message), opts) -} +} */ export class LogOps { - static customLog(title: any, message?: any, opts?: LogOpts) { + static log(title: any, message?: any, opts?: LogOpts) { if (!global.settings.logging) return if (!opts) opts = {} @@ -106,28 +96,51 @@ export class LogOps { const textColor = opts.textColor ?? logProperties.textColor // Create the title - CollectiveManager.logs += `
${ + logProperties.preface + } ${title}:
` + + CollectiveManager.logs += `
${ + message ?? '' + }
` +/* CollectiveManager.logs += `
${logProperties.preface} ${title}:
` + }px;'>
${ + logProperties.preface + } ${title}:
` - CollectiveManager.logs += `
${message ?? ''}
` + CollectiveManager.logs += `
${ + message ?? '' + }
` */ } static stringifyLog(title: any, message: any, opts?: LogOpts) { - return this.customLog(title, DebugUtils.stringify(message), opts) + return this.log(title, DebugUtils.stringify(message), opts) } static registerStyles() { const stylesID = 'styles' - const css = - `.consolePrefaceParent { - style='width: 100vw; text-align: center; align-items: center; justify-content: left; display: flex; - }` + - `consolePrefaceChild { - padding: 3px; font-size: 14px; font-weight: 600; - }` + - `.consoleMessage { - background-color: rgb(0, 0, 0, 0.15); border-radius:5px; padding: 1px 10px 1px 10px; font-size: 14px; font-weight: 200; + const css = ` + .consolePrefaceParent { + width: 100vw; + text-align: center; + align-items: center; + justify-content: left; + display: flex; + } + .consolePrefaceChild { + padding: 3px; + font-size: 14px; + font-weight: 600; + } + .consoleMessage { + background-color: rgb(0, 0, 0, 0.15); + border-radius:5px; + padding: 1px 10px 1px 10px; + font-size: 14px; + font-weight: 200; }` console.log( @@ -138,7 +151,7 @@ export class LogOps { `style.id = "${stylesID}";` + `document.body.appendChild(style);` + `}` + - `document.getElementById("${stylesID}").innerHTML = "${css}";` + + 'document.getElementById("${stylesID}").innerHTML = `' + css + '`;' + ``, ) } diff --git a/src/utils/procs.ts b/src/utils/procs.ts index d0b1f0ae0..28bd29570 100644 --- a/src/utils/procs.ts +++ b/src/utils/procs.ts @@ -1,12 +1,12 @@ // General processes import { CollectiveManager } from 'international/collective' -import { LogTypes, customLog } from "./logging" +import { LogTypes, LogOps } from './logOps' export class Procs { static outOfBucket() { CollectiveManager.logs = '' - customLog('Skipping tick due to low bucket, bucket remaining', Game.cpu.bucket, { + LogOps.log('Skipping tick due to low bucket, bucket remaining', Game.cpu.bucket, { type: LogTypes.warning, }) console.log( diff --git a/src/utils/utils.ts b/src/utils/utils.ts index ba23e1fa6..c212e22f6 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -6,7 +6,7 @@ import { Result, FlagNames, } from '../constants/general' -import { customLog } from './logging' +import { LogOps } from './logOps' import { PlayerRelationships } from '../constants/general' import { RoomNameUtils } from 'room/roomNameUtils' import { Dashboard, Rectangle, Table } from 'screeps-viz' @@ -423,7 +423,7 @@ export function findCPUOf(func: Function) { func() - customLog('CPU for ' + func.name, Game.cpu.getUsed() - CPU) + LogOps.log('CPU for ' + func.name, Game.cpu.getUsed() - CPU) } export function isXYExit(x: number, y: number) { From 7f51420b34f9ee94ba4d0e1c1d8f624c67a1db20 Mon Sep 17 00:00:00 2001 From: Carson Date: Mon, 5 Feb 2024 18:29:27 -0800 Subject: [PATCH 163/190] fix funneling --- src/international/collective.ts | 5 ++++- src/room/creeps/creepUtils.ts | 10 +++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/international/collective.ts b/src/international/collective.ts index 6d2f045c6..5e6b02eca 100644 --- a/src/international/collective.ts +++ b/src/international/collective.ts @@ -342,8 +342,11 @@ export class CollectiveManager { // How much energy we are allowed to distribute each tick of funneling let funnelDistribution = 0 const funnelTargetQuotas: {[roomName: string]: number} = {} + + const funnelOrder = this.getFunnelOrder() + funnelTargets.add(funnelOrder[0]) - for (const roomName of CollectiveManager.communes) { + for (const roomName of funnelOrder) { const room = Game.rooms[roomName] const desiredStrength = CommuneUtils.getDesiredUpgraderStrength(room) diff --git a/src/room/creeps/creepUtils.ts b/src/room/creeps/creepUtils.ts index 6050dd736..e2984386d 100644 --- a/src/room/creeps/creepUtils.ts +++ b/src/room/creeps/creepUtils.ts @@ -504,12 +504,12 @@ export class CreepUtils { const storingStructures = CommuneUtils.storingStructures(creep.commune) if (!storingStructures.length) return Result.fail - const nextStore = creep.nextStore + const creepNextStore = creep.nextStore let resourceType: ResourceConstant - for (const key in nextStore) { + for (const key in creepNextStore) { if (key === RESOURCE_ENERGY) continue - if (nextStore[key as ResourceConstant] <= 0) continue + if (creepNextStore[key as ResourceConstant] <= 0) continue resourceType = key as ResourceConstant break @@ -518,7 +518,7 @@ export class CreepUtils { if (!resourceType) return Result.fail const storingStructure = storingStructures.find( - structure => structure.freeReserveStore >= nextStore[resourceType], + structure => structure.freeReserveStore >= creepNextStore[resourceType], ) if (!storingStructure) return Result.fail /* creep.room.visual.text((creep.nextStore[resourceType]).toString(), creep.pos.x, creep.pos.y, { color: customColors.red }) */ @@ -526,7 +526,7 @@ export class CreepUtils { [CreepLogisticsRequestKeys.type]: RoomLogisticsRequestTypes.transfer, [CreepLogisticsRequestKeys.target]: storingStructure.id, [CreepLogisticsRequestKeys.resourceType]: resourceType, - [CreepLogisticsRequestKeys.amount]: nextStore[resourceType], + [CreepLogisticsRequestKeys.amount]: creepNextStore[resourceType], } } From 877e33c978c3db54db1f74ef519bad73d805911d Mon Sep 17 00:00:00 2001 From: Pieter Brandsen Date: Fri, 9 Feb 2024 23:15:16 +0100 Subject: [PATCH 164/190] Updated screeps-performance-server package --- package-lock.json | 356 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 2 +- 2 files changed, 350 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4a8af583e..35dc8ca0f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -53,7 +53,7 @@ "rollup-plugin-typescript2": "^0.36.0", "screeps-grafana-go_carbon": "^1.0.5", "screeps-jest": "^2.0.2", - "screeps-performance-server": "^1.13.2", + "screeps-performance-server": "^1.14.1", "screeps-viz": "^2.1.3", "sinon": "^6.3.5", "sinon-chai": "^3.2.0", @@ -1932,6 +1932,12 @@ "node": ">=6.9.0" } }, + "node_modules/@balena/dockerignore": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz", + "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==", + "dev": true + }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", "dev": true, @@ -5541,6 +5547,15 @@ "node": ">=8" } }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, "node_modules/assert": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", @@ -5920,6 +5935,15 @@ "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", "dev": true }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, "node_modules/bcryptjs": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", @@ -6139,6 +6163,16 @@ "node": ">=6.14.2" } }, + "node_modules/buildcheck": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz", + "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/builtin-modules": { "version": "3.3.0", "dev": true, @@ -6435,6 +6469,12 @@ "fsevents": "~2.3.2" } }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, "node_modules/ci-info": { "version": "3.3.2", "dev": true, @@ -6894,6 +6934,21 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/cpu-features": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.9.tgz", + "integrity": "sha512-AKjgn2rP2yJyfbepsmLfiYcmtNn/2eUvocUyM/09yB0YDiz39HteK/5/T4Onf0pmdYDMgkBoGvRLvEguzyL7wQ==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "buildcheck": "~0.0.6", + "nan": "^2.17.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/create-require": { "version": "1.1.1", "dev": true, @@ -7838,6 +7893,58 @@ } } }, + "node_modules/docker-modem": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-5.0.3.tgz", + "integrity": "sha512-89zhop5YVhcPEt5FpUFGr3cDyceGhq/F9J+ZndQ4KfqNvfbJpPMfgeixFgUj5OjCYAboElqODxY5Z1EBsSa6sg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "readable-stream": "^3.5.0", + "split-ca": "^1.0.1", + "ssh2": "^1.15.0" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/docker-modem/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/docker-modem/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/dockerode": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-4.0.2.tgz", + "integrity": "sha512-9wM1BVpVMFr2Pw3eJNXrYYt6DT9k0xMcsSCjtPvyQ+xa1iPg/Mo3T/gUcwI0B2cczqCeCYRPF8yFYDwtFXT0+w==", + "dev": true, + "dependencies": { + "@balena/dockerignore": "^1.0.2", + "docker-modem": "^5.0.3", + "tar-fs": "~2.0.1" + }, + "engines": { + "node": ">= 8.0" + } + }, "node_modules/doctrine": { "version": "3.0.0", "dev": true, @@ -9517,6 +9624,12 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, "node_modules/fs-extra": { "version": "8.1.0", "dev": true, @@ -14223,6 +14336,12 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, "node_modules/modify-values": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", @@ -14279,6 +14398,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/nan": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", + "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", + "dev": true, + "optional": true + }, "node_modules/nanoid": { "version": "3.3.4", "dev": true, @@ -19387,13 +19513,14 @@ } }, "node_modules/screeps-performance-server": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.13.2.tgz", - "integrity": "sha512-NSdc94XYxTiY0m4t4F7RlpKGeJmeupRDJFQeayxFjv/plekH9/nUBtGrx5KynTz9qNhApQTexUOJrK864FD3yw==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.14.1.tgz", + "integrity": "sha512-gH7sYnoAvSKqXok/HQ5qRNLXc0ORm6E/xkweMt+Zd4qYp2uSyuxFSNRL1DsG2A5T74ZrOyVTGmX5J95WjwFGXg==", "dev": true, "dependencies": { "@octokit/core": "^4.2.0", "discord.js": "^14.9.0", + "dockerode": "^4.0.2", "dotenv": "^16.0.3", "get-port": "^6.1.2", "json-beautify": "^1.1.1", @@ -19983,6 +20110,12 @@ "node": "*" } }, + "node_modules/split-ca": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz", + "integrity": "sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==", + "dev": true + }, "node_modules/split2": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", @@ -19996,6 +20129,24 @@ "dev": true, "license": "BSD-3-Clause" }, + "node_modules/ssh2": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.15.0.tgz", + "integrity": "sha512-C0PHgX4h6lBxYx7hcXwu3QWdh4tg6tZZsTfXcdvc5caW/EMxaB4H9dWsl7qk+F7LAW762hp8VbXOX7x4xUYvEw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "asn1": "^0.2.6", + "bcrypt-pbkdf": "^1.0.2" + }, + "engines": { + "node": ">=10.16.0" + }, + "optionalDependencies": { + "cpu-features": "~0.0.9", + "nan": "^2.18.0" + } + }, "node_modules/stack-trace": { "version": "0.0.10", "dev": true, @@ -20412,6 +20563,34 @@ "dev": true, "license": "MIT" }, + "node_modules/tar-fs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", + "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", + "dev": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.0.0" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/temp-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", @@ -20852,6 +21031,12 @@ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, "node_modules/type": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", @@ -23082,6 +23267,12 @@ "to-fast-properties": "^2.0.0" } }, + "@balena/dockerignore": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz", + "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==", + "dev": true + }, "@bcoe/v8-coverage": { "version": "0.2.3", "dev": true @@ -25646,6 +25837,15 @@ "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", "dev": true }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, "assert": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", @@ -25910,6 +26110,15 @@ "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", "dev": true }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, "bcryptjs": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", @@ -26072,6 +26281,13 @@ "node-gyp-build": "^4.3.0" } }, + "buildcheck": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz", + "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==", + "dev": true, + "optional": true + }, "builtin-modules": { "version": "3.3.0", "dev": true @@ -26264,6 +26480,12 @@ "readdirp": "~3.6.0" } }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, "ci-info": { "version": "3.3.2", "dev": true @@ -26623,6 +26845,17 @@ } } }, + "cpu-features": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.9.tgz", + "integrity": "sha512-AKjgn2rP2yJyfbepsmLfiYcmtNn/2eUvocUyM/09yB0YDiz39HteK/5/T4Onf0pmdYDMgkBoGvRLvEguzyL7wQ==", + "dev": true, + "optional": true, + "requires": { + "buildcheck": "~0.0.6", + "nan": "^2.17.0" + } + }, "create-require": { "version": "1.1.1", "dev": true @@ -27323,6 +27556,46 @@ } } }, + "docker-modem": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-5.0.3.tgz", + "integrity": "sha512-89zhop5YVhcPEt5FpUFGr3cDyceGhq/F9J+ZndQ4KfqNvfbJpPMfgeixFgUj5OjCYAboElqODxY5Z1EBsSa6sg==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "readable-stream": "^3.5.0", + "split-ca": "^1.0.1", + "ssh2": "^1.15.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "dockerode": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-4.0.2.tgz", + "integrity": "sha512-9wM1BVpVMFr2Pw3eJNXrYYt6DT9k0xMcsSCjtPvyQ+xa1iPg/Mo3T/gUcwI0B2cczqCeCYRPF8yFYDwtFXT0+w==", + "dev": true, + "requires": { + "@balena/dockerignore": "^1.0.2", + "docker-modem": "^5.0.3", + "tar-fs": "~2.0.1" + } + }, "doctrine": { "version": "3.0.0", "dev": true, @@ -28497,6 +28770,12 @@ } } }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, "fs-extra": { "version": "8.1.0", "dev": true, @@ -31535,6 +31814,12 @@ "integrity": "sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw==", "dev": true }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, "modify-values": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", @@ -31575,6 +31860,13 @@ "minimatch": "^3.0.4" } }, + "nan": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", + "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", + "dev": true, + "optional": true + }, "nanoid": { "version": "3.3.4", "dev": true @@ -34945,13 +35237,14 @@ "requires": {} }, "screeps-performance-server": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.13.2.tgz", - "integrity": "sha512-NSdc94XYxTiY0m4t4F7RlpKGeJmeupRDJFQeayxFjv/plekH9/nUBtGrx5KynTz9qNhApQTexUOJrK864FD3yw==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.14.1.tgz", + "integrity": "sha512-gH7sYnoAvSKqXok/HQ5qRNLXc0ORm6E/xkweMt+Zd4qYp2uSyuxFSNRL1DsG2A5T74ZrOyVTGmX5J95WjwFGXg==", "dev": true, "requires": { "@octokit/core": "^4.2.0", "discord.js": "^14.9.0", + "dockerode": "^4.0.2", "dotenv": "^16.0.3", "get-port": "^6.1.2", "json-beautify": "^1.1.1", @@ -35415,6 +35708,12 @@ "through": "2" } }, + "split-ca": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz", + "integrity": "sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==", + "dev": true + }, "split2": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", @@ -35427,6 +35726,18 @@ "version": "1.0.3", "dev": true }, + "ssh2": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.15.0.tgz", + "integrity": "sha512-C0PHgX4h6lBxYx7hcXwu3QWdh4tg6tZZsTfXcdvc5caW/EMxaB4H9dWsl7qk+F7LAW762hp8VbXOX7x4xUYvEw==", + "dev": true, + "requires": { + "asn1": "^0.2.6", + "bcrypt-pbkdf": "^1.0.2", + "cpu-features": "~0.0.9", + "nan": "^2.18.0" + } + }, "stack-trace": { "version": "0.0.10", "dev": true @@ -35753,6 +36064,31 @@ "version": "3.2.4", "dev": true }, + "tar-fs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", + "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.0.0" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, "temp-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", @@ -36045,6 +36381,12 @@ "tslib": "^1.8.1" } }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, "type": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", diff --git a/package.json b/package.json index deebce7cd..08e2d9e31 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "rollup-plugin-typescript2": "^0.36.0", "screeps-grafana-go_carbon": "^1.0.5", "screeps-jest": "^2.0.2", - "screeps-performance-server": "^1.13.2", + "screeps-performance-server": "^1.14.1", "screeps-viz": "^2.1.3", "sinon": "^6.3.5", "sinon-chai": "^3.2.0", From 8fe7b86db0c7afcf526d1d5780b7c308e792e712 Mon Sep 17 00:00:00 2001 From: Pieter Brandsen Date: Fri, 9 Feb 2024 23:33:48 +0100 Subject: [PATCH 165/190] Added prebuild script --- .github/workflows/CI.yml | 6 +- .vscode/settings.json | 63 +++++----- helper/preBuild.js | 12 ++ server.js => helper/server.js | 0 package.json | 212 +++++++++++++++++----------------- uploadCode.js | 6 - 6 files changed, 153 insertions(+), 146 deletions(-) create mode 100644 helper/preBuild.js rename server.js => helper/server.js (100%) delete mode 100644 uploadCode.js diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 3a3c08756..47e66540e 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -12,7 +12,7 @@ jobs: strategy: fail-fast: false matrix: - node: [10.x,12.x,14.x,16.x] + node: [10.x,12.x,14.x,16.x,18.x,20.x] os: [macos-latest, ubuntu-latest, windows-latest] runs-on: ${{ matrix.os }} steps: @@ -23,5 +23,5 @@ jobs: node-version: ${{ matrix.node }} cache: 'npm' - run: npm install - - run: npm run build --if-present - # - run: npm run test + - run: node helper/preBuild.js + - run: npm run build diff --git a/.vscode/settings.json b/.vscode/settings.json index 5e6265b65..9b09045a3 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,33 +1,34 @@ { - "[javascript]": { - "editor.formatOnSave": false - }, - "[json]": { - "editor.formatOnSave": true - }, - "[typescript]": { - "editor.formatOnSave": true - }, - "editor.codeActionsOnSave": { - "source.fixAll.eslint": "explicit" - }, - "editor.formatOnSave": true, - "editor.renderWhitespace": "none", - "files.encoding": "utf8", - "files.insertFinalNewline": true, - "files.trimTrailingWhitespace": true, - "search.exclude": { - "_book/**": true, - ".rpt2_cache/**": true, - "dist/**": true, - "node_modules/**": true, - "typings/**": true - }, - "typescript.tsdk": "./node_modules/typescript/lib", - "eslint.enable": true, - "git.ignoreLimitWarning": true, - "spellright.language": ["en"], - "spellright.documentTypes": ["latex", "plaintext"], - "compile-hero.disable-compile-files-on-did-save-code": true, - "editor.tabSize": 2 + "[javascript]": { + "editor.formatOnSave": false + }, + "[json]": { + "editor.formatOnSave": true + }, + "[typescript]": { + "editor.formatOnSave": true + }, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit" + }, + "editor.formatOnSave": true, + "editor.renderWhitespace": "none", + "files.encoding": "utf8", + "files.insertFinalNewline": true, + "files.trimTrailingWhitespace": true, + "search.exclude": { + "_book/**": true, + ".rpt2_cache/**": true, + "dist/**": true, + "node_modules/**": true, + "typings/**": true + }, + "typescript.tsdk": "./node_modules/typescript/lib", + "eslint.enable": true, + "git.ignoreLimitWarning": true, + "spellright.language": ["en"], + "spellright.documentTypes": ["latex", "plaintext"], + "compile-hero.disable-compile-files-on-did-save-code": true, + "editor.tabSize": 4, + "editor.detectIndentation": false } diff --git a/helper/preBuild.js b/helper/preBuild.js new file mode 100644 index 000000000..35c486419 --- /dev/null +++ b/helper/preBuild.js @@ -0,0 +1,12 @@ +const fs = require('fs') + +fs.copyFileSync('src/settings.example.ts', 'src/settings.ts') +fs.copyFileSync('src/other/userScript/userScript.example.ts', 'src/other/userScript/userScript.ts') + +const settings = fs.readFileSync('src/settings.ts', 'utf8') +const newSettings = settings.replaceAll('Example', '',) +fs.writeFileSync('src/settings.ts', newSettings) + +const userScript = fs.readFileSync('src/other/userScript/userScript.ts', 'utf8') +const newUserScript = userScript.replaceAll('Example', '') +fs.writeFileSync('src/other/userScript/userScript.ts', newUserScript) diff --git a/server.js b/helper/server.js similarity index 100% rename from server.js rename to helper/server.js diff --git a/package.json b/package.json index 08e2d9e31..a9aed54e5 100644 --- a/package.json +++ b/package.json @@ -1,108 +1,108 @@ { - "name": "the-international-screeps-bot", - "version": "2.119.0", - "description": "", - "files": [ - "dist" - ], - "main": "dist/main.js", - "scripts": { - "init": "npm i", - "init-rust": "cd src/wasm && cargo build && rustup default nightly", - "init-total": "npm i && npm run init-rust", - "build-total": "npm run build-wasm && npm run build", - "build": "rollup -c", - "build-wasm": "cd src/wasm && wasm-pack build --target web --config build.rustflags=['-Ctarget-cpu=mvp'] -Z build-std=std,panic_abort && git add --force pkg/* && git rm --force pkg/.gitignore", - "lint": "eslint src", - "lint-fix": "eslint src --fix", - "push-mmo": "rollup -c --environment DEST:mmo", - "push-pserver": "rollup -c --environment DEST:pserver", - "watch-mmo": "rollup -cw --environment DEST:mmo", - "watch-pserver": "rollup -cw --environment DEST:pserver", - "server": "node server", - "server-debug": "node server --debug", - "test": "jest", - "test-watch": "jest --watch", - "test-cov": "jest --coverage", - "test-only": "bash -c 'jest --watch --coverage --verbose --collectCoverageFrom=\"**/*$1*\" $1' -- ", - "release": "semantic-release", - "compodoc": "npx @compodoc/compodoc -p tsconfig.json --disableSourceCode --output docs", - "compodoc:serve": "npx @compodoc/compodoc -p tsconfig.json --disableSourceCode -s --output docs" - }, - "repository": { - "type": "git", - "url": "https://github.com/The-International-Screeps-Bot/The-International-Open-Source" - }, - "bugs": { - "url": "https://github.com/The-International-Screeps-Bot/The-International-Open-Source/issues" - }, - "author": "Carson Burke", - "contributors": [ - "Pieterbrandsen" - ], - "license": "GNU GPLv3", - "homepage": "https://github.com/The-International-Screeps-Bot/The-International-Open-Source", - "keywords": [ - "screeps", - "screeps bot", - "commie bot", - "the international", - "the international screeps bot" - ], - "devDependencies": { - "@compodoc/compodoc": "^1.1.19", - "@rollup/plugin-commonjs": "^20.0.0", - "@rollup/plugin-node-resolve": "^13.0.4", - "@semantic-release/changelog": "^6.0.3", - "@semantic-release/commit-analyzer": "^9.0.2", - "@semantic-release/git": "^10.0.1", - "@semantic-release/release-notes-generator": "^11.0.1", - "@types/chai": "^4.3.0", - "@types/jest": "^27.0.1", - "@types/lodash": "3.10.2", - "@types/node": "^13.13.1", - "@types/screeps": "^3.3.3", - "@types/sinon": "^5.0.5", - "@types/sinon-chai": "^3.2.0", - "@typescript-eslint/eslint-plugin": "^4.20.0", - "@typescript-eslint/parser": "^4.20.0", - "chai": "^4.2.0", - "dotenv": "^16.0.2", - "eslint": "^7.23.0", - "eslint-config-prettier": "^7.2.0", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-jest": "^24.1.3", - "eslint-plugin-jsdoc": "^31.6.1", - "eslint-plugin-prettier": "^3.3.1", - "eslint-plugin-screeps": "^2.1.0", - "fastestsmallesttextencoderdecoder-encodeinto": "^1.0.22", - "javascript-obfuscator": "^4.0.2", - "jest": "^27.1.0", - "lodash": "^3.10.1", - "prettier": "^2.3.2", - "rollup": "^2.79.1", - "rollup-plugin-clear": "^2.0.7", - "rollup-plugin-copy": "^3.4.0", - "rollup-plugin-screeps-world": "^1.0.4", - "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-typescript2": "^0.36.0", - "screeps-grafana-go_carbon": "^1.0.5", - "screeps-jest": "^2.0.2", - "screeps-performance-server": "^1.14.1", - "screeps-viz": "^2.1.3", - "sinon": "^6.3.5", - "sinon-chai": "^3.2.0", - "ts-jest": "^27.0.5", - "ts-node": "^10.2.0", - "tsconfig-paths": "^3.10.1", - "typescript": "4.4", - "yaml": "^1.10.2" - }, - "dependencies": { - "base32768": "^3.0.1", - "mermaid": "^10.3.0", - "semantic-release": "^21.0.7", - "source-map": "~0.6.1" - }, - "screeps_bot": true + "name": "the-international-screeps-bot", + "version": "2.119.0", + "description": "", + "files": [ + "dist" + ], + "main": "dist/main.js", + "scripts": { + "init": "npm i", + "init-rust": "cd src/wasm && cargo build && rustup default nightly", + "init-total": "npm i && npm run init-rust", + "build-total": "npm run build-wasm && npm run build", + "build": "rollup -c", + "build-wasm": "cd src/wasm && wasm-pack build --target web --config build.rustflags=['-Ctarget-cpu=mvp'] -Z build-std=std,panic_abort && git add --force pkg/* && git rm --force pkg/.gitignore", + "lint": "eslint src", + "lint-fix": "eslint src --fix", + "push-mmo": "rollup -c --environment DEST:mmo", + "push-pserver": "rollup -c --environment DEST:pserver", + "watch-mmo": "rollup -cw --environment DEST:mmo", + "watch-pserver": "rollup -cw --environment DEST:pserver", + "server": "node server", + "server-debug": "node server --debug", + "test": "jest", + "test-watch": "jest --watch", + "test-cov": "jest --coverage", + "test-only": "bash -c 'jest --watch --coverage --verbose --collectCoverageFrom=\"**/*$1*\" $1' -- ", + "release": "semantic-release", + "compodoc": "npx @compodoc/compodoc -p tsconfig.json --disableSourceCode --output docs", + "compodoc:serve": "npx @compodoc/compodoc -p tsconfig.json --disableSourceCode -s --output docs" + }, + "repository": { + "type": "git", + "url": "https://github.com/The-International-Screeps-Bot/The-International-Open-Source" + }, + "bugs": { + "url": "https://github.com/The-International-Screeps-Bot/The-International-Open-Source/issues" + }, + "author": "Carson Burke", + "contributors": [ + "Pieterbrandsen" + ], + "license": "GNU GPLv3", + "homepage": "https://github.com/The-International-Screeps-Bot/The-International-Open-Source", + "keywords": [ + "screeps", + "screeps bot", + "commie bot", + "the international", + "the international screeps bot" + ], + "devDependencies": { + "@compodoc/compodoc": "^1.1.19", + "@rollup/plugin-commonjs": "^20.0.0", + "@rollup/plugin-node-resolve": "^13.0.4", + "@semantic-release/changelog": "^6.0.3", + "@semantic-release/commit-analyzer": "^9.0.2", + "@semantic-release/git": "^10.0.1", + "@semantic-release/release-notes-generator": "^11.0.1", + "@types/chai": "^4.3.0", + "@types/jest": "^27.0.1", + "@types/lodash": "3.10.2", + "@types/node": "^13.13.1", + "@types/screeps": "^3.3.3", + "@types/sinon": "^5.0.5", + "@types/sinon-chai": "^3.2.0", + "@typescript-eslint/eslint-plugin": "^4.20.0", + "@typescript-eslint/parser": "^4.20.0", + "chai": "^4.2.0", + "dotenv": "^16.0.2", + "eslint": "^7.23.0", + "eslint-config-prettier": "^7.2.0", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-jest": "^24.1.3", + "eslint-plugin-jsdoc": "^31.6.1", + "eslint-plugin-prettier": "^3.3.1", + "eslint-plugin-screeps": "^2.1.0", + "fastestsmallesttextencoderdecoder-encodeinto": "^1.0.22", + "javascript-obfuscator": "^4.0.2", + "jest": "^27.1.0", + "lodash": "^3.10.1", + "prettier": "^2.3.2", + "rollup": "^2.79.1", + "rollup-plugin-clear": "^2.0.7", + "rollup-plugin-copy": "^3.4.0", + "rollup-plugin-screeps-world": "^1.0.4", + "rollup-plugin-terser": "^7.0.2", + "rollup-plugin-typescript2": "^0.36.0", + "screeps-grafana-go_carbon": "^1.0.5", + "screeps-jest": "^2.0.2", + "screeps-performance-server": "^1.14.1", + "screeps-viz": "^2.1.3", + "sinon": "^6.3.5", + "sinon-chai": "^3.2.0", + "ts-jest": "^27.0.5", + "ts-node": "^10.2.0", + "tsconfig-paths": "^3.10.1", + "typescript": "4.4", + "yaml": "^1.10.2" + }, + "dependencies": { + "base32768": "^3.0.1", + "mermaid": "^10.3.0", + "semantic-release": "^21.0.7", + "source-map": "~0.6.1" + }, + "screeps_bot": true } diff --git a/uploadCode.js b/uploadCode.js deleted file mode 100644 index e98be1556..000000000 --- a/uploadCode.js +++ /dev/null @@ -1,6 +0,0 @@ -const { execSync } = require('child_process') - -const tokens = [] -tokens.forEach(token => { - execSync(`npx rollup -c --environment TOKEN:${token}`) -}) From 4dd5156237d9cdb4b0881e8a778254bf93a371b0 Mon Sep 17 00:00:00 2001 From: Pieter Brandsen Date: Fri, 9 Feb 2024 23:37:00 +0100 Subject: [PATCH 166/190] Remove replace all function --- helper/preBuild.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/helper/preBuild.js b/helper/preBuild.js index 35c486419..8e3451881 100644 --- a/helper/preBuild.js +++ b/helper/preBuild.js @@ -4,9 +4,9 @@ fs.copyFileSync('src/settings.example.ts', 'src/settings.ts') fs.copyFileSync('src/other/userScript/userScript.example.ts', 'src/other/userScript/userScript.ts') const settings = fs.readFileSync('src/settings.ts', 'utf8') -const newSettings = settings.replaceAll('Example', '',) +const newSettings = settings.replace(/Example/g, '',) fs.writeFileSync('src/settings.ts', newSettings) const userScript = fs.readFileSync('src/other/userScript/userScript.ts', 'utf8') -const newUserScript = userScript.replaceAll('Example', '') +const newUserScript = userScript.replace(/Example/g, '') fs.writeFileSync('src/other/userScript/userScript.ts', newUserScript) From 88165bbc5d76feab5dbb8afdcafdfab0eb7bffb3 Mon Sep 17 00:00:00 2001 From: Carson Date: Fri, 9 Feb 2024 15:34:38 -0800 Subject: [PATCH 167/190] fix scouting room status issues, general improvements --- src/constants/general.ts | 2 + src/international/mapVisuals.ts | 2 +- src/room/commune/communeUtils.ts | 4 +- src/room/creeps/creepProcs.ts | 6 +-- src/room/creeps/creepUtils.ts | 7 +-- .../creeps/roleManagers/commune/hauler.ts | 12 ++++- .../roleManagers/international/scout.ts | 45 ++++++++++--------- src/room/roomFunctions.ts | 3 +- src/room/roomOps.ts | 4 +- 9 files changed, 51 insertions(+), 34 deletions(-) diff --git a/src/constants/general.ts b/src/constants/general.ts index e216d78da..7e68f3e63 100644 --- a/src/constants/general.ts +++ b/src/constants/general.ts @@ -1234,6 +1234,8 @@ export enum Result { action, noAction, stop, + noPath, + notFound, } export const maxRemoteRoomDistance = 5 diff --git a/src/international/mapVisuals.ts b/src/international/mapVisuals.ts index 25bdf2424..032bec4f4 100644 --- a/src/international/mapVisuals.ts +++ b/src/international/mapVisuals.ts @@ -120,7 +120,7 @@ export class MapVisualsManager { const anchor = commune.roomManager.anchor if (!anchor) throw Error('No anchor for mapVisuals remote ' + roomName) - if (commune) { + if (commune && commune.controller.my) { for (const sourceIndex in roomMemory[ RoomMemoryKeys.remoteSourceFastFillerPaths ]) { diff --git a/src/room/commune/communeUtils.ts b/src/room/commune/communeUtils.ts index e4df36a42..ba0e65599 100644 --- a/src/room/commune/communeUtils.ts +++ b/src/room/commune/communeUtils.ts @@ -166,10 +166,10 @@ export class CommuneUtils { if (hubLink && StructureUtils.isRCLActionable(hubLink)) { // Add a bit of extra range because of inherent limitations of withdrawing and transferring - const range = getRange(upgradeStructure.pos, hubLink.pos) + 3 + const range = Math.max(getRange(upgradeStructure.pos, hubLink.pos), 3) // Increase strength by throughput - maxUpgradeStrength += findLinkThroughput(range) * 0.7 + maxUpgradeStrength += findLinkThroughput(range) * 0.9 } for (let i = 0; i < sourceLinks.length; i++) { diff --git a/src/room/creeps/creepProcs.ts b/src/room/creeps/creepProcs.ts index 2b02aed26..084269cee 100644 --- a/src/room/creeps/creepProcs.ts +++ b/src/room/creeps/creepProcs.ts @@ -753,7 +753,7 @@ export class CreepProcs { static runRoomLogisticsRequestAdvanced(creep: Creep, args?: FindNewRoomLogisticsRequestArgs) { const request = CreepUtils.findRoomLogisticsRequest(creep, args) - if (!request) return Result.noAction + if (request === Result.fail) return Result.notFound /* log('REQUEST RESPONSE', request.T, { position: 1 }) */ const target = findObjectWithID(request[CreepLogisticsRequestKeys.target]) @@ -773,7 +773,7 @@ export class CreepProcs { // An enemy is probably blocking access to the logistics target if (result === Result.fail) { creep.room.roomManager.roomLogisticsBlacklistCoords.add(packCoord(target.pos)) - Result.fail + Result.noPath } return Result.action @@ -884,7 +884,7 @@ export class CreepProcs { if (creep.spawning) return Result.noAction const result = this.runRoomLogisticsRequestAdvanced(creep, args) - if (result === Result.action) return result + if (result === Result.action || result === Result.notFound) return result this.runRoomLogisticsRequestAdvanced(creep, args) return Result.success diff --git a/src/room/creeps/creepUtils.ts b/src/room/creeps/creepUtils.ts index e2984386d..69e285639 100644 --- a/src/room/creeps/creepUtils.ts +++ b/src/room/creeps/creepUtils.ts @@ -508,6 +508,7 @@ export class CreepUtils { let resourceType: ResourceConstant for (const key in creepNextStore) { + // Energy is handled by storing structure logistics requests, not backup-created requests if (key === RESOURCE_ENERGY) continue if (creepNextStore[key as ResourceConstant] <= 0) continue @@ -518,7 +519,7 @@ export class CreepUtils { if (!resourceType) return Result.fail const storingStructure = storingStructures.find( - structure => structure.freeReserveStore >= creepNextStore[resourceType], + structure => RoomObjectUtils.freeReserveStoreOf(structure, resourceType) >= creepNextStore[resourceType], ) if (!storingStructure) return Result.fail /* creep.room.visual.text((creep.nextStore[resourceType]).toString(), creep.pos.x, creep.pos.y, { color: customColors.red }) */ @@ -542,7 +543,7 @@ export class CreepUtils { for (resourceType of resourceTypes) { storingStructure = storingStructures.find( - structure => structure.reserveStore[resourceType] >= creep.freeNextStore, + structure => structure.reserveStore[resourceType] >= RoomObjectUtils.freeNextStoreOf(creep, resourceType), ) if (storingStructure) break } @@ -554,7 +555,7 @@ export class CreepUtils { [CreepLogisticsRequestKeys.type]: RoomLogisticsRequestTypes.withdraw, [CreepLogisticsRequestKeys.target]: storingStructure.id, [CreepLogisticsRequestKeys.resourceType]: resourceType, - [CreepLogisticsRequestKeys.amount]: creep.freeNextStore, + [CreepLogisticsRequestKeys.amount]: RoomObjectUtils.freeNextStoreOf(creep, resourceType), } } diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index 1c63237ea..2d2c72b96 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -560,7 +560,7 @@ export class Hauler extends Creep { if (this.room.name === commune.name) { CreepProcs.passiveRenew(this) - CreepProcs.runRoomLogisticsRequestsAdvanced(this, { + const logisticsResult = CreepProcs.runRoomLogisticsRequestsAdvanced(this, { types: new Set([RoomLogisticsRequestTypes.transfer]), resourceTypes: new Set([RESOURCE_ENERGY]), noDelivery: true, @@ -577,7 +577,15 @@ export class Hauler extends Creep { // We haven't emptied ourselves yet if (!this.needsResources()) { - if (getRange(this.pos, commune.storage.pos) <= 1) return true + if (getRange(this.pos, commune.storage.pos) <= 1) { + // We are adjacent to the storage + // If we were unable to find a request to transfer to the storage, just drop the energy + if (logisticsResult === Result.notFound) { + this.drop(RESOURCE_ENERGY, this.store.getUsedCapacity(RESOURCE_ENERGY)) + return true + } + return true + } this.createMoveRequestByPath( { diff --git a/src/room/creeps/roleManagers/international/scout.ts b/src/room/creeps/roleManagers/international/scout.ts index 047a05f24..952f3e14d 100644 --- a/src/room/creeps/roleManagers/international/scout.ts +++ b/src/room/creeps/roleManagers/international/scout.ts @@ -13,8 +13,6 @@ import { RoomNameOps } from 'room/roomNameOps' import { RoomOps } from 'room/roomOps' export class Scout extends Creep { - scoutedRooms?: string[] - unscoutedRooms?: string[] constructor(creepID: Id) { super(creepID) @@ -40,11 +38,11 @@ export class Scout extends Creep { return true } - findScoutTargets?() { + findScoutTargets?(creepMemory: CreepMemory) { // Construct storage of exit information - this.scoutedRooms = [] - this.unscoutedRooms = [] + const scoutedRooms = [] + const unscoutedRooms = [] // Get information about the room's exits const exits = Game.map.describeExits(this.room.name) @@ -58,13 +56,16 @@ export class Scout extends Creep { // If a scout already has this room as a target - if (this.commune.scoutTargets.has(roomName)) continue + const commune = Game.rooms[creepMemory[CreepMemoryKeys.commune]] + if (commune.scoutTargets.has(roomName)) continue // Iterate if the room statuses aren't the same + const status = RoomNameUtils.getStatusForPotentialMemory(roomName) if ( + status !== undefined && Memory.rooms[this.room.name][RoomMemoryKeys.status] !== - RoomNameUtils.getStatusForPotentialMemory(roomName) + status ) continue @@ -73,46 +74,50 @@ export class Scout extends Creep { if (Memory.rooms[roomName] && Memory.rooms[roomName][RoomMemoryKeys.lastScout]) { // Add it to scoutedRooms and iterate - this.scoutedRooms.push(roomName) + scoutedRooms.push(roomName) continue } - this.unscoutedRooms.push(roomName) + unscoutedRooms.push(roomName) } + + return {unscoutedRooms, scoutedRooms} } findBestScoutTarget?() { - this.findScoutTargets() + + const creepMemory = Memory.creeps[this.name] + const {unscoutedRooms, scoutedRooms} = this.findScoutTargets(creepMemory) // Find the closest room to the creep's commune - if (this.unscoutedRooms.length) { + if (unscoutedRooms.length) { let lowestRange = Infinity - for (const roomName of this.unscoutedRooms) { - const range = Game.map.getRoomLinearDistance(this.commune.name, roomName) - if (range > lowestRange) continue + for (const roomName of unscoutedRooms) { + const range = Game.map.getRoomLinearDistance(creepMemory[CreepMemoryKeys.commune], roomName) + if (range >= lowestRange) continue lowestRange = range - this.memory[CreepMemoryKeys.scoutTarget] = roomName + creepMemory[CreepMemoryKeys.scoutTarget] = roomName } - return this.memory[CreepMemoryKeys.scoutTarget] + return creepMemory[CreepMemoryKeys.scoutTarget] } // Find the room scouted longest ago let lowestLastScoutTick = Infinity - for (const roomName of this.scoutedRooms) { + for (const roomName of scoutedRooms) { const lastScoutTick = Memory.rooms[roomName][RoomMemoryKeys.lastScout] - if (lastScoutTick > lowestLastScoutTick) continue + if (lastScoutTick >= lowestLastScoutTick) continue lowestLastScoutTick = lastScoutTick - this.memory[CreepMemoryKeys.scoutTarget] = roomName + creepMemory[CreepMemoryKeys.scoutTarget] = roomName } - return this.memory[CreepMemoryKeys.scoutTarget] + return creepMemory[CreepMemoryKeys.scoutTarget] } // THIS SHOULD BE A ROOM FUNCTION BASED OFF Room.advancedScout diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index 0a162b01e..dae5badaa 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -1484,8 +1484,9 @@ Room.prototype.createRoomLogisticsRequest = function (args) { // Don't make requests when there is nobody to respond if (!this.myCreeps.length) return Result.noAction - if (this.roomManager.roomLogisticsBlacklistCoords.has(packCoord(args.target.pos))) + if (this.roomManager.roomLogisticsBlacklistCoords.has(packCoord(args.target.pos))) { return Result.noAction + } if (!args.resourceType) args.resourceType = RESOURCE_ENERGY // We should only handle energy until we have an active storage or terminal diff --git a/src/room/roomOps.ts b/src/room/roomOps.ts index 3d1155f20..1e362ccf2 100644 --- a/src/room/roomOps.ts +++ b/src/room/roomOps.ts @@ -365,10 +365,10 @@ export class RoomOps { return room.scoutEnemyRoom() } - room.createWorkRequest() - // No controlller owner + room.createWorkRequest() + if (room.scoutRemote(scoutingRoom)) return roomMemory[RoomMemoryKeys.type] return (roomMemory[RoomMemoryKeys.type] = RoomTypes.neutral) From 22a8dff07d00b4234f9766061bef325b286ba454 Mon Sep 17 00:00:00 2001 From: Pieter Date: Sat, 10 Feb 2024 19:10:05 +0100 Subject: [PATCH 168/190] Update package.json --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index a9aed54e5..3ecae7873 100644 --- a/package.json +++ b/package.json @@ -19,8 +19,8 @@ "push-pserver": "rollup -c --environment DEST:pserver", "watch-mmo": "rollup -cw --environment DEST:mmo", "watch-pserver": "rollup -cw --environment DEST:pserver", - "server": "node server", - "server-debug": "node server --debug", + "server": "node helper/server", + "server-debug": "node helper/server --debug", "test": "jest", "test-watch": "jest --watch", "test-cov": "jest --coverage", From 303f0f56244e0fc27ab10824ecb04e23db3c41cf Mon Sep 17 00:00:00 2001 From: Pieter Date: Sat, 10 Feb 2024 19:15:52 +0100 Subject: [PATCH 169/190] Update CD.yml --- .github/workflows/CD.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CD.yml b/.github/workflows/CD.yml index 07baa8fab..e7735f7c5 100644 --- a/.github/workflows/CD.yml +++ b/.github/workflows/CD.yml @@ -27,7 +27,7 @@ jobs: - name: Install dependencies run: npm install - name: Start instances - run: node server --maxTicks=25000 --debug --tickDuration=5000 + run: node helper/server --maxTicks=25000 --debug --tickDuration=5000 env: STEAM_API_KEY: ${{ secrets.STEAM_API_KEY }} EXPORT_DISCORD_WEBHOOK_URL: ${{ secrets.EXPORT_DISCORD_WEBHOOK_URL }} From aafd4ae64146b16e058a3aba910e10a86cc9dbf7 Mon Sep 17 00:00:00 2001 From: Pieter Brandsen Date: Sat, 10 Feb 2024 19:19:28 +0100 Subject: [PATCH 170/190] Added required prebuild script to CD script --- .github/workflows/CD.yml | 4 ++++ helper/server.js | 14 -------------- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/.github/workflows/CD.yml b/.github/workflows/CD.yml index e7735f7c5..28e67e53b 100644 --- a/.github/workflows/CD.yml +++ b/.github/workflows/CD.yml @@ -26,6 +26,10 @@ jobs: run: hostname -I - name: Install dependencies run: npm install + - name: Setup required files + run: node helper/preBuild.js + - name: Build bot + run: npm run build - name: Start instances run: node helper/server --maxTicks=25000 --debug --tickDuration=5000 env: diff --git a/helper/server.js b/helper/server.js index 32bf0a9cd..a48c42b62 100644 --- a/helper/server.js +++ b/helper/server.js @@ -26,7 +26,6 @@ function getPorts() { const ports = getPorts() const options = { stdio: 'inherit' } -const srcPath = join(__dirname, 'src') const botPath = join(__dirname, 'dist') console.log('START') // execSync( @@ -34,19 +33,6 @@ console.log('START') // options, // ) -function customCopyFile(src, dest, searchText, replaceText) { - if (fs.existsSync(dest)) return; - const text = fs.readFileSync(src, 'utf8') - - const regex = new RegExp(searchText, 'g') - const result = text.replace(regex, replaceText) - fs.writeFileSync(dest, result, 'utf8') -} - -customCopyFile(join(srcPath,"settings.example.ts"), join(srcPath,"settings.ts"),'Example','') -customCopyFile(join(srcPath,"other/userScript/userScript.example.ts"), join(srcPath,"other/userScript/userScript.ts"),'Example','') -execSync('npm run build', options) - const cmdString = `npx screeps-performance-server --maxTickCount=${argv.maxTicks || 20000} --maxBots=10 --botFilePath=${botPath} --steamKey=${ process.env.STEAM_KEY } --discordWebHookUrl=${process.env.EXPORT_DISCORD_WEBHOOK_URL} --pasteBinUrlDevKey=${process.env.EXPORT_PASTEBIN_KEY} --serverPort=${ports.serverPort} --cliPort=${ports.cliPort} --force ${ From b1c6791e34522bbc879efbdedb1966308e4a3838 Mon Sep 17 00:00:00 2001 From: Pieter Brandsen Date: Sat, 10 Feb 2024 19:22:58 +0100 Subject: [PATCH 171/190] Dist folder at correct path now --- helper/server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helper/server.js b/helper/server.js index a48c42b62..142470760 100644 --- a/helper/server.js +++ b/helper/server.js @@ -26,7 +26,7 @@ function getPorts() { const ports = getPorts() const options = { stdio: 'inherit' } -const botPath = join(__dirname, 'dist') +const botPath = join(__dirname, '../dist') console.log('START') // execSync( // `npx screeps-grafana-go_carbon setup && npx screeps-grafana-go_carbon --grafanaPort=${ports.grafanaPort} --relayPort=${ports.relayPort} --force ${argv.debug ? '--debug' : ''} --deleteLogs --deleteWhisper`, From 0dbbe953cca9cd848f73bf4faf717771c2e6191c Mon Sep 17 00:00:00 2001 From: Pieter Brandsen Date: Sat, 10 Feb 2024 20:05:36 +0100 Subject: [PATCH 172/190] Updated screeps-performance-server to 1.14.3 --- package-lock.json | 73080 ++++++++++++++++++++++---------------------- package.json | 2 +- 2 files changed, 36541 insertions(+), 36541 deletions(-) diff --git a/package-lock.json b/package-lock.json index 35dc8ca0f..30f7bf078 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,37056 +1,37056 @@ { - "name": "the-international-screeps-bot", - "version": "2.119.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "the-international-screeps-bot", - "version": "2.119.0", - "license": "GNU GPLv3", - "dependencies": { - "base32768": "^3.0.1", - "mermaid": "^10.3.0", - "semantic-release": "^21.0.7", - "source-map": "~0.6.1" - }, - "devDependencies": { - "@compodoc/compodoc": "^1.1.19", - "@rollup/plugin-commonjs": "^20.0.0", - "@rollup/plugin-node-resolve": "^13.0.4", - "@semantic-release/changelog": "^6.0.3", - "@semantic-release/commit-analyzer": "^9.0.2", - "@semantic-release/git": "^10.0.1", - "@semantic-release/release-notes-generator": "^11.0.1", - "@types/chai": "^4.3.0", - "@types/jest": "^27.0.1", - "@types/lodash": "3.10.2", - "@types/node": "^13.13.1", - "@types/screeps": "^3.3.3", - "@types/sinon": "^5.0.5", - "@types/sinon-chai": "^3.2.0", - "@typescript-eslint/eslint-plugin": "^4.20.0", - "@typescript-eslint/parser": "^4.20.0", - "chai": "^4.2.0", - "dotenv": "^16.0.2", - "eslint": "^7.23.0", - "eslint-config-prettier": "^7.2.0", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-jest": "^24.1.3", - "eslint-plugin-jsdoc": "^31.6.1", - "eslint-plugin-prettier": "^3.3.1", - "eslint-plugin-screeps": "^2.1.0", - "fastestsmallesttextencoderdecoder-encodeinto": "^1.0.22", - "javascript-obfuscator": "^4.0.2", - "jest": "^27.1.0", - "lodash": "^3.10.1", - "prettier": "^2.3.2", - "rollup": "^2.79.1", - "rollup-plugin-clear": "^2.0.7", - "rollup-plugin-copy": "^3.4.0", - "rollup-plugin-screeps-world": "^1.0.4", - "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-typescript2": "^0.36.0", - "screeps-grafana-go_carbon": "^1.0.5", - "screeps-jest": "^2.0.2", - "screeps-performance-server": "^1.14.1", - "screeps-viz": "^2.1.3", - "sinon": "^6.3.5", - "sinon-chai": "^3.2.0", - "ts-jest": "^27.0.5", - "ts-node": "^10.2.0", - "tsconfig-paths": "^3.10.1", - "typescript": "4.4", - "yaml": "^1.10.2" - } - }, - "node_modules/@aduh95/viz.js": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@aduh95/viz.js/-/viz.js-3.4.0.tgz", - "integrity": "sha512-KI2nVf9JdwWCXqK6RVf+9/096G7VWN4Z84mnynlyZKao2xQENW8WNEjLmvdlxS5X8PNWXFC1zqwm7tveOXw/4A==", - "dev": true - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@angular-devkit/core": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.6.tgz", - "integrity": "sha512-3OjtrPWvsqVkMBwqPeE65ccCIw56FooNpVVAJ0XwhVQv5mA81pmbCzU7JsR6U449ZT7O4cQblzZMQvWvx74HCg==", - "dev": true, - "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/core/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@angular-devkit/core/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/@angular-devkit/core/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@angular-devkit/schematics": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.6.tgz", - "integrity": "sha512-KA8P78gaS76HMHGBOM8JHJXWLOxCIShYVB2Un/Cu6z3jVODvXq+ILZUc1Y0RsAce/vsl2wf8qpoh5Lku9KJHUQ==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "16.1.6", - "jsonc-parser": "3.2.0", - "magic-string": "0.30.0", - "ora": "5.4.1", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/schematics/node_modules/magic-string": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", - "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.13" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", - "dependencies": { - "@babel/highlight": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", - "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.8", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/core/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", - "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", - "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", - "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz", - "integrity": "sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", - "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", - "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } + "name": "the-international-screeps-bot", + "version": "2.119.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "the-international-screeps-bot", + "version": "2.119.0", + "license": "GNU GPLv3", + "dependencies": { + "base32768": "^3.0.1", + "mermaid": "^10.3.0", + "semantic-release": "^21.0.7", + "source-map": "~0.6.1" + }, + "devDependencies": { + "@compodoc/compodoc": "^1.1.19", + "@rollup/plugin-commonjs": "^20.0.0", + "@rollup/plugin-node-resolve": "^13.0.4", + "@semantic-release/changelog": "^6.0.3", + "@semantic-release/commit-analyzer": "^9.0.2", + "@semantic-release/git": "^10.0.1", + "@semantic-release/release-notes-generator": "^11.0.1", + "@types/chai": "^4.3.0", + "@types/jest": "^27.0.1", + "@types/lodash": "3.10.2", + "@types/node": "^13.13.1", + "@types/screeps": "^3.3.3", + "@types/sinon": "^5.0.5", + "@types/sinon-chai": "^3.2.0", + "@typescript-eslint/eslint-plugin": "^4.20.0", + "@typescript-eslint/parser": "^4.20.0", + "chai": "^4.2.0", + "dotenv": "^16.0.2", + "eslint": "^7.23.0", + "eslint-config-prettier": "^7.2.0", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-jest": "^24.1.3", + "eslint-plugin-jsdoc": "^31.6.1", + "eslint-plugin-prettier": "^3.3.1", + "eslint-plugin-screeps": "^2.1.0", + "fastestsmallesttextencoderdecoder-encodeinto": "^1.0.22", + "javascript-obfuscator": "^4.0.2", + "jest": "^27.1.0", + "lodash": "^3.10.1", + "prettier": "^2.3.2", + "rollup": "^2.79.1", + "rollup-plugin-clear": "^2.0.7", + "rollup-plugin-copy": "^3.4.0", + "rollup-plugin-screeps-world": "^1.0.4", + "rollup-plugin-terser": "^7.0.2", + "rollup-plugin-typescript2": "^0.36.0", + "screeps-grafana-go_carbon": "^1.0.5", + "screeps-jest": "^2.0.2", + "screeps-performance-server": "^1.14.3", + "screeps-viz": "^2.1.3", + "sinon": "^6.3.5", + "sinon-chai": "^3.2.0", + "ts-jest": "^27.0.5", + "ts-node": "^10.2.0", + "tsconfig-paths": "^3.10.1", + "typescript": "4.4", + "yaml": "^1.10.2" + } + }, + "node_modules/@aduh95/viz.js": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@aduh95/viz.js/-/viz.js-3.4.0.tgz", + "integrity": "sha512-KI2nVf9JdwWCXqK6RVf+9/096G7VWN4Z84mnynlyZKao2xQENW8WNEjLmvdlxS5X8PNWXFC1zqwm7tveOXw/4A==", + "dev": true + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.6.tgz", + "integrity": "sha512-3OjtrPWvsqVkMBwqPeE65ccCIw56FooNpVVAJ0XwhVQv5mA81pmbCzU7JsR6U449ZT7O4cQblzZMQvWvx74HCg==", + "dev": true, + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/core/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@angular-devkit/core/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/@angular-devkit/core/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.6.tgz", + "integrity": "sha512-KA8P78gaS76HMHGBOM8JHJXWLOxCIShYVB2Un/Cu6z3jVODvXq+ILZUc1Y0RsAce/vsl2wf8qpoh5Lku9KJHUQ==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.1.6", + "jsonc-parser": "3.2.0", + "magic-string": "0.30.0", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/magic-string": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "dependencies": { + "@babel/highlight": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", + "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.9", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helpers": "^7.22.6", + "@babel/parser": "^7.22.7", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.8", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/core/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/generator": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", + "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", + "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", + "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz", + "integrity": "sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", + "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", + "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", + "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", + "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", + "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.9.tgz", + "integrity": "sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", + "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.6", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", + "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.22.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz", + "integrity": "sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", + "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", + "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", + "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz", + "integrity": "sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", + "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", + "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.9.tgz", + "integrity": "sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.9", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.7", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.6", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.6", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.4", + "babel-plugin-polyfill-corejs3": "^0.8.2", + "babel-plugin-polyfill-regenerator": "^0.5.1", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", + "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", + "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.22.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", + "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.7", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.7", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/traverse/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/types": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@balena/dockerignore": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz", + "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==", + "dev": true + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@braintree/sanitize-url": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz", + "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==" + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@compodoc/compodoc": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/@compodoc/compodoc/-/compodoc-1.1.21.tgz", + "integrity": "sha512-/FDlwRgKzmkGuorDnURuCzoGY6rZ0KY7Mj5/PwnEjMs0y1CRRPHBJC9I0yVIjn8j8gxVy8PPc6dna0lY1MWwhg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@angular-devkit/schematics": "^16.0.1", + "@babel/core": "^7.21.8", + "@babel/preset-env": "^7.21.5", + "@compodoc/live-server": "^1.2.3", + "@compodoc/ngd-transformer": "^2.1.3", + "chalk": "4.1.2", + "cheerio": "^1.0.0-rc.12", + "chokidar": "^3.5.3", + "colors": "1.4.0", + "commander": "^10.0.1", + "cosmiconfig": "^8.1.3", + "decache": "^4.6.1", + "fancy-log": "^2.0.0", + "fast-glob": "^3.2.12", + "fs-extra": "^11.1.1", + "glob": "^10.2.4", + "handlebars": "^4.7.7", + "html-entities": "^2.3.3", + "i18next": "^22.4.15", + "inside": "^1.0.0", + "json5": "^2.2.3", + "lodash": "^4.17.21", + "loglevel": "^1.8.1", + "loglevel-plugin-prefix": "^0.8.4", + "lunr": "^2.3.9", + "marked": "4.3.0", + "minimist": "^1.2.8", + "opencollective-postinstall": "^2.0.3", + "os-name": "4.0.1", + "pdfjs-dist": "2.12.313", + "pdfmake": "^0.2.7", + "semver": "^7.5.1", + "traverse": "^0.6.7", + "ts-morph": "^18.0.0", + "uuid": "^9.0.0" + }, + "bin": { + "compodoc": "bin/index-cli.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@compodoc/compodoc/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@compodoc/compodoc/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@compodoc/compodoc/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@compodoc/compodoc/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@compodoc/compodoc/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@compodoc/compodoc/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@compodoc/compodoc/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@compodoc/compodoc/node_modules/glob": { + "version": "10.3.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", + "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@compodoc/compodoc/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@compodoc/compodoc/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@compodoc/compodoc/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/@compodoc/compodoc/node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true, + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@compodoc/compodoc/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, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@compodoc/compodoc/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, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@compodoc/compodoc/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@compodoc/compodoc/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@compodoc/live-server": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@compodoc/live-server/-/live-server-1.2.3.tgz", + "integrity": "sha512-hDmntVCyjjaxuJzPzBx68orNZ7TW4BtHWMnXlIVn5dqhK7vuFF/11hspO1cMmc+2QTYgqde1TBcb3127S7Zrow==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "colors": "1.4.0", + "connect": "^3.7.0", + "cors": "latest", + "event-stream": "4.0.1", + "faye-websocket": "0.11.x", + "http-auth": "4.1.9", + "http-auth-connect": "^1.0.5", + "morgan": "^1.10.0", + "object-assign": "latest", + "open": "8.4.0", + "proxy-middleware": "latest", + "send": "latest", + "serve-index": "^1.9.1" + }, + "bin": { + "live-server": "live-server.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@compodoc/ngd-core": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@compodoc/ngd-core/-/ngd-core-2.1.1.tgz", + "integrity": "sha512-Z+wE6wWZYVnudRYg6qunDlyh3Orw39Ib66Gvrz5kX5u7So+iu3tr6sQJdqH6yGS3hAjig5avlfhWLlgsb6/x1Q==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.3", + "fancy-log": "^2.0.0", + "typescript": "^5.0.4" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@compodoc/ngd-core/node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@compodoc/ngd-transformer": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@compodoc/ngd-transformer/-/ngd-transformer-2.1.3.tgz", + "integrity": "sha512-oWxJza7CpWR8/FeWYfE6j+jgncnGBsTWnZLt5rD2GUpsGSQTuGrsFPnmbbaVLgRS5QIVWBJYke7QFBr/7qVMWg==", + "dev": true, + "dependencies": { + "@aduh95/viz.js": "3.4.0", + "@compodoc/ngd-core": "~2.1.1", + "dot": "^2.0.0-beta.1", + "fs-extra": "^11.1.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@compodoc/ngd-transformer/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@compodoc/ngd-transformer/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@compodoc/ngd-transformer/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "node_modules/@discordjs/builders": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.5.tgz", + "integrity": "sha512-SdweyCs/+mHj+PNhGLLle7RrRFX9ZAhzynHahMCLqp5Zeq7np7XC6/mgzHc79QoVlQ1zZtOkTTiJpOZu5V8Ufg==", + "dev": true, + "dependencies": { + "@discordjs/formatters": "^0.3.2", + "@discordjs/util": "^1.0.1", + "@sapphire/shapeshift": "^3.9.2", + "discord-api-types": "0.37.50", + "fast-deep-equal": "^3.1.3", + "ts-mixer": "^6.0.3", + "tslib": "^2.6.1" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/builders/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/@discordjs/collection": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", + "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", + "dev": true, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/formatters": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.2.tgz", + "integrity": "sha512-lE++JZK8LSSDRM5nLjhuvWhGuKiXqu+JZ/DsOR89DVVia3z9fdCJVcHF2W/1Zxgq0re7kCzmAJlCMMX3tetKpA==", + "dev": true, + "dependencies": { + "discord-api-types": "0.37.50" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/rest": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.0.1.tgz", + "integrity": "sha512-/eWAdDRvwX/rIE2tuQUmKaxmWeHmGealttIzGzlYfI4+a7y9b6ZoMp8BG/jaohs8D8iEnCNYaZiOFLVFLQb8Zg==", + "dev": true, + "dependencies": { + "@discordjs/collection": "^1.5.3", + "@discordjs/util": "^1.0.1", + "@sapphire/async-queue": "^1.5.0", + "@sapphire/snowflake": "^3.5.1", + "@vladfrangu/async_event_emitter": "^2.2.2", + "discord-api-types": "0.37.50", + "magic-bytes.js": "^1.0.15", + "tslib": "^2.6.1", + "undici": "5.22.1" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/rest/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/@discordjs/util": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.0.1.tgz", + "integrity": "sha512-d0N2yCxB8r4bn00/hvFZwM7goDcUhtViC5un4hPj73Ba4yrChLSJD8fy7Ps5jpTLg1fE9n4K0xBLc1y9WGwSsA==", + "dev": true, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/ws": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.0.1.tgz", + "integrity": "sha512-avvAolBqN3yrSvdBPcJ/0j2g42ABzrv3PEL76e3YTp2WYMGH7cuspkjfSyNWaqYl1J+669dlLp+YFMxSVQyS5g==", + "dev": true, + "dependencies": { + "@discordjs/collection": "^1.5.3", + "@discordjs/rest": "^2.0.1", + "@discordjs/util": "^1.0.1", + "@sapphire/async-queue": "^1.5.0", + "@types/ws": "^8.5.5", + "@vladfrangu/async_event_emitter": "^2.2.2", + "discord-api-types": "0.37.50", + "tslib": "^2.6.1", + "ws": "^8.13.0" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/ws/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/@discordjs/ws/node_modules/ws": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", + "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", - "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", - "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.9.tgz", - "integrity": "sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", - "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", - "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.17.12", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz", - "integrity": "sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", - "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", - "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", - "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", - "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", - "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", - "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", - "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", - "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", - "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", - "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", - "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", - "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", - "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", - "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz", - "integrity": "sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", - "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", - "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", - "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.9.tgz", - "integrity": "sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.7", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.5", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.6", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.5", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.6", - "@babel/plugin-transform-parameters": "^7.22.5", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.5", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.5", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.4", - "babel-plugin-polyfill-corejs3": "^0.8.2", - "babel-plugin-polyfill-regenerator": "^0.5.1", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", - "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "node_modules/@babel/runtime": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", - "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.22.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", - "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.7", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/traverse/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@balena/dockerignore": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz", - "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==", - "dev": true - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@braintree/sanitize-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz", - "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==" - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@compodoc/compodoc": { - "version": "1.1.21", - "resolved": "https://registry.npmjs.org/@compodoc/compodoc/-/compodoc-1.1.21.tgz", - "integrity": "sha512-/FDlwRgKzmkGuorDnURuCzoGY6rZ0KY7Mj5/PwnEjMs0y1CRRPHBJC9I0yVIjn8j8gxVy8PPc6dna0lY1MWwhg==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@angular-devkit/schematics": "^16.0.1", - "@babel/core": "^7.21.8", - "@babel/preset-env": "^7.21.5", - "@compodoc/live-server": "^1.2.3", - "@compodoc/ngd-transformer": "^2.1.3", - "chalk": "4.1.2", - "cheerio": "^1.0.0-rc.12", - "chokidar": "^3.5.3", - "colors": "1.4.0", - "commander": "^10.0.1", - "cosmiconfig": "^8.1.3", - "decache": "^4.6.1", - "fancy-log": "^2.0.0", - "fast-glob": "^3.2.12", - "fs-extra": "^11.1.1", - "glob": "^10.2.4", - "handlebars": "^4.7.7", - "html-entities": "^2.3.3", - "i18next": "^22.4.15", - "inside": "^1.0.0", - "json5": "^2.2.3", - "lodash": "^4.17.21", - "loglevel": "^1.8.1", - "loglevel-plugin-prefix": "^0.8.4", - "lunr": "^2.3.9", - "marked": "4.3.0", - "minimist": "^1.2.8", - "opencollective-postinstall": "^2.0.3", - "os-name": "4.0.1", - "pdfjs-dist": "2.12.313", - "pdfmake": "^0.2.7", - "semver": "^7.5.1", - "traverse": "^0.6.7", - "ts-morph": "^18.0.0", - "uuid": "^9.0.0" - }, - "bin": { - "compodoc": "bin/index-cli.js" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@compodoc/compodoc/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@compodoc/compodoc/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@compodoc/compodoc/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@compodoc/compodoc/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@compodoc/compodoc/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@compodoc/compodoc/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@compodoc/compodoc/node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@compodoc/compodoc/node_modules/glob": { - "version": "10.3.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", - "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@compodoc/compodoc/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@compodoc/compodoc/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@compodoc/compodoc/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/@compodoc/compodoc/node_modules/marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", - "dev": true, - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@compodoc/compodoc/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, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@compodoc/compodoc/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, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@compodoc/compodoc/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@compodoc/compodoc/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@compodoc/live-server": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@compodoc/live-server/-/live-server-1.2.3.tgz", - "integrity": "sha512-hDmntVCyjjaxuJzPzBx68orNZ7TW4BtHWMnXlIVn5dqhK7vuFF/11hspO1cMmc+2QTYgqde1TBcb3127S7Zrow==", - "dev": true, - "dependencies": { - "chokidar": "^3.5.2", - "colors": "1.4.0", - "connect": "^3.7.0", - "cors": "latest", - "event-stream": "4.0.1", - "faye-websocket": "0.11.x", - "http-auth": "4.1.9", - "http-auth-connect": "^1.0.5", - "morgan": "^1.10.0", - "object-assign": "latest", - "open": "8.4.0", - "proxy-middleware": "latest", - "send": "latest", - "serve-index": "^1.9.1" - }, - "bin": { - "live-server": "live-server.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@compodoc/ngd-core": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@compodoc/ngd-core/-/ngd-core-2.1.1.tgz", - "integrity": "sha512-Z+wE6wWZYVnudRYg6qunDlyh3Orw39Ib66Gvrz5kX5u7So+iu3tr6sQJdqH6yGS3hAjig5avlfhWLlgsb6/x1Q==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.3", - "fancy-log": "^2.0.0", - "typescript": "^5.0.4" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@compodoc/ngd-core/node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/@compodoc/ngd-transformer": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@compodoc/ngd-transformer/-/ngd-transformer-2.1.3.tgz", - "integrity": "sha512-oWxJza7CpWR8/FeWYfE6j+jgncnGBsTWnZLt5rD2GUpsGSQTuGrsFPnmbbaVLgRS5QIVWBJYke7QFBr/7qVMWg==", - "dev": true, - "dependencies": { - "@aduh95/viz.js": "3.4.0", - "@compodoc/ngd-core": "~2.1.1", - "dot": "^2.0.0-beta.1", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@compodoc/ngd-transformer/node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@compodoc/ngd-transformer/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@compodoc/ngd-transformer/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@dabh/diagnostics": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, - "node_modules/@discordjs/builders": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.5.tgz", - "integrity": "sha512-SdweyCs/+mHj+PNhGLLle7RrRFX9ZAhzynHahMCLqp5Zeq7np7XC6/mgzHc79QoVlQ1zZtOkTTiJpOZu5V8Ufg==", - "dev": true, - "dependencies": { - "@discordjs/formatters": "^0.3.2", - "@discordjs/util": "^1.0.1", - "@sapphire/shapeshift": "^3.9.2", - "discord-api-types": "0.37.50", - "fast-deep-equal": "^3.1.3", - "ts-mixer": "^6.0.3", - "tslib": "^2.6.1" - }, - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/@discordjs/builders/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/@discordjs/collection": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", - "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", - "dev": true, - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/@discordjs/formatters": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.2.tgz", - "integrity": "sha512-lE++JZK8LSSDRM5nLjhuvWhGuKiXqu+JZ/DsOR89DVVia3z9fdCJVcHF2W/1Zxgq0re7kCzmAJlCMMX3tetKpA==", - "dev": true, - "dependencies": { - "discord-api-types": "0.37.50" - }, - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/@discordjs/rest": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.0.1.tgz", - "integrity": "sha512-/eWAdDRvwX/rIE2tuQUmKaxmWeHmGealttIzGzlYfI4+a7y9b6ZoMp8BG/jaohs8D8iEnCNYaZiOFLVFLQb8Zg==", - "dev": true, - "dependencies": { - "@discordjs/collection": "^1.5.3", - "@discordjs/util": "^1.0.1", - "@sapphire/async-queue": "^1.5.0", - "@sapphire/snowflake": "^3.5.1", - "@vladfrangu/async_event_emitter": "^2.2.2", - "discord-api-types": "0.37.50", - "magic-bytes.js": "^1.0.15", - "tslib": "^2.6.1", - "undici": "5.22.1" - }, - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/@discordjs/rest/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/@discordjs/util": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.0.1.tgz", - "integrity": "sha512-d0N2yCxB8r4bn00/hvFZwM7goDcUhtViC5un4hPj73Ba4yrChLSJD8fy7Ps5jpTLg1fE9n4K0xBLc1y9WGwSsA==", - "dev": true, - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/@discordjs/ws": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.0.1.tgz", - "integrity": "sha512-avvAolBqN3yrSvdBPcJ/0j2g42ABzrv3PEL76e3YTp2WYMGH7cuspkjfSyNWaqYl1J+669dlLp+YFMxSVQyS5g==", - "dev": true, - "dependencies": { - "@discordjs/collection": "^1.5.3", - "@discordjs/rest": "^2.0.1", - "@discordjs/util": "^1.0.1", - "@sapphire/async-queue": "^1.5.0", - "@types/ws": "^8.5.5", - "@vladfrangu/async_event_emitter": "^2.2.2", - "discord-api-types": "0.37.50", - "tslib": "^2.6.1", - "ws": "^8.13.0" - }, - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/@discordjs/ws/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/@discordjs/ws/node_modules/ws": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", - "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/acorn": { - "version": "7.4.1", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@eslint/eslintrc/node_modules/espree": { - "version": "7.3.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.15.0", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@foliojs-fork/fontkit": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@foliojs-fork/fontkit/-/fontkit-1.9.1.tgz", - "integrity": "sha512-U589voc2/ROnvx1CyH9aNzOQWJp127JGU1QAylXGQ7LoEAF6hMmahZLQ4eqAcgHUw+uyW4PjtCItq9qudPkK3A==", - "dev": true, - "dependencies": { - "@foliojs-fork/restructure": "^2.0.2", - "brfs": "^2.0.0", - "brotli": "^1.2.0", - "browserify-optional": "^1.0.1", - "clone": "^1.0.4", - "deep-equal": "^1.0.0", - "dfa": "^1.2.0", - "tiny-inflate": "^1.0.2", - "unicode-properties": "^1.2.2", - "unicode-trie": "^2.0.0" - } - }, - "node_modules/@foliojs-fork/linebreak": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@foliojs-fork/linebreak/-/linebreak-1.1.1.tgz", - "integrity": "sha512-pgY/+53GqGQI+mvDiyprvPWgkTlVBS8cxqee03ejm6gKAQNsR1tCYCIvN9FHy7otZajzMqCgPOgC4cHdt4JPig==", - "dev": true, - "dependencies": { - "base64-js": "1.3.1", - "brfs": "^2.0.2", - "unicode-trie": "^2.0.0" - } - }, - "node_modules/@foliojs-fork/linebreak/node_modules/base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", - "dev": true - }, - "node_modules/@foliojs-fork/pdfkit": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@foliojs-fork/pdfkit/-/pdfkit-0.13.0.tgz", - "integrity": "sha512-YXeG1fml9k97YNC9K8e292Pj2JzGt9uOIiBFuQFxHsdQ45BlxW+JU3RQK6JAvXU7kjhjP8rCcYvpk36JLD33sQ==", - "dev": true, - "dependencies": { - "@foliojs-fork/fontkit": "^1.9.1", - "@foliojs-fork/linebreak": "^1.1.1", - "crypto-js": "^4.0.0", - "png-js": "^1.0.0" - } - }, - "node_modules/@foliojs-fork/restructure": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@foliojs-fork/restructure/-/restructure-2.0.2.tgz", - "integrity": "sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA==", - "dev": true - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "dev": true, - "license": "BSD-3-Clause" - }, - "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, - "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, - "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, - "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 - }, - "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, - "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, - "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, - "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/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-try": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@javascript-obfuscator/escodegen": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@javascript-obfuscator/escodegen/-/escodegen-2.3.0.tgz", - "integrity": "sha512-QVXwMIKqYMl3KwtTirYIA6gOCiJ0ZDtptXqAv/8KWLG9uQU2fZqTVy7a/A5RvcoZhbDoFfveTxuGxJ5ibzQtkw==", - "dev": true, - "dependencies": { - "@javascript-obfuscator/estraverse": "^5.3.0", - "esprima": "^4.0.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/@javascript-obfuscator/estraverse": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@javascript-obfuscator/estraverse/-/estraverse-5.4.0.tgz", - "integrity": "sha512-CZFX7UZVN9VopGbjTx4UXaXsi9ewoM1buL0kY7j1ftYdSs7p2spv9opxFjHlQ/QGTgh4UqufYqJJ0WKLml7b6w==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@jest/console": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", - "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/@jest/console/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/console/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/console/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/core/node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "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/@jest/core/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/core/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/core/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@jest/core/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@jest/environment": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", - "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/@jest/reporters/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/reporters/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/source-map": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.2", - "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/@jest/transform/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/transform/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/transform/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/transform/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "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/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/types/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "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", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@octokit/auth-token": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", - "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/core": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.0.tgz", - "integrity": "sha512-YbAtMWIrbZ9FCXbLwT9wWB8TyLjq9mxpKdgB3dUNxQcIVTf9hJ70gRPwAcqGZdY6WdJPZ0I7jLaaNDCiloGN2A==", - "dependencies": { - "@octokit/auth-token": "^4.0.0", - "@octokit/graphql": "^7.0.0", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/endpoint": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.0.tgz", - "integrity": "sha512-szrQhiqJ88gghWY2Htt8MqUDO6++E/EIXqJ2ZEp5ma3uGS46o7LZAzSLt49myB7rT+Hfw5Y6gO3LmOxGzHijAQ==", - "dependencies": { - "@octokit/types": "^11.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/endpoint/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@octokit/graphql": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.1.tgz", - "integrity": "sha512-T5S3oZ1JOE58gom6MIcrgwZXzTaxRnxBso58xhozxHpOqSTgDS6YNeEUvZ/kRvXgPrRz/KHnZhtb7jUMRi9E6w==", - "dependencies": { - "@octokit/request": "^8.0.1", - "@octokit/types": "^11.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/openapi-types": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", - "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-8.0.0.tgz", - "integrity": "sha512-2xZ+baZWUg+qudVXnnvXz7qfrTmDeYPCzangBVq/1gXxii/OiS//4shJp9dnCCvj1x+JAm9ji1Egwm1BA47lPQ==", - "dependencies": { - "@octokit/types": "^11.0.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": ">=5" - } - }, - "node_modules/@octokit/plugin-retry": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-6.0.0.tgz", - "integrity": "sha512-a1/A4A+PB1QoAHQfLJxGHhLfSAT03bR1jJz3GgQJZvty2ozawFWs93MiBQXO7SL2YbO7CIq0Goj4qLOBj8JeMQ==", - "dependencies": { - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0", - "bottleneck": "^2.15.3" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": ">=5" - } - }, - "node_modules/@octokit/plugin-throttling": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-7.0.0.tgz", - "integrity": "sha512-KL2k/d0uANc8XqP5S64YcNFCudR3F5AaKO39XWdUtlJIjT9Ni79ekWJ6Kj5xvAw87udkOMEPcVf9xEge2+ahew==", - "dependencies": { - "@octokit/types": "^11.0.0", - "bottleneck": "^2.15.3" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": "^5.0.0" - } - }, - "node_modules/@octokit/request": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.1.1.tgz", - "integrity": "sha512-8N+tdUz4aCqQmXl8FpHYfKG9GelDFd7XGVzyN8rc6WxVlYcfpHECnuRkgquzz+WzvHTK62co5di8gSXnzASZPQ==", - "dependencies": { - "@octokit/endpoint": "^9.0.0", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.1.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/request-error": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.0.tgz", - "integrity": "sha512-1ue0DH0Lif5iEqT52+Rf/hf0RmGO9NWFjrzmrkArpG9trFfDM/efx00BJHdLGuro4BR/gECxCU2Twf5OKrRFsQ==", - "dependencies": { - "@octokit/types": "^11.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/request/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@octokit/types": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-11.1.0.tgz", - "integrity": "sha512-Fz0+7GyLm/bHt8fwEqgvRBWwIV1S6wRRyq+V6exRKLVWaKGsuy6H9QFYeBVDV7rK6fO3XwHgQOPxv+cLj2zpXQ==", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "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, - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "dependencies": { - "graceful-fs": "4.2.10" - }, - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/npm-conf": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", - "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", - "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@rollup/plugin-commonjs": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-20.0.0.tgz", - "integrity": "sha512-5K0g5W2Ol8hAcTHqcTBHiA7M58tfmYi1o9KxeJuuRNpGaTa5iLjcyemBitCBcKXaHamOBBEH2dGom6v6Unmqjg==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^2.38.3" - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "13.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.1.0", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "rollup": "^2.42.0" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/pluginutils/node_modules/estree-walker": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@sapphire/async-queue": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", - "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==", - "dev": true, - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@sapphire/shapeshift": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.2.tgz", - "integrity": "sha512-YRbCXWy969oGIdqR/wha62eX8GNHsvyYi0Rfd4rNW6tSVVa8p0ELiMEuOH/k8rgtvRoM+EMV7Csqz77YdwiDpA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@sapphire/shapeshift/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/@sapphire/snowflake": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz", - "integrity": "sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==", - "dev": true, - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@semantic-release/changelog": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@semantic-release/changelog/-/changelog-6.0.3.tgz", - "integrity": "sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==", - "dev": true, - "dependencies": { - "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", - "fs-extra": "^11.0.0", - "lodash": "^4.17.4" - }, - "engines": { - "node": ">=14.17" - }, - "peerDependencies": { - "semantic-release": ">=18.0.0" - } - }, - "node_modules/@semantic-release/changelog/node_modules/@semantic-release/error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", - "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", - "dev": true, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/@semantic-release/changelog/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, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/changelog/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, - "engines": { - "node": ">=6" - } - }, - "node_modules/@semantic-release/changelog/node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@semantic-release/changelog/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/changelog/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@semantic-release/changelog/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/@semantic-release/changelog/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@semantic-release/commit-analyzer": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz", - "integrity": "sha512-E+dr6L+xIHZkX4zNMe6Rnwg4YQrWNXK+rNsvwOPpdFppvZO1olE2fIgWhv89TkQErygevbjsZFSIxp+u6w2e5g==", - "dev": true, - "dependencies": { - "conventional-changelog-angular": "^5.0.0", - "conventional-commits-filter": "^2.0.0", - "conventional-commits-parser": "^3.2.3", - "debug": "^4.0.0", - "import-from": "^4.0.0", - "lodash": "^4.17.4", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=14.17" - }, - "peerDependencies": { - "semantic-release": ">=18.0.0-beta.1" - } - }, - "node_modules/@semantic-release/commit-analyzer/node_modules/conventional-changelog-angular": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", - "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", - "dev": true, - "dependencies": { - "compare-func": "^2.0.0", - "q": "^1.5.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@semantic-release/commit-analyzer/node_modules/conventional-commits-filter": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", - "dev": true, - "dependencies": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@semantic-release/commit-analyzer/node_modules/conventional-commits-parser": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", - "dev": true, - "dependencies": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "conventional-commits-parser": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@semantic-release/commit-analyzer/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@semantic-release/commit-analyzer/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/@semantic-release/commit-analyzer/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@semantic-release/commit-analyzer/node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "dependencies": { - "readable-stream": "3" - } - }, - "node_modules/@semantic-release/error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", - "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==", - "engines": { - "node": ">=18" - } - }, - "node_modules/@semantic-release/git": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@semantic-release/git/-/git-10.0.1.tgz", - "integrity": "sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==", - "dev": true, - "dependencies": { - "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", - "debug": "^4.0.0", - "dir-glob": "^3.0.0", - "execa": "^5.0.0", - "lodash": "^4.17.4", - "micromatch": "^4.0.0", - "p-reduce": "^2.0.0" - }, - "engines": { - "node": ">=14.17" - }, - "peerDependencies": { - "semantic-release": ">=18.0.0" - } - }, - "node_modules/@semantic-release/git/node_modules/@semantic-release/error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", - "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", - "dev": true, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/@semantic-release/git/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, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/git/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, - "engines": { - "node": ">=6" - } - }, - "node_modules/@semantic-release/git/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@semantic-release/git/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "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/@semantic-release/git/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/git/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/@semantic-release/git/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@semantic-release/git/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@semantic-release/git/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/git/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/git/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/github": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-9.0.4.tgz", - "integrity": "sha512-kQCGFAsBErvCR6hzNuzu63cj4erQN2krm9zQlg8vl4j5X0mL0d/Ras0wmL5Gkr1TuSS2lweME7M4J5zvtDDDSA==", - "dependencies": { - "@octokit/core": "^5.0.0", - "@octokit/plugin-paginate-rest": "^8.0.0", - "@octokit/plugin-retry": "^6.0.0", - "@octokit/plugin-throttling": "^7.0.0", - "@semantic-release/error": "^4.0.0", - "aggregate-error": "^4.0.1", - "debug": "^4.3.4", - "dir-glob": "^3.0.1", - "globby": "^13.1.4", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "issue-parser": "^6.0.0", - "lodash-es": "^4.17.21", - "mime": "^3.0.0", - "p-filter": "^3.0.0", - "url-join": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "semantic-release": ">=20.1.0" - } - }, - "node_modules/@semantic-release/github/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@semantic-release/github/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@semantic-release/github/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "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/@semantic-release/github/node_modules/http-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@semantic-release/github/node_modules/https-proxy-agent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz", - "integrity": "sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@semantic-release/github/node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@semantic-release/github/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/@semantic-release/github/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/npm": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-10.0.4.tgz", - "integrity": "sha512-6R3timIQ7VoL2QWRkc9DG8v74RQtRp7UOe/2KbNaqwJ815qOibAv65bH3RtTEhs4axEaHoZf7HDgFs5opaZ9Jw==", - "dependencies": { - "@semantic-release/error": "^4.0.0", - "aggregate-error": "^4.0.1", - "execa": "^7.0.0", - "fs-extra": "^11.0.0", - "lodash-es": "^4.17.21", - "nerf-dart": "^1.0.0", - "normalize-url": "^8.0.0", - "npm": "^9.5.0", - "rc": "^1.2.8", - "read-pkg": "^8.0.0", - "registry-auth-token": "^5.0.0", - "semver": "^7.1.2", - "tempy": "^3.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "semantic-release": ">=20.1.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@semantic-release/npm/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@semantic-release/npm/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@semantic-release/npm/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@semantic-release/release-notes-generator": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-11.0.4.tgz", - "integrity": "sha512-j0Znnwq9IdWTCGzqSlkLv4MpALTsVDZxcVESzJCNN8pK2BYQlYaKsdZ1Ea/+7RlppI3vjhEi33ZKmjSGY1FLKw==", - "dependencies": { - "conventional-changelog-angular": "^6.0.0", - "conventional-changelog-writer": "^6.0.0", - "conventional-commits-filter": "^3.0.0", - "conventional-commits-parser": "^4.0.0", - "debug": "^4.0.0", - "get-stream": "^7.0.0", - "import-from": "^4.0.0", - "into-stream": "^7.0.0", - "lodash-es": "^4.17.21", - "read-pkg-up": "^10.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "semantic-release": ">=20.1.0" - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/get-stream": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-7.0.1.tgz", - "integrity": "sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/release-notes-generator/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.3", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "8.1.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@sinonjs/formatio": { - "version": "3.2.2", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^1", - "@sinonjs/samsam": "^3.1.0" - } - }, - "node_modules/@sinonjs/formatio/node_modules/@sinonjs/samsam": { - "version": "3.3.3", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^1.3.0", - "array-from": "^2.1.1", - "lodash": "^4.17.15" - } - }, - "node_modules/@sinonjs/formatio/node_modules/lodash": { - "version": "4.17.21", - "dev": true, - "license": "MIT" - }, - "node_modules/@sinonjs/samsam": { - "version": "2.1.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@sinonjs/text-encoding": { - "version": "0.7.1", - "dev": true, - "license": "(Unlicense OR Apache-2.0)" - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/@ts-morph/common": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.19.0.tgz", - "integrity": "sha512-Unz/WHmd4pGax91rdIKWi51wnVUW11QttMEPpBiBgIewnc9UQIX7UDLxr5vRlqeByXCwhkF6VabSsI0raWcyAQ==", - "dev": true, - "dependencies": { - "fast-glob": "^3.2.12", - "minimatch": "^7.4.3", - "mkdirp": "^2.1.6", - "path-browserify": "^1.0.1" - } - }, - "node_modules/@ts-morph/common/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@ts-morph/common/node_modules/minimatch": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", - "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@ts-morph/common/node_modules/mkdirp": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz", - "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==", - "dev": true, - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/babel__core": { - "version": "7.1.19", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.17.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.3.0" - } - }, - "node_modules/@types/chai": { - "version": "4.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/d3-scale": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.3.tgz", - "integrity": "sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==", - "dependencies": { - "@types/d3-time": "*" - } - }, - "node_modules/@types/d3-scale-chromatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", - "integrity": "sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw==" - }, - "node_modules/@types/d3-time": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz", - "integrity": "sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==" - }, - "node_modules/@types/debug": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", - "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/estree": { - "version": "0.0.39", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/fs-extra": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.2.tgz", - "integrity": "sha512-SvSrYXfWSc7R4eqnOzbQF4TZmfpNSM9FrSWLU3EUnWBuyZqNBOrv1B1JA3byUDPUl9z4Ab3jeZG2eDdySlgNMg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.1.tgz", - "integrity": "sha512-HTLpVXHrY69556ozYkcq47TtQJXpcWAWfkoqz+ZGz2JnmZhzlRjprCIyFnetSy8gpDWwTTGBcRVv1J1I1vBrHw==", - "dev": true, - "dependencies": { - "jest-diff": "^27.0.0", - "pretty-format": "^27.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/lodash": { - "version": "3.10.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mdast": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.12.tgz", - "integrity": "sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==", - "dependencies": { - "@types/unist": "^2" - } - }, - "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 - }, - "node_modules/@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" - }, - "node_modules/@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" - }, - "node_modules/@types/node": { - "version": "13.13.52", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" - }, - "node_modules/@types/prettier": { - "version": "2.6.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/resolve": { - "version": "1.17.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/screeps": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@types/screeps/-/screeps-3.3.3.tgz", - "integrity": "sha512-r+ru4iNv8wNaNBWvk2gMXYpG8Ok1GJ8NVV9WBIHa5I+hz2QGttnAus+1whDMIzES8x3yK83Usz+gHqm8ehIW7w==", - "dev": true - }, - "node_modules/@types/sinon": { - "version": "5.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/sinon-chai": { - "version": "3.2.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/chai": "*", - "@types/sinon": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/unist": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.7.tgz", - "integrity": "sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==" - }, - "node_modules/@types/validator": { - "version": "13.7.17", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.17.tgz", - "integrity": "sha512-aqayTNmeWrZcvnG2MG9eGYI6b7S5fl+yKgPs6bAjOTwPS316R5SxBGKvtSExfyoJU7pIeHJfsHI0Ji41RVMkvQ==", - "dev": true - }, - "node_modules/@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.33.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/experimental-utils": "4.33.0", - "@typescript-eslint/scope-manager": "4.33.0", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/regexpp": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.3.7", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "4.33.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-scope": { - "version": "5.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-utils": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "4.33.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "4.33.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "4.33.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.7", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } - }, - "node_modules/@vladfrangu/async_event_emitter": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz", - "integrity": "sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==", - "dev": true, - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/abab": { - "version": "2.0.6", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accumulate-stream": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "^3.1.0", - "ms": "^2.1.3" - } - }, - "node_modules/accumulate-stream/node_modules/ms": { - "version": "2.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dev": true, - "dependencies": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "node_modules/acorn-node/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agent-base/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/agent-base/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "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==", - "dependencies": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "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/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "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 - }, - "node_modules/amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.4.2" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", - "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", - "dependencies": { - "type-fest": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ansicolors": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", - "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==" - }, - "node_modules/anymatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/apache-crypt": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.6.tgz", - "integrity": "sha512-072WetlM4blL8PREJVeY+WHiUh1R5VNt2HfceGS8aKqttPHcmqE5pkKuXPz/ULmJOFkc8Hw3kfKl6vy7Qka6DA==", - "dev": true, - "dependencies": { - "unix-crypt-td-js": "^1.1.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/apache-md5": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.8.tgz", - "integrity": "sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/argparse": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/argv-formatter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", - "integrity": "sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==" - }, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/array-from": { - "version": "2.1.1", - "dev": true, - "license": "MIT" - }, - "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==" - }, - "node_modules/array-includes": { - "version": "3.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", - "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", - "dev": true, - "dependencies": { - "es6-object-assign": "^1.1.0", - "is-nan": "^1.2.1", - "object-is": "^1.0.1", - "util": "^0.12.0" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/ast-transform": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/ast-transform/-/ast-transform-0.0.0.tgz", - "integrity": "sha512-e/JfLiSoakfmL4wmTGPjv0HpTICVmxwXgYOB8x+mzozHL8v+dSfCbrJ8J8hJ0YBP0XcYu1aLZ6b/3TnxNK3P2A==", - "dev": true, - "dependencies": { - "escodegen": "~1.2.0", - "esprima": "~1.0.4", - "through": "~2.3.4" - } - }, - "node_modules/ast-transform/node_modules/escodegen": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.2.0.tgz", - "integrity": "sha512-yLy3Cc+zAC0WSmoT2fig3J87TpQ8UaZGx8ahCAs9FL8qNbyV7CVyPKS74DG4bsHiL5ew9sxdYx131OkBQMFnvA==", - "dev": true, - "dependencies": { - "esprima": "~1.0.4", - "estraverse": "~1.5.0", - "esutils": "~1.0.0" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=0.4.0" - }, - "optionalDependencies": { - "source-map": "~0.1.30" - } - }, - "node_modules/ast-transform/node_modules/esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", - "integrity": "sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ast-transform/node_modules/estraverse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz", - "integrity": "sha512-FpCjJDfmo3vsc/1zKSeqR5k42tcIhxFIlvq+h9j0fO2q/h2uLKyweq7rYJ+0CoVvrGQOxIS5wyBrW/+vF58BUQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ast-transform/node_modules/esutils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz", - "integrity": "sha512-x/iYH53X3quDwfHRz4y8rn4XcEwwCJeWsul9pF1zldMbGtgOtMNBEOuYWwB1EQlK2LRa1fev3YAgym/RElp5Cg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ast-transform/node_modules/source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", - "dev": true, - "optional": true, - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ast-types": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.7.8.tgz", - "integrity": "sha512-RIOpVnVlltB6PcBJ5BMLx+H+6JJ/zjDGU0t7f0L6c2M1dqcK92VQopLBlPQ9R80AVXelfqYgjcPLtHtDbNFg0Q==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/async": { - "version": "3.2.4", - "dev": true, - "license": "MIT" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axios": { - "version": "0.21.4", - "dev": true, - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.14.0" - } - }, - "node_modules/babel-jest": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "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/babel-jest/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-jest/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-jest/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", - "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.2", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", - "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.2", - "core-js-compat": "^3.31.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", - "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-plugin-jest-hoist": "^27.5.1", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/base32768": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base32768/-/base32768-3.0.1.tgz", - "integrity": "sha512-dNGY49X0IKN1kDl9y/6sii1Vced+f+4uAqOeRz/PshjNdPwSD+ntnHOg/YgDbLSZetp94d/XxGdpfbXDKv8BVQ==" - }, - "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" - } - ] - }, - "node_modules/basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "dev": true, - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/basic-auth/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/bcryptjs": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", - "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", - "dev": true - }, - "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==" - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "node_modules/bottleneck": { - "version": "2.19.5", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brfs": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brfs/-/brfs-2.0.2.tgz", - "integrity": "sha512-IrFjVtwu4eTJZyu8w/V2gxU7iLTtcHih67sgEdzrhjLBMHp2uYefUBfdM4k2UvcuWMgV7PQDZHSLeNWnLFKWVQ==", - "dev": true, - "dependencies": { - "quote-stream": "^1.0.1", - "resolve": "^1.1.5", - "static-module": "^3.0.2", - "through2": "^2.0.0" - }, - "bin": { - "brfs": "bin/cmd.js" - } - }, - "node_modules/brotli": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", - "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", - "dev": true, - "dependencies": { - "base64-js": "^1.1.2" - } - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dev": true, - "dependencies": { - "resolve": "1.1.7" - } - }, - "node_modules/browser-resolve/node_modules/resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", - "dev": true - }, - "node_modules/browserify-optional": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-optional/-/browserify-optional-1.0.1.tgz", - "integrity": "sha512-VrhjbZ+Ba5mDiSYEuPelekQMfTbhcA2DhLk2VQWqdcCROWeFqlTcXZ7yfRkXCIl8E+g4gINJYJiRB7WEtfomAQ==", - "dev": true, - "dependencies": { - "ast-transform": "0.0.0", - "ast-types": "^0.7.0", - "browser-resolve": "^1.8.1" - } - }, - "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "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" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "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" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-equal": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/bufferutil": { - "version": "4.0.6", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/buildcheck": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz", - "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==", - "dev": true, - "optional": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "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==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/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==", - "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/caniuse-lite": { - "version": "1.0.30001517", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz", - "integrity": "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==", - "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" - } - ] - }, - "node_modules/cardinal": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", - "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==", - "dependencies": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" - }, - "bin": { - "cdl": "bin/cdl.js" - } - }, - "node_modules/chai": { - "version": "4.3.6", - "dev": true, - "license": "MIT", - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chance": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/chance/-/chance-1.1.9.tgz", - "integrity": "sha512-TfxnA/DcZXRTA4OekA2zL9GH8qscbbl6X0ZqU4tXhGveVY/mXWvEQLt5GwZcYXTEyEFflVtj+pG8nc8EwSm1RQ==", - "dev": true - }, - "node_modules/char-regex": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/check-error": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "dev": true, - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cheerio/node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/child-shell": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "accumulate-stream": "^5.0.0", - "debug": "^4.3.2", - "kind-of": "^6.0.3", - "nanoid": "^3.1.30", - "p-queue": "6.6.2", - "p-timeout": "4.1.0", - "trim-buffer": "^5.0.0" - } - }, - "node_modules/child-shell/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/child-shell/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/ci-info": { - "version": "3.3.2", - "dev": true, - "license": "MIT" - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "dev": true, - "license": "MIT" - }, - "node_modules/class-validator": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.0.tgz", - "integrity": "sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==", - "dev": true, - "dependencies": { - "@types/validator": "^13.7.10", - "libphonenumber-js": "^1.10.14", - "validator": "^13.7.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==", - "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==", - "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, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/co": { - "version": "4.6.0", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/code-block-writer": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-12.0.0.tgz", - "integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==", - "dev": true - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/color": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "license": "MIT" - }, - "node_modules/color-string": { - "version": "1.9.1", - "dev": true, - "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, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", - "dev": true - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/colorspace": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "color": "^3.1.3", - "text-hex": "1.0.x" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "2.20.3", - "dev": true, - "license": "MIT" - }, - "node_modules/comment-parser": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "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==", - "dependencies": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/concat-stream/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, - "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/concat-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/conventional-changelog-angular": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz", - "integrity": "sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==", - "dependencies": { - "compare-func": "^2.0.0" - }, - "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==", - "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/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/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==", - "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==", - "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/convert-source-map": { - "version": "1.8.0", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/convert-source-map/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/core-js-compat": { - "version": "3.31.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.1.tgz", - "integrity": "sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.9" - }, - "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==" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cose-base": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", - "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", - "dependencies": { - "layout-base": "^1.0.0" - } - }, - "node_modules/cosmiconfig": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", - "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", - "dependencies": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - } - }, - "node_modules/cosmiconfig/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/cpu-features": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.9.tgz", - "integrity": "sha512-AKjgn2rP2yJyfbepsmLfiYcmtNn/2eUvocUyM/09yB0YDiz39HteK/5/T4Onf0pmdYDMgkBoGvRLvEguzyL7wQ==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "dependencies": { - "buildcheck": "~0.0.6", - "nan": "^2.17.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/crypto-js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", - "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==", - "dev": true - }, - "node_modules/crypto-random-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", - "dependencies": { - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/crypto-random-string/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==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssom": { - "version": "0.4.4", - "dev": true, - "license": "MIT" - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "dev": true, - "license": "MIT" - }, - "node_modules/cytoscape": { - "version": "3.25.0", - "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.25.0.tgz", - "integrity": "sha512-7MW3Iz57mCUo6JQCho6CmPBCbTlJr7LzyEtIkutG255HLVd4XuBg2I9BkTZLI/e4HoaOB/BiAzXuQybQ95+r9Q==", - "dependencies": { - "heap": "^0.2.6", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/cytoscape-cose-bilkent": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", - "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", - "dependencies": { - "cose-base": "^1.0.0" - }, - "peerDependencies": { - "cytoscape": "^3.2.0" - } - }, - "node_modules/cytoscape-fcose": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", - "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", - "dependencies": { - "cose-base": "^2.2.0" - }, - "peerDependencies": { - "cytoscape": "^3.2.0" - } - }, - "node_modules/cytoscape-fcose/node_modules/cose-base": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", - "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", - "dependencies": { - "layout-base": "^2.0.0" - } - }, - "node_modules/cytoscape-fcose/node_modules/layout-base": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", - "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==" - }, - "node_modules/cytoscape/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/d3": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", - "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==", - "dependencies": { - "d3-array": "3", - "d3-axis": "3", - "d3-brush": "3", - "d3-chord": "3", - "d3-color": "3", - "d3-contour": "4", - "d3-delaunay": "6", - "d3-dispatch": "3", - "d3-drag": "3", - "d3-dsv": "3", - "d3-ease": "3", - "d3-fetch": "3", - "d3-force": "3", - "d3-format": "3", - "d3-geo": "3", - "d3-hierarchy": "3", - "d3-interpolate": "3", - "d3-path": "3", - "d3-polygon": "3", - "d3-quadtree": "3", - "d3-random": "3", - "d3-scale": "4", - "d3-scale-chromatic": "3", - "d3-selection": "3", - "d3-shape": "3", - "d3-time": "3", - "d3-time-format": "4", - "d3-timer": "3", - "d3-transition": "3", - "d3-zoom": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-array": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", - "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", - "dependencies": { - "internmap": "1 - 2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-axis": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", - "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-brush": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", - "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "3", - "d3-transition": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-chord": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", - "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", - "dependencies": { - "d3-path": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-contour": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", - "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", - "dependencies": { - "d3-array": "^3.2.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-delaunay": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", - "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", - "dependencies": { - "delaunator": "5" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dsv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", - "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", - "dependencies": { - "commander": "7", - "iconv-lite": "0.6", - "rw": "1" - }, - "bin": { - "csv2json": "bin/dsv2json.js", - "csv2tsv": "bin/dsv2dsv.js", - "dsv2dsv": "bin/dsv2dsv.js", - "dsv2json": "bin/dsv2json.js", - "json2csv": "bin/json2dsv.js", - "json2dsv": "bin/json2dsv.js", - "json2tsv": "bin/json2dsv.js", - "tsv2csv": "bin/dsv2dsv.js", - "tsv2json": "bin/dsv2json.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dsv/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/d3-dsv/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-fetch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", - "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", - "dependencies": { - "d3-dsv": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-force": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", - "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-quadtree": "1 - 3", - "d3-timer": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-geo": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", - "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", - "dependencies": { - "d3-array": "2.5.0 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-hierarchy": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", - "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "dependencies": { - "d3-color": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", - "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-polygon": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", - "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-quadtree": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", - "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-random": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", - "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-sankey": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", - "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", - "dependencies": { - "d3-array": "1 - 2", - "d3-shape": "^1.2.0" - } - }, - "node_modules/d3-sankey/node_modules/d3-array": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", - "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", - "dependencies": { - "internmap": "^1.0.0" - } - }, - "node_modules/d3-sankey/node_modules/d3-path": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", - "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" - }, - "node_modules/d3-sankey/node_modules/d3-shape": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", - "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", - "dependencies": { - "d3-path": "1" - } - }, - "node_modules/d3-sankey/node_modules/internmap": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", - "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" - }, - "node_modules/d3-scale": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", - "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", - "dependencies": { - "d3-array": "2.10.0 - 3", - "d3-format": "1 - 3", - "d3-interpolate": "1.2.0 - 3", - "d3-time": "2.1.1 - 3", - "d3-time-format": "2 - 4" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-scale-chromatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", - "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", - "dependencies": { - "d3-color": "1 - 3", - "d3-interpolate": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-shape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", - "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", - "dependencies": { - "d3-path": "^3.1.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-time": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", - "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", - "dependencies": { - "d3-array": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-time-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", - "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "dependencies": { - "d3-time": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-transition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "dependencies": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "d3-selection": "2 - 3" - } - }, - "node_modules/d3-zoom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", - "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "2 - 3", - "d3-transition": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/dagre-d3-es": { - "version": "7.0.10", - "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.10.tgz", - "integrity": "sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==", - "dependencies": { - "d3": "^7.8.2", - "lodash-es": "^4.17.21" - } - }, - "node_modules/dash-ast": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", - "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==", - "dev": true - }, - "node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/data-urls": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "engines": { - "node": "*" - } - }, - "node_modules/dayjs": { - "version": "1.11.9", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", - "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==" - }, - "node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/decache": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.2.tgz", - "integrity": "sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==", - "dev": true, - "dependencies": { - "callsite": "^1.0.0" - } - }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "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/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decimal.js": { - "version": "10.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/dedent": { - "version": "0.7.0", - "dev": true, - "license": "MIT" - }, - "node_modules/deep-eql": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "dependencies": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delaunator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", - "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", - "dependencies": { - "robust-predicates": "^3.0.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/dfa": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", - "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", - "dev": true - }, - "node_modules/diff": { - "version": "3.5.0", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/discord-api-types": { - "version": "0.37.50", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.50.tgz", - "integrity": "sha512-X4CDiMnDbA3s3RaUXWXmgAIbY1uxab3fqe3qwzg5XutR3wjqi7M3IkgQbsIBzpqBN2YWr/Qdv7JrFRqSgb4TFg==", - "dev": true - }, - "node_modules/discord.js": { - "version": "14.13.0", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.13.0.tgz", - "integrity": "sha512-Kufdvg7fpyTEwANGy9x7i4od4yu5c6gVddGi5CKm4Y5a6sF0VBODObI3o0Bh7TGCj0LfNT8Qp8z04wnLFzgnbA==", - "dev": true, - "dependencies": { - "@discordjs/builders": "^1.6.5", - "@discordjs/collection": "^1.5.3", - "@discordjs/formatters": "^0.3.2", - "@discordjs/rest": "^2.0.1", - "@discordjs/util": "^1.0.1", - "@discordjs/ws": "^1.0.1", - "@sapphire/snowflake": "^3.5.1", - "@types/ws": "^8.5.5", - "discord-api-types": "0.37.50", - "fast-deep-equal": "^3.1.3", - "lodash.snakecase": "^4.1.1", - "tslib": "^2.6.1", - "undici": "5.22.1", - "ws": "^8.13.0" - }, - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/discord.js/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/discord.js/node_modules/ws": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", - "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/docker-modem": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-5.0.3.tgz", - "integrity": "sha512-89zhop5YVhcPEt5FpUFGr3cDyceGhq/F9J+ZndQ4KfqNvfbJpPMfgeixFgUj5OjCYAboElqODxY5Z1EBsSa6sg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "readable-stream": "^3.5.0", - "split-ca": "^1.0.1", - "ssh2": "^1.15.0" - }, - "engines": { - "node": ">= 8.0" - } - }, - "node_modules/docker-modem/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/docker-modem/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/dockerode": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-4.0.2.tgz", - "integrity": "sha512-9wM1BVpVMFr2Pw3eJNXrYYt6DT9k0xMcsSCjtPvyQ+xa1iPg/Mo3T/gUcwI0B2cczqCeCYRPF8yFYDwtFXT0+w==", - "dev": true, - "dependencies": { - "@balena/dockerignore": "^1.0.2", - "docker-modem": "^5.0.3", - "tar-fs": "~2.0.1" - }, - "engines": { - "node": ">= 8.0" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domexception": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/dompurify": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.5.tgz", - "integrity": "sha512-F9e6wPGtY+8KNMRAVfxeCOHU0/NPWMSENNq4pQctuXRqqdEPW7q3CrLbR5Nse044WwacyjHGOMlvNsBe1y6z9A==" - }, - "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dev": true, - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/dot/-/dot-2.0.0-beta.1.tgz", - "integrity": "sha512-kxM7fSnNQTXOmaeGuBSXM8O3fEsBb7XSDBllkGbRwa0lJSJTxxDE/4eSNGLKZUmlFw0f1vJ5qSV2BljrgQtgIA==", - "dev": true - }, - "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==", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", - "dev": true, - "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==", - "dev": true - }, - "node_modules/duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", - "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "node_modules/duplexer2/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==", - "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/duplexer2/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==" - }, - "node_modules/duplexer2/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==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "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 - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.4.473", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.473.tgz", - "integrity": "sha512-aVfC8+440vGfl06l8HKKn8/PD5jRfSnLkTTD65EFvU46igbpQRri1gxSzW9/+TeUlwYzrXk1sw867T96zlyECA==", - "dev": true - }, - "node_modules/elkjs": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.8.2.tgz", - "integrity": "sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==" - }, - "node_modules/emittery": { - "version": "0.8.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/enabled": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enquirer": { - "version": "2.3.6", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/env-ci": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-9.1.1.tgz", - "integrity": "sha512-Im2yEWeF4b2RAMAaWvGioXk6m0UNaIjD8hj28j2ij5ldnIFrDQT0+pzDvpbRkcjurhXhf/AsBKv8P2rtmGi9Aw==", - "dependencies": { - "execa": "^7.0.0", - "java-properties": "^1.0.2" - }, - "engines": { - "node": "^16.14 || >=18" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.20.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "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/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-set": "~0.1.5", - "es6-symbol": "~3.1.1", - "event-emitter": "~0.3.5" - } - }, - "node_modules/es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", - "dev": true - }, - "node_modules/es6-set": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", - "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", - "dev": true, - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.62", - "es6-iterator": "~2.0.3", - "es6-symbol": "^3.1.3", - "event-emitter": "^0.3.5", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/es6-set/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "2.0.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint": { - "version": "7.32.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/ms": { - "version": "2.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-module-utils": { - "version": "2.7.3", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils/node_modules/ms": { - "version": "2.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-plugin-import": { - "version": "2.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-jest": { - "version": "24.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/experimental-utils": "^4.0.1" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": ">= 4", - "eslint": ">=5" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-jsdoc": { - "version": "31.6.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "comment-parser": "1.1.2", - "debug": "^4.3.1", - "jsdoctypeparser": "^9.0.0", - "lodash": "^4.17.20", - "regextras": "^0.7.1", - "semver": "^7.3.4", - "spdx-expression-parse": "^3.0.1" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0" - } - }, - "node_modules/eslint-plugin-jsdoc/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-jsdoc/node_modules/lodash": { - "version": "4.17.21", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-plugin-jsdoc/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-plugin-jsdoc/node_modules/semver": { - "version": "7.3.7", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "3.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "eslint": ">=5.0.0", - "prettier": ">=1.13.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-screeps": { - "version": "2.1.0", - "dev": true, - "license": "GPL-3.0", - "peerDependencies": { - "eslint": ">=0.8.0" - } - }, - "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/eslint/node_modules/acorn": { - "version": "7.4.1", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/astral-regex": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "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/eslint/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "5.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint/node_modules/eslint-utils": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/espree": { - "version": "7.3.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/eslint/node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/file-entry-cache": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/eslint/node_modules/flat-cache": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/eslint/node_modules/flatted": { - "version": "3.2.5", - "dev": true, - "license": "ISC" - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.15.0", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/levn": { - "version": "0.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/optionator": { - "version": "0.9.1", - "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.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/prelude-ls": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/regexpp": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/eslint/node_modules/semver": { - "version": "7.3.7", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/slice-ansi": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/eslint/node_modules/strip-json-comments": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/table": { - "version": "6.8.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/eslint/node_modules/table/node_modules/ajv": { - "version": "8.11.0", - "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/eslint/node_modules/type-check": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-is-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz", - "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==", - "dev": true - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/esutils": { - "version": "2.0.3", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "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==", - "dev": true, - "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", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", - "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/execa/node_modules/human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/execa/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/execa/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dev": true, - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - }, - "node_modules/fancy-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-2.0.0.tgz", - "integrity": "sha512-9CzxZbACXMUXW13tS0tI8XsGGmxWzO2DmYrGuBJOJ8k8q2K7hwfJA5qHjuPPe8wtsco33YR9wc+Rlr5wYFvhSA==", - "dev": true, - "dependencies": { - "color-support": "^1.1.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-diff": { - "version": "1.2.0", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "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-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-xml-parser": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.7.tgz", - "integrity": "sha512-J8r6BriSLO1uj2miOk1NW0YVm8AGOOu3Si2HQp/cSmo6EA4m3fcwu2WKjJ4RK9wMLBtg69y1kS8baDiQBR41Ig==", - "dev": true, - "funding": [ - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - }, - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/fastestsmallesttextencoderdecoder-encodeinto": { - "version": "1.0.22", - "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder-encodeinto/-/fastestsmallesttextencoderdecoder-encodeinto-1.0.22.tgz", - "integrity": "sha512-csOz3cwJjZY75QcPHnY+v6cKWeofYCmhtLVYaurjcRn5vaNXoYe1Leo1ZkiZIxZp796+J5Z+TtmeMbbfYBfiiQ==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.13.0", - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fecha": { - "version": "4.2.3", - "dev": true, - "license": "MIT" - }, - "node_modules/fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], - "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, - "engines": { - "node": "^12.20 || >= 14.13" - } - }, - "node_modules/figures": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", - "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", - "dependencies": { - "escape-string-regexp": "^5.0.0", - "is-unicode-supported": "^1.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/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==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/find-versions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz", - "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==", - "dependencies": { - "semver-regex": "^4.0.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/fn.name": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/follow-redirects": { - "version": "1.15.1", - "dev": true, - "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, - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "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.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "dev": true, - "dependencies": { - "fetch-blob": "^3.1.2" - }, - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "engines": { - "node": ">= 0.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==", - "dev": true - }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "node_modules/from2/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==", - "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/from2/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==" - }, - "node_modules/from2/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==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "dev": 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.1", - "license": "MIT" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-assigned-identifiers": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", - "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", - "dev": true - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-port": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-6.1.2.tgz", - "integrity": "sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-port-please": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.1.1.tgz", - "integrity": "sha512-3UBAyM3u4ZBVYDsxOQfJDxEa6XTbpBDrOjp4mf7ExFRt5BKs/QywQQiJsh2B+hxcZLSapWqCRvElUe8DnKcFHA==", - "dev": true - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/git-log-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.0.tgz", - "integrity": "sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA==", - "dependencies": { - "argv-formatter": "~1.0.0", - "spawn-error-forwarder": "~1.0.0", - "split2": "~1.0.0", - "stream-combiner2": "~1.1.1", - "through2": "~2.0.0", - "traverse": "~0.6.6" - } - }, - "node_modules/git-log-parser/node_modules/split2": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", - "integrity": "sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==", - "dependencies": { - "through2": "~2.0.0" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "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/glob-parent": { - "version": "5.1.2", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "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/globby/node_modules/ignore": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "license": "ISC" - }, - "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "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==", - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/heap": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", - "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" - }, - "node_modules/hook-std": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-3.0.0.tgz", - "integrity": "sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/hosted-git-info/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==", - "engines": { - "node": ">=12" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ] - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/http-auth": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-4.1.9.tgz", - "integrity": "sha512-kvPYxNGc9EKGTXvOMnTBQw2RZfuiSihK/mLw/a4pbtRueTE45S55Lw/3k5CktIf7Ak0veMKEIteDj4YkNmCzmQ==", - "dev": true, - "dependencies": { - "apache-crypt": "^1.1.2", - "apache-md5": "^1.0.6", - "bcryptjs": "^2.4.3", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/http-auth-connect": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/http-auth-connect/-/http-auth-connect-1.0.6.tgz", - "integrity": "sha512-yaO0QSCPqGCjPrl3qEEHjJP+lwZ6gMpXLuCBE06eWwcXomkI5TARtu0kxf9teFuBj6iaV3Ybr15jaWUvbzNzHw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/http-auth/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/http-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/human-signals": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/i18next": { - "version": "22.5.1", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.5.1.tgz", - "integrity": "sha512-8TGPgM3pAD+VRsMtUMNknRz3kzqwp/gPALrWMsDnmC1mKqJwpWyooQRLMcbTwq8z8YwSmuj+ZYvc+xCuEpkssA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://locize.com" - }, - { - "type": "individual", - "url": "https://locize.com/i18next.html" - }, - { - "type": "individual", - "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" - } - ], - "dependencies": { - "@babel/runtime": "^7.20.6" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "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" - } - ] - }, - "node_modules/ignore": { - "version": "4.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "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-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz", - "integrity": "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==", - "engines": { - "node": ">=12.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "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", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "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==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "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==" - }, - "node_modules/inside": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/inside/-/inside-1.0.0.tgz", - "integrity": "sha512-tvFwvS4g7q6iDot/4FjtWFHwwpv6TVvEumbTdLQilk1F07ojakbXPQcvf3kMAlyNDpzKRzn+d33O3RuXODuxZQ==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/internmap": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", - "engines": { - "node": ">=12" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/into-stream": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-7.0.0.tgz", - "integrity": "sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==", - "dependencies": { - "from2": "^2.3.0", - "p-is-promise": "^3.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inversify": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/inversify/-/inversify-6.0.1.tgz", - "integrity": "sha512-B3ex30927698TJENHR++8FfEaJGqoWOgI6ZY5Ht/nLUsFCwHn6akbwtnUAPCgUepAnTpe2qHxhDNjoKLyz6rgQ==", - "dev": true - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": 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-arrayish": { - "version": "0.2.1", - "license": "MIT" - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "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==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "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-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-builtin-module": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "builtin-modules": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-callable": { - "version": "1.2.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.9.0", - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "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", - "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", - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "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, - "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", - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-module": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "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==", - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-object": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", - "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "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-shared-array-buffer": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "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==", - "dependencies": { - "text-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dev": true, - "dependencies": { - "which-typed-array": "^1.1.11" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "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==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/issue-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-6.0.0.tgz", - "integrity": "sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==", - "dependencies": { - "lodash.capitalize": "^4.2.1", - "lodash.escaperegexp": "^4.1.2", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.uniqby": "^4.7.0" - }, - "engines": { - "node": ">=10.13" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/istanbul-reports": { - "version": "3.1.4", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jackspeak": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.2.tgz", - "integrity": "sha512-mgNtVv4vUuaKA97yxUHoA3+FkuhtxkjdXEWOyB/N76fjy0FjezEt34oy3epBtvCvS+7DyKwqCFWx/oJLV5+kCg==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/java-properties": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", - "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/javascript-obfuscator": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/javascript-obfuscator/-/javascript-obfuscator-4.0.2.tgz", - "integrity": "sha512-MRBQREvjEwqEGdwNGG7yp0te5uZBFzrPZdxEs4rDYkPpHhhOQu+E0IhSXP7bO9dIUWXZU0Kkdohsuws525aVGQ==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@javascript-obfuscator/escodegen": "2.3.0", - "@javascript-obfuscator/estraverse": "5.4.0", - "acorn": "8.8.2", - "assert": "2.0.0", - "chalk": "4.1.2", - "chance": "1.1.9", - "class-validator": "0.14.0", - "commander": "10.0.0", - "eslint-scope": "7.1.1", - "eslint-visitor-keys": "3.3.0", - "fast-deep-equal": "3.1.3", - "inversify": "6.0.1", - "js-string-escape": "1.0.1", - "md5": "2.3.0", - "mkdirp": "2.1.3", - "multimatch": "5.0.0", - "opencollective-postinstall": "2.0.3", - "process": "0.11.10", - "reflect-metadata": "0.1.13", - "source-map-support": "0.5.21", - "string-template": "1.0.0", - "stringz": "2.1.0", - "tslib": "2.5.0" - }, - "bin": { - "javascript-obfuscator": "bin/javascript-obfuscator" - }, - "engines": { - "node": "^12.22.0 || ^14.0.0 || ^16.0.0 || ^17.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/javascript-obfuscator" - } - }, - "node_modules/javascript-obfuscator/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/javascript-obfuscator/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/javascript-obfuscator/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/javascript-obfuscator/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/javascript-obfuscator/node_modules/commander": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", - "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/javascript-obfuscator/node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/javascript-obfuscator/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/javascript-obfuscator/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/javascript-obfuscator/node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - }, - "node_modules/jest": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.1.0.tgz", - "integrity": "sha512-pSQDVwRSwb109Ss13lcMtdfS9r8/w2Zz8+mTUA9VORD66GflCdl8nUFCqM96geOD2EBwWCNURrNAfQsLIDNBdg==", - "dev": true, - "dependencies": { - "@jest/core": "^27.1.0", - "import-local": "^3.0.2", - "jest-cli": "^27.1.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "execa": "^5.0.0", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-changed-files/node_modules/execa": { - "version": "5.1.1", - "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/jest-changed-files/node_modules/mimic-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-changed-files/node_modules/npm-run-path": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-changed-files/node_modules/onetime": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-circus": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-circus/node_modules/chalk": { - "version": "4.1.2", - "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/jest-circus/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-circus/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-circus/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-circus/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-config": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", - "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/jest-config/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-config/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-config/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-config/node_modules/strip-json-comments": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-config/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "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/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-diff/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-docblock": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", - "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/jest-each/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-each/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-each/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-each/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-jasmine2": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-jasmine2/node_modules/chalk": { - "version": "4.1.2", - "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/jest-jasmine2/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-jasmine2/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-jasmine2/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-leak-detector": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "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/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-matcher-utils/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "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/jest-message-util/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-message-util/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-message-util/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-mock": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.2", - "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/jest-resolve/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-resolve/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-resolve/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-resolve/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.2", - "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/jest-runner/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runner/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-runner/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", - "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/jest-runtime/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runtime/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-runtime/node_modules/execa": { - "version": "5.1.1", - "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/jest-runtime/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/mimic-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-runtime/node_modules/npm-run-path": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/onetime": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-runtime/node_modules/strip-bom": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-serializer": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", - "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/jest-snapshot/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-snapshot/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.3.7", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "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/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-util/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "leven": "^3.1.0", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", - "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/jest-validate/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-validate/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-validate/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.5.1", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-watcher/node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.2", - "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/jest-watcher/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-watcher/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-watcher/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher/node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "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/jest/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest/node_modules/chalk": { - "version": "4.1.2", - "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/jest/node_modules/cliui": { - "version": "7.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/jest/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/jest-cli": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/yargs": { - "version": "16.2.0", - "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/js-string-escape": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", - "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsdoctypeparser": { - "version": "9.0.0", - "dev": true, - "license": "MIT", - "bin": { - "jsdoctypeparser": "bin/jsdoctypeparser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jsdom": { - "version": "16.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/form-data": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jsdom/node_modules/tough-cookie": { - "version": "4.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-beautify": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/json-beautify/-/json-beautify-1.1.1.tgz", - "integrity": "sha512-17j+Hk2lado0xqKtUcyAjK0AtoHnPSIgktWRsEXgdFQFG9UnaGw6CHa0J7xsvulxRpFl6CrkDFHght1p5ZJc4A==", - "dev": true, - "bin": { - "json-beautify": "bin/json-beautify" - } - }, - "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==" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "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==" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "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==", - "engines": [ - "node >= 0.2.0" - ] - }, - "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==", - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/just-extend": { - "version": "4.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/khroma": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz", - "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==" - }, - "node_modules/kind-of": { - "version": "6.0.3", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/kuler": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/layout-base": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", - "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==" - }, - "node_modules/leven": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/libphonenumber-js": { - "version": "1.10.37", - "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.37.tgz", - "integrity": "sha512-Z10PCaOCiAxbUxLyR31DNeeNugSVP6iv/m7UrSKS5JHziEMApJtgku4e9Q69pzzSC9LnQiM09sqsGf2ticZnMw==", - "dev": true - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "license": "MIT" - }, - "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==", - "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/load-json-file/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==", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/locate-path": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/lodash": { - "version": "3.10.1", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" - }, - "node_modules/lodash.capitalize": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", - "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "node_modules/lodash.escaperegexp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", - "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==" - }, - "node_modules/lodash.get": { - "version": "4.4.2", - "dev": true, - "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==" - }, - "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==" - }, - "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==" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", - "dev": true - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.uniqby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", - "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==" - }, - "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, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/logform": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@colors/colors": "1.5.0", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" - } - }, - "node_modules/logform/node_modules/ms": { - "version": "2.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/loglevel": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", - "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/loglevel" - } - }, - "node_modules/loglevel-plugin-prefix": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", - "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", - "dev": true - }, - "node_modules/lolex": { - "version": "2.7.5", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/loupe": { - "version": "2.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "get-func-name": "^2.0.0" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true - }, - "node_modules/macos-release": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.1.tgz", - "integrity": "sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/magic-bytes.js": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.0.17.tgz", - "integrity": "sha512-PEDpPzHpKe5AxkVmQrNPHFRvPN2ELkkj3eIg4IZO9JdhBiAY3aU53lgYXs9j8B7lpza+QiW0UA4QHCH7EskSeg==", - "dev": true - }, - "node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "dev": true, - "license": "ISC" - }, - "node_modules/makeerror": { - "version": "1.0.12", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.5" - } - }, - "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==", - "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==", - "dev": true - }, - "node_modules/marked": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-5.1.2.tgz", - "integrity": "sha512-ahRPGXJpjMjwSOlBoTMZAK7ATXkli5qCPxZ21TG44rx1KEo44bii4ekgTDQPNRQ4Kh7JMb9Ub1PVk1NxRSsorg==", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 16" - } - }, - "node_modules/marked-terminal": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-5.2.0.tgz", - "integrity": "sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA==", - "dependencies": { - "ansi-escapes": "^6.2.0", - "cardinal": "^2.1.1", - "chalk": "^5.2.0", - "cli-table3": "^0.6.3", - "node-emoji": "^1.11.0", - "supports-hyperlinks": "^2.3.0" - }, - "engines": { - "node": ">=14.13.1 || >=16.0.0" - }, - "peerDependencies": { - "marked": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" - } - }, - "node_modules/marked-terminal/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "dev": true, - "dependencies": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "node_modules/mdast-util-from-markdown": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", - "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", - "dependencies": { - "@types/mdast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "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/meow/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/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==" - }, - "node_modules/meow/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/meow/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/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==", - "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/meow/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==", - "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/meow/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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/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==", - "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/meow/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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/meow/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==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-source-map": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", - "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", - "dev": true, - "dependencies": { - "source-map": "^0.5.6" - } - }, - "node_modules/merge-source-map/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/mermaid": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.3.0.tgz", - "integrity": "sha512-H5quxuQjwXC8M1WuuzhAp2TdqGg74t5skfDBrNKJ7dt3z8Wprl5S6h9VJsRhoBUTSs1TMtHEdplLhCqXleZZLw==", - "dependencies": { - "@braintree/sanitize-url": "^6.0.2", - "@types/d3-scale": "^4.0.3", - "@types/d3-scale-chromatic": "^3.0.0", - "cytoscape": "^3.23.0", - "cytoscape-cose-bilkent": "^4.1.0", - "cytoscape-fcose": "^2.1.0", - "d3": "^7.4.0", - "d3-sankey": "^0.12.3", - "dagre-d3-es": "7.0.10", - "dayjs": "^1.11.7", - "dompurify": "3.0.5", - "elkjs": "^0.8.2", - "khroma": "^2.0.0", - "lodash-es": "^4.17.21", - "mdast-util-from-markdown": "^1.3.0", - "non-layered-tidy-tree-layout": "^2.0.2", - "stylis": "^4.1.3", - "ts-dedent": "^2.2.0", - "uuid": "^9.0.0", - "web-worker": "^1.2.0" - } - }, - "node_modules/micromark": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", - "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", - "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-factory-destination": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", - "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-label": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", - "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-factory-space": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", - "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-title": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", - "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-whitespace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", - "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-character": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", - "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-chunked": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", - "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-classify-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", - "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-combine-extensions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", - "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", - "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-decode-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", - "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", - "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-html-tag-name": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", - "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", - "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-resolve-all": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", - "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", - "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-subtokenize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", - "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", - "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/micromark/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "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==", - "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==", - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/minipass": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz", - "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/mkdirp": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.3.tgz", - "integrity": "sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw==", - "dev": true, - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "node_modules/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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/morgan": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", - "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", - "dev": true, - "dependencies": { - "basic-auth": "~2.0.1", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-finished": "~2.3.0", - "on-headers": "~1.0.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "dev": true, - "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, - "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/nan": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", - "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", - "dev": true, - "optional": true - }, - "node_modules/nanoid": { - "version": "3.3.4", - "dev": true, - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ncp": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "bin": { - "ncp": "bin/ncp" - } - }, - "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, - "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==" - }, - "node_modules/nerf-dart": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", - "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==" - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true - }, - "node_modules/nise": { - "version": "1.5.3", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/formatio": "^3.2.1", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "lolex": "^5.0.1", - "path-to-regexp": "^1.7.0" - } - }, - "node_modules/nise/node_modules/isarray": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/nise/node_modules/lolex": { - "version": "5.1.2", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/nise/node_modules/path-to-regexp": { - "version": "1.8.0", - "dev": true, - "license": "MIT", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "dependencies": { - "lodash": "^4.17.21" - } - }, - "node_modules/node-emoji/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "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-fetch/node_modules/tr46": { - "version": "0.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/node-gyp-build": { - "version": "4.4.0", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/node-powershell": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "child-shell": "^5.0.0", - "is-wsl": "^2.2.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true - }, - "node_modules/non-layered-tidy-tree-layout": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", - "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" - }, - "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==", - "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-package-data/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==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", - "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm": { - "version": "9.8.1", - "resolved": "https://registry.npmjs.org/npm/-/npm-9.8.1.tgz", - "integrity": "sha512-AfDvThQzsIXhYgk9zhbk5R+lh811lKkLAeQMMhSypf1BM7zUafeIIBzMzespeuVEJ0+LvY36oRQYf7IKLzU3rw==", - "bundleDependencies": [ - "@isaacs/string-locale-compare", - "@npmcli/arborist", - "@npmcli/config", - "@npmcli/fs", - "@npmcli/map-workspaces", - "@npmcli/package-json", - "@npmcli/promise-spawn", - "@npmcli/run-script", - "abbrev", - "archy", - "cacache", - "chalk", - "ci-info", - "cli-columns", - "cli-table3", - "columnify", - "fastest-levenshtein", - "fs-minipass", - "glob", - "graceful-fs", - "hosted-git-info", - "ini", - "init-package-json", - "is-cidr", - "json-parse-even-better-errors", - "libnpmaccess", - "libnpmdiff", - "libnpmexec", - "libnpmfund", - "libnpmhook", - "libnpmorg", - "libnpmpack", - "libnpmpublish", - "libnpmsearch", - "libnpmteam", - "libnpmversion", - "make-fetch-happen", - "minimatch", - "minipass", - "minipass-pipeline", - "ms", - "node-gyp", - "nopt", - "npm-audit-report", - "npm-install-checks", - "npm-package-arg", - "npm-pick-manifest", - "npm-profile", - "npm-registry-fetch", - "npm-user-validate", - "npmlog", - "p-map", - "pacote", - "parse-conflict-json", - "proc-log", - "qrcode-terminal", - "read", - "semver", - "sigstore", - "ssri", - "supports-color", - "tar", - "text-table", - "tiny-relative-date", - "treeverse", - "validate-npm-package-name", - "which", - "write-file-atomic" - ], - "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^6.3.0", - "@npmcli/config": "^6.2.1", - "@npmcli/fs": "^3.1.0", - "@npmcli/map-workspaces": "^3.0.4", - "@npmcli/package-json": "^4.0.1", - "@npmcli/promise-spawn": "^6.0.2", - "@npmcli/run-script": "^6.0.2", - "abbrev": "^2.0.0", - "archy": "~1.0.0", - "cacache": "^17.1.3", - "chalk": "^5.3.0", - "ci-info": "^3.8.0", - "cli-columns": "^4.0.0", - "cli-table3": "^0.6.3", - "columnify": "^1.6.0", - "fastest-levenshtein": "^1.0.16", - "fs-minipass": "^3.0.2", - "glob": "^10.2.7", - "graceful-fs": "^4.2.11", - "hosted-git-info": "^6.1.1", - "ini": "^4.1.1", - "init-package-json": "^5.0.0", - "is-cidr": "^4.0.2", - "json-parse-even-better-errors": "^3.0.0", - "libnpmaccess": "^7.0.2", - "libnpmdiff": "^5.0.19", - "libnpmexec": "^6.0.3", - "libnpmfund": "^4.0.19", - "libnpmhook": "^9.0.3", - "libnpmorg": "^5.0.4", - "libnpmpack": "^5.0.19", - "libnpmpublish": "^7.5.0", - "libnpmsearch": "^6.0.2", - "libnpmteam": "^5.0.3", - "libnpmversion": "^4.0.2", - "make-fetch-happen": "^11.1.1", - "minimatch": "^9.0.3", - "minipass": "^5.0.0", - "minipass-pipeline": "^1.2.4", - "ms": "^2.1.2", - "node-gyp": "^9.4.0", - "nopt": "^7.2.0", - "npm-audit-report": "^5.0.0", - "npm-install-checks": "^6.1.1", - "npm-package-arg": "^10.1.0", - "npm-pick-manifest": "^8.0.1", - "npm-profile": "^7.0.1", - "npm-registry-fetch": "^14.0.5", - "npm-user-validate": "^2.0.0", - "npmlog": "^7.0.1", - "p-map": "^4.0.0", - "pacote": "^15.2.0", - "parse-conflict-json": "^3.0.1", - "proc-log": "^3.0.0", - "qrcode-terminal": "^0.12.0", - "read": "^2.1.0", - "semver": "^7.5.4", - "sigstore": "^1.7.0", - "ssri": "^10.0.4", - "supports-color": "^9.4.0", - "tar": "^6.1.15", - "text-table": "~0.2.0", - "tiny-relative-date": "^1.3.0", - "treeverse": "^3.0.0", - "validate-npm-package-name": "^5.0.0", - "which": "^3.0.1", - "write-file-atomic": "^5.0.1" - }, - "bin": { - "npm": "bin/npm-cli.js", - "npx": "bin/npx-cli.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm/node_modules/@colors/colors": { - "version": "1.5.0", - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/npm/node_modules/@isaacs/cliui": { - "version": "8.0.2", - "inBundle": 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/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "inBundle": 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/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/npm/node_modules/@isaacs/string-locale-compare": { - "version": "1.1.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "6.3.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^3.1.0", - "@npmcli/installed-package-contents": "^2.0.2", - "@npmcli/map-workspaces": "^3.0.2", - "@npmcli/metavuln-calculator": "^5.0.0", - "@npmcli/name-from-folder": "^2.0.0", - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^4.0.0", - "@npmcli/query": "^3.0.0", - "@npmcli/run-script": "^6.0.0", - "bin-links": "^4.0.1", - "cacache": "^17.0.4", - "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^6.1.1", - "json-parse-even-better-errors": "^3.0.0", - "json-stringify-nice": "^1.1.4", - "minimatch": "^9.0.0", - "nopt": "^7.0.0", - "npm-install-checks": "^6.0.0", - "npm-package-arg": "^10.1.0", - "npm-pick-manifest": "^8.0.1", - "npm-registry-fetch": "^14.0.3", - "npmlog": "^7.0.1", - "pacote": "^15.0.8", - "parse-conflict-json": "^3.0.0", - "proc-log": "^3.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.2", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^10.0.1", - "treeverse": "^3.0.0", - "walk-up-path": "^3.0.1" - }, - "bin": { - "arborist": "bin/index.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/config": { - "version": "6.2.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/map-workspaces": "^3.0.2", - "ci-info": "^3.8.0", - "ini": "^4.1.0", - "nopt": "^7.0.0", - "proc-log": "^3.0.0", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.5", - "walk-up-path": "^3.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/disparity-colors": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "ansi-styles": "^4.3.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/fs": { - "version": "3.1.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/git": { - "version": "4.1.0", - "inBundle": 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/npm/node_modules/@npmcli/installed-package-contents": { - "version": "2.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "bin": { - "installed-package-contents": "lib/index.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/map-workspaces": { - "version": "3.0.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/name-from-folder": "^2.0.0", - "glob": "^10.2.2", - "minimatch": "^9.0.0", - "read-package-json-fast": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { - "version": "5.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "cacache": "^17.0.0", - "json-parse-even-better-errors": "^3.0.0", - "pacote": "^15.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/name-from-folder": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/node-gyp": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/package-json": { - "version": "4.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^4.1.0", - "glob": "^10.2.2", - "hosted-git-info": "^6.1.1", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", - "proc-log": "^3.0.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/promise-spawn": { - "version": "6.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "which": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/query": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "6.0.2", - "inBundle": 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/npm/node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/npm/node_modules/@sigstore/protobuf-specs": { - "version": "0.1.0", - "inBundle": true, - "license": "Apache-2.0", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@sigstore/tuf": { - "version": "1.0.2", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.1.0", - "tuf-js": "^1.1.7" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@tootallnate/once": { - "version": "2.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/@tufjs/canonical-json": { - "version": "1.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@tufjs/models": { - "version": "1.0.4", - "inBundle": 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/npm/node_modules/abbrev": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/abort-controller": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/npm/node_modules/agent-base": { - "version": "6.0.2", - "inBundle": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/npm/node_modules/agentkeepalive": { - "version": "4.3.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "depd": "^2.0.0", - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/npm/node_modules/aggregate-error": { - "version": "3.1.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/ansi-regex": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/ansi-styles": { - "version": "4.3.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/npm/node_modules/aproba": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/archy": { - "version": "1.0.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/are-we-there-yet": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^4.1.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/balanced-match": { - "version": "1.0.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/base64-js": { - "version": "1.5.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/bin-links": { - "version": "4.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "cmd-shim": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "read-cmd-shim": "^4.0.0", - "write-file-atomic": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/binary-extensions": { - "version": "2.2.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/brace-expansion": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/npm/node_modules/buffer": { - "version": "6.0.3", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/npm/node_modules/builtins": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/npm/node_modules/cacache": { - "version": "17.1.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "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/node_modules/chalk": { - "version": "5.3.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/npm/node_modules/chownr": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/ci-info": { - "version": "3.8.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/cidr-regex": { - "version": "3.1.1", - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "ip-regex": "^4.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/clean-stack": { - "version": "2.2.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/npm/node_modules/cli-columns": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/cli-table3": { - "version": "0.6.3", - "inBundle": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/npm/node_modules/clone": { - "version": "1.0.4", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/npm/node_modules/cmd-shim": { - "version": "6.0.1", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/color-convert": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/npm/node_modules/color-name": { - "version": "1.1.4", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/color-support": { - "version": "1.1.3", - "inBundle": true, - "license": "ISC", - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/npm/node_modules/columnify": { - "version": "1.6.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/npm/node_modules/common-ancestor-path": { - "version": "1.0.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/concat-map": { - "version": "0.0.1", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/console-control-strings": { - "version": "1.1.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/cross-spawn": { - "version": "7.0.3", - "inBundle": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/cssesc": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm/node_modules/debug": { - "version": "4.3.4", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/npm/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/defaults": { - "version": "1.0.4", - "inBundle": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm/node_modules/delegates": { - "version": "1.0.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/depd": { - "version": "2.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/npm/node_modules/diff": { - "version": "5.1.0", - "inBundle": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/npm/node_modules/eastasianwidth": { - "version": "0.2.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/emoji-regex": { - "version": "8.0.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/encoding": { - "version": "0.1.13", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/npm/node_modules/env-paths": { - "version": "2.2.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/npm/node_modules/err-code": { - "version": "2.0.3", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/event-target-shim": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/npm/node_modules/events": { - "version": "3.3.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/npm/node_modules/exponential-backoff": { - "version": "3.1.1", - "inBundle": true, - "license": "Apache-2.0" - }, - "node_modules/npm/node_modules/fastest-levenshtein": { - "version": "1.0.16", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/npm/node_modules/foreground-child": { - "version": "3.1.1", - "inBundle": 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/npm/node_modules/fs-minipass": { - "version": "3.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/fs.realpath": { - "version": "1.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/function-bind": { - "version": "1.1.1", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/gauge": { - "version": "5.0.1", - "inBundle": 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": "^4.0.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/glob": { - "version": "10.2.7", - "inBundle": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/graceful-fs": { - "version": "4.2.11", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/has": { - "version": "1.0.3", - "inBundle": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/npm/node_modules/has-unicode": { - "version": "2.0.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/hosted-git-info": { - "version": "6.1.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/http-cache-semantics": { - "version": "4.1.1", - "inBundle": true, - "license": "BSD-2-Clause" - }, - "node_modules/npm/node_modules/http-proxy-agent": { - "version": "5.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/npm/node_modules/https-proxy-agent": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/npm/node_modules/humanize-ms": { - "version": "1.2.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/npm/node_modules/iconv-lite": { - "version": "0.6.3", - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm/node_modules/ieee754": { - "version": "1.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "BSD-3-Clause" - }, - "node_modules/npm/node_modules/ignore-walk": { - "version": "6.0.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/imurmurhash": { - "version": "0.1.4", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/npm/node_modules/indent-string": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/inflight": { - "version": "1.0.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/npm/node_modules/inherits": { - "version": "2.0.4", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/ini": { - "version": "4.1.1", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/init-package-json": { - "version": "5.0.0", - "inBundle": 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/npm/node_modules/ip": { - "version": "2.0.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/ip-regex": { - "version": "4.3.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/is-cidr": { - "version": "4.0.2", - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "cidr-regex": "^3.1.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/is-core-module": { - "version": "2.12.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/npm/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/is-lambda": { - "version": "1.0.1", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/isexe": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/jackspeak": { - "version": "2.2.1", - "inBundle": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/npm/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/json-stringify-nice": { - "version": "1.1.4", - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/jsonparse": { - "version": "1.3.1", - "engines": [ - "node >= 0.2.0" - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/just-diff": { - "version": "6.0.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/just-diff-apply": { - "version": "5.5.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/libnpmaccess": { - "version": "7.0.2", - "inBundle": 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/npm/node_modules/libnpmdiff": { - "version": "5.0.19", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^6.3.0", - "@npmcli/disparity-colors": "^3.0.0", - "@npmcli/installed-package-contents": "^2.0.2", - "binary-extensions": "^2.2.0", - "diff": "^5.1.0", - "minimatch": "^9.0.0", - "npm-package-arg": "^10.1.0", - "pacote": "^15.0.8", - "tar": "^6.1.13" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmexec": { - "version": "6.0.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^6.3.0", - "@npmcli/run-script": "^6.0.0", - "ci-info": "^3.7.1", - "npm-package-arg": "^10.1.0", - "npmlog": "^7.0.1", - "pacote": "^15.0.8", - "proc-log": "^3.0.0", - "read": "^2.0.0", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.7", - "walk-up-path": "^3.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmfund": { - "version": "4.0.19", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^6.3.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmhook": { - "version": "9.0.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^14.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmorg": { - "version": "5.0.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^14.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmpack": { - "version": "5.0.19", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^6.3.0", - "@npmcli/run-script": "^6.0.0", - "npm-package-arg": "^10.1.0", - "pacote": "^15.0.8" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmpublish": { - "version": "7.5.0", - "inBundle": 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/npm/node_modules/libnpmsearch": { - "version": "6.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-registry-fetch": "^14.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmteam": { - "version": "5.0.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^14.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/libnpmversion": { - "version": "4.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^4.0.1", - "@npmcli/run-script": "^6.0.0", - "json-parse-even-better-errors": "^3.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.7" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/lru-cache": { - "version": "7.18.3", - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/npm/node_modules/make-fetch-happen": { - "version": "11.1.1", - "inBundle": 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/node_modules/minimatch": { - "version": "9.0.3", - "inBundle": 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/node_modules/minipass": { - "version": "5.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-collect": { - "version": "1.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/minipass-collect/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-fetch": { - "version": "3.0.3", - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^5.0.0", - "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/node_modules/minipass-flush": { - "version": "1.0.5", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-json-stream": { - "version": "1.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/npm/node_modules/minipass-json-stream/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-pipeline": { - "version": "1.2.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-sized": { - "version": "1.0.3", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/minizlib": { - "version": "2.1.2", - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/mkdirp": { - "version": "1.0.4", - "inBundle": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/ms": { - "version": "2.1.3", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/mute-stream": { - "version": "1.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/negotiator": { - "version": "0.6.3", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/npm/node_modules/node-gyp": { - "version": "9.4.0", - "inBundle": 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": "^11.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/npm/node_modules/node-gyp/node_modules/abbrev": { - "version": "1.1.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/node-gyp/node_modules/are-we-there-yet": { - "version": "3.0.1", - "inBundle": 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/npm/node_modules/node-gyp/node_modules/brace-expansion": { - "version": "1.1.11", - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/gauge": { - "version": "4.0.4", - "inBundle": 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/npm/node_modules/node-gyp/node_modules/glob": { - "version": "7.2.3", - "inBundle": 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/npm/node_modules/node-gyp/node_modules/minimatch": { - "version": "3.1.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/nopt": { - "version": "6.0.0", - "inBundle": 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/npm/node_modules/node-gyp/node_modules/npmlog": { - "version": "6.0.2", - "inBundle": 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/npm/node_modules/node-gyp/node_modules/readable-stream": { - "version": "3.6.2", - "inBundle": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/signal-exit": { - "version": "3.0.7", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/node-gyp/node_modules/which": { - "version": "2.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/nopt": { - "version": "7.2.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "abbrev": "^2.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/normalize-package-data": { - "version": "5.0.0", - "inBundle": 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/npm/node_modules/npm-audit-report": { - "version": "5.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-bundled": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-install-checks": { - "version": "6.1.1", - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-package-arg": { - "version": "10.1.0", - "inBundle": 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/node_modules/npm-packlist": { - "version": "7.0.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "ignore-walk": "^6.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-pick-manifest": { - "version": "8.0.1", - "inBundle": 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/node_modules/npm-profile": { - "version": "7.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-registry-fetch": "^14.0.0", - "proc-log": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npm-registry-fetch": { - "version": "14.0.5", - "inBundle": 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/node_modules/npm-user-validate": { - "version": "2.0.0", - "inBundle": true, - "license": "BSD-2-Clause", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/npmlog": { - "version": "7.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "are-we-there-yet": "^4.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^5.0.0", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/once": { - "version": "1.4.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/npm/node_modules/p-map": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm/node_modules/pacote": { - "version": "15.2.0", - "inBundle": 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/npm/node_modules/parse-conflict-json": { - "version": "3.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "just-diff": "^6.0.0", - "just-diff-apply": "^5.2.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/path-is-absolute": { - "version": "1.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm/node_modules/path-key": { - "version": "3.1.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/path-scurry": { - "version": "1.9.2", - "inBundle": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^9.1.1", - "minipass": "^5.0.0 || ^6.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/path-scurry/node_modules/lru-cache": { - "version": "9.1.1", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/npm/node_modules/postcss-selector-parser": { - "version": "6.0.13", - "inBundle": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm/node_modules/proc-log": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/process": { - "version": "0.11.10", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/npm/node_modules/promise-all-reject-late": { - "version": "1.0.1", - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/promise-call-limit": { - "version": "1.0.2", - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/promise-inflight": { - "version": "1.0.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/promise-retry": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/promzard": { - "version": "1.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "read": "^2.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/qrcode-terminal": { - "version": "0.12.0", - "inBundle": true, - "bin": { - "qrcode-terminal": "bin/qrcode-terminal.js" - } - }, - "node_modules/npm/node_modules/read": { - "version": "2.1.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "mute-stream": "~1.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/read-cmd-shim": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/read-package-json": { - "version": "6.0.4", - "inBundle": 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/npm/node_modules/read-package-json-fast": { - "version": "3.0.2", - "inBundle": 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/npm/node_modules/readable-stream": { - "version": "4.4.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/npm/node_modules/retry": { - "version": "0.12.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/npm/node_modules/rimraf": { - "version": "3.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/npm/node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "inBundle": 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/npm/node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/npm/node_modules/safe-buffer": { - "version": "5.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/safer-buffer": { - "version": "2.1.2", - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/npm/node_modules/semver": { - "version": "7.5.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/set-blocking": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/shebang-command": { - "version": "2.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/shebang-regex": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/signal-exit": { - "version": "4.0.2", - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/sigstore": { - "version": "1.7.0", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.1.0", - "@sigstore/tuf": "^1.0.1", - "make-fetch-happen": "^11.0.1" - }, - "bin": { - "sigstore": "bin/sigstore.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/smart-buffer": { - "version": "4.2.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/npm/node_modules/socks": { - "version": "2.7.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/npm/node_modules/socks-proxy-agent": { - "version": "7.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/spdx-correct": { - "version": "3.2.0", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/npm/node_modules/spdx-exceptions": { - "version": "2.3.0", - "inBundle": true, - "license": "CC-BY-3.0" - }, - "node_modules/npm/node_modules/spdx-expression-parse": { - "version": "3.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.13", - "inBundle": true, - "license": "CC0-1.0" - }, - "node_modules/npm/node_modules/ssri": { - "version": "10.0.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/string_decoder": { - "version": "1.3.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/npm/node_modules/string-width": { - "version": "4.2.3", - "inBundle": 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/npm/node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "inBundle": 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/npm/node_modules/strip-ansi": { - "version": "6.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/supports-color": { - "version": "9.4.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/npm/node_modules/tar": { - "version": "6.1.15", - "inBundle": true, - "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" - } - }, - "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/text-table": { - "version": "0.2.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/tiny-relative-date": { - "version": "1.3.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/treeverse": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/tuf-js": { - "version": "1.1.7", - "inBundle": 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/npm/node_modules/unique-filename": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/unique-slug": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/util-deprecate": { - "version": "1.0.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/validate-npm-package-license": { - "version": "3.0.4", - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/npm/node_modules/validate-npm-package-name": { - "version": "5.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/walk-up-path": { - "version": "3.0.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/wcwidth": { - "version": "1.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/npm/node_modules/which": { - "version": "3.0.1", - "inBundle": 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/npm/node_modules/wide-align": { - "version": "1.1.5", - "inBundle": true, - "license": "ISC", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/npm/node_modules/wrap-ansi": { - "version": "8.1.0", - "inBundle": 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/npm/node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "inBundle": 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/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "9.2.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { - "version": "5.1.2", - "inBundle": 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/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/npm/node_modules/wrappy": { - "version": "1.0.2", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/write-file-atomic": { - "version": "5.0.1", - "inBundle": 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/npm/node_modules/yallist": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nwsapi": { - "version": "2.2.0", - "dev": true, - "license": "MIT" - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/one-time": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fn.name": "1.x.x" - } - }, - "node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "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/opencollective-postinstall": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", - "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", - "dev": true, - "bin": { - "opencollective-postinstall": "index.js" - } - }, - "node_modules/optionator": { - "version": "0.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "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, - "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/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ora/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/ora/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/os-name": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz", - "integrity": "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==", - "dev": true, - "dependencies": { - "macos-release": "^2.5.0", - "windows-release": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-each-series": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz", - "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==", - "engines": { - "node": ">=12" - }, - "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==", - "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", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-is-promise": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", - "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/p-limit": { - "version": "1.3.0", - "license": "MIT", - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-locate": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "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==", - "dependencies": { - "aggregate-error": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-queue": { - "version": "6.6.2", - "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-queue/node_modules/p-timeout": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-reduce": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", - "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-timeout": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/p-try": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", - "dev": true - }, - "node_modules/parent-module": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "dev": true, - "dependencies": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pastebin-api": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/pastebin-api/-/pastebin-api-5.1.6.tgz", - "integrity": "sha512-FI2ZeXLxroI2tuRVd5LI7eNmiANFxDOdlhXxSMqtOXTJn1KSt2UC8kglhndUOOPt6p9XPVnuS7XGW/KbiBbbzw==", - "dev": true, - "dependencies": { - "fast-xml-parser": "^4.1.3", - "undici": "^5.21.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true - }, - "node_modules/path-exists": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "dev": true, - "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", - "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "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==", - "dev": true, - "dependencies": { - "through": "~2.3" - } - }, - "node_modules/pdfjs-dist": { - "version": "2.12.313", - "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.12.313.tgz", - "integrity": "sha512-1x6iXO4Qnv6Eb+YFdN5JdUzt4pAkxSp3aLAYPX93eQCyg/m7QFzXVWJHJVtoW48CI8HCXju4dSkhQZwoheL5mA==", - "dev": true, - "peerDependencies": { - "worker-loader": "^3.0.8" - }, - "peerDependenciesMeta": { - "worker-loader": { - "optional": true - } - } - }, - "node_modules/pdfmake": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/pdfmake/-/pdfmake-0.2.7.tgz", - "integrity": "sha512-ClLpgx30H5G3EDvRW1MrA1Xih6YxEaSgIVFrOyBMgAAt62V+hxsyWAi6JNP7u1Fc5JKYAbpb4RRVw8Rhvmz5cQ==", - "dev": true, - "dependencies": { - "@foliojs-fork/linebreak": "^1.1.1", - "@foliojs-fork/pdfkit": "^0.13.0", - "iconv-lite": "^0.6.3", - "xmldoc": "^1.1.2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/pdfmake/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, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/pirates": { - "version": "4.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-conf": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", - "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", - "dependencies": { - "find-up": "^2.0.0", - "load-json-file": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "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", - "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", - "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", - "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", - "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", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/png-js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz", - "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==", - "dev": true - }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.7.1", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pretty-format": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "engines": { - "node": ">= 0.6.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==" - }, - "node_modules/progress": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" - }, - "node_modules/proxy-middleware": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", - "integrity": "sha512-EGCG8SeoIRVMhsqHQUdDigB2i7qU7fCsWASwn54+nPutYO8n4q6EiwMzyfWlC+dzRFExP+kvcnDFdBDHoZBU7Q==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/psl": { - "version": "1.8.0", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/q": { - "version": "1.5.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "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": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "engines": { - "node": ">=8" - } - }, - "node_modules/quote-stream": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", - "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==", - "dev": true, - "dependencies": { - "buffer-equal": "0.0.1", - "minimist": "^1.1.3", - "through2": "^2.0.0" - }, - "bin": { - "quote-stream": "bin/cmd.js" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/react-is": { - "version": "17.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/read-pkg": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-8.0.0.tgz", - "integrity": "sha512-Ajb9oSjxXBw0YyOiwtQ2dKbAA/vMnUPnY63XcCk+mXo0BwIdQEMgZLZiMWGttQHcUhUgbK0mH85ethMPKXxziw==", - "dependencies": { - "@types/normalize-package-data": "^2.4.1", - "normalize-package-data": "^5.0.0", - "parse-json": "^7.0.0", - "type-fest": "^3.8.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-10.0.0.tgz", - "integrity": "sha512-jgmKiS//w2Zs+YbX039CorlkOp8FIVbSAN8r8GJHDsGlmNPXo+VeHkqAwCiQVTTx5/LwLZTcEw59z3DvcLbr0g==", - "dependencies": { - "find-up": "^6.3.0", - "read-pkg": "^8.0.0", - "type-fest": "^3.12.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-pkg/node_modules/lines-and-columns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/read-pkg/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==", - "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-pkg/node_modules/parse-json": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.0.0.tgz", - "integrity": "sha512-kP+TQYAzAiVnzOlWOe0diD6L35s9bJh0SCn95PIbZFKrOYuIRQsQkeWEYxzVDuHTt9V9YqvYCJ2Qo4z9wdfZPw==", - "dependencies": { - "@babel/code-frame": "^7.21.4", - "error-ex": "^1.3.2", - "json-parse-even-better-errors": "^3.0.0", - "lines-and-columns": "^2.0.3", - "type-fest": "^3.8.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "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==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/redent/node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/redeyed": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", - "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==", - "dependencies": { - "esprima": "~4.0.0" - } - }, - "node_modules/reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", - "dev": true - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regextras": { - "version": "0.7.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.14" - } - }, - "node_modules/registry-auth-token": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", - "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", - "dependencies": { - "@pnpm/npm-conf": "^2.1.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": 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, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.1", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.9.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", - "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", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve.exports": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "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, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/restore-cursor/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "2.6.3", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/robust-predicates": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", - "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" - }, - "node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup-plugin-clear": { - "version": "2.0.7", - "dev": true, - "license": "ISC", - "dependencies": { - "rimraf": "^2.6.2" - } - }, - "node_modules/rollup-plugin-copy": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-copy/-/rollup-plugin-copy-3.4.0.tgz", - "integrity": "sha512-rGUmYYsYsceRJRqLVlE9FivJMxJ7X6jDlP79fmFkL8sJs7VVMSVyA2yfyL+PGyO/vJs4A87hwhgVfz61njI+uQ==", - "dev": true, - "dependencies": { - "@types/fs-extra": "^8.0.1", - "colorette": "^1.1.0", - "fs-extra": "^8.1.0", - "globby": "10.0.1", - "is-plain-object": "^3.0.0" - }, - "engines": { - "node": ">=8.3" - } - }, - "node_modules/rollup-plugin-copy/node_modules/globby": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", - "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", - "dev": true, - "dependencies": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/rollup-plugin-copy/node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/rollup-plugin-screeps-world": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/rollup-plugin-screeps-world/-/rollup-plugin-screeps-world-1.0.4.tgz", - "integrity": "sha512-+NB/KH8kuOjaenOySZVrPnRU5O/ny48otYYyI/Flg5tww59XIA95JZbmgnoN8J8GbjmDk+D5s+RV4YSK9r2ucw==", - "dev": true, - "dependencies": { - "git-rev-sync": "^3.0.2", - "screeps-api": "^1.11.0" - } - }, - "node_modules/rollup-plugin-screeps-world/node_modules/git-rev-sync": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/git-rev-sync/-/git-rev-sync-3.0.2.tgz", - "integrity": "sha512-Nd5RiYpyncjLv0j6IONy0lGzAqdRXUaBctuGBbrEA2m6Bn4iDrN/9MeQTXuiquw8AEKL9D2BW0nw5m/lQvxqnQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "1.0.5", - "graceful-fs": "4.1.15", - "shelljs": "0.8.5" - } - }, - "node_modules/rollup-plugin-screeps-world/node_modules/graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "node_modules/rollup-plugin-screeps-world/node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/rollup-plugin-terser": { - "version": "7.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "peerDependencies": { - "rollup": "^2.0.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/rollup-plugin-terser/node_modules/jest-worker": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { - "version": "4.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/rollup-plugin-typescript2": { - "version": "0.36.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.36.0.tgz", - "integrity": "sha512-NB2CSQDxSe9+Oe2ahZbf+B4bh7pHwjV5L+RSYpCu7Q5ROuN94F9b6ioWwKfz3ueL3KTtmX4o2MUH2cgHDIEUsw==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^4.1.2", - "find-cache-dir": "^3.3.2", - "fs-extra": "^10.0.0", - "semver": "^7.5.4", - "tslib": "^2.6.2" - }, - "peerDependencies": { - "rollup": ">=1.26.3", - "typescript": ">=2.4.0" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/@rollup/pluginutils": { - "version": "4.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/rollup-plugin-typescript2/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, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/rollup-plugin-typescript2/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, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/rollup-plugin-typescript2/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "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/rw": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" - }, - "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, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/rxjs/node_modules/tslib": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", - "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", - "dev": true - }, - "node_modules/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dependencies": { - "mri": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "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.4.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "node_modules/saxes": { - "version": "5.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/scope-analyzer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.2.tgz", - "integrity": "sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ==", - "dev": true, - "dependencies": { - "array-from": "^2.1.1", - "dash-ast": "^2.0.1", - "es6-map": "^0.1.5", - "es6-set": "^0.1.5", - "es6-symbol": "^3.1.1", - "estree-is-function": "^1.0.0", - "get-assigned-identifiers": "^1.1.0" - } - }, - "node_modules/screeps-api": { - "version": "1.16.0", - "dev": true, - "license": "ISC", - "dependencies": { - "axios": "^0.21.1", - "commander": "^7.2.0", - "debug": "^4.1.1", - "ws": "^7.4.4", - "yamljs": "^0.3.0" - }, - "bin": { - "screeps-api": "bin/screeps-api.js" - }, - "optionalDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - } - }, - "node_modules/screeps-api/node_modules/commander": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/screeps-api/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/screeps-api/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/screeps-db-importer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/screeps-db-importer/-/screeps-db-importer-1.1.0.tgz", - "integrity": "sha512-bbkO0n7DJpu9DzG2PGwEi4FZA64+iCbkYcBiqNYIx/l5vurldEF16UZLBir7tIpC1aJ2OCl6y7Mb1xaN2qDTMQ==", - "dev": true, - "dependencies": { - "node-fetch": "^3.3.1", - "winston": "^3.8.2" - } - }, - "node_modules/screeps-db-importer/node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "dev": true, - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, - "node_modules/screeps-grafana-go_carbon": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/screeps-grafana-go_carbon/-/screeps-grafana-go_carbon-1.0.5.tgz", - "integrity": "sha512-YLN87Jd9d1wrcWB38kTJLHMR7aoEgfXlNAexP6axBLDmBxpBPwcW6M7bb9/P0q1Q/m20GRtcPBrdFn1Sk4R39A==", - "dev": true, - "dependencies": { - "axios": "^0.27.2", - "dotenv": "^16.0.2", - "fs-extra": "^11.1.0", - "get-port-please": "^3.0.1", - "minimist": "^1.2.7", - "winston": "^3.8.1" - }, - "bin": { - "screeps-grafana-go_carbon": "bin/setup.js" - } - }, - "node_modules/screeps-grafana-go_carbon/node_modules/axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "dev": true, - "dependencies": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" - } - }, - "node_modules/screeps-grafana-go_carbon/node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/screeps-grafana-go_carbon/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/screeps-grafana-go_carbon/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/screeps-jest": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/screeps-jest/-/screeps-jest-2.0.2.tgz", - "integrity": "sha512-2jVH1fKX2U4SQBbbGe5rF5lUGtsE7AcsteV7+L4//WngXl5z16nv7DyHq0yNFrxuaRYZUUBLOaSE4gjr7h6H0A==", - "dev": true, - "peerDependencies": { - "jest": ">=27" - } - }, - "node_modules/screeps-performance-server": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.14.1.tgz", - "integrity": "sha512-gH7sYnoAvSKqXok/HQ5qRNLXc0ORm6E/xkweMt+Zd4qYp2uSyuxFSNRL1DsG2A5T74ZrOyVTGmX5J95WjwFGXg==", - "dev": true, - "dependencies": { - "@octokit/core": "^4.2.0", - "discord.js": "^14.9.0", - "dockerode": "^4.0.2", - "dotenv": "^16.0.3", - "get-port": "^6.1.2", - "json-beautify": "^1.1.1", - "lodash": "^4.17.21", - "minimist": "^1.2.7", - "ncp": "^2.0.0", - "node-fetch": "^2.6.7", - "node-powershell": "^5.0.1", - "pastebin-api": "^5.1.6", - "q": "^1.5.1", - "screeps-api": "1.16.0", - "screeps-db-importer": "latest", - "winston": "^3.8.2" - }, - "bin": { - "screeps-performance-server": "bin/setup.js" - } - }, - "node_modules/screeps-performance-server/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, - "engines": { - "node": ">= 14" - } - }, - "node_modules/screeps-performance-server/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, - "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/screeps-performance-server/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, - "dependencies": { - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/screeps-performance-server/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, - "dependencies": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^9.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/screeps-performance-server/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, - "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/screeps-performance-server/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, - "dependencies": { - "@octokit/types": "^9.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/screeps-performance-server/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, - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/screeps-performance-server/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/screeps-performance-server/node_modules/lodash": { - "version": "4.17.21", - "dev": true, - "license": "MIT" - }, - "node_modules/screeps-viz": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/screeps-viz/-/screeps-viz-2.1.3.tgz", - "integrity": "sha512-c96u2MTtrXzjv4O1K89J1EWgapbP0C9xqx2gCOZ5uLTBDr1RaAuIQZkOquqHA8ELhSNd9xr9X7Qt5vCOMMknSw==", - "dev": true - }, - "node_modules/semantic-release": { - "version": "21.0.7", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-21.0.7.tgz", - "integrity": "sha512-peRDSXN+hF8EFSKzze90ff/EnAmgITHQ/a3SZpRV3479ny0BIZWEJ33uX6/GlOSKdaSxo9hVRDyv2/u2MuF+Bw==", - "dependencies": { - "@semantic-release/commit-analyzer": "^10.0.0", - "@semantic-release/error": "^4.0.0", - "@semantic-release/github": "^9.0.0", - "@semantic-release/npm": "^10.0.2", - "@semantic-release/release-notes-generator": "^11.0.0", - "aggregate-error": "^4.0.1", - "cosmiconfig": "^8.0.0", - "debug": "^4.0.0", - "env-ci": "^9.0.0", - "execa": "^7.0.0", - "figures": "^5.0.0", - "find-versions": "^5.1.0", - "get-stream": "^6.0.0", - "git-log-parser": "^1.2.0", - "hook-std": "^3.0.0", - "hosted-git-info": "^6.0.0", - "lodash-es": "^4.17.21", - "marked": "^5.0.0", - "marked-terminal": "^5.1.1", - "micromatch": "^4.0.2", - "p-each-series": "^3.0.0", - "p-reduce": "^3.0.0", - "read-pkg-up": "^10.0.0", - "resolve-from": "^5.0.0", - "semver": "^7.3.2", - "semver-diff": "^4.0.0", - "signale": "^1.2.1", - "yargs": "^17.5.1" - }, - "bin": { - "semantic-release": "bin/semantic-release.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/semantic-release/node_modules/@semantic-release/commit-analyzer": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-10.0.1.tgz", - "integrity": "sha512-9ejHzTAijYs9z246sY/dKBatmOPcd0GQ7lH4MgLCkv1q4GCiDZRkjHJkaQZXZVaK7mJybS+sH3Ng6G8i3pYMGQ==", - "dependencies": { - "conventional-changelog-angular": "^6.0.0", - "conventional-commits-filter": "^3.0.0", - "conventional-commits-parser": "^4.0.0", - "debug": "^4.0.0", - "import-from": "^4.0.0", - "lodash-es": "^4.17.21", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "semantic-release": ">=20.1.0" - } - }, - "node_modules/semantic-release/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/semantic-release/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/semantic-release/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/semantic-release/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/semver-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", - "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semver-diff/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-regex": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", - "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/send/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 - }, - "node_modules/send/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/shallow-copy": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", - "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==", - "dev": true - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "license": "ISC" - }, - "node_modules/signale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", - "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", - "dependencies": { - "chalk": "^2.3.2", - "figures": "^2.0.0", - "pkg-conf": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/signale/node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "dev": true, - "license": "MIT" - }, - "node_modules/sinon": { - "version": "6.3.5", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^1.0.2", - "@sinonjs/formatio": "^3.0.0", - "@sinonjs/samsam": "^2.1.2", - "diff": "^3.5.0", - "lodash.get": "^4.4.2", - "lolex": "^2.7.5", - "nise": "^1.4.5", - "supports-color": "^5.5.0", - "type-detect": "^4.0.8" - } - }, - "node_modules/sinon-chai": { - "version": "3.7.0", - "dev": true, - "license": "(BSD-2-Clause OR WTFPL)", - "peerDependencies": { - "chai": "^4.0.0", - "sinon": ">=4.0.0" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/slash": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead", - "dev": true - }, - "node_modules/spawn-error-forwarder": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", - "integrity": "sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==" - }, - "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==", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.11", - "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==", - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/split-ca": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz", - "integrity": "sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==", - "dev": true - }, - "node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/ssh2": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.15.0.tgz", - "integrity": "sha512-C0PHgX4h6lBxYx7hcXwu3QWdh4tg6tZZsTfXcdvc5caW/EMxaB4H9dWsl7qk+F7LAW762hp8VbXOX7x4xUYvEw==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "asn1": "^0.2.6", - "bcrypt-pbkdf": "^1.0.2" - }, - "engines": { - "node": ">=10.16.0" - }, - "optionalDependencies": { - "cpu-features": "~0.0.9", - "nan": "^2.18.0" - } - }, - "node_modules/stack-trace": { - "version": "0.0.10", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/stack-utils": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/static-eval": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz", - "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==", - "dev": true, - "dependencies": { - "escodegen": "^1.11.1" - } - }, - "node_modules/static-eval/node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/static-module": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/static-module/-/static-module-3.0.4.tgz", - "integrity": "sha512-gb0v0rrgpBkifXCa3yZXxqVmXDVE+ETXj6YlC/jt5VzOnGXR2C15+++eXuMDUYsePnbhf+lwW0pE1UXyOLtGCw==", - "dev": true, - "dependencies": { - "acorn-node": "^1.3.0", - "concat-stream": "~1.6.0", - "convert-source-map": "^1.5.1", - "duplexer2": "~0.1.4", - "escodegen": "^1.11.1", - "has": "^1.0.1", - "magic-string": "0.25.1", - "merge-source-map": "1.0.4", - "object-inspect": "^1.6.0", - "readable-stream": "~2.3.3", - "scope-analyzer": "^2.0.1", - "shallow-copy": "~0.0.1", - "static-eval": "^2.0.5", - "through2": "~2.0.3" - } - }, - "node_modules/static-module/node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/static-module/node_modules/magic-string": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz", - "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.1" - } - }, - "node_modules/static-module/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, - "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/static-module/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/static-module/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "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==", - "dev": true, - "dependencies": { - "duplexer": "~0.1.1", - "through": "~2.3.4" - } - }, - "node_modules/stream-combiner2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", - "dependencies": { - "duplexer2": "~0.1.0", - "readable-stream": "^2.0.2" - } - }, - "node_modules/stream-combiner2/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==", - "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/stream-combiner2/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==" - }, - "node_modules/stream-combiner2/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==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-template": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string-template/-/string-template-1.0.0.tgz", - "integrity": "sha512-SLqR3GBUXuoPP5MmYtD7ompvXiG87QjT6lzOszyXjTM86Uu7At7vNnt2xgyTLq5o9T4IxTYFyGxcULqpsmsfdg==", - "dev": true - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-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, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/stringz": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/stringz/-/stringz-2.1.0.tgz", - "integrity": "sha512-KlywLT+MZ+v0IRepfMxRtnSvDCMc3nR1qqCs3m/qIbSOWkNZYT8XHQA31rS3TnKp0c5xjZu3M4GY/2aRKSi/6A==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-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, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "dev": true, - "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==", - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "dev": true - }, - "node_modules/stylis": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", - "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" - }, - "node_modules/supports-color": { - "version": "5.5.0", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "dev": true, - "license": "MIT" - }, - "node_modules/tar-fs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", - "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", - "dev": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.0.0" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/temp-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", - "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", - "engines": { - "node": ">=14.16" - } - }, - "node_modules/tempy": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz", - "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==", - "dependencies": { - "is-stream": "^3.0.0", - "temp-dir": "^3.0.0", - "type-fest": "^2.12.2", - "unique-string": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tempy/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tempy/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link/node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link/node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "5.14.2", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/text-hex": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/throat": { - "version": "6.0.1", - "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==" - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "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==", - "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==" - }, - "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==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/tiny-inflate": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", - "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", - "dev": true - }, - "node_modules/tmpl": { - "version": "1.0.5", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/traverse": { - "version": "0.6.7", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", - "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/trim-buffer": { - "version": "5.0.0", - "dev": true, - "license": "MIT" - }, - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/triple-beam": { - "version": "1.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ts-dedent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", - "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", - "engines": { - "node": ">=6.10" - } - }, - "node_modules/ts-jest": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.5.tgz", - "integrity": "sha512-lIJApzfTaSSbtlksfFNHkWOzLJuuSm4faFAfo5kvzOiRAuoN4/eKxVJ2zEAho8aecE04qX6K1pAzfH5QHL1/8w==", - "dev": true, - "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", - "json5": "2.x", - "lodash": "4.x", - "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@types/jest": "^27.0.0", - "babel-jest": ">=27.0.0 <28", - "jest": "^27.0.0", - "typescript": ">=3.8 <5.0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@types/jest": { - "optional": true - }, - "babel-jest": { - "optional": true - } - } - }, - "node_modules/ts-jest/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/ts-jest/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-mixer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz", - "integrity": "sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==", - "dev": true - }, - "node_modules/ts-morph": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-18.0.0.tgz", - "integrity": "sha512-Kg5u0mk19PIIe4islUI/HWRvm9bC1lHejK4S0oh1zaZ77TMZAEmQC0sHQYiu2RgCQFZKXz1fMVi/7nOOeirznA==", - "dev": true, - "dependencies": { - "@ts-morph/common": "~0.19.0", - "code-block-writer": "^12.0.0" - } - }, - "node_modules/ts-node": { - "version": "10.8.1", - "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/acorn-walk": { - "version": "8.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "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 - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", - "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "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": { - "version": "5.22.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz", - "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==", - "dev": true, - "dependencies": { - "busboy": "^1.6.0" - }, - "engines": { - "node": ">=14.0" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-properties": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", - "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", - "dev": true, - "dependencies": { - "base64-js": "^1.3.0", - "unicode-trie": "^2.0.0" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-trie": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", - "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", - "dev": true, - "dependencies": { - "pako": "^0.2.5", - "tiny-inflate": "^1.0.0" - } - }, - "node_modules/unique-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", - "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", - "dependencies": { - "crypto-random-string": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" - }, - "node_modules/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unix-crypt-td-js": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz", - "integrity": "sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw==", - "dev": true - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "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" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-join": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", - "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/utf-8-validate": { - "version": "5.0.9", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/uvu": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", - "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", - "dependencies": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3" - }, - "bin": { - "uvu": "bin.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/uvu/node_modules/diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/uvu/node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/v8-to-istanbul": { - "version": "8.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.4", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "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==", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "makeerror": "1.0.12" - } - }, - "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, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/web-worker": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", - "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=10.4" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/whatwg-url/node_modules/lodash": { - "version": "4.17.21", - "dev": true, - "license": "MIT" - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/windows-release": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", - "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==", - "dev": true, - "dependencies": { - "execa": "^4.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/windows-release/node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/windows-release/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/windows-release/node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/windows-release/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/windows-release/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/windows-release/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/winston": { - "version": "3.8.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@colors/colors": "1.5.0", - "@dabh/diagnostics": "^2.0.2", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.4.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.5.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/winston-transport": { - "version": "4.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "logform": "^2.3.2", - "readable-stream": "^3.6.0", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 6.4.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "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==" - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-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, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.8", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/xmldoc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.3.0.tgz", - "integrity": "sha512-y7IRWW6PvEnYQZNZFMRLNJw+p3pezM4nKYPfr15g4OOW9i8VpeydycFuipE2297OvZnh3jSb2pxOt9QpkZUVng==", - "dev": true, - "dependencies": { - "sax": "^1.2.4" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/yamljs": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "glob": "^7.0.5" - }, - "bin": { - "json2yaml": "bin/json2yaml", - "yaml2json": "bin/yaml2json" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "engines": { - "node": ">=10" - } - }, - "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==", - "engines": { - "node": ">=12" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@aduh95/viz.js": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@aduh95/viz.js/-/viz.js-3.4.0.tgz", - "integrity": "sha512-KI2nVf9JdwWCXqK6RVf+9/096G7VWN4Z84mnynlyZKao2xQENW8WNEjLmvdlxS5X8PNWXFC1zqwm7tveOXw/4A==", - "dev": true - }, - "@ampproject/remapping": { - "version": "2.2.0", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@angular-devkit/core": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.6.tgz", - "integrity": "sha512-3OjtrPWvsqVkMBwqPeE65ccCIw56FooNpVVAJ0XwhVQv5mA81pmbCzU7JsR6U449ZT7O4cQblzZMQvWvx74HCg==", - "dev": true, - "requires": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "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 - }, - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - } - } - }, - "@angular-devkit/schematics": { - "version": "16.1.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.6.tgz", - "integrity": "sha512-KA8P78gaS76HMHGBOM8JHJXWLOxCIShYVB2Un/Cu6z3jVODvXq+ILZUc1Y0RsAce/vsl2wf8qpoh5Lku9KJHUQ==", - "dev": true, - "requires": { - "@angular-devkit/core": "16.1.6", - "jsonc-parser": "3.2.0", - "magic-string": "0.30.0", - "ora": "5.4.1", - "rxjs": "7.8.1" - }, - "dependencies": { - "magic-string": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", - "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", - "dev": true, - "requires": { - "@jridgewell/sourcemap-codec": "^1.4.13" - } - } - } - }, - "@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", - "requires": { - "@babel/highlight": "^7.22.5" - } - }, - "@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", - "dev": true - }, - "@babel/core": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", - "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.8", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", - "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", - "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", - "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz", - "integrity": "sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", - "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", - "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", - "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.9" - } - }, - "@babel/helper-replace-supers": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", - "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5" - } - }, - "@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==" - }, - "@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.9.tgz", - "integrity": "sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helpers": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", - "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", - "dev": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5" - } - }, - "@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", - "requires": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", - "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", - "dev": true - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "requires": {} - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.17.12", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-async-generator-functions": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz", - "integrity": "sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", - "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-class-static-block": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", - "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", - "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", - "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-dynamic-import": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", - "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-export-namespace-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", - "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-json-strings": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", - "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", - "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", - "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", - "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", - "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-transform-numeric-separator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", - "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-transform-object-rest-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", - "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - } - }, - "@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", - "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-transform-optional-chaining": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz", - "integrity": "sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-private-property-in-object": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", - "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", - "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.1" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", - "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/preset-env": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.9.tgz", - "integrity": "sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.7", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.5", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.6", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.5", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.6", - "@babel/plugin-transform-parameters": "^7.22.5", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.5", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.5", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.4", - "babel-plugin-polyfill-corejs3": "^0.8.2", - "babel-plugin-polyfill-regenerator": "^0.5.1", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - } - }, - "@babel/preset-modules": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", - "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "@babel/runtime": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", - "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.11" - } - }, - "@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/traverse": { - "version": "7.22.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", - "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.7", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - } - }, - "@balena/dockerignore": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz", - "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==", - "dev": true - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "dev": true - }, - "@braintree/sanitize-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz", - "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==" - }, - "@colors/colors": { - "version": "1.5.0", - "devOptional": true - }, - "@compodoc/compodoc": { - "version": "1.1.21", - "resolved": "https://registry.npmjs.org/@compodoc/compodoc/-/compodoc-1.1.21.tgz", - "integrity": "sha512-/FDlwRgKzmkGuorDnURuCzoGY6rZ0KY7Mj5/PwnEjMs0y1CRRPHBJC9I0yVIjn8j8gxVy8PPc6dna0lY1MWwhg==", - "dev": true, - "requires": { - "@angular-devkit/schematics": "^16.0.1", - "@babel/core": "^7.21.8", - "@babel/preset-env": "^7.21.5", - "@compodoc/live-server": "^1.2.3", - "@compodoc/ngd-transformer": "^2.1.3", - "chalk": "4.1.2", - "cheerio": "^1.0.0-rc.12", - "chokidar": "^3.5.3", - "colors": "1.4.0", - "commander": "^10.0.1", - "cosmiconfig": "^8.1.3", - "decache": "^4.6.1", - "fancy-log": "^2.0.0", - "fast-glob": "^3.2.12", - "fs-extra": "^11.1.1", - "glob": "^10.2.4", - "handlebars": "^4.7.7", - "html-entities": "^2.3.3", - "i18next": "^22.4.15", - "inside": "^1.0.0", - "json5": "^2.2.3", - "lodash": "^4.17.21", - "loglevel": "^1.8.1", - "loglevel-plugin-prefix": "^0.8.4", - "lunr": "^2.3.9", - "marked": "4.3.0", - "minimist": "^1.2.8", - "opencollective-postinstall": "^2.0.3", - "os-name": "4.0.1", - "pdfjs-dist": "2.12.313", - "pdfmake": "^0.2.7", - "semver": "^7.5.1", - "traverse": "^0.6.7", - "ts-morph": "^18.0.0", - "uuid": "^9.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true - }, - "fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "glob": { - "version": "10.3.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", - "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", - "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - } - }, - "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 - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", - "dev": true - }, - "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@compodoc/live-server": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@compodoc/live-server/-/live-server-1.2.3.tgz", - "integrity": "sha512-hDmntVCyjjaxuJzPzBx68orNZ7TW4BtHWMnXlIVn5dqhK7vuFF/11hspO1cMmc+2QTYgqde1TBcb3127S7Zrow==", - "dev": true, - "requires": { - "chokidar": "^3.5.2", - "colors": "1.4.0", - "connect": "^3.7.0", - "cors": "latest", - "event-stream": "4.0.1", - "faye-websocket": "0.11.x", - "http-auth": "4.1.9", - "http-auth-connect": "^1.0.5", - "morgan": "^1.10.0", - "object-assign": "latest", - "open": "8.4.0", - "proxy-middleware": "latest", - "send": "latest", - "serve-index": "^1.9.1" - } - }, - "@compodoc/ngd-core": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@compodoc/ngd-core/-/ngd-core-2.1.1.tgz", - "integrity": "sha512-Z+wE6wWZYVnudRYg6qunDlyh3Orw39Ib66Gvrz5kX5u7So+iu3tr6sQJdqH6yGS3hAjig5avlfhWLlgsb6/x1Q==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.3", - "fancy-log": "^2.0.0", - "typescript": "^5.0.4" - }, - "dependencies": { - "typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "dev": true - } - } - }, - "@compodoc/ngd-transformer": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@compodoc/ngd-transformer/-/ngd-transformer-2.1.3.tgz", - "integrity": "sha512-oWxJza7CpWR8/FeWYfE6j+jgncnGBsTWnZLt5rD2GUpsGSQTuGrsFPnmbbaVLgRS5QIVWBJYke7QFBr/7qVMWg==", - "dev": true, - "requires": { - "@aduh95/viz.js": "3.4.0", - "@compodoc/ngd-core": "~2.1.1", - "dot": "^2.0.0-beta.1", - "fs-extra": "^11.1.1" - }, - "dependencies": { - "fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } - } - }, - "@dabh/diagnostics": { - "version": "2.0.3", - "dev": true, - "requires": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, - "@discordjs/builders": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.5.tgz", - "integrity": "sha512-SdweyCs/+mHj+PNhGLLle7RrRFX9ZAhzynHahMCLqp5Zeq7np7XC6/mgzHc79QoVlQ1zZtOkTTiJpOZu5V8Ufg==", - "dev": true, - "requires": { - "@discordjs/formatters": "^0.3.2", - "@discordjs/util": "^1.0.1", - "@sapphire/shapeshift": "^3.9.2", - "discord-api-types": "0.37.50", - "fast-deep-equal": "^3.1.3", - "ts-mixer": "^6.0.3", - "tslib": "^2.6.1" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - } - } - }, - "@discordjs/collection": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", - "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", - "dev": true - }, - "@discordjs/formatters": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.2.tgz", - "integrity": "sha512-lE++JZK8LSSDRM5nLjhuvWhGuKiXqu+JZ/DsOR89DVVia3z9fdCJVcHF2W/1Zxgq0re7kCzmAJlCMMX3tetKpA==", - "dev": true, - "requires": { - "discord-api-types": "0.37.50" - } - }, - "@discordjs/rest": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.0.1.tgz", - "integrity": "sha512-/eWAdDRvwX/rIE2tuQUmKaxmWeHmGealttIzGzlYfI4+a7y9b6ZoMp8BG/jaohs8D8iEnCNYaZiOFLVFLQb8Zg==", - "dev": true, - "requires": { - "@discordjs/collection": "^1.5.3", - "@discordjs/util": "^1.0.1", - "@sapphire/async-queue": "^1.5.0", - "@sapphire/snowflake": "^3.5.1", - "@vladfrangu/async_event_emitter": "^2.2.2", - "discord-api-types": "0.37.50", - "magic-bytes.js": "^1.0.15", - "tslib": "^2.6.1", - "undici": "5.22.1" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - } - } - }, - "@discordjs/util": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.0.1.tgz", - "integrity": "sha512-d0N2yCxB8r4bn00/hvFZwM7goDcUhtViC5un4hPj73Ba4yrChLSJD8fy7Ps5jpTLg1fE9n4K0xBLc1y9WGwSsA==", - "dev": true - }, - "@discordjs/ws": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.0.1.tgz", - "integrity": "sha512-avvAolBqN3yrSvdBPcJ/0j2g42ABzrv3PEL76e3YTp2WYMGH7cuspkjfSyNWaqYl1J+669dlLp+YFMxSVQyS5g==", - "dev": true, - "requires": { - "@discordjs/collection": "^1.5.3", - "@discordjs/rest": "^2.0.1", - "@discordjs/util": "^1.0.1", - "@sapphire/async-queue": "^1.5.0", - "@types/ws": "^8.5.5", - "@vladfrangu/async_event_emitter": "^2.2.2", - "discord-api-types": "0.37.50", - "tslib": "^2.6.1", - "ws": "^8.13.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "ws": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", - "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", - "dev": true, - "requires": {} - } - } - }, - "@eslint/eslintrc": { - "version": "0.4.3", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "dev": true - }, - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "espree": { - "version": "7.3.1", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - } - }, - "globals": { - "version": "13.15.0", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "ms": { - "version": "2.1.2", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "dev": true - } - } - }, - "@foliojs-fork/fontkit": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@foliojs-fork/fontkit/-/fontkit-1.9.1.tgz", - "integrity": "sha512-U589voc2/ROnvx1CyH9aNzOQWJp127JGU1QAylXGQ7LoEAF6hMmahZLQ4eqAcgHUw+uyW4PjtCItq9qudPkK3A==", - "dev": true, - "requires": { - "@foliojs-fork/restructure": "^2.0.2", - "brfs": "^2.0.0", - "brotli": "^1.2.0", - "browserify-optional": "^1.0.1", - "clone": "^1.0.4", - "deep-equal": "^1.0.0", - "dfa": "^1.2.0", - "tiny-inflate": "^1.0.2", - "unicode-properties": "^1.2.2", - "unicode-trie": "^2.0.0" - } - }, - "@foliojs-fork/linebreak": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@foliojs-fork/linebreak/-/linebreak-1.1.1.tgz", - "integrity": "sha512-pgY/+53GqGQI+mvDiyprvPWgkTlVBS8cxqee03ejm6gKAQNsR1tCYCIvN9FHy7otZajzMqCgPOgC4cHdt4JPig==", - "dev": true, - "requires": { - "base64-js": "1.3.1", - "brfs": "^2.0.2", - "unicode-trie": "^2.0.0" - }, - "dependencies": { - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", - "dev": true - } - } - }, - "@foliojs-fork/pdfkit": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@foliojs-fork/pdfkit/-/pdfkit-0.13.0.tgz", - "integrity": "sha512-YXeG1fml9k97YNC9K8e292Pj2JzGt9uOIiBFuQFxHsdQ45BlxW+JU3RQK6JAvXU7kjhjP8rCcYvpk36JLD33sQ==", - "dev": true, - "requires": { - "@foliojs-fork/fontkit": "^1.9.1", - "@foliojs-fork/linebreak": "^1.1.1", - "crypto-js": "^4.0.0", - "png-js": "^1.0.0" - } - }, - "@foliojs-fork/restructure": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@foliojs-fork/restructure/-/restructure-2.0.2.tgz", - "integrity": "sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA==", - "dev": true - }, - "@humanwhocodes/config-array": { - "version": "0.5.0", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "dev": true - } - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "dev": true - }, - "@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, - "requires": { - "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" - }, - "dependencies": { - "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 - }, - "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 - }, - "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 - }, - "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, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "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, - "requires": { - "ansi-regex": "^6.0.1" - } - }, - "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, - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - } - } - } - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "dev": true - }, - "resolve-from": { - "version": "5.0.0", - "dev": true - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "dev": true - }, - "@javascript-obfuscator/escodegen": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@javascript-obfuscator/escodegen/-/escodegen-2.3.0.tgz", - "integrity": "sha512-QVXwMIKqYMl3KwtTirYIA6gOCiJ0ZDtptXqAv/8KWLG9uQU2fZqTVy7a/A5RvcoZhbDoFfveTxuGxJ5ibzQtkw==", - "dev": true, - "requires": { - "@javascript-obfuscator/estraverse": "^5.3.0", - "esprima": "^4.0.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "@javascript-obfuscator/estraverse": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@javascript-obfuscator/estraverse/-/estraverse-5.4.0.tgz", - "integrity": "sha512-CZFX7UZVN9VopGbjTx4UXaXsi9ewoM1buL0kY7j1ftYdSs7p2spv9opxFjHlQ/QGTgh4UqufYqJJ0WKLml7b6w==", - "dev": true - }, - "@jest/console": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/core": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-escapes": { - "version": "4.3.2", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-fest": { - "version": "0.21.3", - "dev": true - } - } - }, - "@jest/environment": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1" - } - }, - "@jest/fake-timers": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - } - }, - "@jest/globals": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" - } - }, - "@jest/reporters": { - "version": "27.5.1", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/source-map": { - "version": "27.5.1", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/test-result": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" - } - }, - "@jest/transform": { - "version": "27.5.1", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/types": { - "version": "27.5.1", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.1", - "dev": true - }, - "@jridgewell/source-map": { - "version": "0.3.2", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@octokit/auth-token": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", - "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==" - }, - "@octokit/core": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.0.tgz", - "integrity": "sha512-YbAtMWIrbZ9FCXbLwT9wWB8TyLjq9mxpKdgB3dUNxQcIVTf9hJ70gRPwAcqGZdY6WdJPZ0I7jLaaNDCiloGN2A==", - "requires": { - "@octokit/auth-token": "^4.0.0", - "@octokit/graphql": "^7.0.0", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/endpoint": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.0.tgz", - "integrity": "sha512-szrQhiqJ88gghWY2Htt8MqUDO6++E/EIXqJ2ZEp5ma3uGS46o7LZAzSLt49myB7rT+Hfw5Y6gO3LmOxGzHijAQ==", - "requires": { - "@octokit/types": "^11.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "dependencies": { - "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==" - } - } - }, - "@octokit/graphql": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.1.tgz", - "integrity": "sha512-T5S3oZ1JOE58gom6MIcrgwZXzTaxRnxBso58xhozxHpOqSTgDS6YNeEUvZ/kRvXgPrRz/KHnZhtb7jUMRi9E6w==", - "requires": { - "@octokit/request": "^8.0.1", - "@octokit/types": "^11.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/openapi-types": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", - "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" - }, - "@octokit/plugin-paginate-rest": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-8.0.0.tgz", - "integrity": "sha512-2xZ+baZWUg+qudVXnnvXz7qfrTmDeYPCzangBVq/1gXxii/OiS//4shJp9dnCCvj1x+JAm9ji1Egwm1BA47lPQ==", - "requires": { - "@octokit/types": "^11.0.0" - } - }, - "@octokit/plugin-retry": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-6.0.0.tgz", - "integrity": "sha512-a1/A4A+PB1QoAHQfLJxGHhLfSAT03bR1jJz3GgQJZvty2ozawFWs93MiBQXO7SL2YbO7CIq0Goj4qLOBj8JeMQ==", - "requires": { - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0", - "bottleneck": "^2.15.3" - } - }, - "@octokit/plugin-throttling": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-7.0.0.tgz", - "integrity": "sha512-KL2k/d0uANc8XqP5S64YcNFCudR3F5AaKO39XWdUtlJIjT9Ni79ekWJ6Kj5xvAw87udkOMEPcVf9xEge2+ahew==", - "requires": { - "@octokit/types": "^11.0.0", - "bottleneck": "^2.15.3" - } - }, - "@octokit/request": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.1.1.tgz", - "integrity": "sha512-8N+tdUz4aCqQmXl8FpHYfKG9GelDFd7XGVzyN8rc6WxVlYcfpHECnuRkgquzz+WzvHTK62co5di8gSXnzASZPQ==", - "requires": { - "@octokit/endpoint": "^9.0.0", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.1.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "dependencies": { - "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==" - } - } - }, - "@octokit/request-error": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.0.tgz", - "integrity": "sha512-1ue0DH0Lif5iEqT52+Rf/hf0RmGO9NWFjrzmrkArpG9trFfDM/efx00BJHdLGuro4BR/gECxCU2Twf5OKrRFsQ==", - "requires": { - "@octokit/types": "^11.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "@octokit/types": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-11.1.0.tgz", - "integrity": "sha512-Fz0+7GyLm/bHt8fwEqgvRBWwIV1S6wRRyq+V6exRKLVWaKGsuy6H9QFYeBVDV7rK6fO3XwHgQOPxv+cLj2zpXQ==", - "requires": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "@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, - "optional": true - }, - "@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==" - }, - "@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "requires": { - "graceful-fs": "4.2.10" - } - }, - "@pnpm/npm-conf": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", - "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", - "requires": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - } - }, - "@rollup/plugin-commonjs": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-20.0.0.tgz", - "integrity": "sha512-5K0g5W2Ol8hAcTHqcTBHiA7M58tfmYi1o9KxeJuuRNpGaTa5iLjcyemBitCBcKXaHamOBBEH2dGom6v6Unmqjg==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" - } - }, - "@rollup/plugin-node-resolve": { - "version": "13.3.0", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.1.0", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - } - }, - "@rollup/pluginutils": { - "version": "3.1.0", - "dev": true, - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "dependencies": { - "estree-walker": { - "version": "1.0.1", - "dev": true - } - } - }, - "@sapphire/async-queue": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", - "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==", - "dev": true - }, - "@sapphire/shapeshift": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.2.tgz", - "integrity": "sha512-YRbCXWy969oGIdqR/wha62eX8GNHsvyYi0Rfd4rNW6tSVVa8p0ELiMEuOH/k8rgtvRoM+EMV7Csqz77YdwiDpA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3", - "lodash": "^4.17.21" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - } - } - }, - "@sapphire/snowflake": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz", - "integrity": "sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==", - "dev": true - }, - "@semantic-release/changelog": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@semantic-release/changelog/-/changelog-6.0.3.tgz", - "integrity": "sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==", - "dev": true, - "requires": { - "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", - "fs-extra": "^11.0.0", - "lodash": "^4.17.4" - }, - "dependencies": { - "@semantic-release/error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", - "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", - "dev": true - }, - "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, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "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 - }, - "fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "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 - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@semantic-release/commit-analyzer": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz", - "integrity": "sha512-E+dr6L+xIHZkX4zNMe6Rnwg4YQrWNXK+rNsvwOPpdFppvZO1olE2fIgWhv89TkQErygevbjsZFSIxp+u6w2e5g==", - "dev": true, - "requires": { - "conventional-changelog-angular": "^5.0.0", - "conventional-commits-filter": "^2.0.0", - "conventional-commits-parser": "^3.2.3", - "debug": "^4.0.0", - "import-from": "^4.0.0", - "lodash": "^4.17.4", - "micromatch": "^4.0.2" - }, - "dependencies": { - "conventional-changelog-angular": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", - "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", - "dev": true, - "requires": { - "compare-func": "^2.0.0", - "q": "^1.5.1" - } - }, - "conventional-commits-filter": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", - "dev": true, - "requires": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" - } - }, - "conventional-commits-parser": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", - "dev": true, - "requires": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "requires": { - "readable-stream": "3" - } - } - } - }, - "@semantic-release/error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", - "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==" - }, - "@semantic-release/git": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@semantic-release/git/-/git-10.0.1.tgz", - "integrity": "sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==", - "dev": true, - "requires": { - "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", - "debug": "^4.0.0", - "dir-glob": "^3.0.0", - "execa": "^5.0.0", - "lodash": "^4.17.4", - "micromatch": "^4.0.0", - "p-reduce": "^2.0.0" - }, - "dependencies": { - "@semantic-release/error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", - "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", - "dev": true - }, - "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, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "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 - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "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 - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "p-reduce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", - "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", - "dev": true - } - } - }, - "@semantic-release/github": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-9.0.4.tgz", - "integrity": "sha512-kQCGFAsBErvCR6hzNuzu63cj4erQN2krm9zQlg8vl4j5X0mL0d/Ras0wmL5Gkr1TuSS2lweME7M4J5zvtDDDSA==", - "requires": { - "@octokit/core": "^5.0.0", - "@octokit/plugin-paginate-rest": "^8.0.0", - "@octokit/plugin-retry": "^6.0.0", - "@octokit/plugin-throttling": "^7.0.0", - "@semantic-release/error": "^4.0.0", - "aggregate-error": "^4.0.1", - "debug": "^4.3.4", - "dir-glob": "^3.0.1", - "globby": "^13.1.4", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "issue-parser": "^6.0.0", - "lodash-es": "^4.17.21", - "mime": "^3.0.0", - "p-filter": "^3.0.0", - "url-join": "^5.0.0" - }, - "dependencies": { - "agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "requires": { - "debug": "^4.3.4" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "requires": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - } - }, - "http-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", - "requires": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - } - }, - "https-proxy-agent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz", - "integrity": "sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==", - "requires": { - "agent-base": "^7.0.2", - "debug": "4" - } - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" - } - } - }, - "@semantic-release/npm": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-10.0.4.tgz", - "integrity": "sha512-6R3timIQ7VoL2QWRkc9DG8v74RQtRp7UOe/2KbNaqwJ815qOibAv65bH3RtTEhs4axEaHoZf7HDgFs5opaZ9Jw==", - "requires": { - "@semantic-release/error": "^4.0.0", - "aggregate-error": "^4.0.1", - "execa": "^7.0.0", - "fs-extra": "^11.0.0", - "lodash-es": "^4.17.21", - "nerf-dart": "^1.0.0", - "normalize-url": "^8.0.0", - "npm": "^9.5.0", - "rc": "^1.2.8", - "read-pkg": "^8.0.0", - "registry-auth-token": "^5.0.0", - "semver": "^7.1.2", - "tempy": "^3.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "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==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - } - } - }, - "@semantic-release/release-notes-generator": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-11.0.4.tgz", - "integrity": "sha512-j0Znnwq9IdWTCGzqSlkLv4MpALTsVDZxcVESzJCNN8pK2BYQlYaKsdZ1Ea/+7RlppI3vjhEi33ZKmjSGY1FLKw==", - "requires": { - "conventional-changelog-angular": "^6.0.0", - "conventional-changelog-writer": "^6.0.0", - "conventional-commits-filter": "^3.0.0", - "conventional-commits-parser": "^4.0.0", - "debug": "^4.0.0", - "get-stream": "^7.0.0", - "import-from": "^4.0.0", - "into-stream": "^7.0.0", - "lodash-es": "^4.17.21", - "read-pkg-up": "^10.0.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "get-stream": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-7.0.1.tgz", - "integrity": "sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "@sinonjs/commons": { - "version": "1.8.3", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "8.1.0", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@sinonjs/formatio": { - "version": "3.2.2", - "dev": true, - "requires": { - "@sinonjs/commons": "^1", - "@sinonjs/samsam": "^3.1.0" - }, - "dependencies": { - "@sinonjs/samsam": { - "version": "3.3.3", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.3.0", - "array-from": "^2.1.1", - "lodash": "^4.17.15" - } - }, - "lodash": { - "version": "4.17.21", - "dev": true - } - } - }, - "@sinonjs/samsam": { - "version": "2.1.3", - "dev": true - }, - "@sinonjs/text-encoding": { - "version": "0.7.1", - "dev": true - }, - "@tootallnate/once": { - "version": "1.1.2", - "dev": true - }, - "@ts-morph/common": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.19.0.tgz", - "integrity": "sha512-Unz/WHmd4pGax91rdIKWi51wnVUW11QttMEPpBiBgIewnc9UQIX7UDLxr5vRlqeByXCwhkF6VabSsI0raWcyAQ==", - "dev": true, - "requires": { - "fast-glob": "^3.2.12", - "minimatch": "^7.4.3", - "mkdirp": "^2.1.6", - "path-browserify": "^1.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", - "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "mkdirp": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz", - "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==", - "dev": true - } - } - }, - "@tsconfig/node10": { - "version": "1.0.9", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.3", - "dev": true - }, - "@types/babel__core": { - "version": "7.1.19", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.17.1", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/chai": { - "version": "4.3.1", - "dev": true - }, - "@types/d3-scale": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.3.tgz", - "integrity": "sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==", - "requires": { - "@types/d3-time": "*" - } - }, - "@types/d3-scale-chromatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", - "integrity": "sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw==" - }, - "@types/d3-time": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz", - "integrity": "sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==" - }, - "@types/debug": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", - "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", - "requires": { - "@types/ms": "*" - } - }, - "@types/estree": { - "version": "0.0.39", - "dev": true - }, - "@types/fs-extra": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.2.tgz", - "integrity": "sha512-SvSrYXfWSc7R4eqnOzbQF4TZmfpNSM9FrSWLU3EUnWBuyZqNBOrv1B1JA3byUDPUl9z4Ab3jeZG2eDdySlgNMg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/graceful-fs": { - "version": "4.1.5", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.1.tgz", - "integrity": "sha512-HTLpVXHrY69556ozYkcq47TtQJXpcWAWfkoqz+ZGz2JnmZhzlRjprCIyFnetSy8gpDWwTTGBcRVv1J1I1vBrHw==", - "dev": true, - "requires": { - "jest-diff": "^27.0.0", - "pretty-format": "^27.0.0" - } - }, - "@types/json-schema": { - "version": "7.0.11", - "dev": true - }, - "@types/json5": { - "version": "0.0.29", - "dev": true - }, - "@types/lodash": { - "version": "3.10.2", - "dev": true - }, - "@types/mdast": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.12.tgz", - "integrity": "sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==", - "requires": { - "@types/unist": "^2" - } - }, - "@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 - }, - "@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" - }, - "@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" - }, - "@types/node": { - "version": "13.13.52", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" - }, - "@types/prettier": { - "version": "2.6.3", - "dev": true - }, - "@types/resolve": { - "version": "1.17.1", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/screeps": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@types/screeps/-/screeps-3.3.3.tgz", - "integrity": "sha512-r+ru4iNv8wNaNBWvk2gMXYpG8Ok1GJ8NVV9WBIHa5I+hz2QGttnAus+1whDMIzES8x3yK83Usz+gHqm8ehIW7w==", - "dev": true - }, - "@types/sinon": { - "version": "5.0.7", - "dev": true - }, - "@types/sinon-chai": { - "version": "3.2.8", - "dev": true, - "requires": { - "@types/chai": "*", - "@types/sinon": "*" - } - }, - "@types/stack-utils": { - "version": "2.0.1", - "dev": true - }, - "@types/unist": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.7.tgz", - "integrity": "sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==" - }, - "@types/validator": { - "version": "13.7.17", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.17.tgz", - "integrity": "sha512-aqayTNmeWrZcvnG2MG9eGYI6b7S5fl+yKgPs6bAjOTwPS316R5SxBGKvtSExfyoJU7pIeHJfsHI0Ji41RVMkvQ==", - "dev": true - }, - "@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "4.33.0", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "4.33.0", - "@typescript-eslint/scope-manager": "4.33.0", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ignore": { - "version": "5.2.0", - "dev": true - }, - "ms": { - "version": "2.1.2", - "dev": true - }, - "regexpp": { - "version": "3.2.0", - "dev": true - }, - "semver": { - "version": "7.3.7", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.33.0", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "dependencies": { - "eslint-scope": { - "version": "5.1.1", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "dev": true - } - } - }, - "@typescript-eslint/parser": { - "version": "4.33.0", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "dev": true - } - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.33.0", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" - } - }, - "@typescript-eslint/types": { - "version": "4.33.0", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "dev": true - }, - "semver": { - "version": "7.3.7", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "dev": true - } - } - }, - "@vladfrangu/async_event_emitter": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz", - "integrity": "sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==", - "dev": true - }, - "abab": { - "version": "2.0.6", - "dev": true - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "accumulate-stream": { - "version": "5.0.0", - "dev": true, - "requires": { - "bytes": "^3.1.0", - "ms": "^2.1.3" - }, - "dependencies": { - "ms": { - "version": "2.1.3", - "dev": true - } - } - }, - "acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true - }, - "acorn-globals": { - "version": "6.0.0", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "dev": true - } - } - }, - "acorn-jsx": { - "version": "5.3.2", - "dev": true, - "requires": {} - }, - "acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dev": true, - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - } - } - }, - "acorn-walk": { - "version": "7.2.0", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "dev": true, - "requires": { - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "dev": true - } - } - }, - "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==", - "requires": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "requires": { - "ajv": "^8.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "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 - } - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "dev": true, - "optional": true - }, - "ansi-colors": { - "version": "4.1.3", - "dev": true - }, - "ansi-escapes": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", - "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", - "requires": { - "type-fest": "^3.0.0" - }, - "dependencies": { - "type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==" - } - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "3.2.1", - "requires": { - "color-convert": "^1.9.0" - } - }, - "ansicolors": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", - "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==" - }, - "anymatch": { - "version": "3.1.2", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "apache-crypt": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.6.tgz", - "integrity": "sha512-072WetlM4blL8PREJVeY+WHiUh1R5VNt2HfceGS8aKqttPHcmqE5pkKuXPz/ULmJOFkc8Hw3kfKl6vy7Qka6DA==", - "dev": true, - "requires": { - "unix-crypt-td-js": "^1.1.4" - } - }, - "apache-md5": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.8.tgz", - "integrity": "sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA==", - "dev": true - }, - "arg": { - "version": "4.1.3", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "argv-formatter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", - "integrity": "sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==" - }, - "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 - }, - "array-from": { - "version": "2.1.1", - "dev": true - }, - "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==" - }, - "array-includes": { - "version": "3.1.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - } - }, - "array-union": { - "version": "2.1.0", - "dev": true - }, - "array.prototype.flat": { - "version": "1.3.0", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" - } - }, - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true - }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", - "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", - "dev": true, - "requires": { - "es6-object-assign": "^1.1.0", - "is-nan": "^1.2.1", - "object-is": "^1.0.1", - "util": "^0.12.0" - } - }, - "assertion-error": { - "version": "1.1.0", - "dev": true - }, - "ast-transform": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/ast-transform/-/ast-transform-0.0.0.tgz", - "integrity": "sha512-e/JfLiSoakfmL4wmTGPjv0HpTICVmxwXgYOB8x+mzozHL8v+dSfCbrJ8J8hJ0YBP0XcYu1aLZ6b/3TnxNK3P2A==", - "dev": true, - "requires": { - "escodegen": "~1.2.0", - "esprima": "~1.0.4", - "through": "~2.3.4" - }, - "dependencies": { - "escodegen": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.2.0.tgz", - "integrity": "sha512-yLy3Cc+zAC0WSmoT2fig3J87TpQ8UaZGx8ahCAs9FL8qNbyV7CVyPKS74DG4bsHiL5ew9sxdYx131OkBQMFnvA==", - "dev": true, - "requires": { - "esprima": "~1.0.4", - "estraverse": "~1.5.0", - "esutils": "~1.0.0", - "source-map": "~0.1.30" - } - }, - "esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", - "integrity": "sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA==", - "dev": true - }, - "estraverse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz", - "integrity": "sha512-FpCjJDfmo3vsc/1zKSeqR5k42tcIhxFIlvq+h9j0fO2q/h2uLKyweq7rYJ+0CoVvrGQOxIS5wyBrW/+vF58BUQ==", - "dev": true - }, - "esutils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz", - "integrity": "sha512-x/iYH53X3quDwfHRz4y8rn4XcEwwCJeWsul9pF1zldMbGtgOtMNBEOuYWwB1EQlK2LRa1fev3YAgym/RElp5Cg==", - "dev": true - }, - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", - "dev": true, - "optional": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "ast-types": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.7.8.tgz", - "integrity": "sha512-RIOpVnVlltB6PcBJ5BMLx+H+6JJ/zjDGU0t7f0L6c2M1dqcK92VQopLBlPQ9R80AVXelfqYgjcPLtHtDbNFg0Q==", - "dev": true - }, - "async": { - "version": "3.2.4", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "dev": true - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true - }, - "axios": { - "version": "0.21.4", - "dev": true, - "requires": { - "follow-redirects": "^1.14.0" - } - }, - "babel-jest": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "27.5.1", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", - "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.2", - "semver": "^6.3.1" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", - "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.2", - "core-js-compat": "^3.31.0" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", - "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.2" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "27.5.1", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^27.5.1", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "dev": true - }, - "base32768": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base32768/-/base32768-3.0.1.tgz", - "integrity": "sha512-dNGY49X0IKN1kDl9y/6sii1Vced+f+4uAqOeRz/PshjNdPwSD+ntnHOg/YgDbLSZetp94d/XxGdpfbXDKv8BVQ==" - }, - "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 - }, - "basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bcryptjs": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", - "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", - "dev": true - }, - "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==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "bottleneck": { - "version": "2.19.5", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" - }, - "brace-expansion": { - "version": "1.1.11", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "requires": { - "fill-range": "^7.0.1" - } - }, - "brfs": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brfs/-/brfs-2.0.2.tgz", - "integrity": "sha512-IrFjVtwu4eTJZyu8w/V2gxU7iLTtcHih67sgEdzrhjLBMHp2uYefUBfdM4k2UvcuWMgV7PQDZHSLeNWnLFKWVQ==", - "dev": true, - "requires": { - "quote-stream": "^1.0.1", - "resolve": "^1.1.5", - "static-module": "^3.0.2", - "through2": "^2.0.0" - } - }, - "brotli": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", - "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", - "dev": true, - "requires": { - "base64-js": "^1.1.2" - } - }, - "browser-process-hrtime": { - "version": "1.0.0", - "dev": true - }, - "browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dev": true, - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", - "dev": true - } - } - }, - "browserify-optional": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-optional/-/browserify-optional-1.0.1.tgz", - "integrity": "sha512-VrhjbZ+Ba5mDiSYEuPelekQMfTbhcA2DhLk2VQWqdcCROWeFqlTcXZ7yfRkXCIl8E+g4gINJYJiRB7WEtfomAQ==", - "dev": true, - "requires": { - "ast-transform": "0.0.0", - "ast-types": "^0.7.0", - "browser-resolve": "^1.8.1" - } - }, - "browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - } - }, - "bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "requires": { - "fast-json-stable-stringify": "2.x" - } - }, - "bser": { - "version": "2.1.1", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-equal": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", - "dev": true - }, - "buffer-from": { - "version": "1.1.2", - "dev": true - }, - "bufferutil": { - "version": "4.0.6", - "dev": true, - "optional": true, - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "buildcheck": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz", - "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==", - "dev": true, - "optional": true - }, - "builtin-modules": { - "version": "3.3.0", - "dev": true - }, - "busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "requires": { - "streamsearch": "^1.1.0" - } - }, - "bytes": { - "version": "3.1.2", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==", - "dev": true - }, - "callsites": { - "version": "3.1.0" - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "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==", - "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - } - }, - "caniuse-lite": { - "version": "1.0.30001517", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz", - "integrity": "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==", - "dev": true - }, - "cardinal": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", - "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==", - "requires": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" - } - }, - "chai": { - "version": "4.3.6", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - } - }, - "chalk": { - "version": "2.4.2", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chance": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/chance/-/chance-1.1.9.tgz", - "integrity": "sha512-TfxnA/DcZXRTA4OekA2zL9GH8qscbbl6X0ZqU4tXhGveVY/mXWvEQLt5GwZcYXTEyEFflVtj+pG8nc8EwSm1RQ==", - "dev": true - }, - "char-regex": { - "version": "1.0.2", - "dev": true - }, - "character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==" - }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "dev": true - }, - "check-error": { - "version": "1.0.2", - "dev": true - }, - "cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "dev": true, - "requires": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "dependencies": { - "parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, - "requires": { - "entities": "^4.4.0" - } - } - } - }, - "cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - } - }, - "child-shell": { - "version": "5.0.0", - "dev": true, - "requires": { - "accumulate-stream": "^5.0.0", - "debug": "^4.3.2", - "kind-of": "^6.0.3", - "nanoid": "^3.1.30", - "p-queue": "6.6.2", - "p-timeout": "4.1.0", - "trim-buffer": "^5.0.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "dev": true - } - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "ci-info": { - "version": "3.3.2", - "dev": true - }, - "cjs-module-lexer": { - "version": "1.2.2", - "dev": true - }, - "class-validator": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.0.tgz", - "integrity": "sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==", - "dev": true, - "requires": { - "@types/validator": "^13.7.10", - "libphonenumber-js": "^1.10.14", - "validator": "^13.7.0" - } - }, - "clean-stack": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", - "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", - "requires": { - "escape-string-regexp": "5.0.0" - }, - "dependencies": { - "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==" - } - } - }, - "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, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", - "dev": true - }, - "cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - } - }, - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true - }, - "co": { - "version": "4.6.0", - "dev": true - }, - "code-block-writer": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-12.0.0.tgz", - "integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==", - "dev": true - }, - "collect-v8-coverage": { - "version": "1.0.1", - "dev": true - }, - "color": { - "version": "3.2.1", - "dev": true, - "requires": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - } - }, - "color-convert": { - "version": "1.9.3", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3" - }, - "color-string": { - "version": "1.9.1", - "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "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 - }, - "colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", - "dev": true - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, - "colorspace": { - "version": "1.1.4", - "dev": true, - "requires": { - "color": "^3.1.3", - "text-hex": "1.0.x" - } - }, - "combined-stream": { - "version": "1.0.8", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "dev": true - }, - "comment-parser": { - "version": "1.1.2", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "dev": true - }, - "compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", - "requires": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - } - }, - "concat-map": { - "version": "0.0.1", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - } - }, - "conventional-changelog-angular": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz", - "integrity": "sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==", - "requires": { - "compare-func": "^2.0.0" - } - }, - "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==", - "requires": { - "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" - }, - "dependencies": { - "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==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "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==", - "requires": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.1" - } - }, - "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==", - "requires": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.3.5", - "meow": "^8.1.2", - "split2": "^3.2.2" - } - }, - "convert-source-map": { - "version": "1.8.0", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "dev": true - } - } - }, - "core-js-compat": { - "version": "3.31.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.1.tgz", - "integrity": "sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA==", - "dev": true, - "requires": { - "browserslist": "^4.21.9" - } - }, - "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==" - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "cose-base": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", - "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", - "requires": { - "layout-base": "^1.0.0" - } - }, - "cosmiconfig": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", - "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", - "requires": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" - } - } - } - }, - "cpu-features": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.9.tgz", - "integrity": "sha512-AKjgn2rP2yJyfbepsmLfiYcmtNn/2eUvocUyM/09yB0YDiz39HteK/5/T4Onf0pmdYDMgkBoGvRLvEguzyL7wQ==", - "dev": true, - "optional": true, - "requires": { - "buildcheck": "~0.0.6", - "nan": "^2.17.0" - } - }, - "create-require": { - "version": "1.1.1", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "dev": true - }, - "crypto-js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", - "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==", - "dev": true - }, - "crypto-random-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", - "requires": { - "type-fest": "^1.0.1" - }, - "dependencies": { - "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==" - } - } - }, - "css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true - }, - "cssom": { - "version": "0.4.4", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "dev": true - } - } - }, - "cytoscape": { - "version": "3.25.0", - "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.25.0.tgz", - "integrity": "sha512-7MW3Iz57mCUo6JQCho6CmPBCbTlJr7LzyEtIkutG255HLVd4XuBg2I9BkTZLI/e4HoaOB/BiAzXuQybQ95+r9Q==", - "requires": { - "heap": "^0.2.6", - "lodash": "^4.17.21" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - } - } - }, - "cytoscape-cose-bilkent": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", - "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", - "requires": { - "cose-base": "^1.0.0" - } - }, - "cytoscape-fcose": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", - "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", - "requires": { - "cose-base": "^2.2.0" - }, - "dependencies": { - "cose-base": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", - "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", - "requires": { - "layout-base": "^2.0.0" - } - }, - "layout-base": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", - "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==" - } - } - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "d3": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", - "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==", - "requires": { - "d3-array": "3", - "d3-axis": "3", - "d3-brush": "3", - "d3-chord": "3", - "d3-color": "3", - "d3-contour": "4", - "d3-delaunay": "6", - "d3-dispatch": "3", - "d3-drag": "3", - "d3-dsv": "3", - "d3-ease": "3", - "d3-fetch": "3", - "d3-force": "3", - "d3-format": "3", - "d3-geo": "3", - "d3-hierarchy": "3", - "d3-interpolate": "3", - "d3-path": "3", - "d3-polygon": "3", - "d3-quadtree": "3", - "d3-random": "3", - "d3-scale": "4", - "d3-scale-chromatic": "3", - "d3-selection": "3", - "d3-shape": "3", - "d3-time": "3", - "d3-time-format": "4", - "d3-timer": "3", - "d3-transition": "3", - "d3-zoom": "3" - } - }, - "d3-array": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", - "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", - "requires": { - "internmap": "1 - 2" - } - }, - "d3-axis": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", - "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==" - }, - "d3-brush": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", - "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "3", - "d3-transition": "3" - } - }, - "d3-chord": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", - "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", - "requires": { - "d3-path": "1 - 3" - } - }, - "d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==" - }, - "d3-contour": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", - "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", - "requires": { - "d3-array": "^3.2.0" - } - }, - "d3-delaunay": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", - "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", - "requires": { - "delaunator": "5" - } - }, - "d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==" - }, - "d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - } - }, - "d3-dsv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", - "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", - "requires": { - "commander": "7", - "iconv-lite": "0.6", - "rw": "1" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - }, - "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==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==" - }, - "d3-fetch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", - "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", - "requires": { - "d3-dsv": "1 - 3" - } - }, - "d3-force": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", - "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-quadtree": "1 - 3", - "d3-timer": "1 - 3" - } - }, - "d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==" - }, - "d3-geo": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", - "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", - "requires": { - "d3-array": "2.5.0 - 3" - } - }, - "d3-hierarchy": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", - "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==" - }, - "d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "requires": { - "d3-color": "1 - 3" - } - }, - "d3-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", - "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==" - }, - "d3-polygon": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", - "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==" - }, - "d3-quadtree": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", - "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==" - }, - "d3-random": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", - "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==" - }, - "d3-sankey": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", - "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", - "requires": { - "d3-array": "1 - 2", - "d3-shape": "^1.2.0" - }, - "dependencies": { - "d3-array": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", - "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", - "requires": { - "internmap": "^1.0.0" - } - }, - "d3-path": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", - "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" - }, - "d3-shape": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", - "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", - "requires": { - "d3-path": "1" - } - }, - "internmap": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", - "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" - } - } - }, - "d3-scale": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", - "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", - "requires": { - "d3-array": "2.10.0 - 3", - "d3-format": "1 - 3", - "d3-interpolate": "1.2.0 - 3", - "d3-time": "2.1.1 - 3", - "d3-time-format": "2 - 4" - } - }, - "d3-scale-chromatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", - "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", - "requires": { - "d3-color": "1 - 3", - "d3-interpolate": "1 - 3" - } - }, - "d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==" - }, - "d3-shape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", - "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", - "requires": { - "d3-path": "^3.1.0" - } + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/acorn": { + "version": "7.4.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@eslint/eslintrc/node_modules/espree": { + "version": "7.3.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@foliojs-fork/fontkit": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@foliojs-fork/fontkit/-/fontkit-1.9.1.tgz", + "integrity": "sha512-U589voc2/ROnvx1CyH9aNzOQWJp127JGU1QAylXGQ7LoEAF6hMmahZLQ4eqAcgHUw+uyW4PjtCItq9qudPkK3A==", + "dev": true, + "dependencies": { + "@foliojs-fork/restructure": "^2.0.2", + "brfs": "^2.0.0", + "brotli": "^1.2.0", + "browserify-optional": "^1.0.1", + "clone": "^1.0.4", + "deep-equal": "^1.0.0", + "dfa": "^1.2.0", + "tiny-inflate": "^1.0.2", + "unicode-properties": "^1.2.2", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/@foliojs-fork/linebreak": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@foliojs-fork/linebreak/-/linebreak-1.1.1.tgz", + "integrity": "sha512-pgY/+53GqGQI+mvDiyprvPWgkTlVBS8cxqee03ejm6gKAQNsR1tCYCIvN9FHy7otZajzMqCgPOgC4cHdt4JPig==", + "dev": true, + "dependencies": { + "base64-js": "1.3.1", + "brfs": "^2.0.2", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/@foliojs-fork/linebreak/node_modules/base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true + }, + "node_modules/@foliojs-fork/pdfkit": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@foliojs-fork/pdfkit/-/pdfkit-0.13.0.tgz", + "integrity": "sha512-YXeG1fml9k97YNC9K8e292Pj2JzGt9uOIiBFuQFxHsdQ45BlxW+JU3RQK6JAvXU7kjhjP8rCcYvpk36JLD33sQ==", + "dev": true, + "dependencies": { + "@foliojs-fork/fontkit": "^1.9.1", + "@foliojs-fork/linebreak": "^1.1.1", + "crypto-js": "^4.0.0", + "png-js": "^1.0.0" + } + }, + "node_modules/@foliojs-fork/restructure": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@foliojs-fork/restructure/-/restructure-2.0.2.tgz", + "integrity": "sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA==", + "dev": true + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "dev": true, + "license": "BSD-3-Clause" + }, + "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, + "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, + "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, + "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 + }, + "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, + "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, + "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, + "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/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-try": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@javascript-obfuscator/escodegen": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@javascript-obfuscator/escodegen/-/escodegen-2.3.0.tgz", + "integrity": "sha512-QVXwMIKqYMl3KwtTirYIA6gOCiJ0ZDtptXqAv/8KWLG9uQU2fZqTVy7a/A5RvcoZhbDoFfveTxuGxJ5ibzQtkw==", + "dev": true, + "dependencies": { + "@javascript-obfuscator/estraverse": "^5.3.0", + "esprima": "^4.0.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/@javascript-obfuscator/estraverse": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@javascript-obfuscator/estraverse/-/estraverse-5.4.0.tgz", + "integrity": "sha512-CZFX7UZVN9VopGbjTx4UXaXsi9ewoM1buL0kY7j1ftYdSs7p2spv9opxFjHlQ/QGTgh4UqufYqJJ0WKLml7b6w==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@jest/console": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "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/@jest/console/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/console/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/console/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/ansi-escapes": { + "version": "4.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "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/@jest/core/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/core/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/core/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@jest/core/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/type-fest": { + "version": "0.21.3", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@jest/environment": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "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/@jest/reporters/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/reporters/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/source-map": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "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/@jest/transform/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/transform/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/transform/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "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/@jest/types/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/types/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "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", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@octokit/auth-token": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", + "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/core": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.0.tgz", + "integrity": "sha512-YbAtMWIrbZ9FCXbLwT9wWB8TyLjq9mxpKdgB3dUNxQcIVTf9hJ70gRPwAcqGZdY6WdJPZ0I7jLaaNDCiloGN2A==", + "dependencies": { + "@octokit/auth-token": "^4.0.0", + "@octokit/graphql": "^7.0.0", + "@octokit/request": "^8.0.2", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^11.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/endpoint": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.0.tgz", + "integrity": "sha512-szrQhiqJ88gghWY2Htt8MqUDO6++E/EIXqJ2ZEp5ma3uGS46o7LZAzSLt49myB7rT+Hfw5Y6gO3LmOxGzHijAQ==", + "dependencies": { + "@octokit/types": "^11.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/endpoint/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@octokit/graphql": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.1.tgz", + "integrity": "sha512-T5S3oZ1JOE58gom6MIcrgwZXzTaxRnxBso58xhozxHpOqSTgDS6YNeEUvZ/kRvXgPrRz/KHnZhtb7jUMRi9E6w==", + "dependencies": { + "@octokit/request": "^8.0.1", + "@octokit/types": "^11.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", + "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-8.0.0.tgz", + "integrity": "sha512-2xZ+baZWUg+qudVXnnvXz7qfrTmDeYPCzangBVq/1gXxii/OiS//4shJp9dnCCvj1x+JAm9ji1Egwm1BA47lPQ==", + "dependencies": { + "@octokit/types": "^11.0.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": ">=5" + } + }, + "node_modules/@octokit/plugin-retry": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-6.0.0.tgz", + "integrity": "sha512-a1/A4A+PB1QoAHQfLJxGHhLfSAT03bR1jJz3GgQJZvty2ozawFWs93MiBQXO7SL2YbO7CIq0Goj4qLOBj8JeMQ==", + "dependencies": { + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^11.0.0", + "bottleneck": "^2.15.3" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": ">=5" + } + }, + "node_modules/@octokit/plugin-throttling": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-7.0.0.tgz", + "integrity": "sha512-KL2k/d0uANc8XqP5S64YcNFCudR3F5AaKO39XWdUtlJIjT9Ni79ekWJ6Kj5xvAw87udkOMEPcVf9xEge2+ahew==", + "dependencies": { + "@octokit/types": "^11.0.0", + "bottleneck": "^2.15.3" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "^5.0.0" + } + }, + "node_modules/@octokit/request": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.1.1.tgz", + "integrity": "sha512-8N+tdUz4aCqQmXl8FpHYfKG9GelDFd7XGVzyN8rc6WxVlYcfpHECnuRkgquzz+WzvHTK62co5di8gSXnzASZPQ==", + "dependencies": { + "@octokit/endpoint": "^9.0.0", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^11.1.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/request-error": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.0.tgz", + "integrity": "sha512-1ue0DH0Lif5iEqT52+Rf/hf0RmGO9NWFjrzmrkArpG9trFfDM/efx00BJHdLGuro4BR/gECxCU2Twf5OKrRFsQ==", + "dependencies": { + "@octokit/types": "^11.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/request/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@octokit/types": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-11.1.0.tgz", + "integrity": "sha512-Fz0+7GyLm/bHt8fwEqgvRBWwIV1S6wRRyq+V6exRKLVWaKGsuy6H9QFYeBVDV7rK6fO3XwHgQOPxv+cLj2zpXQ==", + "dependencies": { + "@octokit/openapi-types": "^18.0.0" + } + }, + "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, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/npm-conf": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", + "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-20.0.0.tgz", + "integrity": "sha512-5K0g5W2Ol8hAcTHqcTBHiA7M58tfmYi1o9KxeJuuRNpGaTa5iLjcyemBitCBcKXaHamOBBEH2dGom6v6Unmqjg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "commondir": "^1.0.1", + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^2.38.3" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "13.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^2.42.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@sapphire/async-queue": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", + "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==", + "dev": true, + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@sapphire/shapeshift": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.2.tgz", + "integrity": "sha512-YRbCXWy969oGIdqR/wha62eX8GNHsvyYi0Rfd4rNW6tSVVa8p0ELiMEuOH/k8rgtvRoM+EMV7Csqz77YdwiDpA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@sapphire/shapeshift/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/@sapphire/snowflake": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz", + "integrity": "sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==", + "dev": true, + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@semantic-release/changelog": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@semantic-release/changelog/-/changelog-6.0.3.tgz", + "integrity": "sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==", + "dev": true, + "dependencies": { + "@semantic-release/error": "^3.0.0", + "aggregate-error": "^3.0.0", + "fs-extra": "^11.0.0", + "lodash": "^4.17.4" + }, + "engines": { + "node": ">=14.17" + }, + "peerDependencies": { + "semantic-release": ">=18.0.0" + } + }, + "node_modules/@semantic-release/changelog/node_modules/@semantic-release/error": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", + "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", + "dev": true, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@semantic-release/changelog/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, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@semantic-release/changelog/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/@semantic-release/changelog/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@semantic-release/changelog/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/@semantic-release/changelog/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@semantic-release/changelog/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/@semantic-release/changelog/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@semantic-release/commit-analyzer": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz", + "integrity": "sha512-E+dr6L+xIHZkX4zNMe6Rnwg4YQrWNXK+rNsvwOPpdFppvZO1olE2fIgWhv89TkQErygevbjsZFSIxp+u6w2e5g==", + "dev": true, + "dependencies": { + "conventional-changelog-angular": "^5.0.0", + "conventional-commits-filter": "^2.0.0", + "conventional-commits-parser": "^3.2.3", + "debug": "^4.0.0", + "import-from": "^4.0.0", + "lodash": "^4.17.4", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=14.17" + }, + "peerDependencies": { + "semantic-release": ">=18.0.0-beta.1" + } + }, + "node_modules/@semantic-release/commit-analyzer/node_modules/conventional-changelog-angular": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@semantic-release/commit-analyzer/node_modules/conventional-commits-filter": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", + "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "dev": true, + "dependencies": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@semantic-release/commit-analyzer/node_modules/conventional-commits-parser": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", + "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", + "dev": true, + "dependencies": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@semantic-release/commit-analyzer/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@semantic-release/commit-analyzer/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/@semantic-release/commit-analyzer/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@semantic-release/commit-analyzer/node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/@semantic-release/error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", + "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==", + "engines": { + "node": ">=18" + } + }, + "node_modules/@semantic-release/git": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@semantic-release/git/-/git-10.0.1.tgz", + "integrity": "sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==", + "dev": true, + "dependencies": { + "@semantic-release/error": "^3.0.0", + "aggregate-error": "^3.0.0", + "debug": "^4.0.0", + "dir-glob": "^3.0.0", + "execa": "^5.0.0", + "lodash": "^4.17.4", + "micromatch": "^4.0.0", + "p-reduce": "^2.0.0" + }, + "engines": { + "node": ">=14.17" + }, + "peerDependencies": { + "semantic-release": ">=18.0.0" + } + }, + "node_modules/@semantic-release/git/node_modules/@semantic-release/error": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", + "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", + "dev": true, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@semantic-release/git/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, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@semantic-release/git/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/@semantic-release/git/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@semantic-release/git/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "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/@semantic-release/git/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/@semantic-release/git/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/@semantic-release/git/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@semantic-release/git/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@semantic-release/git/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@semantic-release/git/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/git/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/@semantic-release/github": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-9.0.4.tgz", + "integrity": "sha512-kQCGFAsBErvCR6hzNuzu63cj4erQN2krm9zQlg8vl4j5X0mL0d/Ras0wmL5Gkr1TuSS2lweME7M4J5zvtDDDSA==", + "dependencies": { + "@octokit/core": "^5.0.0", + "@octokit/plugin-paginate-rest": "^8.0.0", + "@octokit/plugin-retry": "^6.0.0", + "@octokit/plugin-throttling": "^7.0.0", + "@semantic-release/error": "^4.0.0", + "aggregate-error": "^4.0.1", + "debug": "^4.3.4", + "dir-glob": "^3.0.1", + "globby": "^13.1.4", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "issue-parser": "^6.0.0", + "lodash-es": "^4.17.21", + "mime": "^3.0.0", + "p-filter": "^3.0.0", + "url-join": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "semantic-release": ">=20.1.0" + } + }, + "node_modules/@semantic-release/github/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@semantic-release/github/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@semantic-release/github/node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "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/@semantic-release/github/node_modules/http-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@semantic-release/github/node_modules/https-proxy-agent": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz", + "integrity": "sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@semantic-release/github/node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@semantic-release/github/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/@semantic-release/github/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/npm": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-10.0.4.tgz", + "integrity": "sha512-6R3timIQ7VoL2QWRkc9DG8v74RQtRp7UOe/2KbNaqwJ815qOibAv65bH3RtTEhs4axEaHoZf7HDgFs5opaZ9Jw==", + "dependencies": { + "@semantic-release/error": "^4.0.0", + "aggregate-error": "^4.0.1", + "execa": "^7.0.0", + "fs-extra": "^11.0.0", + "lodash-es": "^4.17.21", + "nerf-dart": "^1.0.0", + "normalize-url": "^8.0.0", + "npm": "^9.5.0", + "rc": "^1.2.8", + "read-pkg": "^8.0.0", + "registry-auth-token": "^5.0.0", + "semver": "^7.1.2", + "tempy": "^3.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "semantic-release": ">=20.1.0" + } + }, + "node_modules/@semantic-release/npm/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@semantic-release/npm/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@semantic-release/npm/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@semantic-release/npm/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@semantic-release/release-notes-generator": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-11.0.4.tgz", + "integrity": "sha512-j0Znnwq9IdWTCGzqSlkLv4MpALTsVDZxcVESzJCNN8pK2BYQlYaKsdZ1Ea/+7RlppI3vjhEi33ZKmjSGY1FLKw==", + "dependencies": { + "conventional-changelog-angular": "^6.0.0", + "conventional-changelog-writer": "^6.0.0", + "conventional-commits-filter": "^3.0.0", + "conventional-commits-parser": "^4.0.0", + "debug": "^4.0.0", + "get-stream": "^7.0.0", + "import-from": "^4.0.0", + "into-stream": "^7.0.0", + "lodash-es": "^4.17.21", + "read-pkg-up": "^10.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "semantic-release": ">=20.1.0" + } + }, + "node_modules/@semantic-release/release-notes-generator/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@semantic-release/release-notes-generator/node_modules/get-stream": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-7.0.1.tgz", + "integrity": "sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/release-notes-generator/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@sinonjs/formatio": { + "version": "3.2.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1", + "@sinonjs/samsam": "^3.1.0" + } + }, + "node_modules/@sinonjs/formatio/node_modules/@sinonjs/samsam": { + "version": "3.3.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.3.0", + "array-from": "^2.1.1", + "lodash": "^4.17.15" + } + }, + "node_modules/@sinonjs/formatio/node_modules/lodash": { + "version": "4.17.21", + "dev": true, + "license": "MIT" + }, + "node_modules/@sinonjs/samsam": { + "version": "2.1.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@sinonjs/text-encoding": { + "version": "0.7.1", + "dev": true, + "license": "(Unlicense OR Apache-2.0)" + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@ts-morph/common": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.19.0.tgz", + "integrity": "sha512-Unz/WHmd4pGax91rdIKWi51wnVUW11QttMEPpBiBgIewnc9UQIX7UDLxr5vRlqeByXCwhkF6VabSsI0raWcyAQ==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.12", + "minimatch": "^7.4.3", + "mkdirp": "^2.1.6", + "path-browserify": "^1.0.1" + } + }, + "node_modules/@ts-morph/common/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@ts-morph/common/node_modules/minimatch": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", + "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@ts-morph/common/node_modules/mkdirp": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz", + "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==", + "dev": true, + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/babel__core": { + "version": "7.1.19", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.17.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.3.0" + } + }, + "node_modules/@types/chai": { + "version": "4.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.3.tgz", + "integrity": "sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-scale-chromatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", + "integrity": "sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw==" + }, + "node_modules/@types/d3-time": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz", + "integrity": "sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==" + }, + "node_modules/@types/debug": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", + "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.39", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/fs-extra": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.2.tgz", + "integrity": "sha512-SvSrYXfWSc7R4eqnOzbQF4TZmfpNSM9FrSWLU3EUnWBuyZqNBOrv1B1JA3byUDPUl9z4Ab3jeZG2eDdySlgNMg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.1.tgz", + "integrity": "sha512-HTLpVXHrY69556ozYkcq47TtQJXpcWAWfkoqz+ZGz2JnmZhzlRjprCIyFnetSy8gpDWwTTGBcRVv1J1I1vBrHw==", + "dev": true, + "dependencies": { + "jest-diff": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "3.10.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.12.tgz", + "integrity": "sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==", + "dependencies": { + "@types/unist": "^2" + } + }, + "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 + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" + }, + "node_modules/@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" + }, + "node_modules/@types/node": { + "version": "13.13.52", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" + }, + "node_modules/@types/prettier": { + "version": "2.6.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/screeps": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@types/screeps/-/screeps-3.3.3.tgz", + "integrity": "sha512-r+ru4iNv8wNaNBWvk2gMXYpG8Ok1GJ8NVV9WBIHa5I+hz2QGttnAus+1whDMIzES8x3yK83Usz+gHqm8ehIW7w==", + "dev": true + }, + "node_modules/@types/sinon": { + "version": "5.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/sinon-chai": { + "version": "3.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "*", + "@types/sinon": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.7.tgz", + "integrity": "sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==" + }, + "node_modules/@types/validator": { + "version": "13.7.17", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.17.tgz", + "integrity": "sha512-aqayTNmeWrZcvnG2MG9eGYI6b7S5fl+yKgPs6bAjOTwPS316R5SxBGKvtSExfyoJU7pIeHJfsHI0Ji41RVMkvQ==", + "dev": true + }, + "node_modules/@types/ws": { + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "16.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "4.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^4.0.0", + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/regexpp": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "4.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-scope": { + "version": "5.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-utils": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "4.33.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "debug": "^4.3.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "4.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "4.33.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "4.33.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "4.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/@vladfrangu/async_event_emitter": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz", + "integrity": "sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==", + "dev": true, + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/abab": { + "version": "2.0.6", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accumulate-stream": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "^3.1.0", + "ms": "^2.1.3" + } + }, + "node_modules/accumulate-stream/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-node/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "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==", + "dependencies": { + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "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/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "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 + }, + "node_modules/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.4.2" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", + "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", + "dependencies": { + "type-fest": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansicolors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==" + }, + "node_modules/anymatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/apache-crypt": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.6.tgz", + "integrity": "sha512-072WetlM4blL8PREJVeY+WHiUh1R5VNt2HfceGS8aKqttPHcmqE5pkKuXPz/ULmJOFkc8Hw3kfKl6vy7Qka6DA==", + "dev": true, + "dependencies": { + "unix-crypt-td-js": "^1.1.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/apache-md5": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.8.tgz", + "integrity": "sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/argv-formatter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", + "integrity": "sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==" + }, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-from": { + "version": "2.1.1", + "dev": true, + "license": "MIT" + }, + "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==" + }, + "node_modules/array-includes": { + "version": "3.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", + "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", + "dev": true, + "dependencies": { + "es6-object-assign": "^1.1.0", + "is-nan": "^1.2.1", + "object-is": "^1.0.1", + "util": "^0.12.0" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/ast-transform": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/ast-transform/-/ast-transform-0.0.0.tgz", + "integrity": "sha512-e/JfLiSoakfmL4wmTGPjv0HpTICVmxwXgYOB8x+mzozHL8v+dSfCbrJ8J8hJ0YBP0XcYu1aLZ6b/3TnxNK3P2A==", + "dev": true, + "dependencies": { + "escodegen": "~1.2.0", + "esprima": "~1.0.4", + "through": "~2.3.4" + } + }, + "node_modules/ast-transform/node_modules/escodegen": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.2.0.tgz", + "integrity": "sha512-yLy3Cc+zAC0WSmoT2fig3J87TpQ8UaZGx8ahCAs9FL8qNbyV7CVyPKS74DG4bsHiL5ew9sxdYx131OkBQMFnvA==", + "dev": true, + "dependencies": { + "esprima": "~1.0.4", + "estraverse": "~1.5.0", + "esutils": "~1.0.0" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=0.4.0" + }, + "optionalDependencies": { + "source-map": "~0.1.30" + } + }, + "node_modules/ast-transform/node_modules/esprima": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ast-transform/node_modules/estraverse": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz", + "integrity": "sha512-FpCjJDfmo3vsc/1zKSeqR5k42tcIhxFIlvq+h9j0fO2q/h2uLKyweq7rYJ+0CoVvrGQOxIS5wyBrW/+vF58BUQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ast-transform/node_modules/esutils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz", + "integrity": "sha512-x/iYH53X3quDwfHRz4y8rn4XcEwwCJeWsul9pF1zldMbGtgOtMNBEOuYWwB1EQlK2LRa1fev3YAgym/RElp5Cg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ast-transform/node_modules/source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", + "dev": true, + "optional": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ast-types": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.7.8.tgz", + "integrity": "sha512-RIOpVnVlltB6PcBJ5BMLx+H+6JJ/zjDGU0t7f0L6c2M1dqcK92VQopLBlPQ9R80AVXelfqYgjcPLtHtDbNFg0Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/async": { + "version": "3.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "0.21.4", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/babel-jest": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "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/babel-jest/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/babel-jest/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-jest/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-jest/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", + "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", + "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.2", + "core-js-compat": "^3.31.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", + "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/base32768": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base32768/-/base32768-3.0.1.tgz", + "integrity": "sha512-dNGY49X0IKN1kDl9y/6sii1Vced+f+4uAqOeRz/PshjNdPwSD+ntnHOg/YgDbLSZetp94d/XxGdpfbXDKv8BVQ==" + }, + "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" + } + ] + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dev": true, + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", + "dev": true + }, + "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==" + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/bottleneck": { + "version": "2.19.5", + "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", + "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brfs": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brfs/-/brfs-2.0.2.tgz", + "integrity": "sha512-IrFjVtwu4eTJZyu8w/V2gxU7iLTtcHih67sgEdzrhjLBMHp2uYefUBfdM4k2UvcuWMgV7PQDZHSLeNWnLFKWVQ==", + "dev": true, + "dependencies": { + "quote-stream": "^1.0.1", + "resolve": "^1.1.5", + "static-module": "^3.0.2", + "through2": "^2.0.0" + }, + "bin": { + "brfs": "bin/cmd.js" + } + }, + "node_modules/brotli": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", + "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", + "dev": true, + "dependencies": { + "base64-js": "^1.1.2" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "dependencies": { + "resolve": "1.1.7" + } + }, + "node_modules/browser-resolve/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", + "dev": true + }, + "node_modules/browserify-optional": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-optional/-/browserify-optional-1.0.1.tgz", + "integrity": "sha512-VrhjbZ+Ba5mDiSYEuPelekQMfTbhcA2DhLk2VQWqdcCROWeFqlTcXZ7yfRkXCIl8E+g4gINJYJiRB7WEtfomAQ==", + "dev": true, + "dependencies": { + "ast-transform": "0.0.0", + "ast-types": "^0.7.0", + "browser-resolve": "^1.8.1" + } + }, + "node_modules/browserslist": { + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "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" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "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" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/bufferutil": { + "version": "4.0.6", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/buildcheck": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz", + "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dev": true, + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "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==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/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==", + "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/caniuse-lite": { + "version": "1.0.30001517", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz", + "integrity": "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==", + "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" + } + ] + }, + "node_modules/cardinal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", + "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==", + "dependencies": { + "ansicolors": "~0.3.2", + "redeyed": "~2.1.0" + }, + "bin": { + "cdl": "bin/cdl.js" + } + }, + "node_modules/chai": { + "version": "4.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chance": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/chance/-/chance-1.1.9.tgz", + "integrity": "sha512-TfxnA/DcZXRTA4OekA2zL9GH8qscbbl6X0ZqU4tXhGveVY/mXWvEQLt5GwZcYXTEyEFflVtj+pG8nc8EwSm1RQ==", + "dev": true + }, + "node_modules/char-regex": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/check-error": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "dev": true, + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cheerio/node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/child-shell": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "accumulate-stream": "^5.0.0", + "debug": "^4.3.2", + "kind-of": "^6.0.3", + "nanoid": "^3.1.30", + "p-queue": "6.6.2", + "p-timeout": "4.1.0", + "trim-buffer": "^5.0.0" + } + }, + "node_modules/child-shell/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/child-shell/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/ci-info": { + "version": "3.3.2", + "dev": true, + "license": "MIT" + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.2", + "dev": true, + "license": "MIT" + }, + "node_modules/class-validator": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.0.tgz", + "integrity": "sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==", + "dev": true, + "dependencies": { + "@types/validator": "^13.7.10", + "libphonenumber-js": "^1.10.14", + "validator": "^13.7.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==", + "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==", + "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, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", + "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/co": { + "version": "4.6.0", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/code-block-writer": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-12.0.0.tgz", + "integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==", + "dev": true + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/color": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "dev": true, + "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, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/colorspace": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "dev": true, + "license": "MIT" + }, + "node_modules/comment-parser": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "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==", + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/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, + "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/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/conventional-changelog-angular": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz", + "integrity": "sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==", + "dependencies": { + "compare-func": "^2.0.0" + }, + "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==", + "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/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/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==", + "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==", + "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/convert-source-map": { + "version": "1.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/convert-source-map/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/core-js-compat": { + "version": "3.31.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.1.tgz", + "integrity": "sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.9" + }, + "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==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cose-base": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", + "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", + "dependencies": { + "layout-base": "^1.0.0" + } + }, + "node_modules/cosmiconfig": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/cpu-features": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.9.tgz", + "integrity": "sha512-AKjgn2rP2yJyfbepsmLfiYcmtNn/2eUvocUyM/09yB0YDiz39HteK/5/T4Onf0pmdYDMgkBoGvRLvEguzyL7wQ==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "buildcheck": "~0.0.6", + "nan": "^2.17.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==", + "dev": true + }, + "node_modules/crypto-random-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + "dependencies": { + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/crypto-random-string/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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "dev": true, + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "dev": true, + "license": "MIT" + }, + "node_modules/cytoscape": { + "version": "3.25.0", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.25.0.tgz", + "integrity": "sha512-7MW3Iz57mCUo6JQCho6CmPBCbTlJr7LzyEtIkutG255HLVd4XuBg2I9BkTZLI/e4HoaOB/BiAzXuQybQ95+r9Q==", + "dependencies": { + "heap": "^0.2.6", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/cytoscape-cose-bilkent": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", + "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", + "dependencies": { + "cose-base": "^1.0.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", + "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", + "dependencies": { + "cose-base": "^2.2.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/cose-base": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", + "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", + "dependencies": { + "layout-base": "^2.0.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/layout-base": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", + "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==" + }, + "node_modules/cytoscape/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/d3": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", + "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==", + "dependencies": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "dependencies": { + "d3-path": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "dependencies": { + "d3-array": "^3.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "dependencies": { + "delaunator": "5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "dependencies": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/d3-dsv/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "dependencies": { + "d3-dsv": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", + "dependencies": { + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-sankey": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", + "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", + "dependencies": { + "d3-array": "1 - 2", + "d3-shape": "^1.2.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "dependencies": { + "internmap": "^1.0.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" + }, + "node_modules/d3-sankey/node_modules/d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/d3-sankey/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale-chromatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", + "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dagre-d3-es": { + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.10.tgz", + "integrity": "sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==", + "dependencies": { + "d3": "^7.8.2", + "lodash-es": "^4.17.21" + } + }, + "node_modules/dash-ast": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", + "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==", + "dev": true + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/data-urls": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "engines": { + "node": "*" + } + }, + "node_modules/dayjs": { + "version": "1.11.9", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", + "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==" + }, + "node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decache": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.2.tgz", + "integrity": "sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==", + "dev": true, + "dependencies": { + "callsite": "^1.0.0" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "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/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-eql": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delaunator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", + "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", + "dependencies": { + "robust-predicates": "^3.0.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/dfa": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", + "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", + "dev": true + }, + "node_modules/diff": { + "version": "3.5.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/discord-api-types": { + "version": "0.37.50", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.50.tgz", + "integrity": "sha512-X4CDiMnDbA3s3RaUXWXmgAIbY1uxab3fqe3qwzg5XutR3wjqi7M3IkgQbsIBzpqBN2YWr/Qdv7JrFRqSgb4TFg==", + "dev": true + }, + "node_modules/discord.js": { + "version": "14.13.0", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.13.0.tgz", + "integrity": "sha512-Kufdvg7fpyTEwANGy9x7i4od4yu5c6gVddGi5CKm4Y5a6sF0VBODObI3o0Bh7TGCj0LfNT8Qp8z04wnLFzgnbA==", + "dev": true, + "dependencies": { + "@discordjs/builders": "^1.6.5", + "@discordjs/collection": "^1.5.3", + "@discordjs/formatters": "^0.3.2", + "@discordjs/rest": "^2.0.1", + "@discordjs/util": "^1.0.1", + "@discordjs/ws": "^1.0.1", + "@sapphire/snowflake": "^3.5.1", + "@types/ws": "^8.5.5", + "discord-api-types": "0.37.50", + "fast-deep-equal": "^3.1.3", + "lodash.snakecase": "^4.1.1", + "tslib": "^2.6.1", + "undici": "5.22.1", + "ws": "^8.13.0" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/discord.js/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/discord.js/node_modules/ws": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", + "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true }, - "d3-time": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", - "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", - "requires": { - "d3-array": "2 - 3" - } + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/docker-modem": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-5.0.3.tgz", + "integrity": "sha512-89zhop5YVhcPEt5FpUFGr3cDyceGhq/F9J+ZndQ4KfqNvfbJpPMfgeixFgUj5OjCYAboElqODxY5Z1EBsSa6sg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "readable-stream": "^3.5.0", + "split-ca": "^1.0.1", + "ssh2": "^1.15.0" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/docker-modem/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/docker-modem/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/dockerode": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-4.0.2.tgz", + "integrity": "sha512-9wM1BVpVMFr2Pw3eJNXrYYt6DT9k0xMcsSCjtPvyQ+xa1iPg/Mo3T/gUcwI0B2cczqCeCYRPF8yFYDwtFXT0+w==", + "dev": true, + "dependencies": { + "@balena/dockerignore": "^1.0.2", + "docker-modem": "^5.0.3", + "tar-fs": "~2.0.1" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domexception": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/dompurify": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.5.tgz", + "integrity": "sha512-F9e6wPGtY+8KNMRAVfxeCOHU0/NPWMSENNq4pQctuXRqqdEPW7q3CrLbR5Nse044WwacyjHGOMlvNsBe1y6z9A==" + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot": { + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/dot/-/dot-2.0.0-beta.1.tgz", + "integrity": "sha512-kxM7fSnNQTXOmaeGuBSXM8O3fEsBb7XSDBllkGbRwa0lJSJTxxDE/4eSNGLKZUmlFw0f1vJ5qSV2BljrgQtgIA==", + "dev": true + }, + "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==", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/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==", + "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/duplexer2/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==" + }, + "node_modules/duplexer2/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==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "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 + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.473", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.473.tgz", + "integrity": "sha512-aVfC8+440vGfl06l8HKKn8/PD5jRfSnLkTTD65EFvU46igbpQRri1gxSzW9/+TeUlwYzrXk1sw867T96zlyECA==", + "dev": true + }, + "node_modules/elkjs": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.8.2.tgz", + "integrity": "sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==" + }, + "node_modules/emittery": { + "version": "0.8.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/enabled": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-ci": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-9.1.1.tgz", + "integrity": "sha512-Im2yEWeF4b2RAMAaWvGioXk6m0UNaIjD8hj28j2ij5ldnIFrDQT0+pzDvpbRkcjurhXhf/AsBKv8P2rtmGi9Aw==", + "dependencies": { + "execa": "^7.0.0", + "java-properties": "^1.0.2" + }, + "engines": { + "node": "^16.14 || >=18" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.20.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "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/es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "node_modules/es6-object-assign": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", + "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", + "dev": true + }, + "node_modules/es6-set": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", + "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "es6-iterator": "~2.0.3", + "es6-symbol": "^3.1.3", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/es6-set/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "2.0.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint": { + "version": "7.32.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-module-utils": { + "version": "2.7.3", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-import": { + "version": "2.26.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-jest": { + "version": "24.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/experimental-utils": "^4.0.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": ">= 4", + "eslint": ">=5" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-jsdoc": { + "version": "31.6.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "comment-parser": "1.1.2", + "debug": "^4.3.1", + "jsdoctypeparser": "^9.0.0", + "lodash": "^4.17.20", + "regextras": "^0.7.1", + "semver": "^7.3.4", + "spdx-expression-parse": "^3.0.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0" + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/lodash": { + "version": "4.17.21", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-jsdoc/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-jsdoc/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "3.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "eslint": ">=5.0.0", + "prettier": ">=1.13.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-screeps": { + "version": "2.1.0", + "dev": true, + "license": "GPL-3.0", + "peerDependencies": { + "eslint": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/@babel/code-frame": { + "version": "7.12.11", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/eslint/node_modules/acorn": { + "version": "7.4.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/astral-regex": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "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/eslint/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "5.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint/node_modules/eslint-utils": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/espree": { + "version": "7.3.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/eslint/node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/file-entry-cache": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/eslint/node_modules/flat-cache": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/eslint/node_modules/flatted": { + "version": "3.2.5", + "dev": true, + "license": "ISC" + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/levn": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/optionator": { + "version": "0.9.1", + "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.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/prelude-ls": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/regexpp": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/eslint/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/slice-ansi": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/eslint/node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/table": { + "version": "6.8.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/eslint/node_modules/table/node_modules/ajv": { + "version": "8.11.0", + "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/eslint/node_modules/type-check": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-is-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz", + "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==", + "dev": true + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "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==", + "dev": true, + "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", + "dev": true, + "license": "MIT" + }, + "node_modules/execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/execa/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/fancy-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-2.0.0.tgz", + "integrity": "sha512-9CzxZbACXMUXW13tS0tI8XsGGmxWzO2DmYrGuBJOJ8k8q2K7hwfJA5qHjuPPe8wtsco33YR9wc+Rlr5wYFvhSA==", + "dev": true, + "dependencies": { + "color-support": "^1.1.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.2.0", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "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-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-xml-parser": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.7.tgz", + "integrity": "sha512-J8r6BriSLO1uj2miOk1NW0YVm8AGOOu3Si2HQp/cSmo6EA4m3fcwu2WKjJ4RK9wMLBtg69y1kS8baDiQBR41Ig==", + "dev": true, + "funding": [ + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fastestsmallesttextencoderdecoder-encodeinto": { + "version": "1.0.22", + "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder-encodeinto/-/fastestsmallesttextencoderdecoder-encodeinto-1.0.22.tgz", + "integrity": "sha512-csOz3cwJjZY75QcPHnY+v6cKWeofYCmhtLVYaurjcRn5vaNXoYe1Leo1ZkiZIxZp796+J5Z+TtmeMbbfYBfiiQ==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fecha": { + "version": "4.2.3", + "dev": true, + "license": "MIT" + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/figures": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", + "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", + "dependencies": { + "escape-string-regexp": "^5.0.0", + "is-unicode-supported": "^1.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/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==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/find-versions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz", + "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==", + "dependencies": { + "semver-regex": "^4.0.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fn.name": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/follow-redirects": { + "version": "1.15.1", + "dev": true, + "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, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "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.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.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==", + "dev": true + }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/from2/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==", + "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/from2/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==" + }, + "node_modules/from2/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==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "dev": 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.1", + "license": "MIT" + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-assigned-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", + "dev": true + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-port": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-6.1.2.tgz", + "integrity": "sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-port-please": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.1.1.tgz", + "integrity": "sha512-3UBAyM3u4ZBVYDsxOQfJDxEa6XTbpBDrOjp4mf7ExFRt5BKs/QywQQiJsh2B+hxcZLSapWqCRvElUe8DnKcFHA==", + "dev": true + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/git-log-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.0.tgz", + "integrity": "sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA==", + "dependencies": { + "argv-formatter": "~1.0.0", + "spawn-error-forwarder": "~1.0.0", + "split2": "~1.0.0", + "stream-combiner2": "~1.1.1", + "through2": "~2.0.0", + "traverse": "~0.6.6" + } + }, + "node_modules/git-log-parser/node_modules/split2": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", + "integrity": "sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==", + "dependencies": { + "through2": "~2.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "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/glob-parent": { + "version": "5.1.2", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "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/globby/node_modules/ignore": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "license": "ISC" + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "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==", + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" + }, + "node_modules/hook-std": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-3.0.0.tgz", + "integrity": "sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/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==", + "engines": { + "node": ">=12" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-auth": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-4.1.9.tgz", + "integrity": "sha512-kvPYxNGc9EKGTXvOMnTBQw2RZfuiSihK/mLw/a4pbtRueTE45S55Lw/3k5CktIf7Ak0veMKEIteDj4YkNmCzmQ==", + "dev": true, + "dependencies": { + "apache-crypt": "^1.1.2", + "apache-md5": "^1.0.6", + "bcryptjs": "^2.4.3", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/http-auth-connect": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/http-auth-connect/-/http-auth-connect-1.0.6.tgz", + "integrity": "sha512-yaO0QSCPqGCjPrl3qEEHjJP+lwZ6gMpXLuCBE06eWwcXomkI5TARtu0kxf9teFuBj6iaV3Ybr15jaWUvbzNzHw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/http-auth/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/http-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/human-signals": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/i18next": { + "version": "22.5.1", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.5.1.tgz", + "integrity": "sha512-8TGPgM3pAD+VRsMtUMNknRz3kzqwp/gPALrWMsDnmC1mKqJwpWyooQRLMcbTwq8z8YwSmuj+ZYvc+xCuEpkssA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://locize.com" + }, + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + } + ], + "dependencies": { + "@babel/runtime": "^7.20.6" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "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" + } + ] + }, + "node_modules/ignore": { + "version": "4.0.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "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-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz", + "integrity": "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==", + "engines": { + "node": ">=12.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "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", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "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==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "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==" + }, + "node_modules/inside": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/inside/-/inside-1.0.0.tgz", + "integrity": "sha512-tvFwvS4g7q6iDot/4FjtWFHwwpv6TVvEumbTdLQilk1F07ojakbXPQcvf3kMAlyNDpzKRzn+d33O3RuXODuxZQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/interpret": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/into-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-7.0.0.tgz", + "integrity": "sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==", + "dependencies": { + "from2": "^2.3.0", + "p-is-promise": "^3.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inversify": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/inversify/-/inversify-6.0.1.tgz", + "integrity": "sha512-B3ex30927698TJENHR++8FfEaJGqoWOgI6ZY5Ht/nLUsFCwHn6akbwtnUAPCgUepAnTpe2qHxhDNjoKLyz6rgQ==", + "dev": true + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": 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-arrayish": { + "version": "0.2.1", + "license": "MIT" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "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-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-builtin-module": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "builtin-modules": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-callable": { + "version": "1.2.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.9.0", + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "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", + "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", + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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, + "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", + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "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==", + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", + "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "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-shared-array-buffer": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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==", + "dependencies": { + "text-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "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==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/issue-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-6.0.0.tgz", + "integrity": "sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==", + "dependencies": { + "lodash.capitalize": "^4.2.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.uniqby": "^4.7.0" + }, + "engines": { + "node": ">=10.13" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/istanbul-reports": { + "version": "3.1.4", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.2.tgz", + "integrity": "sha512-mgNtVv4vUuaKA97yxUHoA3+FkuhtxkjdXEWOyB/N76fjy0FjezEt34oy3epBtvCvS+7DyKwqCFWx/oJLV5+kCg==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/java-properties": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", + "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/javascript-obfuscator": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/javascript-obfuscator/-/javascript-obfuscator-4.0.2.tgz", + "integrity": "sha512-MRBQREvjEwqEGdwNGG7yp0te5uZBFzrPZdxEs4rDYkPpHhhOQu+E0IhSXP7bO9dIUWXZU0Kkdohsuws525aVGQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@javascript-obfuscator/escodegen": "2.3.0", + "@javascript-obfuscator/estraverse": "5.4.0", + "acorn": "8.8.2", + "assert": "2.0.0", + "chalk": "4.1.2", + "chance": "1.1.9", + "class-validator": "0.14.0", + "commander": "10.0.0", + "eslint-scope": "7.1.1", + "eslint-visitor-keys": "3.3.0", + "fast-deep-equal": "3.1.3", + "inversify": "6.0.1", + "js-string-escape": "1.0.1", + "md5": "2.3.0", + "mkdirp": "2.1.3", + "multimatch": "5.0.0", + "opencollective-postinstall": "2.0.3", + "process": "0.11.10", + "reflect-metadata": "0.1.13", + "source-map-support": "0.5.21", + "string-template": "1.0.0", + "stringz": "2.1.0", + "tslib": "2.5.0" + }, + "bin": { + "javascript-obfuscator": "bin/javascript-obfuscator" + }, + "engines": { + "node": "^12.22.0 || ^14.0.0 || ^16.0.0 || ^17.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/javascript-obfuscator" + } + }, + "node_modules/javascript-obfuscator/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/javascript-obfuscator/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/javascript-obfuscator/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/javascript-obfuscator/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/javascript-obfuscator/node_modules/commander": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", + "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/javascript-obfuscator/node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/javascript-obfuscator/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/javascript-obfuscator/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/javascript-obfuscator/node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "dev": true + }, + "node_modules/jest": { + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.1.0.tgz", + "integrity": "sha512-pSQDVwRSwb109Ss13lcMtdfS9r8/w2Zz8+mTUA9VORD66GflCdl8nUFCqM96geOD2EBwWCNURrNAfQsLIDNBdg==", + "dev": true, + "dependencies": { + "@jest/core": "^27.1.0", + "import-local": "^3.0.2", + "jest-cli": "^27.1.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/execa": { + "version": "5.1.1", + "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/jest-changed-files/node_modules/mimic-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-changed-files/node_modules/npm-run-path": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/onetime": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-circus": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "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/jest-circus/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-circus/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-circus/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "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/jest-config/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-config/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-config/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-config/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "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/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-docblock": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "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/jest-each/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-each/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-each/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-jasmine2/node_modules/chalk": { + "version": "4.1.2", + "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/jest-jasmine2/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-jasmine2/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-leak-detector": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "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/jest-matcher-utils/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-matcher-utils/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "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/jest-message-util/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-message-util/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "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/jest-resolve/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-resolve/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-resolve/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "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/jest-runner/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runner/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-runner/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "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/jest-runtime/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runtime/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-runtime/node_modules/execa": { + "version": "5.1.1", + "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/jest-runtime/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/mimic-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-runtime/node_modules/npm-run-path": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/onetime": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-runtime/node_modules/strip-bom": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-serializer": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "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/jest-snapshot/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-snapshot/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "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/jest-util/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-util/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "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/jest-validate/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-validate/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/node_modules/ansi-escapes": { + "version": "4.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "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/jest-watcher/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watcher/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-watcher/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/type-fest": { + "version": "0.21.3", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "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/jest/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest/node_modules/chalk": { + "version": "4.1.2", + "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/jest/node_modules/cliui": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/jest/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/jest-cli": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/yargs": { + "version": "16.2.0", + "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/js-string-escape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", + "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdoctypeparser": { + "version": "9.0.0", + "dev": true, + "license": "MIT", + "bin": { + "jsdoctypeparser": "bin/jsdoctypeparser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsdom": { + "version": "16.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/form-data": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsdom/node_modules/tough-cookie": { + "version": "4.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-beautify": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/json-beautify/-/json-beautify-1.1.1.tgz", + "integrity": "sha512-17j+Hk2lado0xqKtUcyAjK0AtoHnPSIgktWRsEXgdFQFG9UnaGw6CHa0J7xsvulxRpFl6CrkDFHght1p5ZJc4A==", + "dev": true, + "bin": { + "json-beautify": "bin/json-beautify" + } + }, + "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==" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "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==" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "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==", + "engines": [ + "node >= 0.2.0" + ] + }, + "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==", + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/just-extend": { + "version": "4.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/khroma": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz", + "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==" + }, + "node_modules/kind-of": { + "version": "6.0.3", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/kuler": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/layout-base": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==" + }, + "node_modules/leven": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/libphonenumber-js": { + "version": "1.10.37", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.37.tgz", + "integrity": "sha512-Z10PCaOCiAxbUxLyR31DNeeNugSVP6iv/m7UrSKS5JHziEMApJtgku4e9Q69pzzSC9LnQiM09sqsGf2ticZnMw==", + "dev": true + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "license": "MIT" + }, + "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==", + "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/load-json-file/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==", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/locate-path": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lodash": { + "version": "3.10.1", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash.capitalize": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", + "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==" + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "dev": true, + "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==" + }, + "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==" + }, + "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==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.uniqby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", + "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==" + }, + "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, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logform": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@colors/colors": "1.5.0", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + } + }, + "node_modules/logform/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/loglevel": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", + "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" + } + }, + "node_modules/loglevel-plugin-prefix": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", + "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", + "dev": true + }, + "node_modules/lolex": { + "version": "2.7.5", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/loupe": { + "version": "2.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "node_modules/macos-release": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.1.tgz", + "integrity": "sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/magic-bytes.js": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.0.17.tgz", + "integrity": "sha512-PEDpPzHpKe5AxkVmQrNPHFRvPN2ELkkj3eIg4IZO9JdhBiAY3aU53lgYXs9j8B7lpza+QiW0UA4QHCH7EskSeg==", + "dev": true + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "dev": true, + "license": "ISC" + }, + "node_modules/makeerror": { + "version": "1.0.12", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "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==", + "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==", + "dev": true + }, + "node_modules/marked": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-5.1.2.tgz", + "integrity": "sha512-ahRPGXJpjMjwSOlBoTMZAK7ATXkli5qCPxZ21TG44rx1KEo44bii4ekgTDQPNRQ4Kh7JMb9Ub1PVk1NxRSsorg==", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 16" + } + }, + "node_modules/marked-terminal": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-5.2.0.tgz", + "integrity": "sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA==", + "dependencies": { + "ansi-escapes": "^6.2.0", + "cardinal": "^2.1.1", + "chalk": "^5.2.0", + "cli-table3": "^0.6.3", + "node-emoji": "^1.11.0", + "supports-hyperlinks": "^2.3.0" + }, + "engines": { + "node": ">=14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "marked": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/marked-terminal/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dev": true, + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", + "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", + "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "dependencies": { + "@types/mdast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "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/meow/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/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==" + }, + "node_modules/meow/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/meow/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/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==", + "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/meow/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==", + "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/meow/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/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==", + "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/meow/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/meow/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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-source-map": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", + "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", + "dev": true, + "dependencies": { + "source-map": "^0.5.6" + } + }, + "node_modules/merge-source-map/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/mermaid": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.3.0.tgz", + "integrity": "sha512-H5quxuQjwXC8M1WuuzhAp2TdqGg74t5skfDBrNKJ7dt3z8Wprl5S6h9VJsRhoBUTSs1TMtHEdplLhCqXleZZLw==", + "dependencies": { + "@braintree/sanitize-url": "^6.0.2", + "@types/d3-scale": "^4.0.3", + "@types/d3-scale-chromatic": "^3.0.0", + "cytoscape": "^3.23.0", + "cytoscape-cose-bilkent": "^4.1.0", + "cytoscape-fcose": "^2.1.0", + "d3": "^7.4.0", + "d3-sankey": "^0.12.3", + "dagre-d3-es": "7.0.10", + "dayjs": "^1.11.7", + "dompurify": "3.0.5", + "elkjs": "^0.8.2", + "khroma": "^2.0.0", + "lodash-es": "^4.17.21", + "mdast-util-from-markdown": "^1.3.0", + "non-layered-tidy-tree-layout": "^2.0.2", + "stylis": "^4.1.3", + "ts-dedent": "^2.2.0", + "uuid": "^9.0.0", + "web-worker": "^1.2.0" + } + }, + "node_modules/micromark": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", + "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", + "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-factory-destination": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", + "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", + "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", + "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", + "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", + "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", + "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", + "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", + "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", + "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", + "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", + "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", + "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-html-tag-name": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", + "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", + "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", + "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", + "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", + "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", + "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/micromark/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "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==", + "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==", + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/minipass": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz", + "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.3.tgz", + "integrity": "sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw==", + "dev": true, + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "node_modules/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dev": true, + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "dev": true, + "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, + "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/nan": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", + "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", + "dev": true, + "optional": true + }, + "node_modules/nanoid": { + "version": "3.3.4", + "dev": true, + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/ncp": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "bin": { + "ncp": "bin/ncp" + } + }, + "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, + "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==" + }, + "node_modules/nerf-dart": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", + "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==" + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, + "node_modules/nise": { + "version": "1.5.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/formatio": "^3.2.1", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "lolex": "^5.0.1", + "path-to-regexp": "^1.7.0" + } + }, + "node_modules/nise/node_modules/isarray": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/nise/node_modules/lolex": { + "version": "5.1.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/nise/node_modules/path-to-regexp": { + "version": "1.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "isarray": "0.0.1" + } + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/node-emoji/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "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-fetch/node_modules/tr46": { + "version": "0.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.4.0", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/node-powershell": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "child-shell": "^5.0.0", + "is-wsl": "^2.2.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, + "node_modules/non-layered-tidy-tree-layout": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", + "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" + }, + "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==", + "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-package-data/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==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", + "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm": { + "version": "9.8.1", + "resolved": "https://registry.npmjs.org/npm/-/npm-9.8.1.tgz", + "integrity": "sha512-AfDvThQzsIXhYgk9zhbk5R+lh811lKkLAeQMMhSypf1BM7zUafeIIBzMzespeuVEJ0+LvY36oRQYf7IKLzU3rw==", + "bundleDependencies": [ + "@isaacs/string-locale-compare", + "@npmcli/arborist", + "@npmcli/config", + "@npmcli/fs", + "@npmcli/map-workspaces", + "@npmcli/package-json", + "@npmcli/promise-spawn", + "@npmcli/run-script", + "abbrev", + "archy", + "cacache", + "chalk", + "ci-info", + "cli-columns", + "cli-table3", + "columnify", + "fastest-levenshtein", + "fs-minipass", + "glob", + "graceful-fs", + "hosted-git-info", + "ini", + "init-package-json", + "is-cidr", + "json-parse-even-better-errors", + "libnpmaccess", + "libnpmdiff", + "libnpmexec", + "libnpmfund", + "libnpmhook", + "libnpmorg", + "libnpmpack", + "libnpmpublish", + "libnpmsearch", + "libnpmteam", + "libnpmversion", + "make-fetch-happen", + "minimatch", + "minipass", + "minipass-pipeline", + "ms", + "node-gyp", + "nopt", + "npm-audit-report", + "npm-install-checks", + "npm-package-arg", + "npm-pick-manifest", + "npm-profile", + "npm-registry-fetch", + "npm-user-validate", + "npmlog", + "p-map", + "pacote", + "parse-conflict-json", + "proc-log", + "qrcode-terminal", + "read", + "semver", + "sigstore", + "ssri", + "supports-color", + "tar", + "text-table", + "tiny-relative-date", + "treeverse", + "validate-npm-package-name", + "which", + "write-file-atomic" + ], + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^6.3.0", + "@npmcli/config": "^6.2.1", + "@npmcli/fs": "^3.1.0", + "@npmcli/map-workspaces": "^3.0.4", + "@npmcli/package-json": "^4.0.1", + "@npmcli/promise-spawn": "^6.0.2", + "@npmcli/run-script": "^6.0.2", + "abbrev": "^2.0.0", + "archy": "~1.0.0", + "cacache": "^17.1.3", + "chalk": "^5.3.0", + "ci-info": "^3.8.0", + "cli-columns": "^4.0.0", + "cli-table3": "^0.6.3", + "columnify": "^1.6.0", + "fastest-levenshtein": "^1.0.16", + "fs-minipass": "^3.0.2", + "glob": "^10.2.7", + "graceful-fs": "^4.2.11", + "hosted-git-info": "^6.1.1", + "ini": "^4.1.1", + "init-package-json": "^5.0.0", + "is-cidr": "^4.0.2", + "json-parse-even-better-errors": "^3.0.0", + "libnpmaccess": "^7.0.2", + "libnpmdiff": "^5.0.19", + "libnpmexec": "^6.0.3", + "libnpmfund": "^4.0.19", + "libnpmhook": "^9.0.3", + "libnpmorg": "^5.0.4", + "libnpmpack": "^5.0.19", + "libnpmpublish": "^7.5.0", + "libnpmsearch": "^6.0.2", + "libnpmteam": "^5.0.3", + "libnpmversion": "^4.0.2", + "make-fetch-happen": "^11.1.1", + "minimatch": "^9.0.3", + "minipass": "^5.0.0", + "minipass-pipeline": "^1.2.4", + "ms": "^2.1.2", + "node-gyp": "^9.4.0", + "nopt": "^7.2.0", + "npm-audit-report": "^5.0.0", + "npm-install-checks": "^6.1.1", + "npm-package-arg": "^10.1.0", + "npm-pick-manifest": "^8.0.1", + "npm-profile": "^7.0.1", + "npm-registry-fetch": "^14.0.5", + "npm-user-validate": "^2.0.0", + "npmlog": "^7.0.1", + "p-map": "^4.0.0", + "pacote": "^15.2.0", + "parse-conflict-json": "^3.0.1", + "proc-log": "^3.0.0", + "qrcode-terminal": "^0.12.0", + "read": "^2.1.0", + "semver": "^7.5.4", + "sigstore": "^1.7.0", + "ssri": "^10.0.4", + "supports-color": "^9.4.0", + "tar": "^6.1.15", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "treeverse": "^3.0.0", + "validate-npm-package-name": "^5.0.0", + "which": "^3.0.1", + "write-file-atomic": "^5.0.1" + }, + "bin": { + "npm": "bin/npm-cli.js", + "npx": "bin/npx-cli.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/@colors/colors": { + "version": "1.5.0", + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui": { + "version": "8.0.2", + "inBundle": 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/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "inBundle": 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/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/@npmcli/arborist": { + "version": "6.3.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^3.1.0", + "@npmcli/installed-package-contents": "^2.0.2", + "@npmcli/map-workspaces": "^3.0.2", + "@npmcli/metavuln-calculator": "^5.0.0", + "@npmcli/name-from-folder": "^2.0.0", + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^4.0.0", + "@npmcli/query": "^3.0.0", + "@npmcli/run-script": "^6.0.0", + "bin-links": "^4.0.1", + "cacache": "^17.0.4", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^6.1.1", + "json-parse-even-better-errors": "^3.0.0", + "json-stringify-nice": "^1.1.4", + "minimatch": "^9.0.0", + "nopt": "^7.0.0", + "npm-install-checks": "^6.0.0", + "npm-package-arg": "^10.1.0", + "npm-pick-manifest": "^8.0.1", + "npm-registry-fetch": "^14.0.3", + "npmlog": "^7.0.1", + "pacote": "^15.0.8", + "parse-conflict-json": "^3.0.0", + "proc-log": "^3.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.2", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^10.0.1", + "treeverse": "^3.0.0", + "walk-up-path": "^3.0.1" + }, + "bin": { + "arborist": "bin/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/config": { + "version": "6.2.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/map-workspaces": "^3.0.2", + "ci-info": "^3.8.0", + "ini": "^4.1.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.5", + "walk-up-path": "^3.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/disparity-colors": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "ansi-styles": "^4.3.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/fs": { + "version": "3.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/git": { + "version": "4.1.0", + "inBundle": 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/npm/node_modules/@npmcli/installed-package-contents": { + "version": "2.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "lib/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/map-workspaces": { + "version": "3.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/name-from-folder": "^2.0.0", + "glob": "^10.2.2", + "minimatch": "^9.0.0", + "read-package-json-fast": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { + "version": "5.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cacache": "^17.0.0", + "json-parse-even-better-errors": "^3.0.0", + "pacote": "^15.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/name-from-folder": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/package-json": { + "version": "4.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^4.1.0", + "glob": "^10.2.2", + "hosted-git-info": "^6.1.1", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "proc-log": "^3.0.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/promise-spawn": { + "version": "6.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/query": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/run-script": { + "version": "6.0.2", + "inBundle": 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/npm/node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/npm/node_modules/@sigstore/protobuf-specs": { + "version": "0.1.0", + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@sigstore/tuf": { + "version": "1.0.2", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.1.0", + "tuf-js": "^1.1.7" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@tootallnate/once": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm/node_modules/@tufjs/canonical-json": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@tufjs/models": { + "version": "1.0.4", + "inBundle": 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/npm/node_modules/abbrev": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/abort-controller": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/npm/node_modules/agent-base": { + "version": "6.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/npm/node_modules/agentkeepalive": { + "version": "4.3.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/npm/node_modules/aggregate-error": { + "version": "3.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/ansi-regex": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/ansi-styles": { + "version": "4.3.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm/node_modules/aproba": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/archy": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/are-we-there-yet": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^4.1.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/balanced-match": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/bin-links": { + "version": "4.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cmd-shim": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "read-cmd-shim": "^4.0.0", + "write-file-atomic": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/binary-extensions": { + "version": "2.2.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/brace-expansion": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/npm/node_modules/buffer": { + "version": "6.0.3", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/npm/node_modules/builtins": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/npm/node_modules/cacache": { + "version": "17.1.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "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/node_modules/chalk": { + "version": "5.3.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/npm/node_modules/chownr": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/ci-info": { + "version": "3.8.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/cidr-regex": { + "version": "3.1.1", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "ip-regex": "^4.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/clean-stack": { + "version": "2.2.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/npm/node_modules/cli-columns": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm/node_modules/cli-table3": { + "version": "0.6.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/npm/node_modules/clone": { + "version": "1.0.4", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/npm/node_modules/cmd-shim": { + "version": "6.0.1", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/color-convert": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/npm/node_modules/color-name": { + "version": "1.1.4", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/color-support": { + "version": "1.1.3", + "inBundle": true, + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/npm/node_modules/columnify": { + "version": "1.6.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/npm/node_modules/common-ancestor-path": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/concat-map": { + "version": "0.0.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/console-control-strings": { + "version": "1.1.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/cross-spawn": { + "version": "7.0.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/cssesc": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm/node_modules/debug": { + "version": "4.3.4", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/npm/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/defaults": { + "version": "1.0.4", + "inBundle": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/delegates": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/depd": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/npm/node_modules/diff": { + "version": "5.1.0", + "inBundle": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/npm/node_modules/eastasianwidth": { + "version": "0.2.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/emoji-regex": { + "version": "8.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/encoding": { + "version": "0.1.13", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/npm/node_modules/env-paths": { + "version": "2.2.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/npm/node_modules/err-code": { + "version": "2.0.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/event-target-shim": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/npm/node_modules/events": { + "version": "3.3.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/npm/node_modules/exponential-backoff": { + "version": "3.1.1", + "inBundle": true, + "license": "Apache-2.0" + }, + "node_modules/npm/node_modules/fastest-levenshtein": { + "version": "1.0.16", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/npm/node_modules/foreground-child": { + "version": "3.1.1", + "inBundle": 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/npm/node_modules/fs-minipass": { + "version": "3.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/fs.realpath": { + "version": "1.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/function-bind": { + "version": "1.1.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/gauge": { + "version": "5.0.1", + "inBundle": 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": "^4.0.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/glob": { + "version": "10.2.7", + "inBundle": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/graceful-fs": { + "version": "4.2.11", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/has": { + "version": "1.0.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/npm/node_modules/has-unicode": { + "version": "2.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/hosted-git-info": { + "version": "6.1.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/http-cache-semantics": { + "version": "4.1.1", + "inBundle": true, + "license": "BSD-2-Clause" + }, + "node_modules/npm/node_modules/http-proxy-agent": { + "version": "5.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/npm/node_modules/https-proxy-agent": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/npm/node_modules/humanize-ms": { + "version": "1.2.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/npm/node_modules/iconv-lite": { + "version": "0.6.3", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/ieee754": { + "version": "1.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "BSD-3-Clause" + }, + "node_modules/npm/node_modules/ignore-walk": { + "version": "6.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/imurmurhash": { + "version": "0.1.4", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/npm/node_modules/indent-string": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/inflight": { + "version": "1.0.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/npm/node_modules/inherits": { + "version": "2.0.4", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/ini": { + "version": "4.1.1", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/init-package-json": { + "version": "5.0.0", + "inBundle": 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/npm/node_modules/ip": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/ip-regex": { + "version": "4.3.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/is-cidr": { + "version": "4.0.2", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "cidr-regex": "^3.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/is-core-module": { + "version": "2.12.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/npm/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/is-lambda": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/isexe": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/jackspeak": { + "version": "2.2.1", + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/npm/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/json-stringify-nice": { + "version": "1.1.4", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/jsonparse": { + "version": "1.3.1", + "engines": [ + "node >= 0.2.0" + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff": { + "version": "6.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff-apply": { + "version": "5.5.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/libnpmaccess": { + "version": "7.0.2", + "inBundle": 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/npm/node_modules/libnpmdiff": { + "version": "5.0.19", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^6.3.0", + "@npmcli/disparity-colors": "^3.0.0", + "@npmcli/installed-package-contents": "^2.0.2", + "binary-extensions": "^2.2.0", + "diff": "^5.1.0", + "minimatch": "^9.0.0", + "npm-package-arg": "^10.1.0", + "pacote": "^15.0.8", + "tar": "^6.1.13" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmexec": { + "version": "6.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^6.3.0", + "@npmcli/run-script": "^6.0.0", + "ci-info": "^3.7.1", + "npm-package-arg": "^10.1.0", + "npmlog": "^7.0.1", + "pacote": "^15.0.8", + "proc-log": "^3.0.0", + "read": "^2.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "walk-up-path": "^3.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmfund": { + "version": "4.0.19", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^6.3.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmhook": { + "version": "9.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmorg": { + "version": "5.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmpack": { + "version": "5.0.19", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^6.3.0", + "@npmcli/run-script": "^6.0.0", + "npm-package-arg": "^10.1.0", + "pacote": "^15.0.8" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmpublish": { + "version": "7.5.0", + "inBundle": 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/npm/node_modules/libnpmsearch": { + "version": "6.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^14.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmteam": { + "version": "5.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmversion": { + "version": "4.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^4.0.1", + "@npmcli/run-script": "^6.0.0", + "json-parse-even-better-errors": "^3.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/lru-cache": { + "version": "7.18.3", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/npm/node_modules/make-fetch-happen": { + "version": "11.1.1", + "inBundle": 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/node_modules/minimatch": { + "version": "9.0.3", + "inBundle": 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/node_modules/minipass": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-collect": { + "version": "1.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-fetch": { + "version": "3.0.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^5.0.0", + "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/node_modules/minipass-flush": { + "version": "1.0.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-json-stream": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/npm/node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-pipeline": { + "version": "1.2.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-sized": { + "version": "1.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minizlib": { + "version": "2.1.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/mkdirp": { + "version": "1.0.4", + "inBundle": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/ms": { + "version": "2.1.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/mute-stream": { + "version": "1.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/negotiator": { + "version": "0.6.3", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/npm/node_modules/node-gyp": { + "version": "9.4.0", + "inBundle": 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": "^11.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/npm/node_modules/node-gyp/node_modules/abbrev": { + "version": "1.1.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/node-gyp/node_modules/are-we-there-yet": { + "version": "3.0.1", + "inBundle": 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/npm/node_modules/node-gyp/node_modules/brace-expansion": { + "version": "1.1.11", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/gauge": { + "version": "4.0.4", + "inBundle": 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/npm/node_modules/node-gyp/node_modules/glob": { + "version": "7.2.3", + "inBundle": 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/npm/node_modules/node-gyp/node_modules/minimatch": { + "version": "3.1.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/nopt": { + "version": "6.0.0", + "inBundle": 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/npm/node_modules/node-gyp/node_modules/npmlog": { + "version": "6.0.2", + "inBundle": 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/npm/node_modules/node-gyp/node_modules/readable-stream": { + "version": "3.6.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/signal-exit": { + "version": "3.0.7", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/node-gyp/node_modules/which": { + "version": "2.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/nopt": { + "version": "7.2.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/normalize-package-data": { + "version": "5.0.0", + "inBundle": 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/npm/node_modules/npm-audit-report": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-bundled": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-install-checks": { + "version": "6.1.1", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-package-arg": { + "version": "10.1.0", + "inBundle": 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/node_modules/npm-packlist": { + "version": "7.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^6.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-pick-manifest": { + "version": "8.0.1", + "inBundle": 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/node_modules/npm-profile": { + "version": "7.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-registry-fetch": { + "version": "14.0.5", + "inBundle": 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/node_modules/npm-user-validate": { + "version": "2.0.0", + "inBundle": true, + "license": "BSD-2-Clause", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npmlog": { + "version": "7.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^4.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^5.0.0", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/once": { + "version": "1.4.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/npm/node_modules/p-map": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/pacote": { + "version": "15.2.0", + "inBundle": 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/npm/node_modules/parse-conflict-json": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/path-is-absolute": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/path-key": { + "version": "3.1.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/path-scurry": { + "version": "1.9.2", + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^9.1.1", + "minipass": "^5.0.0 || ^6.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/path-scurry/node_modules/lru-cache": { + "version": "9.1.1", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/npm/node_modules/postcss-selector-parser": { + "version": "6.0.13", + "inBundle": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm/node_modules/proc-log": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/process": { + "version": "0.11.10", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/npm/node_modules/promise-all-reject-late": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/promise-call-limit": { + "version": "1.0.2", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/promise-inflight": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/promise-retry": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/promzard": { + "version": "1.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "read": "^2.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/qrcode-terminal": { + "version": "0.12.0", + "inBundle": true, + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/npm/node_modules/read": { + "version": "2.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "mute-stream": "~1.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/read-cmd-shim": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/read-package-json": { + "version": "6.0.4", + "inBundle": 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/npm/node_modules/read-package-json-fast": { + "version": "3.0.2", + "inBundle": 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/npm/node_modules/readable-stream": { + "version": "4.4.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/retry": { + "version": "0.12.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm/node_modules/rimraf": { + "version": "3.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/npm/node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "inBundle": 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/npm/node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/npm/node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/safer-buffer": { + "version": "2.1.2", + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/npm/node_modules/semver": { + "version": "7.5.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/set-blocking": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/shebang-command": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/shebang-regex": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/signal-exit": { + "version": "4.0.2", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/sigstore": { + "version": "1.7.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.1.0", + "@sigstore/tuf": "^1.0.1", + "make-fetch-happen": "^11.0.1" + }, + "bin": { + "sigstore": "bin/sigstore.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/smart-buffer": { + "version": "4.2.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/npm/node_modules/socks": { + "version": "2.7.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/npm/node_modules/socks-proxy-agent": { + "version": "7.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm/node_modules/spdx-correct": { + "version": "3.2.0", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-exceptions": { + "version": "2.3.0", + "inBundle": true, + "license": "CC-BY-3.0" + }, + "node_modules/npm/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-license-ids": { + "version": "3.0.13", + "inBundle": true, + "license": "CC0-1.0" + }, + "node_modules/npm/node_modules/ssri": { + "version": "10.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/string_decoder": { + "version": "1.3.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/npm/node_modules/string-width": { + "version": "4.2.3", + "inBundle": 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/npm/node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "inBundle": 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/npm/node_modules/strip-ansi": { + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/supports-color": { + "version": "9.4.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/npm/node_modules/tar": { + "version": "6.1.15", + "inBundle": true, + "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" + } + }, + "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/text-table": { + "version": "0.2.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/tiny-relative-date": { + "version": "1.3.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/treeverse": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/tuf-js": { + "version": "1.1.7", + "inBundle": 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/npm/node_modules/unique-filename": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/unique-slug": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/util-deprecate": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/validate-npm-package-license": { + "version": "3.0.4", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/npm/node_modules/validate-npm-package-name": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/walk-up-path": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/wcwidth": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/npm/node_modules/which": { + "version": "3.0.1", + "inBundle": 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/npm/node_modules/wide-align": { + "version": "1.1.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/npm/node_modules/wrap-ansi": { + "version": "8.1.0", + "inBundle": 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/npm/node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "inBundle": 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/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "inBundle": 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/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrappy": { + "version": "1.0.2", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/write-file-atomic": { + "version": "5.0.1", + "inBundle": 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/npm/node_modules/yallist": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "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/opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", + "dev": true, + "bin": { + "opencollective-postinstall": "index.js" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "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, + "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/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-name": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz", + "integrity": "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==", + "dev": true, + "dependencies": { + "macos-release": "^2.5.0", + "windows-release": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-each-series": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz", + "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==", + "engines": { + "node": ">=12" + }, + "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==", + "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", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-is-promise": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", + "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-limit": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-locate": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "dependencies": { + "aggregate-error": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "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-queue/node_modules/p-timeout": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-reduce": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", + "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/p-try": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "dev": true + }, + "node_modules/parent-module": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dev": true, + "dependencies": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pastebin-api": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/pastebin-api/-/pastebin-api-5.1.6.tgz", + "integrity": "sha512-FI2ZeXLxroI2tuRVd5LI7eNmiANFxDOdlhXxSMqtOXTJn1KSt2UC8kglhndUOOPt6p9XPVnuS7XGW/KbiBbbzw==", + "dev": true, + "dependencies": { + "fast-xml-parser": "^4.1.3", + "undici": "^5.21.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "node_modules/path-exists": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", + "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "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==", + "dev": true, + "dependencies": { + "through": "~2.3" + } + }, + "node_modules/pdfjs-dist": { + "version": "2.12.313", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.12.313.tgz", + "integrity": "sha512-1x6iXO4Qnv6Eb+YFdN5JdUzt4pAkxSp3aLAYPX93eQCyg/m7QFzXVWJHJVtoW48CI8HCXju4dSkhQZwoheL5mA==", + "dev": true, + "peerDependencies": { + "worker-loader": "^3.0.8" + }, + "peerDependenciesMeta": { + "worker-loader": { + "optional": true + } + } + }, + "node_modules/pdfmake": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/pdfmake/-/pdfmake-0.2.7.tgz", + "integrity": "sha512-ClLpgx30H5G3EDvRW1MrA1Xih6YxEaSgIVFrOyBMgAAt62V+hxsyWAi6JNP7u1Fc5JKYAbpb4RRVw8Rhvmz5cQ==", + "dev": true, + "dependencies": { + "@foliojs-fork/linebreak": "^1.1.1", + "@foliojs-fork/pdfkit": "^0.13.0", + "iconv-lite": "^0.6.3", + "xmldoc": "^1.1.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/pdfmake/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, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/pirates": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-conf": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", + "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", + "dependencies": { + "find-up": "^2.0.0", + "load-json-file": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "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", + "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", + "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", + "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", + "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", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/png-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz", + "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==", + "dev": true + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.7.1", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.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==" + }, + "node_modules/progress": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" + }, + "node_modules/proxy-middleware": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", + "integrity": "sha512-EGCG8SeoIRVMhsqHQUdDigB2i7qU7fCsWASwn54+nPutYO8n4q6EiwMzyfWlC+dzRFExP+kvcnDFdBDHoZBU7Q==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/psl": { + "version": "1.8.0", + "dev": true, + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "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": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "engines": { + "node": ">=8" + } + }, + "node_modules/quote-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", + "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==", + "dev": true, + "dependencies": { + "buffer-equal": "0.0.1", + "minimist": "^1.1.3", + "through2": "^2.0.0" + }, + "bin": { + "quote-stream": "bin/cmd.js" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/read-pkg": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-8.0.0.tgz", + "integrity": "sha512-Ajb9oSjxXBw0YyOiwtQ2dKbAA/vMnUPnY63XcCk+mXo0BwIdQEMgZLZiMWGttQHcUhUgbK0mH85ethMPKXxziw==", + "dependencies": { + "@types/normalize-package-data": "^2.4.1", + "normalize-package-data": "^5.0.0", + "parse-json": "^7.0.0", + "type-fest": "^3.8.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-10.0.0.tgz", + "integrity": "sha512-jgmKiS//w2Zs+YbX039CorlkOp8FIVbSAN8r8GJHDsGlmNPXo+VeHkqAwCiQVTTx5/LwLZTcEw59z3DvcLbr0g==", + "dependencies": { + "find-up": "^6.3.0", + "read-pkg": "^8.0.0", + "type-fest": "^3.12.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-pkg/node_modules/lines-and-columns": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/read-pkg/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==", + "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-pkg/node_modules/parse-json": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.0.0.tgz", + "integrity": "sha512-kP+TQYAzAiVnzOlWOe0diD6L35s9bJh0SCn95PIbZFKrOYuIRQsQkeWEYxzVDuHTt9V9YqvYCJ2Qo4z9wdfZPw==", + "dependencies": { + "@babel/code-frame": "^7.21.4", + "error-ex": "^1.3.2", + "json-parse-even-better-errors": "^3.0.0", + "lines-and-columns": "^2.0.3", + "type-fest": "^3.8.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "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==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/redent/node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/redeyed": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", + "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==", + "dependencies": { + "esprima": "~4.0.0" + } + }, + "node_modules/reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "dev": true + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regextras": { + "version": "0.7.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.1.14" + } + }, + "node_modules/registry-auth-token": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", + "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", + "dependencies": { + "@pnpm/npm-conf": "^2.1.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": 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, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.9.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", + "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", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "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, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "2.6.3", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" + }, + "node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-clear": { + "version": "2.0.7", + "dev": true, + "license": "ISC", + "dependencies": { + "rimraf": "^2.6.2" + } + }, + "node_modules/rollup-plugin-copy": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-copy/-/rollup-plugin-copy-3.4.0.tgz", + "integrity": "sha512-rGUmYYsYsceRJRqLVlE9FivJMxJ7X6jDlP79fmFkL8sJs7VVMSVyA2yfyL+PGyO/vJs4A87hwhgVfz61njI+uQ==", + "dev": true, + "dependencies": { + "@types/fs-extra": "^8.0.1", + "colorette": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "10.0.1", + "is-plain-object": "^3.0.0" + }, + "engines": { + "node": ">=8.3" + } + }, + "node_modules/rollup-plugin-copy/node_modules/globby": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", + "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/rollup-plugin-copy/node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/rollup-plugin-screeps-world": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/rollup-plugin-screeps-world/-/rollup-plugin-screeps-world-1.0.4.tgz", + "integrity": "sha512-+NB/KH8kuOjaenOySZVrPnRU5O/ny48otYYyI/Flg5tww59XIA95JZbmgnoN8J8GbjmDk+D5s+RV4YSK9r2ucw==", + "dev": true, + "dependencies": { + "git-rev-sync": "^3.0.2", + "screeps-api": "^1.11.0" + } + }, + "node_modules/rollup-plugin-screeps-world/node_modules/git-rev-sync": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/git-rev-sync/-/git-rev-sync-3.0.2.tgz", + "integrity": "sha512-Nd5RiYpyncjLv0j6IONy0lGzAqdRXUaBctuGBbrEA2m6Bn4iDrN/9MeQTXuiquw8AEKL9D2BW0nw5m/lQvxqnQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "1.0.5", + "graceful-fs": "4.1.15", + "shelljs": "0.8.5" + } + }, + "node_modules/rollup-plugin-screeps-world/node_modules/graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true + }, + "node_modules/rollup-plugin-screeps-world/node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/rollup-plugin-terser/node_modules/jest-worker": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { + "version": "4.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/rollup-plugin-typescript2": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.36.0.tgz", + "integrity": "sha512-NB2CSQDxSe9+Oe2ahZbf+B4bh7pHwjV5L+RSYpCu7Q5ROuN94F9b6ioWwKfz3ueL3KTtmX4o2MUH2cgHDIEUsw==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^4.1.2", + "find-cache-dir": "^3.3.2", + "fs-extra": "^10.0.0", + "semver": "^7.5.4", + "tslib": "^2.6.2" + }, + "peerDependencies": { + "rollup": ">=1.26.3", + "typescript": ">=2.4.0" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/rollup-plugin-typescript2/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, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/rollup-plugin-typescript2/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, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/rollup-plugin-typescript2/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "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/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" + }, + "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, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", + "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", + "dev": true + }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "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.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "node_modules/saxes": { + "version": "5.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/scope-analyzer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.2.tgz", + "integrity": "sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ==", + "dev": true, + "dependencies": { + "array-from": "^2.1.1", + "dash-ast": "^2.0.1", + "es6-map": "^0.1.5", + "es6-set": "^0.1.5", + "es6-symbol": "^3.1.1", + "estree-is-function": "^1.0.0", + "get-assigned-identifiers": "^1.1.0" + } + }, + "node_modules/screeps-api": { + "version": "1.16.0", + "dev": true, + "license": "ISC", + "dependencies": { + "axios": "^0.21.1", + "commander": "^7.2.0", + "debug": "^4.1.1", + "ws": "^7.4.4", + "yamljs": "^0.3.0" + }, + "bin": { + "screeps-api": "bin/screeps-api.js" + }, + "optionalDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + } + }, + "node_modules/screeps-api/node_modules/commander": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/screeps-api/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/screeps-api/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/screeps-db-importer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/screeps-db-importer/-/screeps-db-importer-1.1.0.tgz", + "integrity": "sha512-bbkO0n7DJpu9DzG2PGwEi4FZA64+iCbkYcBiqNYIx/l5vurldEF16UZLBir7tIpC1aJ2OCl6y7Mb1xaN2qDTMQ==", + "dev": true, + "dependencies": { + "node-fetch": "^3.3.1", + "winston": "^3.8.2" + } + }, + "node_modules/screeps-db-importer/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dev": true, + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/screeps-grafana-go_carbon": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/screeps-grafana-go_carbon/-/screeps-grafana-go_carbon-1.0.5.tgz", + "integrity": "sha512-YLN87Jd9d1wrcWB38kTJLHMR7aoEgfXlNAexP6axBLDmBxpBPwcW6M7bb9/P0q1Q/m20GRtcPBrdFn1Sk4R39A==", + "dev": true, + "dependencies": { + "axios": "^0.27.2", + "dotenv": "^16.0.2", + "fs-extra": "^11.1.0", + "get-port-please": "^3.0.1", + "minimist": "^1.2.7", + "winston": "^3.8.1" + }, + "bin": { + "screeps-grafana-go_carbon": "bin/setup.js" + } + }, + "node_modules/screeps-grafana-go_carbon/node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/screeps-grafana-go_carbon/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/screeps-grafana-go_carbon/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/screeps-grafana-go_carbon/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/screeps-jest": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/screeps-jest/-/screeps-jest-2.0.2.tgz", + "integrity": "sha512-2jVH1fKX2U4SQBbbGe5rF5lUGtsE7AcsteV7+L4//WngXl5z16nv7DyHq0yNFrxuaRYZUUBLOaSE4gjr7h6H0A==", + "dev": true, + "peerDependencies": { + "jest": ">=27" + } + }, + "node_modules/screeps-performance-server": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.14.3.tgz", + "integrity": "sha512-xvVOd4u5QuDjs2mDsuyCid/cjk2DPG9zFmZTzQEljGkyWLEaJbV17QH7pFLaTA9bT88/4pOCHjExT4v9/AuGzg==", + "dev": true, + "dependencies": { + "@octokit/core": "^4.2.0", + "discord.js": "^14.9.0", + "dockerode": "^4.0.2", + "dotenv": "^16.0.3", + "get-port": "^6.1.2", + "json-beautify": "^1.1.1", + "lodash": "^4.17.21", + "minimist": "^1.2.7", + "ncp": "^2.0.0", + "node-fetch": "^2.6.7", + "node-powershell": "^5.0.1", + "pastebin-api": "^5.1.6", + "q": "^1.5.1", + "screeps-api": "1.16.0", + "screeps-db-importer": "latest", + "winston": "^3.8.2" + }, + "bin": { + "screeps-performance-server": "bin/setup.js" + } + }, + "node_modules/screeps-performance-server/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, + "engines": { + "node": ">= 14" + } + }, + "node_modules/screeps-performance-server/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, + "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/screeps-performance-server/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, + "dependencies": { + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/screeps-performance-server/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, + "dependencies": { + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/screeps-performance-server/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, + "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/screeps-performance-server/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, + "dependencies": { + "@octokit/types": "^9.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/screeps-performance-server/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, + "dependencies": { + "@octokit/openapi-types": "^18.0.0" + } + }, + "node_modules/screeps-performance-server/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/screeps-performance-server/node_modules/lodash": { + "version": "4.17.21", + "dev": true, + "license": "MIT" + }, + "node_modules/screeps-viz": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/screeps-viz/-/screeps-viz-2.1.3.tgz", + "integrity": "sha512-c96u2MTtrXzjv4O1K89J1EWgapbP0C9xqx2gCOZ5uLTBDr1RaAuIQZkOquqHA8ELhSNd9xr9X7Qt5vCOMMknSw==", + "dev": true + }, + "node_modules/semantic-release": { + "version": "21.0.7", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-21.0.7.tgz", + "integrity": "sha512-peRDSXN+hF8EFSKzze90ff/EnAmgITHQ/a3SZpRV3479ny0BIZWEJ33uX6/GlOSKdaSxo9hVRDyv2/u2MuF+Bw==", + "dependencies": { + "@semantic-release/commit-analyzer": "^10.0.0", + "@semantic-release/error": "^4.0.0", + "@semantic-release/github": "^9.0.0", + "@semantic-release/npm": "^10.0.2", + "@semantic-release/release-notes-generator": "^11.0.0", + "aggregate-error": "^4.0.1", + "cosmiconfig": "^8.0.0", + "debug": "^4.0.0", + "env-ci": "^9.0.0", + "execa": "^7.0.0", + "figures": "^5.0.0", + "find-versions": "^5.1.0", + "get-stream": "^6.0.0", + "git-log-parser": "^1.2.0", + "hook-std": "^3.0.0", + "hosted-git-info": "^6.0.0", + "lodash-es": "^4.17.21", + "marked": "^5.0.0", + "marked-terminal": "^5.1.1", + "micromatch": "^4.0.2", + "p-each-series": "^3.0.0", + "p-reduce": "^3.0.0", + "read-pkg-up": "^10.0.0", + "resolve-from": "^5.0.0", + "semver": "^7.3.2", + "semver-diff": "^4.0.0", + "signale": "^1.2.1", + "yargs": "^17.5.1" + }, + "bin": { + "semantic-release": "bin/semantic-release.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/semantic-release/node_modules/@semantic-release/commit-analyzer": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-10.0.1.tgz", + "integrity": "sha512-9ejHzTAijYs9z246sY/dKBatmOPcd0GQ7lH4MgLCkv1q4GCiDZRkjHJkaQZXZVaK7mJybS+sH3Ng6G8i3pYMGQ==", + "dependencies": { + "conventional-changelog-angular": "^6.0.0", + "conventional-commits-filter": "^3.0.0", + "conventional-commits-parser": "^4.0.0", + "debug": "^4.0.0", + "import-from": "^4.0.0", + "lodash-es": "^4.17.21", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "semantic-release": ">=20.1.0" + } + }, + "node_modules/semantic-release/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/semantic-release/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/semantic-release/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/semantic-release/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/semver-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", + "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-regex": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", + "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/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 + }, + "node_modules/send/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/shallow-copy": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", + "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==", + "dev": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "license": "ISC" + }, + "node_modules/signale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", + "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", + "dependencies": { + "chalk": "^2.3.2", + "figures": "^2.0.0", + "pkg-conf": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/signale/node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "dev": true, + "license": "MIT" + }, + "node_modules/sinon": { + "version": "6.3.5", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.0.2", + "@sinonjs/formatio": "^3.0.0", + "@sinonjs/samsam": "^2.1.2", + "diff": "^3.5.0", + "lodash.get": "^4.4.2", + "lolex": "^2.7.5", + "nise": "^1.4.5", + "supports-color": "^5.5.0", + "type-detect": "^4.0.8" + } + }, + "node_modules/sinon-chai": { + "version": "3.7.0", + "dev": true, + "license": "(BSD-2-Clause OR WTFPL)", + "peerDependencies": { + "chai": "^4.0.0", + "sinon": ">=4.0.0" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true + }, + "node_modules/spawn-error-forwarder": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", + "integrity": "sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==" + }, + "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==", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.11", + "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==", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/split-ca": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz", + "integrity": "sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==", + "dev": true + }, + "node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/ssh2": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.15.0.tgz", + "integrity": "sha512-C0PHgX4h6lBxYx7hcXwu3QWdh4tg6tZZsTfXcdvc5caW/EMxaB4H9dWsl7qk+F7LAW762hp8VbXOX7x4xUYvEw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "asn1": "^0.2.6", + "bcrypt-pbkdf": "^1.0.2" + }, + "engines": { + "node": ">=10.16.0" + }, + "optionalDependencies": { + "cpu-features": "~0.0.9", + "nan": "^2.18.0" + } + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/stack-utils": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/static-eval": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz", + "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==", + "dev": true, + "dependencies": { + "escodegen": "^1.11.1" + } + }, + "node_modules/static-eval/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/static-module": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/static-module/-/static-module-3.0.4.tgz", + "integrity": "sha512-gb0v0rrgpBkifXCa3yZXxqVmXDVE+ETXj6YlC/jt5VzOnGXR2C15+++eXuMDUYsePnbhf+lwW0pE1UXyOLtGCw==", + "dev": true, + "dependencies": { + "acorn-node": "^1.3.0", + "concat-stream": "~1.6.0", + "convert-source-map": "^1.5.1", + "duplexer2": "~0.1.4", + "escodegen": "^1.11.1", + "has": "^1.0.1", + "magic-string": "0.25.1", + "merge-source-map": "1.0.4", + "object-inspect": "^1.6.0", + "readable-stream": "~2.3.3", + "scope-analyzer": "^2.0.1", + "shallow-copy": "~0.0.1", + "static-eval": "^2.0.5", + "through2": "~2.0.3" + } + }, + "node_modules/static-module/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/static-module/node_modules/magic-string": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz", + "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.1" + } + }, + "node_modules/static-module/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, + "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/static-module/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/static-module/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "dev": true, + "dependencies": { + "duplexer": "~0.1.1", + "through": "~2.3.4" + } + }, + "node_modules/stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", + "dependencies": { + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-combiner2/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==", + "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/stream-combiner2/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==" + }, + "node_modules/stream-combiner2/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==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-template": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-1.0.0.tgz", + "integrity": "sha512-SLqR3GBUXuoPP5MmYtD7ompvXiG87QjT6lzOszyXjTM86Uu7At7vNnt2xgyTLq5o9T4IxTYFyGxcULqpsmsfdg==", + "dev": true + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-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, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringz": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/stringz/-/stringz-2.1.0.tgz", + "integrity": "sha512-KlywLT+MZ+v0IRepfMxRtnSvDCMc3nR1qqCs3m/qIbSOWkNZYT8XHQA31rS3TnKp0c5xjZu3M4GY/2aRKSi/6A==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-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, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "dev": true, + "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==", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "dev": true + }, + "node_modules/stylis": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", + "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" + }, + "node_modules/supports-color": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/tar-fs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", + "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", + "dev": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.0.0" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/temp-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", + "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", + "engines": { + "node": ">=14.16" + } + }, + "node_modules/tempy": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz", + "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==", + "dependencies": { + "is-stream": "^3.0.0", + "temp-dir": "^3.0.0", + "type-fest": "^2.12.2", + "unique-string": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-link/node_modules/ansi-escapes": { + "version": "4.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-link/node_modules/type-fest": { + "version": "0.21.3", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.14.2", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/text-hex": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/throat": { + "version": "6.0.1", + "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==" + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "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==", + "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==" + }, + "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==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "dev": true + }, + "node_modules/tmpl": { + "version": "1.0.5", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/traverse": { + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", + "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/trim-buffer": { + "version": "5.0.0", + "dev": true, + "license": "MIT" + }, + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/triple-beam": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "engines": { + "node": ">=6.10" + } + }, + "node_modules/ts-jest": { + "version": "27.0.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.5.tgz", + "integrity": "sha512-lIJApzfTaSSbtlksfFNHkWOzLJuuSm4faFAfo5kvzOiRAuoN4/eKxVJ2zEAho8aecE04qX6K1pAzfH5QHL1/8w==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^27.0.0", + "json5": "2.x", + "lodash": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@types/jest": "^27.0.0", + "babel-jest": ">=27.0.0 <28", + "jest": "^27.0.0", + "typescript": ">=3.8 <5.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true }, - "d3-time-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", - "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "requires": { - "d3-time": "1 - 3" - } + "@types/jest": { + "optional": true }, - "d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==" - }, - "d3-transition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "requires": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - } + "babel-jest": { + "optional": true + } + } + }, + "node_modules/ts-jest/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/ts-jest/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-mixer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz", + "integrity": "sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==", + "dev": true + }, + "node_modules/ts-morph": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-18.0.0.tgz", + "integrity": "sha512-Kg5u0mk19PIIe4islUI/HWRvm9bC1lHejK4S0oh1zaZ77TMZAEmQC0sHQYiu2RgCQFZKXz1fMVi/7nOOeirznA==", + "dev": true, + "dependencies": { + "@ts-morph/common": "~0.19.0", + "code-block-writer": "^12.0.0" + } + }, + "node_modules/ts-node": { + "version": "10.8.1", + "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/acorn-walk": { + "version": "8.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "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 + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", + "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "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": { + "version": "5.22.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz", + "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==", + "dev": true, + "dependencies": { + "busboy": "^1.6.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-properties": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", + "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", + "dev": true, + "dependencies": { + "base64-js": "^1.3.0", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "dev": true, + "dependencies": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } + }, + "node_modules/unique-string": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", + "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", + "dependencies": { + "crypto-random-string": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" + }, + "node_modules/universalify": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unix-crypt-td-js": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz", + "integrity": "sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw==", + "dev": true + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "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" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-join": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", + "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/utf-8-validate": { + "version": "5.0.9", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/uvu": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", + "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", + "dependencies": { + "dequal": "^2.0.0", + "diff": "^5.0.0", + "kleur": "^4.0.3", + "sade": "^1.7.3" + }, + "bin": { + "uvu": "bin.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/uvu/node_modules/diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/uvu/node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-to-istanbul": { + "version": "8.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.4", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "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==", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validator": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", + "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "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, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/web-worker": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", + "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=10.4" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/whatwg-url/node_modules/lodash": { + "version": "4.17.21", + "dev": true, + "license": "MIT" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/windows-release": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", + "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==", + "dev": true, + "dependencies": { + "execa": "^4.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/windows-release/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/windows-release/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/windows-release/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/windows-release/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/windows-release/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/windows-release/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/winston": { + "version": "3.8.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@colors/colors": "1.5.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.4.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.5.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport": { + "version": "4.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 6.4.0" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "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==" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-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, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.8", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true }, - "d3-zoom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", - "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "2 - 3", - "d3-transition": "2 - 3" - } + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/xmldoc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.3.0.tgz", + "integrity": "sha512-y7IRWW6PvEnYQZNZFMRLNJw+p3pezM4nKYPfr15g4OOW9i8VpeydycFuipE2297OvZnh3jSb2pxOt9QpkZUVng==", + "dev": true, + "dependencies": { + "sax": "^1.2.4" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yamljs": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "glob": "^7.0.5" + }, + "bin": { + "json2yaml": "bin/json2yaml", + "yaml2json": "bin/yaml2json" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } + }, + "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==", + "engines": { + "node": ">=12" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@aduh95/viz.js": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@aduh95/viz.js/-/viz.js-3.4.0.tgz", + "integrity": "sha512-KI2nVf9JdwWCXqK6RVf+9/096G7VWN4Z84mnynlyZKao2xQENW8WNEjLmvdlxS5X8PNWXFC1zqwm7tveOXw/4A==", + "dev": true + }, + "@ampproject/remapping": { + "version": "2.2.0", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@angular-devkit/core": { + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.6.tgz", + "integrity": "sha512-3OjtrPWvsqVkMBwqPeE65ccCIw56FooNpVVAJ0XwhVQv5mA81pmbCzU7JsR6U449ZT7O4cQblzZMQvWvx74HCg==", + "dev": true, + "requires": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } }, - "dagre-d3-es": { - "version": "7.0.10", - "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.10.tgz", - "integrity": "sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==", - "requires": { - "d3": "^7.8.2", - "lodash-es": "^4.17.21" - } + "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 }, - "dash-ast": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", - "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==", - "dev": true - }, - "data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "dev": true - }, - "data-urls": { - "version": "2.0.0", - "dev": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + } + } + }, + "@angular-devkit/schematics": { + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.6.tgz", + "integrity": "sha512-KA8P78gaS76HMHGBOM8JHJXWLOxCIShYVB2Un/Cu6z3jVODvXq+ILZUc1Y0RsAce/vsl2wf8qpoh5Lku9KJHUQ==", + "dev": true, + "requires": { + "@angular-devkit/core": "16.1.6", + "jsonc-parser": "3.2.0", + "magic-string": "0.30.0", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "dependencies": { + "magic-string": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + } + } + }, + "@babel/code-frame": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "requires": { + "@babel/highlight": "^7.22.5" + } + }, + "@babel/compat-data": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "dev": true + }, + "@babel/core": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", + "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.9", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helpers": "^7.22.6", + "@babel/parser": "^7.22.7", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.8", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==" + "ms": { + "version": "2.1.2", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", + "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", + "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", + "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } }, - "dayjs": { - "version": "1.11.9", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", - "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==" + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz", + "integrity": "sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", + "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", + "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dev": true, + "requires": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", + "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.5" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", + "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.9" + } + }, + "@babel/helper-replace-supers": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", + "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==" + }, + "@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.9.tgz", + "integrity": "sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helpers": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", + "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", + "dev": true, + "requires": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.6", + "@babel/types": "^7.22.5" + } + }, + "@babel/highlight": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "requires": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.22.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", + "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", + "dev": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "requires": {} + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-async-generator-functions": { + "version": "7.22.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz", + "integrity": "sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", + "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", + "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", + "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-transform-numeric-separator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-transform-object-rest-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + } + }, + "@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-transform-optional-chaining": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz", + "integrity": "sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", + "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.1" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", + "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/preset-env": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.9.tgz", + "integrity": "sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.9", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.7", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.6", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.6", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.4", + "babel-plugin-polyfill-corejs3": "^0.8.2", + "babel-plugin-polyfill-regenerator": "^0.5.1", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + } + }, + "@babel/preset-modules": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", + "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "@babel/runtime": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", + "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.11" + } + }, + "@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/traverse": { + "version": "7.22.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", + "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.7", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.7", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "decache": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.2.tgz", - "integrity": "sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==", - "dev": true, - "requires": { - "callsite": "^1.0.0" - } + "ms": { + "version": "2.1.2", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + } + }, + "@balena/dockerignore": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz", + "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==", + "dev": true + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "dev": true + }, + "@braintree/sanitize-url": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz", + "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==" + }, + "@colors/colors": { + "version": "1.5.0", + "devOptional": true + }, + "@compodoc/compodoc": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/@compodoc/compodoc/-/compodoc-1.1.21.tgz", + "integrity": "sha512-/FDlwRgKzmkGuorDnURuCzoGY6rZ0KY7Mj5/PwnEjMs0y1CRRPHBJC9I0yVIjn8j8gxVy8PPc6dna0lY1MWwhg==", + "dev": true, + "requires": { + "@angular-devkit/schematics": "^16.0.1", + "@babel/core": "^7.21.8", + "@babel/preset-env": "^7.21.5", + "@compodoc/live-server": "^1.2.3", + "@compodoc/ngd-transformer": "^2.1.3", + "chalk": "4.1.2", + "cheerio": "^1.0.0-rc.12", + "chokidar": "^3.5.3", + "colors": "1.4.0", + "commander": "^10.0.1", + "cosmiconfig": "^8.1.3", + "decache": "^4.6.1", + "fancy-log": "^2.0.0", + "fast-glob": "^3.2.12", + "fs-extra": "^11.1.1", + "glob": "^10.2.4", + "handlebars": "^4.7.7", + "html-entities": "^2.3.3", + "i18next": "^22.4.15", + "inside": "^1.0.0", + "json5": "^2.2.3", + "lodash": "^4.17.21", + "loglevel": "^1.8.1", + "loglevel-plugin-prefix": "^0.8.4", + "lunr": "^2.3.9", + "marked": "4.3.0", + "minimist": "^1.2.8", + "opencollective-postinstall": "^2.0.3", + "os-name": "4.0.1", + "pdfjs-dist": "2.12.313", + "pdfmake": "^0.2.7", + "semver": "^7.5.1", + "traverse": "^0.6.7", + "ts-morph": "^18.0.0", + "uuid": "^9.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" - }, - "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==", - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==" - } - } + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } }, - "decimal.js": { - "version": "10.3.1", - "dev": true + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "requires": { - "character-entities": "^2.0.0" - } + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "dedent": { - "version": "0.7.0", - "dev": true + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "deep-eql": { - "version": "3.0.1", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } + "commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } + "fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "glob": { + "version": "10.3.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", + "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + } }, - "deep-is": { - "version": "0.1.4", - "dev": true + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, - "deepmerge": { - "version": "4.2.2", - "dev": true + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } }, - "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, - "requires": { - "clone": "^1.0.2" - } + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, - "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 - }, - "define-properties": { - "version": "1.1.4", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } + "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 }, - "delaunator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", - "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", - "requires": { - "robust-predicates": "^3.0.0" - } + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } }, - "delayed-stream": { - "version": "1.0.0", - "dev": true + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, - "deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" - }, - "dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==" - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "dev": true - }, - "dfa": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", - "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", - "dev": true + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } }, - "diff": { - "version": "3.5.0", - "dev": true + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "@compodoc/live-server": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@compodoc/live-server/-/live-server-1.2.3.tgz", + "integrity": "sha512-hDmntVCyjjaxuJzPzBx68orNZ7TW4BtHWMnXlIVn5dqhK7vuFF/11hspO1cMmc+2QTYgqde1TBcb3127S7Zrow==", + "dev": true, + "requires": { + "chokidar": "^3.5.2", + "colors": "1.4.0", + "connect": "^3.7.0", + "cors": "latest", + "event-stream": "4.0.1", + "faye-websocket": "0.11.x", + "http-auth": "4.1.9", + "http-auth-connect": "^1.0.5", + "morgan": "^1.10.0", + "object-assign": "latest", + "open": "8.4.0", + "proxy-middleware": "latest", + "send": "latest", + "serve-index": "^1.9.1" + } + }, + "@compodoc/ngd-core": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@compodoc/ngd-core/-/ngd-core-2.1.1.tgz", + "integrity": "sha512-Z+wE6wWZYVnudRYg6qunDlyh3Orw39Ib66Gvrz5kX5u7So+iu3tr6sQJdqH6yGS3hAjig5avlfhWLlgsb6/x1Q==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.3", + "fancy-log": "^2.0.0", + "typescript": "^5.0.4" + }, + "dependencies": { + "typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true + } + } + }, + "@compodoc/ngd-transformer": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@compodoc/ngd-transformer/-/ngd-transformer-2.1.3.tgz", + "integrity": "sha512-oWxJza7CpWR8/FeWYfE6j+jgncnGBsTWnZLt5rD2GUpsGSQTuGrsFPnmbbaVLgRS5QIVWBJYke7QFBr/7qVMWg==", + "dev": true, + "requires": { + "@aduh95/viz.js": "3.4.0", + "@compodoc/ngd-core": "~2.1.1", + "dot": "^2.0.0-beta.1", + "fs-extra": "^11.1.1" + }, + "dependencies": { + "fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } }, - "diff-sequences": { - "version": "27.5.1", - "dev": true + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } }, - "dir-glob": { - "version": "3.0.1", - "requires": { - "path-type": "^4.0.0" - } + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } + } + }, + "@dabh/diagnostics": { + "version": "2.0.3", + "dev": true, + "requires": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "@discordjs/builders": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.5.tgz", + "integrity": "sha512-SdweyCs/+mHj+PNhGLLle7RrRFX9ZAhzynHahMCLqp5Zeq7np7XC6/mgzHc79QoVlQ1zZtOkTTiJpOZu5V8Ufg==", + "dev": true, + "requires": { + "@discordjs/formatters": "^0.3.2", + "@discordjs/util": "^1.0.1", + "@sapphire/shapeshift": "^3.9.2", + "discord-api-types": "0.37.50", + "fast-deep-equal": "^3.1.3", + "ts-mixer": "^6.0.3", + "tslib": "^2.6.1" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + } + } + }, + "@discordjs/collection": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", + "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", + "dev": true + }, + "@discordjs/formatters": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.2.tgz", + "integrity": "sha512-lE++JZK8LSSDRM5nLjhuvWhGuKiXqu+JZ/DsOR89DVVia3z9fdCJVcHF2W/1Zxgq0re7kCzmAJlCMMX3tetKpA==", + "dev": true, + "requires": { + "discord-api-types": "0.37.50" + } + }, + "@discordjs/rest": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.0.1.tgz", + "integrity": "sha512-/eWAdDRvwX/rIE2tuQUmKaxmWeHmGealttIzGzlYfI4+a7y9b6ZoMp8BG/jaohs8D8iEnCNYaZiOFLVFLQb8Zg==", + "dev": true, + "requires": { + "@discordjs/collection": "^1.5.3", + "@discordjs/util": "^1.0.1", + "@sapphire/async-queue": "^1.5.0", + "@sapphire/snowflake": "^3.5.1", + "@vladfrangu/async_event_emitter": "^2.2.2", + "discord-api-types": "0.37.50", + "magic-bytes.js": "^1.0.15", + "tslib": "^2.6.1", + "undici": "5.22.1" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + } + } + }, + "@discordjs/util": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.0.1.tgz", + "integrity": "sha512-d0N2yCxB8r4bn00/hvFZwM7goDcUhtViC5un4hPj73Ba4yrChLSJD8fy7Ps5jpTLg1fE9n4K0xBLc1y9WGwSsA==", + "dev": true + }, + "@discordjs/ws": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.0.1.tgz", + "integrity": "sha512-avvAolBqN3yrSvdBPcJ/0j2g42ABzrv3PEL76e3YTp2WYMGH7cuspkjfSyNWaqYl1J+669dlLp+YFMxSVQyS5g==", + "dev": true, + "requires": { + "@discordjs/collection": "^1.5.3", + "@discordjs/rest": "^2.0.1", + "@discordjs/util": "^1.0.1", + "@sapphire/async-queue": "^1.5.0", + "@types/ws": "^8.5.5", + "@vladfrangu/async_event_emitter": "^2.2.2", + "discord-api-types": "0.37.50", + "tslib": "^2.6.1", + "ws": "^8.13.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true }, - "discord-api-types": { - "version": "0.37.50", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.50.tgz", - "integrity": "sha512-X4CDiMnDbA3s3RaUXWXmgAIbY1uxab3fqe3qwzg5XutR3wjqi7M3IkgQbsIBzpqBN2YWr/Qdv7JrFRqSgb4TFg==", - "dev": true - }, - "discord.js": { - "version": "14.13.0", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.13.0.tgz", - "integrity": "sha512-Kufdvg7fpyTEwANGy9x7i4od4yu5c6gVddGi5CKm4Y5a6sF0VBODObI3o0Bh7TGCj0LfNT8Qp8z04wnLFzgnbA==", - "dev": true, - "requires": { - "@discordjs/builders": "^1.6.5", - "@discordjs/collection": "^1.5.3", - "@discordjs/formatters": "^0.3.2", - "@discordjs/rest": "^2.0.1", - "@discordjs/util": "^1.0.1", - "@discordjs/ws": "^1.0.1", - "@sapphire/snowflake": "^3.5.1", - "@types/ws": "^8.5.5", - "discord-api-types": "0.37.50", - "fast-deep-equal": "^3.1.3", - "lodash.snakecase": "^4.1.1", - "tslib": "^2.6.1", - "undici": "5.22.1", - "ws": "^8.13.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "ws": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", - "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", - "dev": true, - "requires": {} - } - } + "ws": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", + "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", + "dev": true, + "requires": {} + } + } + }, + "@eslint/eslintrc": { + "version": "0.4.3", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "dev": true }, - "docker-modem": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-5.0.3.tgz", - "integrity": "sha512-89zhop5YVhcPEt5FpUFGr3cDyceGhq/F9J+ZndQ4KfqNvfbJpPMfgeixFgUj5OjCYAboElqODxY5Z1EBsSa6sg==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "readable-stream": "^3.5.0", - "split-ca": "^1.0.1", - "ssh2": "^1.15.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "espree": { + "version": "7.3.1", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + } }, - "dockerode": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-4.0.2.tgz", - "integrity": "sha512-9wM1BVpVMFr2Pw3eJNXrYYt6DT9k0xMcsSCjtPvyQ+xa1iPg/Mo3T/gUcwI0B2cczqCeCYRPF8yFYDwtFXT0+w==", - "dev": true, - "requires": { - "@balena/dockerignore": "^1.0.2", - "docker-modem": "^5.0.3", - "tar-fs": "~2.0.1" - } + "globals": { + "version": "13.15.0", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } }, - "doctrine": { - "version": "3.0.0", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } + "ms": { + "version": "2.1.2", + "dev": true }, - "dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - } + "strip-json-comments": { + "version": "3.1.1", + "dev": true + } + } + }, + "@foliojs-fork/fontkit": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@foliojs-fork/fontkit/-/fontkit-1.9.1.tgz", + "integrity": "sha512-U589voc2/ROnvx1CyH9aNzOQWJp127JGU1QAylXGQ7LoEAF6hMmahZLQ4eqAcgHUw+uyW4PjtCItq9qudPkK3A==", + "dev": true, + "requires": { + "@foliojs-fork/restructure": "^2.0.2", + "brfs": "^2.0.0", + "brotli": "^1.2.0", + "browserify-optional": "^1.0.1", + "clone": "^1.0.4", + "deep-equal": "^1.0.0", + "dfa": "^1.2.0", + "tiny-inflate": "^1.0.2", + "unicode-properties": "^1.2.2", + "unicode-trie": "^2.0.0" + } + }, + "@foliojs-fork/linebreak": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@foliojs-fork/linebreak/-/linebreak-1.1.1.tgz", + "integrity": "sha512-pgY/+53GqGQI+mvDiyprvPWgkTlVBS8cxqee03ejm6gKAQNsR1tCYCIvN9FHy7otZajzMqCgPOgC4cHdt4JPig==", + "dev": true, + "requires": { + "base64-js": "1.3.1", + "brfs": "^2.0.2", + "unicode-trie": "^2.0.0" + }, + "dependencies": { + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true + } + } + }, + "@foliojs-fork/pdfkit": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@foliojs-fork/pdfkit/-/pdfkit-0.13.0.tgz", + "integrity": "sha512-YXeG1fml9k97YNC9K8e292Pj2JzGt9uOIiBFuQFxHsdQ45BlxW+JU3RQK6JAvXU7kjhjP8rCcYvpk36JLD33sQ==", + "dev": true, + "requires": { + "@foliojs-fork/fontkit": "^1.9.1", + "@foliojs-fork/linebreak": "^1.1.1", + "crypto-js": "^4.0.0", + "png-js": "^1.0.0" + } + }, + "@foliojs-fork/restructure": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@foliojs-fork/restructure/-/restructure-2.0.2.tgz", + "integrity": "sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA==", + "dev": true + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true - }, - "domexception": { - "version": "2.0.1", - "dev": true, - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "dev": true - } - } + "ms": { + "version": "2.1.2", + "dev": true + } + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "dev": true + }, + "@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, + "requires": { + "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" + }, + "dependencies": { + "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 }, - "domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "requires": { - "domelementtype": "^2.3.0" - } + "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 }, - "dompurify": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.5.tgz", - "integrity": "sha512-F9e6wPGtY+8KNMRAVfxeCOHU0/NPWMSENNq4pQctuXRqqdEPW7q3CrLbR5Nse044WwacyjHGOMlvNsBe1y6z9A==" - }, - "domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dev": true, - "requires": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - } + "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 }, - "dot": { - "version": "2.0.0-beta.1", - "resolved": "https://registry.npmjs.org/dot/-/dot-2.0.0-beta.1.tgz", - "integrity": "sha512-kxM7fSnNQTXOmaeGuBSXM8O3fEsBb7XSDBllkGbRwa0lJSJTxxDE/4eSNGLKZUmlFw0f1vJ5qSV2BljrgQtgIA==", - "dev": true - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "requires": { - "is-obj": "^2.0.0" - } + "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, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } }, - "dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", - "dev": true - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", - "requires": { - "readable-stream": "^2.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "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==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } + "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, + "requires": { + "ansi-regex": "^6.0.1" + } }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.4.473", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.473.tgz", - "integrity": "sha512-aVfC8+440vGfl06l8HKKn8/PD5jRfSnLkTTD65EFvU46igbpQRri1gxSzW9/+TeUlwYzrXk1sw867T96zlyECA==", - "dev": true - }, - "elkjs": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.8.2.tgz", - "integrity": "sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==" - }, - "emittery": { - "version": "0.8.1", - "dev": true + "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, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } }, - "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==" - }, - "enabled": { - "version": "2.0.0", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } }, - "enquirer": { - "version": "2.3.6", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } }, - "entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true - }, - "env-ci": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-9.1.1.tgz", - "integrity": "sha512-Im2yEWeF4b2RAMAaWvGioXk6m0UNaIjD8hj28j2ij5ldnIFrDQT0+pzDvpbRkcjurhXhf/AsBKv8P2rtmGi9Aw==", - "requires": { - "execa": "^7.0.0", - "java-properties": "^1.0.2" - } + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } }, - "error-ex": { - "version": "1.3.2", - "requires": { - "is-arrayish": "^0.2.1" - } + "p-try": { + "version": "2.2.0", + "dev": true }, - "es-abstract": { - "version": "1.20.1", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } + "path-exists": { + "version": "4.0.0", + "dev": true }, - "es-shim-unscopables": { - "version": "1.0.0", - "dev": true, - "requires": { - "has": "^1.0.3" - } + "resolve-from": { + "version": "5.0.0", + "dev": true + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "dev": true + }, + "@javascript-obfuscator/escodegen": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@javascript-obfuscator/escodegen/-/escodegen-2.3.0.tgz", + "integrity": "sha512-QVXwMIKqYMl3KwtTirYIA6gOCiJ0ZDtptXqAv/8KWLG9uQU2fZqTVy7a/A5RvcoZhbDoFfveTxuGxJ5ibzQtkw==", + "dev": true, + "requires": { + "@javascript-obfuscator/estraverse": "^5.3.0", + "esprima": "^4.0.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "@javascript-obfuscator/estraverse": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@javascript-obfuscator/estraverse/-/estraverse-5.4.0.tgz", + "integrity": "sha512-CZFX7UZVN9VopGbjTx4UXaXsi9ewoM1buL0kY7j1ftYdSs7p2spv9opxFjHlQ/QGTgh4UqufYqJJ0WKLml7b6w==", + "dev": true + }, + "@jest/console": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "es-to-primitive": { - "version": "1.2.1", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "dev": true, - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } + "color-name": { + "version": "1.1.4", + "dev": true }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-set": "~0.1.5", - "es6-symbol": "~3.1.1", - "event-emitter": "~0.3.5" - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", - "dev": true - }, - "es6-set": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", - "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", - "dev": true, - "requires": { - "d": "^1.0.1", - "es5-ext": "^0.10.62", - "es6-iterator": "~2.0.3", - "es6-symbol": "^3.1.3", - "event-emitter": "^0.3.5", - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - } - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/core": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.2", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "escalade": { - "version": "3.1.1" + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "escape-string-regexp": { - "version": "1.0.5" + "color-name": { + "version": "1.1.4", + "dev": true }, - "escodegen": { - "version": "2.0.0", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "dev": true - } - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "eslint": { - "version": "7.32.0", - "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "acorn": { - "version": "7.4.1", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "astral-regex": { - "version": "2.0.0", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "dev": true - }, - "eslint-scope": { - "version": "5.1.1", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "dev": true - }, - "espree": { - "version": "7.3.1", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "dev": true - } - } - }, - "file-entry-cache": { - "version": "6.0.1", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "flat-cache": { - "version": "3.0.4", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.5", - "dev": true - }, - "globals": { - "version": "13.15.0", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "json-schema-traverse": { - "version": "1.0.0", - "dev": true - }, - "levn": { - "version": "0.4.1", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "ms": { - "version": "2.1.2", - "dev": true - }, - "optionator": { - "version": "0.9.1", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "prelude-ls": { - "version": "1.2.1", - "dev": true - }, - "regexpp": { - "version": "3.2.0", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "7.3.7", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "slice-ansi": { - "version": "4.0.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "table": { - "version": "6.8.0", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "ajv": { - "version": "8.11.0", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - } - } - }, - "type-check": { - "version": "0.4.0", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - } - } + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } }, - "eslint-config-prettier": { - "version": "7.2.0", - "dev": true, - "requires": {} - }, - "eslint-import-resolver-node": { - "version": "0.3.6", - "dev": true, - "requires": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "dev": true - } - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } }, - "eslint-module-utils": { - "version": "2.7.3", - "dev": true, - "requires": { - "debug": "^3.2.7", - "find-up": "^2.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "dev": true - } - } + "type-fest": { + "version": "0.21.3", + "dev": true + } + } + }, + "@jest/environment": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + } + }, + "@jest/fake-timers": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "@jest/globals": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + } + }, + "@jest/reporters": { + "version": "27.5.1", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "eslint-plugin-import": { - "version": "2.26.0", - "dev": true, - "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - } - } + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "eslint-plugin-jest": { - "version": "24.7.0", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "^4.0.1" - } + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "eslint-plugin-jsdoc": { - "version": "31.6.1", - "dev": true, - "requires": { - "comment-parser": "1.1.2", - "debug": "^4.3.1", - "jsdoctypeparser": "^9.0.0", - "lodash": "^4.17.20", - "regextras": "^0.7.1", - "semver": "^7.3.4", - "spdx-expression-parse": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "lodash": { - "version": "4.17.21", - "dev": true - }, - "ms": { - "version": "2.1.2", - "dev": true - }, - "semver": { - "version": "7.3.7", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } + "color-name": { + "version": "1.1.4", + "dev": true }, - "eslint-plugin-prettier": { - "version": "3.4.1", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "eslint-plugin-screeps": { - "version": "2.1.0", - "dev": true, - "requires": {} + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/source-map": { + "version": "27.5.1", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + } + }, + "@jest/test-result": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + } + }, + "@jest/transform": { + "version": "27.5.1", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "eslint-visitor-keys": { - "version": "1.3.0", - "dev": true + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "esprima": { - "version": "4.0.1" + "color-name": { + "version": "1.1.4", + "dev": true }, - "esquery": { - "version": "1.4.0", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "dev": true - } - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "esrecurse": { - "version": "4.3.0", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "dev": true - } - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/types": { + "version": "27.5.1", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "estraverse": { - "version": "4.3.0", - "dev": true + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "estree-is-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz", - "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==", - "dev": true + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "estree-walker": { - "version": "2.0.2", - "dev": true + "color-name": { + "version": "1.1.4", + "dev": true }, - "esutils": { - "version": "2.0.3", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "event-stream": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz", - "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==", - "dev": true, - "requires": { - "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" - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.1", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5" + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@octokit/auth-token": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", + "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==" + }, + "@octokit/core": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.0.tgz", + "integrity": "sha512-YbAtMWIrbZ9FCXbLwT9wWB8TyLjq9mxpKdgB3dUNxQcIVTf9hJ70gRPwAcqGZdY6WdJPZ0I7jLaaNDCiloGN2A==", + "requires": { + "@octokit/auth-token": "^4.0.0", + "@octokit/graphql": "^7.0.0", + "@octokit/request": "^8.0.2", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^11.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/endpoint": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.0.tgz", + "integrity": "sha512-szrQhiqJ88gghWY2Htt8MqUDO6++E/EIXqJ2ZEp5ma3uGS46o7LZAzSLt49myB7rT+Hfw5Y6gO3LmOxGzHijAQ==", + "requires": { + "@octokit/types": "^11.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "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==" + } + } + }, + "@octokit/graphql": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.1.tgz", + "integrity": "sha512-T5S3oZ1JOE58gom6MIcrgwZXzTaxRnxBso58xhozxHpOqSTgDS6YNeEUvZ/kRvXgPrRz/KHnZhtb7jUMRi9E6w==", + "requires": { + "@octokit/request": "^8.0.1", + "@octokit/types": "^11.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/openapi-types": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", + "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" + }, + "@octokit/plugin-paginate-rest": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-8.0.0.tgz", + "integrity": "sha512-2xZ+baZWUg+qudVXnnvXz7qfrTmDeYPCzangBVq/1gXxii/OiS//4shJp9dnCCvj1x+JAm9ji1Egwm1BA47lPQ==", + "requires": { + "@octokit/types": "^11.0.0" + } + }, + "@octokit/plugin-retry": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-6.0.0.tgz", + "integrity": "sha512-a1/A4A+PB1QoAHQfLJxGHhLfSAT03bR1jJz3GgQJZvty2ozawFWs93MiBQXO7SL2YbO7CIq0Goj4qLOBj8JeMQ==", + "requires": { + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^11.0.0", + "bottleneck": "^2.15.3" + } + }, + "@octokit/plugin-throttling": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-7.0.0.tgz", + "integrity": "sha512-KL2k/d0uANc8XqP5S64YcNFCudR3F5AaKO39XWdUtlJIjT9Ni79ekWJ6Kj5xvAw87udkOMEPcVf9xEge2+ahew==", + "requires": { + "@octokit/types": "^11.0.0", + "bottleneck": "^2.15.3" + } + }, + "@octokit/request": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.1.1.tgz", + "integrity": "sha512-8N+tdUz4aCqQmXl8FpHYfKG9GelDFd7XGVzyN8rc6WxVlYcfpHECnuRkgquzz+WzvHTK62co5di8gSXnzASZPQ==", + "requires": { + "@octokit/endpoint": "^9.0.0", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^11.1.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "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==" + } + } + }, + "@octokit/request-error": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.0.tgz", + "integrity": "sha512-1ue0DH0Lif5iEqT52+Rf/hf0RmGO9NWFjrzmrkArpG9trFfDM/efx00BJHdLGuro4BR/gECxCU2Twf5OKrRFsQ==", + "requires": { + "@octokit/types": "^11.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "@octokit/types": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-11.1.0.tgz", + "integrity": "sha512-Fz0+7GyLm/bHt8fwEqgvRBWwIV1S6wRRyq+V6exRKLVWaKGsuy6H9QFYeBVDV7rK6fO3XwHgQOPxv+cLj2zpXQ==", + "requires": { + "@octokit/openapi-types": "^18.0.0" + } + }, + "@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, + "optional": true + }, + "@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==" + }, + "@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "requires": { + "graceful-fs": "4.2.10" + } + }, + "@pnpm/npm-conf": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", + "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", + "requires": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + } + }, + "@rollup/plugin-commonjs": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-20.0.0.tgz", + "integrity": "sha512-5K0g5W2Ol8hAcTHqcTBHiA7M58tfmYi1o9KxeJuuRNpGaTa5iLjcyemBitCBcKXaHamOBBEH2dGom6v6Unmqjg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "commondir": "^1.0.1", + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" + } + }, + "@rollup/plugin-node-resolve": { + "version": "13.3.0", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "dependencies": { + "estree-walker": { + "version": "1.0.1", + "dev": true + } + } + }, + "@sapphire/async-queue": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", + "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==", + "dev": true + }, + "@sapphire/shapeshift": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.2.tgz", + "integrity": "sha512-YRbCXWy969oGIdqR/wha62eX8GNHsvyYi0Rfd4rNW6tSVVa8p0ELiMEuOH/k8rgtvRoM+EMV7Csqz77YdwiDpA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "lodash": "^4.17.21" + }, + "dependencies": { + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + } + } + }, + "@sapphire/snowflake": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz", + "integrity": "sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==", + "dev": true + }, + "@semantic-release/changelog": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@semantic-release/changelog/-/changelog-6.0.3.tgz", + "integrity": "sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==", + "dev": true, + "requires": { + "@semantic-release/error": "^3.0.0", + "aggregate-error": "^3.0.0", + "fs-extra": "^11.0.0", + "lodash": "^4.17.4" + }, + "dependencies": { + "@semantic-release/error": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", + "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", + "dev": true }, - "eventemitter3": { - "version": "4.0.7", - "dev": true + "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, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } }, - "execa": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", - "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "dependencies": { - "human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==" - }, - "is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" - }, - "strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==" - } - } + "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 }, - "exit": { - "version": "0.1.2", - "dev": true - }, - "expect": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - } + "fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } }, - "ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dev": true, - "requires": { - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - } - } + "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 }, - "fancy-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-2.0.0.tgz", - "integrity": "sha512-9CzxZbACXMUXW13tS0tI8XsGGmxWzO2DmYrGuBJOJ8k8q2K7hwfJA5qHjuPPe8wtsco33YR9wc+Rlr5wYFvhSA==", - "dev": true, - "requires": { - "color-support": "^1.1.3" - } + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } }, - "fast-deep-equal": { - "version": "3.1.3", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "dev": true - }, - "fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "dev": true - }, - "fast-xml-parser": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.7.tgz", - "integrity": "sha512-J8r6BriSLO1uj2miOk1NW0YVm8AGOOu3Si2HQp/cSmo6EA4m3fcwu2WKjJ4RK9wMLBtg69y1kS8baDiQBR41Ig==", - "dev": true, - "requires": { - "strnum": "^1.0.5" - } + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "@semantic-release/commit-analyzer": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz", + "integrity": "sha512-E+dr6L+xIHZkX4zNMe6Rnwg4YQrWNXK+rNsvwOPpdFppvZO1olE2fIgWhv89TkQErygevbjsZFSIxp+u6w2e5g==", + "dev": true, + "requires": { + "conventional-changelog-angular": "^5.0.0", + "conventional-commits-filter": "^2.0.0", + "conventional-commits-parser": "^3.2.3", + "debug": "^4.0.0", + "import-from": "^4.0.0", + "lodash": "^4.17.4", + "micromatch": "^4.0.2" + }, + "dependencies": { + "conventional-changelog-angular": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", + "dev": true, + "requires": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + } }, - "fastestsmallesttextencoderdecoder-encodeinto": { - "version": "1.0.22", - "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder-encodeinto/-/fastestsmallesttextencoderdecoder-encodeinto-1.0.22.tgz", - "integrity": "sha512-csOz3cwJjZY75QcPHnY+v6cKWeofYCmhtLVYaurjcRn5vaNXoYe1Leo1ZkiZIxZp796+J5Z+TtmeMbbfYBfiiQ==", - "dev": true + "conventional-commits-filter": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", + "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "dev": true, + "requires": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + } }, - "fastq": { - "version": "1.13.0", - "requires": { - "reusify": "^1.0.4" - } + "conventional-commits-parser": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", + "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", + "dev": true, + "requires": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + } }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "fb-watchman": { - "version": "2.0.1", - "dev": true, - "requires": { - "bser": "2.1.1" - } + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, - "fecha": { - "version": "4.2.3", - "dev": true - }, - "fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "dev": true, - "requires": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - } + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, - "figures": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", - "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", - "requires": { - "escape-string-regexp": "^5.0.0", - "is-unicode-supported": "^1.2.0" - }, - "dependencies": { - "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==" - } - } + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "requires": { + "readable-stream": "3" + } + } + } + }, + "@semantic-release/error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", + "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==" + }, + "@semantic-release/git": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@semantic-release/git/-/git-10.0.1.tgz", + "integrity": "sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==", + "dev": true, + "requires": { + "@semantic-release/error": "^3.0.0", + "aggregate-error": "^3.0.0", + "debug": "^4.0.0", + "dir-glob": "^3.0.0", + "execa": "^5.0.0", + "lodash": "^4.17.4", + "micromatch": "^4.0.0", + "p-reduce": "^2.0.0" + }, + "dependencies": { + "@semantic-release/error": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", + "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", + "dev": true }, - "fill-range": { - "version": "7.0.1", - "requires": { - "to-regex-range": "^5.0.1" - } + "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, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - } + "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 }, - "find-cache-dir": { - "version": "3.3.2", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "find-up": { - "version": "2.1.0", - "requires": { - "locate-path": "^2.0.0" - } + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } }, - "find-versions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz", - "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==", - "requires": { - "semver-regex": "^4.0.5" - } + "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 }, - "fn.name": { - "version": "1.1.0", - "dev": true - }, - "follow-redirects": { - "version": "1.15.1", - "dev": true - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "requires": { - "is-callable": "^1.1.3" - } + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, - "foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "dependencies": { - "signal-exit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", - "dev": true - } - } + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true }, - "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==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, - "formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "dev": true, - "requires": { - "fetch-blob": "^3.1.2" - } + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true - }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", - "dev": true - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "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==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } }, - "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 + "p-reduce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", + "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", + "dev": true + } + } + }, + "@semantic-release/github": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-9.0.4.tgz", + "integrity": "sha512-kQCGFAsBErvCR6hzNuzu63cj4erQN2krm9zQlg8vl4j5X0mL0d/Ras0wmL5Gkr1TuSS2lweME7M4J5zvtDDDSA==", + "requires": { + "@octokit/core": "^5.0.0", + "@octokit/plugin-paginate-rest": "^8.0.0", + "@octokit/plugin-retry": "^6.0.0", + "@octokit/plugin-throttling": "^7.0.0", + "@semantic-release/error": "^4.0.0", + "aggregate-error": "^4.0.1", + "debug": "^4.3.4", + "dir-glob": "^3.0.1", + "globby": "^13.1.4", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "issue-parser": "^6.0.0", + "lodash-es": "^4.17.21", + "mime": "^3.0.0", + "p-filter": "^3.0.0", + "url-join": "^5.0.0" + }, + "dependencies": { + "agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "requires": { + "debug": "^4.3.4" + } }, - "fs-extra": { - "version": "8.1.0", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } }, - "fs.realpath": { - "version": "1.0.0", - "dev": true + "globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } }, - "fsevents": { - "version": "2.3.2", - "dev": true, - "optional": true + "http-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "requires": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + } }, - "function-bind": { - "version": "1.1.1" - }, - "function.prototype.name": { - "version": "1.1.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } + "https-proxy-agent": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz", + "integrity": "sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==", + "requires": { + "agent-base": "^7.0.2", + "debug": "4" + } }, - "functional-red-black-tree": { - "version": "1.0.1", - "dev": true - }, - "functions-have-names": { - "version": "1.2.3", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "dev": true - }, - "get-assigned-identifiers": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", - "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "get-func-name": { - "version": "2.0.0", - "dev": true - }, - "get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - } + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" }, - "get-package-type": { - "version": "0.1.0", - "dev": true + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "get-port": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-6.1.2.tgz", - "integrity": "sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw==", - "dev": true + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" + } + } + }, + "@semantic-release/npm": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-10.0.4.tgz", + "integrity": "sha512-6R3timIQ7VoL2QWRkc9DG8v74RQtRp7UOe/2KbNaqwJ815qOibAv65bH3RtTEhs4axEaHoZf7HDgFs5opaZ9Jw==", + "requires": { + "@semantic-release/error": "^4.0.0", + "aggregate-error": "^4.0.1", + "execa": "^7.0.0", + "fs-extra": "^11.0.0", + "lodash-es": "^4.17.21", + "nerf-dart": "^1.0.0", + "normalize-url": "^8.0.0", + "npm": "^9.5.0", + "rc": "^1.2.8", + "read-pkg": "^8.0.0", + "registry-auth-token": "^5.0.0", + "semver": "^7.1.2", + "tempy": "^3.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } }, - "get-port-please": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.1.1.tgz", - "integrity": "sha512-3UBAyM3u4ZBVYDsxOQfJDxEa6XTbpBDrOjp4mf7ExFRt5BKs/QywQQiJsh2B+hxcZLSapWqCRvElUe8DnKcFHA==", - "dev": true + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" - }, - "get-symbol-description": { - "version": "1.0.0", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } + "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==", + "requires": { + "lru-cache": "^6.0.0" + } }, - "git-log-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.0.tgz", - "integrity": "sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA==", - "requires": { - "argv-formatter": "~1.0.0", - "spawn-error-forwarder": "~1.0.0", - "split2": "~1.0.0", - "stream-combiner2": "~1.1.1", - "through2": "~2.0.0", - "traverse": "~0.6.6" - }, - "dependencies": { - "split2": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", - "integrity": "sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==", - "requires": { - "through2": "~2.0.0" - } - } - } + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } + } + }, + "@semantic-release/release-notes-generator": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-11.0.4.tgz", + "integrity": "sha512-j0Znnwq9IdWTCGzqSlkLv4MpALTsVDZxcVESzJCNN8pK2BYQlYaKsdZ1Ea/+7RlppI3vjhEi33ZKmjSGY1FLKw==", + "requires": { + "conventional-changelog-angular": "^6.0.0", + "conventional-changelog-writer": "^6.0.0", + "conventional-commits-filter": "^3.0.0", + "conventional-commits-parser": "^4.0.0", + "debug": "^4.0.0", + "get-stream": "^7.0.0", + "import-from": "^4.0.0", + "into-stream": "^7.0.0", + "lodash-es": "^4.17.21", + "read-pkg-up": "^10.0.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } }, - "glob": { - "version": "7.2.3", - "dev": true, - "requires": { - "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" - } + "get-stream": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-7.0.1.tgz", + "integrity": "sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==" }, - "glob-parent": { - "version": "5.1.2", - "requires": { - "is-glob": "^4.0.1" - } + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "@sinonjs/commons": { + "version": "1.8.3", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "8.1.0", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@sinonjs/formatio": { + "version": "3.2.2", + "dev": true, + "requires": { + "@sinonjs/commons": "^1", + "@sinonjs/samsam": "^3.1.0" + }, + "dependencies": { + "@sinonjs/samsam": { + "version": "3.3.3", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.3.0", + "array-from": "^2.1.1", + "lodash": "^4.17.15" + } }, - "globals": { - "version": "11.12.0", - "dev": true + "lodash": { + "version": "4.17.21", + "dev": true + } + } + }, + "@sinonjs/samsam": { + "version": "2.1.3", + "dev": true + }, + "@sinonjs/text-encoding": { + "version": "0.7.1", + "dev": true + }, + "@tootallnate/once": { + "version": "1.1.2", + "dev": true + }, + "@ts-morph/common": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.19.0.tgz", + "integrity": "sha512-Unz/WHmd4pGax91rdIKWi51wnVUW11QttMEPpBiBgIewnc9UQIX7UDLxr5vRlqeByXCwhkF6VabSsI0raWcyAQ==", + "dev": true, + "requires": { + "fast-glob": "^3.2.12", + "minimatch": "^7.4.3", + "mkdirp": "^2.1.6", + "path-browserify": "^1.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } }, - "globby": { - "version": "11.1.0", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "ignore": { - "version": "5.2.0", - "dev": true - } - } + "minimatch": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", + "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3" - } + "mkdirp": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz", + "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==", + "dev": true + } + } + }, + "@tsconfig/node10": { + "version": "1.0.9", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.3", + "dev": true + }, + "@types/babel__core": { + "version": "7.1.19", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.4", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.1", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.17.1", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/chai": { + "version": "4.3.1", + "dev": true + }, + "@types/d3-scale": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.3.tgz", + "integrity": "sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==", + "requires": { + "@types/d3-time": "*" + } + }, + "@types/d3-scale-chromatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", + "integrity": "sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw==" + }, + "@types/d3-time": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz", + "integrity": "sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==" + }, + "@types/debug": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", + "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", + "requires": { + "@types/ms": "*" + } + }, + "@types/estree": { + "version": "0.0.39", + "dev": true + }, + "@types/fs-extra": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.2.tgz", + "integrity": "sha512-SvSrYXfWSc7R4eqnOzbQF4TZmfpNSM9FrSWLU3EUnWBuyZqNBOrv1B1JA3byUDPUl9z4Ab3jeZG2eDdySlgNMg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/graceful-fs": { + "version": "4.1.5", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.1.tgz", + "integrity": "sha512-HTLpVXHrY69556ozYkcq47TtQJXpcWAWfkoqz+ZGz2JnmZhzlRjprCIyFnetSy8gpDWwTTGBcRVv1J1I1vBrHw==", + "dev": true, + "requires": { + "jest-diff": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, + "@types/json-schema": { + "version": "7.0.11", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "dev": true + }, + "@types/lodash": { + "version": "3.10.2", + "dev": true + }, + "@types/mdast": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.12.tgz", + "integrity": "sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==", + "requires": { + "@types/unist": "^2" + } + }, + "@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 + }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" + }, + "@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" + }, + "@types/node": { + "version": "13.13.52", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" + }, + "@types/prettier": { + "version": "2.6.3", + "dev": true + }, + "@types/resolve": { + "version": "1.17.1", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/screeps": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@types/screeps/-/screeps-3.3.3.tgz", + "integrity": "sha512-r+ru4iNv8wNaNBWvk2gMXYpG8Ok1GJ8NVV9WBIHa5I+hz2QGttnAus+1whDMIzES8x3yK83Usz+gHqm8ehIW7w==", + "dev": true + }, + "@types/sinon": { + "version": "5.0.7", + "dev": true + }, + "@types/sinon-chai": { + "version": "3.2.8", + "dev": true, + "requires": { + "@types/chai": "*", + "@types/sinon": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.1", + "dev": true + }, + "@types/unist": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.7.tgz", + "integrity": "sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==" + }, + "@types/validator": { + "version": "13.7.17", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.17.tgz", + "integrity": "sha512-aqayTNmeWrZcvnG2MG9eGYI6b7S5fl+yKgPs6bAjOTwPS316R5SxBGKvtSExfyoJU7pIeHJfsHI0Ji41RVMkvQ==", + "dev": true + }, + "@types/ws": { + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/yargs": { + "version": "16.0.4", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.0", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "4.33.0", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "graceful-fs": { - "version": "4.2.10" - }, - "handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.0" - } + "ignore": { + "version": "5.2.0", + "dev": true }, - "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==" + "ms": { + "version": "2.1.2", + "dev": true }, - "has": { - "version": "1.0.3", - "requires": { - "function-bind": "^1.1.1" - } + "regexpp": { + "version": "3.2.0", + "dev": true }, - "has-bigints": { - "version": "1.0.2", - "dev": true + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/experimental-utils": { + "version": "4.33.0", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + } }, - "has-flag": { - "version": "3.0.0" + "eslint-visitor-keys": { + "version": "2.1.0", + "dev": true + } + } + }, + "@typescript-eslint/parser": { + "version": "4.33.0", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "debug": "^4.3.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "has-property-descriptors": { - "version": "1.0.0", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } + "ms": { + "version": "2.1.2", + "dev": true + } + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.33.0", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" + } + }, + "@typescript-eslint/types": { + "version": "4.33.0", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "4.33.0", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true - }, - "has-symbols": { - "version": "1.0.3", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } + "ms": { + "version": "2.1.2", + "dev": true }, - "heap": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", - "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.33.0", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.33.0", + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "dev": true + } + } + }, + "@vladfrangu/async_event_emitter": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz", + "integrity": "sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==", + "dev": true + }, + "abab": { + "version": "2.0.6", + "dev": true + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "accumulate-stream": { + "version": "5.0.0", + "dev": true, + "requires": { + "bytes": "^3.1.0", + "ms": "^2.1.3" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "dev": true + } + } + }, + "acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true + }, + "acorn-globals": { + "version": "6.0.0", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "dev": true + } + } + }, + "acorn-jsx": { + "version": "5.3.2", + "dev": true, + "requires": {} + }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + } + } + }, + "acorn-walk": { + "version": "7.2.0", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "dev": true, + "requires": { + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "hook-std": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-3.0.0.tgz", - "integrity": "sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==" + "ms": { + "version": "2.1.2", + "dev": true + } + } + }, + "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==", + "requires": { + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } }, - "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==", - "requires": { - "lru-cache": "^7.5.1" - }, - "dependencies": { - "lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" - } - } + "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 + } + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true, + "optional": true + }, + "ansi-colors": { + "version": "4.1.3", + "dev": true + }, + "ansi-escapes": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", + "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", + "requires": { + "type-fest": "^3.0.0" + }, + "dependencies": { + "type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==" + } + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "3.2.1", + "requires": { + "color-convert": "^1.9.0" + } + }, + "ansicolors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==" + }, + "anymatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "apache-crypt": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.6.tgz", + "integrity": "sha512-072WetlM4blL8PREJVeY+WHiUh1R5VNt2HfceGS8aKqttPHcmqE5pkKuXPz/ULmJOFkc8Hw3kfKl6vy7Qka6DA==", + "dev": true, + "requires": { + "unix-crypt-td-js": "^1.1.4" + } + }, + "apache-md5": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.8.tgz", + "integrity": "sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA==", + "dev": true + }, + "arg": { + "version": "4.1.3", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "argv-formatter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", + "integrity": "sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==" + }, + "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 + }, + "array-from": { + "version": "2.1.1", + "dev": true + }, + "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==" + }, + "array-includes": { + "version": "3.1.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + } + }, + "array-union": { + "version": "2.1.0", + "dev": true + }, + "array.prototype.flat": { + "version": "1.3.0", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + } + }, + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", + "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", + "dev": true, + "requires": { + "es6-object-assign": "^1.1.0", + "is-nan": "^1.2.1", + "object-is": "^1.0.1", + "util": "^0.12.0" + } + }, + "assertion-error": { + "version": "1.1.0", + "dev": true + }, + "ast-transform": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/ast-transform/-/ast-transform-0.0.0.tgz", + "integrity": "sha512-e/JfLiSoakfmL4wmTGPjv0HpTICVmxwXgYOB8x+mzozHL8v+dSfCbrJ8J8hJ0YBP0XcYu1aLZ6b/3TnxNK3P2A==", + "dev": true, + "requires": { + "escodegen": "~1.2.0", + "esprima": "~1.0.4", + "through": "~2.3.4" + }, + "dependencies": { + "escodegen": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.2.0.tgz", + "integrity": "sha512-yLy3Cc+zAC0WSmoT2fig3J87TpQ8UaZGx8ahCAs9FL8qNbyV7CVyPKS74DG4bsHiL5ew9sxdYx131OkBQMFnvA==", + "dev": true, + "requires": { + "esprima": "~1.0.4", + "estraverse": "~1.5.0", + "esutils": "~1.0.0", + "source-map": "~0.1.30" + } }, - "html-encoding-sniffer": { - "version": "2.0.1", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.5" - } + "esprima": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA==", + "dev": true }, - "html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", - "dev": true - }, - "html-escaper": { - "version": "2.0.2", - "dev": true - }, - "htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } + "estraverse": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz", + "integrity": "sha512-FpCjJDfmo3vsc/1zKSeqR5k42tcIhxFIlvq+h9j0fO2q/h2uLKyweq7rYJ+0CoVvrGQOxIS5wyBrW/+vF58BUQ==", + "dev": true }, - "http-auth": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-4.1.9.tgz", - "integrity": "sha512-kvPYxNGc9EKGTXvOMnTBQw2RZfuiSihK/mLw/a4pbtRueTE45S55Lw/3k5CktIf7Ak0veMKEIteDj4YkNmCzmQ==", - "dev": true, - "requires": { - "apache-crypt": "^1.1.2", - "apache-md5": "^1.0.6", - "bcryptjs": "^2.4.3", - "uuid": "^8.3.2" - }, - "dependencies": { - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - } - } + "esutils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz", + "integrity": "sha512-x/iYH53X3quDwfHRz4y8rn4XcEwwCJeWsul9pF1zldMbGtgOtMNBEOuYWwB1EQlK2LRa1fev3YAgym/RElp5Cg==", + "dev": true }, - "http-auth-connect": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/http-auth-connect/-/http-auth-connect-1.0.6.tgz", - "integrity": "sha512-yaO0QSCPqGCjPrl3qEEHjJP+lwZ6gMpXLuCBE06eWwcXomkI5TARtu0kxf9teFuBj6iaV3Ybr15jaWUvbzNzHw==", - "dev": true + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", + "dev": true, + "optional": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "ast-types": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.7.8.tgz", + "integrity": "sha512-RIOpVnVlltB6PcBJ5BMLx+H+6JJ/zjDGU0t7f0L6c2M1dqcK92VQopLBlPQ9R80AVXelfqYgjcPLtHtDbNFg0Q==", + "dev": true + }, + "async": { + "version": "3.2.4", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "dev": true + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, + "axios": { + "version": "0.21.4", + "dev": true, + "requires": { + "follow-redirects": "^1.14.0" + } + }, + "babel-jest": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "dependencies": { - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - } - } + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "http-proxy-agent": { - "version": "4.0.1", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "dev": true - } - } + "color-name": { + "version": "1.1.4", + "dev": true }, - "https-proxy-agent": { - "version": "5.0.1", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "dev": true - } - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "human-signals": { - "version": "2.1.0", - "dev": true - }, - "i18next": { - "version": "22.5.1", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.5.1.tgz", - "integrity": "sha512-8TGPgM3pAD+VRsMtUMNknRz3kzqwp/gPALrWMsDnmC1mKqJwpWyooQRLMcbTwq8z8YwSmuj+ZYvc+xCuEpkssA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.20.6" - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "27.5.1", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", + "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.2", + "semver": "^6.3.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", + "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.4.2", + "core-js-compat": "^3.31.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", + "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.4.2" + } + }, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "27.5.1", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "dev": true + }, + "base32768": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base32768/-/base32768-3.0.1.tgz", + "integrity": "sha512-dNGY49X0IKN1kDl9y/6sii1Vced+f+4uAqOeRz/PshjNdPwSD+ntnHOg/YgDbLSZetp94d/XxGdpfbXDKv8BVQ==" + }, + "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 + }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", + "dev": true + }, + "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==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "bottleneck": { + "version": "2.19.5", + "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", + "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" + }, + "brace-expansion": { + "version": "1.1.11", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "requires": { + "fill-range": "^7.0.1" + } + }, + "brfs": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brfs/-/brfs-2.0.2.tgz", + "integrity": "sha512-IrFjVtwu4eTJZyu8w/V2gxU7iLTtcHih67sgEdzrhjLBMHp2uYefUBfdM4k2UvcuWMgV7PQDZHSLeNWnLFKWVQ==", + "dev": true, + "requires": { + "quote-stream": "^1.0.1", + "resolve": "^1.1.5", + "static-module": "^3.0.2", + "through2": "^2.0.0" + } + }, + "brotli": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", + "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", + "dev": true, + "requires": { + "base64-js": "^1.1.2" + } + }, + "browser-process-hrtime": { + "version": "1.0.0", + "dev": true + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", + "dev": true + } + } + }, + "browserify-optional": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-optional/-/browserify-optional-1.0.1.tgz", + "integrity": "sha512-VrhjbZ+Ba5mDiSYEuPelekQMfTbhcA2DhLk2VQWqdcCROWeFqlTcXZ7yfRkXCIl8E+g4gINJYJiRB7WEtfomAQ==", + "dev": true, + "requires": { + "ast-transform": "0.0.0", + "ast-types": "^0.7.0", + "browser-resolve": "^1.8.1" + } + }, + "browserslist": { + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + } + }, + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, + "bser": { + "version": "2.1.1", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", + "dev": true + }, + "buffer-from": { + "version": "1.1.2", + "dev": true + }, + "bufferutil": { + "version": "4.0.6", + "dev": true, + "optional": true, + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "buildcheck": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz", + "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==", + "dev": true, + "optional": true + }, + "builtin-modules": { + "version": "3.3.0", + "dev": true + }, + "busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dev": true, + "requires": { + "streamsearch": "^1.1.0" + } + }, + "bytes": { + "version": "3.1.2", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==", + "dev": true + }, + "callsites": { + "version": "3.1.0" + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "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==", + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, + "caniuse-lite": { + "version": "1.0.30001517", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz", + "integrity": "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==", + "dev": true + }, + "cardinal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", + "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==", + "requires": { + "ansicolors": "~0.3.2", + "redeyed": "~2.1.0" + } + }, + "chai": { + "version": "4.3.6", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + } + }, + "chalk": { + "version": "2.4.2", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chance": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/chance/-/chance-1.1.9.tgz", + "integrity": "sha512-TfxnA/DcZXRTA4OekA2zL9GH8qscbbl6X0ZqU4tXhGveVY/mXWvEQLt5GwZcYXTEyEFflVtj+pG8nc8EwSm1RQ==", + "dev": true + }, + "char-regex": { + "version": "1.0.2", + "dev": true + }, + "character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==" + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "dev": true + }, + "check-error": { + "version": "1.0.2", + "dev": true + }, + "cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "dev": true, + "requires": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "dependencies": { + "parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "requires": { + "entities": "^4.4.0" + } + } + } + }, + "cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + } + }, + "child-shell": { + "version": "5.0.0", + "dev": true, + "requires": { + "accumulate-stream": "^5.0.0", + "debug": "^4.3.2", + "kind-of": "^6.0.3", + "nanoid": "^3.1.30", + "p-queue": "6.6.2", + "p-timeout": "4.1.0", + "trim-buffer": "^5.0.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "iconv-lite": { - "version": "0.4.24", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } + "ms": { + "version": "2.1.2", + "dev": true + } + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "ci-info": { + "version": "3.3.2", + "dev": true + }, + "cjs-module-lexer": { + "version": "1.2.2", + "dev": true + }, + "class-validator": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.0.tgz", + "integrity": "sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==", + "dev": true, + "requires": { + "@types/validator": "^13.7.10", + "libphonenumber-js": "^1.10.14", + "validator": "^13.7.0" + } + }, + "clean-stack": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", + "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", + "requires": { + "escape-string-regexp": "5.0.0" + }, + "dependencies": { + "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==" + } + } + }, + "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, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", + "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", + "dev": true + }, + "cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true + }, + "co": { + "version": "4.6.0", + "dev": true + }, + "code-block-writer": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-12.0.0.tgz", + "integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==", + "dev": true + }, + "collect-v8-coverage": { + "version": "1.0.1", + "dev": true + }, + "color": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "color-convert": { + "version": "1.9.3", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3" + }, + "color-string": { + "version": "1.9.1", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "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 + }, + "colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true + }, + "colorspace": { + "version": "1.1.4", + "dev": true, + "requires": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, + "combined-stream": { + "version": "1.0.8", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "dev": true + }, + "comment-parser": { + "version": "1.1.2", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "dev": true + }, + "compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "requires": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "concat-map": { + "version": "0.0.1", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true + "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 }, - "ignore": { - "version": "4.0.6", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + } + }, + "conventional-changelog-angular": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz", + "integrity": "sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==", + "requires": { + "compare-func": "^2.0.0" + } + }, + "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==", + "requires": { + "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" + }, + "dependencies": { + "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==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "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==", + "requires": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.1" + } + }, + "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==", + "requires": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.3.5", + "meow": "^8.1.2", + "split2": "^3.2.2" + } + }, + "convert-source-map": { + "version": "1.8.0", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "dev": true + } + } + }, + "core-js-compat": { + "version": "3.31.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.1.tgz", + "integrity": "sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA==", + "dev": true, + "requires": { + "browserslist": "^4.21.9" + } + }, + "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==" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "cose-base": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", + "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", + "requires": { + "layout-base": "^1.0.0" + } + }, + "cosmiconfig": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "requires": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, - "import-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz", - "integrity": "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==" - }, - "import-local": { - "version": "3.1.0", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + } + } + }, + "cpu-features": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.9.tgz", + "integrity": "sha512-AKjgn2rP2yJyfbepsmLfiYcmtNn/2eUvocUyM/09yB0YDiz39HteK/5/T4Onf0pmdYDMgkBoGvRLvEguzyL7wQ==", + "dev": true, + "optional": true, + "requires": { + "buildcheck": "~0.0.6", + "nan": "^2.17.0" + } + }, + "create-require": { + "version": "1.1.1", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "dev": true + }, + "crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==", + "dev": true + }, + "crypto-random-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + "requires": { + "type-fest": "^1.0.1" + }, + "dependencies": { + "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==" + } + } + }, + "css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true + }, + "cssom": { + "version": "0.4.4", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "dev": true + } + } + }, + "cytoscape": { + "version": "3.25.0", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.25.0.tgz", + "integrity": "sha512-7MW3Iz57mCUo6JQCho6CmPBCbTlJr7LzyEtIkutG255HLVd4XuBg2I9BkTZLI/e4HoaOB/BiAzXuQybQ95+r9Q==", + "requires": { + "heap": "^0.2.6", + "lodash": "^4.17.21" + }, + "dependencies": { + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + } + } + }, + "cytoscape-cose-bilkent": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", + "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", + "requires": { + "cose-base": "^1.0.0" + } + }, + "cytoscape-fcose": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", + "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", + "requires": { + "cose-base": "^2.2.0" + }, + "dependencies": { + "cose-base": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", + "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", + "requires": { + "layout-base": "^2.0.0" + } }, - "imurmurhash": { - "version": "0.1.4", - "dev": true + "layout-base": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", + "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==" + } + } + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "d3": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", + "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==", + "requires": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + } + }, + "d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "requires": { + "internmap": "1 - 2" + } + }, + "d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==" + }, + "d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "requires": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + } + }, + "d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "requires": { + "d3-path": "1 - 3" + } + }, + "d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==" + }, + "d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "requires": { + "d3-array": "^3.2.0" + } + }, + "d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "requires": { + "delaunator": "5" + } + }, + "d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==" + }, + "d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "requires": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + } + }, + "d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "requires": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" }, - "indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==" + "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==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==" + }, + "d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "requires": { + "d3-dsv": "1 - 3" + } + }, + "d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "requires": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + } + }, + "d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==" + }, + "d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", + "requires": { + "d3-array": "2.5.0 - 3" + } + }, + "d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==" + }, + "d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "requires": { + "d3-color": "1 - 3" + } + }, + "d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==" + }, + "d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==" + }, + "d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==" + }, + "d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==" + }, + "d3-sankey": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", + "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", + "requires": { + "d3-array": "1 - 2", + "d3-shape": "^1.2.0" + }, + "dependencies": { + "d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "requires": { + "internmap": "^1.0.0" + } }, - "inflight": { - "version": "1.0.6", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } + "d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" }, - "inherits": { - "version": "2.0.4" + "d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "requires": { + "d3-path": "1" + } + }, + "internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + } + } + }, + "d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "requires": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + } + }, + "d3-scale-chromatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", + "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", + "requires": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + } + }, + "d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==" + }, + "d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "requires": { + "d3-path": "^3.1.0" + } + }, + "d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "requires": { + "d3-array": "2 - 3" + } + }, + "d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "requires": { + "d3-time": "1 - 3" + } + }, + "d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==" + }, + "d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "requires": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + } + }, + "d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "requires": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + } + }, + "dagre-d3-es": { + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.10.tgz", + "integrity": "sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==", + "requires": { + "d3": "^7.8.2", + "lodash-es": "^4.17.21" + } + }, + "dash-ast": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", + "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==", + "dev": true + }, + "data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "dev": true + }, + "data-urls": { + "version": "2.0.0", + "dev": true, + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } + }, + "dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==" + }, + "dayjs": { + "version": "1.11.9", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", + "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==" + }, + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decache": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.2.tgz", + "integrity": "sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==", + "dev": true, + "requires": { + "callsite": "^1.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" + }, + "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==", + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==" + } + } + }, + "decimal.js": { + "version": "10.3.1", + "dev": true + }, + "decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "requires": { + "character-entities": "^2.0.0" + } + }, + "dedent": { + "version": "0.7.0", + "dev": true + }, + "deep-eql": { + "version": "3.0.1", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "deep-is": { + "version": "0.1.4", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "dev": true + }, + "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, + "requires": { + "clone": "^1.0.2" + } + }, + "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 + }, + "define-properties": { + "version": "1.1.4", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "delaunator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", + "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", + "requires": { + "robust-predicates": "^3.0.0" + } + }, + "delayed-stream": { + "version": "1.0.0", + "dev": true + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" + }, + "dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "detect-newline": { + "version": "3.1.0", + "dev": true + }, + "dfa": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", + "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", + "dev": true + }, + "diff": { + "version": "3.5.0", + "dev": true + }, + "diff-sequences": { + "version": "27.5.1", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "requires": { + "path-type": "^4.0.0" + } + }, + "discord-api-types": { + "version": "0.37.50", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.50.tgz", + "integrity": "sha512-X4CDiMnDbA3s3RaUXWXmgAIbY1uxab3fqe3qwzg5XutR3wjqi7M3IkgQbsIBzpqBN2YWr/Qdv7JrFRqSgb4TFg==", + "dev": true + }, + "discord.js": { + "version": "14.13.0", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.13.0.tgz", + "integrity": "sha512-Kufdvg7fpyTEwANGy9x7i4od4yu5c6gVddGi5CKm4Y5a6sF0VBODObI3o0Bh7TGCj0LfNT8Qp8z04wnLFzgnbA==", + "dev": true, + "requires": { + "@discordjs/builders": "^1.6.5", + "@discordjs/collection": "^1.5.3", + "@discordjs/formatters": "^0.3.2", + "@discordjs/rest": "^2.0.1", + "@discordjs/util": "^1.0.1", + "@discordjs/ws": "^1.0.1", + "@sapphire/snowflake": "^3.5.1", + "@types/ws": "^8.5.5", + "discord-api-types": "0.37.50", + "fast-deep-equal": "^3.1.3", + "lodash.snakecase": "^4.1.1", + "tslib": "^2.6.1", + "undici": "5.22.1", + "ws": "^8.13.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "inside": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/inside/-/inside-1.0.0.tgz", - "integrity": "sha512-tvFwvS4g7q6iDot/4FjtWFHwwpv6TVvEumbTdLQilk1F07ojakbXPQcvf3kMAlyNDpzKRzn+d33O3RuXODuxZQ==", - "dev": true - }, - "internal-slot": { - "version": "1.0.3", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } + "ws": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", + "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", + "dev": true, + "requires": {} + } + } + }, + "docker-modem": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-5.0.3.tgz", + "integrity": "sha512-89zhop5YVhcPEt5FpUFGr3cDyceGhq/F9J+ZndQ4KfqNvfbJpPMfgeixFgUj5OjCYAboElqODxY5Z1EBsSa6sg==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "readable-stream": "^3.5.0", + "split-ca": "^1.0.1", + "ssh2": "^1.15.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "internmap": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==" - }, - "interpret": { - "version": "1.4.0", - "dev": true - }, - "into-stream": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-7.0.0.tgz", - "integrity": "sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==", - "requires": { - "from2": "^2.3.0", - "p-is-promise": "^3.0.0" - } + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "dockerode": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-4.0.2.tgz", + "integrity": "sha512-9wM1BVpVMFr2Pw3eJNXrYYt6DT9k0xMcsSCjtPvyQ+xa1iPg/Mo3T/gUcwI0B2cczqCeCYRPF8yFYDwtFXT0+w==", + "dev": true, + "requires": { + "@balena/dockerignore": "^1.0.2", + "docker-modem": "^5.0.3", + "tar-fs": "~2.0.1" + } + }, + "doctrine": { + "version": "3.0.0", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domexception": { + "version": "2.0.1", + "dev": true, + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "dev": true + } + } + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0" + } + }, + "dompurify": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.5.tgz", + "integrity": "sha512-F9e6wPGtY+8KNMRAVfxeCOHU0/NPWMSENNq4pQctuXRqqdEPW7q3CrLbR5Nse044WwacyjHGOMlvNsBe1y6z9A==" + }, + "domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + } + }, + "dot": { + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/dot/-/dot-2.0.0-beta.1.tgz", + "integrity": "sha512-kxM7fSnNQTXOmaeGuBSXM8O3fEsBb7XSDBllkGbRwa0lJSJTxxDE/4eSNGLKZUmlFw0f1vJ5qSV2BljrgQtgIA==", + "dev": true + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "requires": { + "is-obj": "^2.0.0" + } + }, + "dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "dev": true + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "requires": { + "readable-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } }, - "inversify": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/inversify/-/inversify-6.0.1.tgz", - "integrity": "sha512-B3ex30927698TJENHR++8FfEaJGqoWOgI6ZY5Ht/nLUsFCwHn6akbwtnUAPCgUepAnTpe2qHxhDNjoKLyz6rgQ==", - "dev": true - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } + "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==" }, - "is-arrayish": { - "version": "0.2.1" + "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==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.473", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.473.tgz", + "integrity": "sha512-aVfC8+440vGfl06l8HKKn8/PD5jRfSnLkTTD65EFvU46igbpQRri1gxSzW9/+TeUlwYzrXk1sw867T96zlyECA==", + "dev": true + }, + "elkjs": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.8.2.tgz", + "integrity": "sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==" + }, + "emittery": { + "version": "0.8.1", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "enabled": { + "version": "2.0.0", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enquirer": { + "version": "2.3.6", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true + }, + "env-ci": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-9.1.1.tgz", + "integrity": "sha512-Im2yEWeF4b2RAMAaWvGioXk6m0UNaIjD8hj28j2ij5ldnIFrDQT0+pzDvpbRkcjurhXhf/AsBKv8P2rtmGi9Aw==", + "requires": { + "execa": "^7.0.0", + "java-properties": "^1.0.2" + } + }, + "error-ex": { + "version": "1.3.2", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.20.1", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-shim-unscopables": { + "version": "1.0.0", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "dev": true, + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "es6-object-assign": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", + "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", + "dev": true + }, + "es6-set": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", + "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", + "dev": true, + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "es6-iterator": "~2.0.3", + "es6-symbol": "^3.1.3", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "dependencies": { + "type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + } + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "escalade": { + "version": "3.1.1" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5" + }, + "escodegen": { + "version": "2.0.0", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "eslint": { + "version": "7.32.0", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } }, - "is-bigint": { - "version": "1.0.4", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } + "acorn": { + "version": "7.4.1", + "dev": true }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "is-boolean-object": { - "version": "1.1.2", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } + "astral-regex": { + "version": "2.0.0", + "dev": true }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-builtin-module": { - "version": "3.1.0", - "dev": true, - "requires": { - "builtin-modules": "^3.0.0" - } + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "is-callable": { - "version": "1.2.4", - "dev": true + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "is-core-module": { - "version": "2.9.0", - "requires": { - "has": "^1.0.3" - } + "color-name": { + "version": "1.1.4", + "dev": true }, - "is-date-object": { - "version": "1.0.5", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "is-docker": { - "version": "2.2.1", - "dev": true + "escape-string-regexp": { + "version": "4.0.0", + "dev": true }, - "is-extglob": { - "version": "2.1.1" + "eslint-scope": { + "version": "5.1.1", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "dev": true + } + } }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-generator-fn": { - "version": "2.1.0", - "dev": true - }, - "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, - "requires": { - "has-tostringtag": "^1.0.0" - } + "eslint-visitor-keys": { + "version": "2.1.0", + "dev": true + }, + "espree": { + "version": "7.3.1", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "dev": true + } + } + }, + "file-entry-cache": { + "version": "6.0.1", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "flat-cache": { + "version": "3.0.4", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.5", + "dev": true }, - "is-glob": { - "version": "4.0.3", - "requires": { - "is-extglob": "^2.1.1" - } + "globals": { + "version": "13.15.0", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } }, - "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 - }, - "is-module": { - "version": "1.0.0", - "dev": true - }, - "is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "is-negative-zero": { - "version": "2.0.2", - "dev": true + "json-schema-traverse": { + "version": "1.0.0", + "dev": true }, - "is-number": { - "version": "7.0.0" + "levn": { + "version": "0.4.1", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } }, - "is-number-object": { - "version": "1.0.7", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } + "ms": { + "version": "2.1.2", + "dev": true }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + "optionator": { + "version": "0.9.1", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } }, - "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==" + "prelude-ls": { + "version": "1.2.1", + "dev": true }, - "is-plain-object": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", - "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", - "dev": true - }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "dev": true - }, - "is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "requires": { - "@types/estree": "*" - } + "regexpp": { + "version": "3.2.0", + "dev": true }, - "is-regex": { - "version": "1.1.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } }, - "is-shared-array-buffer": { - "version": "1.0.2", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "slice-ansi": { + "version": "4.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } }, - "is-stream": { - "version": "2.0.1", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } + "strip-json-comments": { + "version": "3.1.1", + "dev": true }, - "is-symbol": { - "version": "1.0.4", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "table": { + "version": "6.8.0", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } } + } }, - "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==", - "requires": { - "text-extensions": "^1.0.0" - } + "type-check": { + "version": "0.4.0", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + } + } + }, + "eslint-config-prettier": { + "version": "7.2.0", + "dev": true, + "requires": {} + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "dev": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "requires": { + "ms": "^2.1.1" + } }, - "is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dev": true, - "requires": { - "which-typed-array": "^1.1.11" - } + "ms": { + "version": "2.1.3", + "dev": true + } + } + }, + "eslint-module-utils": { + "version": "2.7.3", + "dev": true, + "requires": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "requires": { + "ms": "^2.1.1" + } }, - "is-typedarray": { - "version": "1.0.0", - "dev": true + "ms": { + "version": "2.1.3", + "dev": true + } + } + }, + "eslint-plugin-import": { + "version": "2.26.0", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + } + } + }, + "eslint-plugin-jest": { + "version": "24.7.0", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "^4.0.1" + } + }, + "eslint-plugin-jsdoc": { + "version": "31.6.1", + "dev": true, + "requires": { + "comment-parser": "1.1.2", + "debug": "^4.3.1", + "jsdoctypeparser": "^9.0.0", + "lodash": "^4.17.20", + "regextras": "^0.7.1", + "semver": "^7.3.4", + "spdx-expression-parse": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==" - }, - "is-weakref": { - "version": "1.0.2", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } + "lodash": { + "version": "4.17.21", + "dev": true }, - "is-wsl": { - "version": "2.2.0", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } + "ms": { + "version": "2.1.2", + "dev": true }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "eslint-plugin-prettier": { + "version": "3.4.1", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-plugin-screeps": { + "version": "2.1.0", + "dev": true, + "requires": {} + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "dev": true + }, + "esprima": { + "version": "4.0.1" + }, + "esquery": { + "version": "1.4.0", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "dev": true + }, + "estree-is-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz", + "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "event-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz", + "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==", + "dev": true, + "requires": { + "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" + } + }, + "eventemitter3": { + "version": "4.0.7", + "dev": true + }, + "execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "dependencies": { + "human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==" }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "issue-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-6.0.0.tgz", - "integrity": "sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==", - "requires": { - "lodash.capitalize": "^4.2.1", - "lodash.escaperegexp": "^4.1.2", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.uniqby": "^4.7.0" - } + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.2.0", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - } + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==" + } + } + }, + "exit": { + "version": "0.1.2", + "dev": true + }, + "expect": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + } + }, + "ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, + "requires": { + "type": "^2.7.2" + }, + "dependencies": { + "type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + } + } + }, + "fancy-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-2.0.0.tgz", + "integrity": "sha512-9CzxZbACXMUXW13tS0tI8XsGGmxWzO2DmYrGuBJOJ8k8q2K7hwfJA5qHjuPPe8wtsco33YR9wc+Rlr5wYFvhSA==", + "dev": true, + "requires": { + "color-support": "^1.1.3" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "dev": true + }, + "fast-diff": { + "version": "1.2.0", + "dev": true + }, + "fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "dev": true + }, + "fast-xml-parser": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.7.tgz", + "integrity": "sha512-J8r6BriSLO1uj2miOk1NW0YVm8AGOOu3Si2HQp/cSmo6EA4m3fcwu2WKjJ4RK9wMLBtg69y1kS8baDiQBR41Ig==", + "dev": true, + "requires": { + "strnum": "^1.0.5" + } + }, + "fastestsmallesttextencoderdecoder-encodeinto": { + "version": "1.0.22", + "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder-encodeinto/-/fastestsmallesttextencoderdecoder-encodeinto-1.0.22.tgz", + "integrity": "sha512-csOz3cwJjZY75QcPHnY+v6cKWeofYCmhtLVYaurjcRn5vaNXoYe1Leo1ZkiZIxZp796+J5Z+TtmeMbbfYBfiiQ==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fb-watchman": { + "version": "2.0.1", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "fecha": { + "version": "4.2.3", + "dev": true + }, + "fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "dev": true, + "requires": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + } + }, + "figures": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", + "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", + "requires": { + "escape-string-regexp": "^5.0.0", + "is-unicode-supported": "^1.2.0" + }, + "dependencies": { + "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==" + } + } + }, + "fill-range": { + "version": "7.0.1", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "find-cache-dir": { + "version": "3.3.2", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "2.1.0", + "requires": { + "locate-path": "^2.0.0" + } + }, + "find-versions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz", + "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==", + "requires": { + "semver-regex": "^4.0.5" + } + }, + "fn.name": { + "version": "1.1.0", + "dev": true + }, + "follow-redirects": { + "version": "1.15.1", + "dev": true + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "dependencies": { + "signal-exit": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "dev": true + } + } + }, + "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==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, + "requires": { + "fetch-blob": "^3.1.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true + }, + "from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } }, - "istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "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==" }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "dev": true - } - } + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "fs-extra": { + "version": "8.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1" + }, + "function.prototype.name": { + "version": "1.1.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "dev": true + }, + "get-assigned-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-func-name": { + "version": "2.0.0", + "dev": true + }, + "get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + } + }, + "get-package-type": { + "version": "0.1.0", + "dev": true + }, + "get-port": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-6.1.2.tgz", + "integrity": "sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw==", + "dev": true + }, + "get-port-please": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.1.1.tgz", + "integrity": "sha512-3UBAyM3u4ZBVYDsxOQfJDxEa6XTbpBDrOjp4mf7ExFRt5BKs/QywQQiJsh2B+hxcZLSapWqCRvElUe8DnKcFHA==", + "dev": true + }, + "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==" + }, + "get-symbol-description": { + "version": "1.0.0", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "git-log-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.0.tgz", + "integrity": "sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA==", + "requires": { + "argv-formatter": "~1.0.0", + "spawn-error-forwarder": "~1.0.0", + "split2": "~1.0.0", + "stream-combiner2": "~1.1.1", + "through2": "~2.0.0", + "traverse": "~0.6.6" + }, + "dependencies": { + "split2": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", + "integrity": "sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==", + "requires": { + "through2": "~2.0.0" + } + } + } + }, + "glob": { + "version": "7.2.3", + "dev": true, + "requires": { + "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" + } + }, + "glob-parent": { + "version": "5.1.2", + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "11.12.0", + "dev": true + }, + "globby": { + "version": "11.1.0", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "ignore": { + "version": "5.2.0", + "dev": true + } + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "graceful-fs": { + "version": "4.2.10" + }, + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "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==" + }, + "has": { + "version": "1.0.3", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "dev": true + }, + "has-flag": { + "version": "3.0.0" + }, + "has-property-descriptors": { + "version": "1.0.0", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" + }, + "hook-std": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-3.0.0.tgz", + "integrity": "sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==" + }, + "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==", + "requires": { + "lru-cache": "^7.5.1" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" + } + } + }, + "html-encoding-sniffer": { + "version": "2.0.1", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.5" + } + }, + "html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "dev": true + }, + "htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "http-auth": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-4.1.9.tgz", + "integrity": "sha512-kvPYxNGc9EKGTXvOMnTBQw2RZfuiSihK/mLw/a4pbtRueTE45S55Lw/3k5CktIf7Ak0veMKEIteDj4YkNmCzmQ==", + "dev": true, + "requires": { + "apache-crypt": "^1.1.2", + "apache-md5": "^1.0.6", + "bcryptjs": "^2.4.3", + "uuid": "^8.3.2" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + } + } + }, + "http-auth-connect": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/http-auth-connect/-/http-auth-connect-1.0.6.tgz", + "integrity": "sha512-yaO0QSCPqGCjPrl3qEEHjJP+lwZ6gMpXLuCBE06eWwcXomkI5TARtu0kxf9teFuBj6iaV3Ybr15jaWUvbzNzHw==", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "dependencies": { + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "http-proxy-agent": { + "version": "4.0.1", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "istanbul-reports": { - "version": "3.1.4", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } + "ms": { + "version": "2.1.2", + "dev": true + } + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "jackspeak": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.2.tgz", - "integrity": "sha512-mgNtVv4vUuaKA97yxUHoA3+FkuhtxkjdXEWOyB/N76fjy0FjezEt34oy3epBtvCvS+7DyKwqCFWx/oJLV5+kCg==", - "dev": true, - "requires": { - "@isaacs/cliui": "^8.0.2", - "@pkgjs/parseargs": "^0.11.0" - } + "ms": { + "version": "2.1.2", + "dev": true + } + } + }, + "human-signals": { + "version": "2.1.0", + "dev": true + }, + "i18next": { + "version": "22.5.1", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.5.1.tgz", + "integrity": "sha512-8TGPgM3pAD+VRsMtUMNknRz3kzqwp/gPALrWMsDnmC1mKqJwpWyooQRLMcbTwq8z8YwSmuj+ZYvc+xCuEpkssA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.20.6" + } + }, + "iconv-lite": { + "version": "0.4.24", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz", + "integrity": "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==" + }, + "import-local": { + "version": "3.1.0", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "dev": true + }, + "indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==" + }, + "inflight": { + "version": "1.0.6", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "inside": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/inside/-/inside-1.0.0.tgz", + "integrity": "sha512-tvFwvS4g7q6iDot/4FjtWFHwwpv6TVvEumbTdLQilk1F07ojakbXPQcvf3kMAlyNDpzKRzn+d33O3RuXODuxZQ==", + "dev": true + }, + "internal-slot": { + "version": "1.0.3", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==" + }, + "interpret": { + "version": "1.4.0", + "dev": true + }, + "into-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-7.0.0.tgz", + "integrity": "sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==", + "requires": { + "from2": "^2.3.0", + "p-is-promise": "^3.0.0" + } + }, + "inversify": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/inversify/-/inversify-6.0.1.tgz", + "integrity": "sha512-B3ex30927698TJENHR++8FfEaJGqoWOgI6ZY5Ht/nLUsFCwHn6akbwtnUAPCgUepAnTpe2qHxhDNjoKLyz6rgQ==", + "dev": true + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1" + }, + "is-bigint": { + "version": "1.0.4", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-builtin-module": { + "version": "3.1.0", + "dev": true, + "requires": { + "builtin-modules": "^3.0.0" + } + }, + "is-callable": { + "version": "1.2.4", + "dev": true + }, + "is-core-module": { + "version": "2.9.0", + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-docker": { + "version": "2.2.1", + "dev": true + }, + "is-extglob": { + "version": "2.1.1" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-generator-fn": { + "version": "2.1.0", + "dev": true + }, + "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, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.3", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "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 + }, + "is-module": { + "version": "1.0.0", + "dev": true + }, + "is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "is-negative-zero": { + "version": "2.0.2", + "dev": true + }, + "is-number": { + "version": "7.0.0" + }, + "is-number-object": { + "version": "1.0.7", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + }, + "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==" + }, + "is-plain-object": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", + "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", + "dev": true + }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "dev": true + }, + "is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "requires": { + "@types/estree": "*" + } + }, + "is-regex": { + "version": "1.1.4", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-stream": { + "version": "2.0.1", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "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==", + "requires": { + "text-extensions": "^1.0.0" + } + }, + "is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "requires": { + "which-typed-array": "^1.1.11" + } + }, + "is-typedarray": { + "version": "1.0.0", + "dev": true + }, + "is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==" + }, + "is-weakref": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-wsl": { + "version": "2.2.0", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "issue-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-6.0.0.tgz", + "integrity": "sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==", + "requires": { + "lodash.capitalize": "^4.2.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.uniqby": "^4.7.0" + } + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "5.2.0", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "dev": true }, - "java-properties": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", - "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==" - }, - "javascript-obfuscator": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/javascript-obfuscator/-/javascript-obfuscator-4.0.2.tgz", - "integrity": "sha512-MRBQREvjEwqEGdwNGG7yp0te5uZBFzrPZdxEs4rDYkPpHhhOQu+E0IhSXP7bO9dIUWXZU0Kkdohsuws525aVGQ==", - "dev": true, - "requires": { - "@javascript-obfuscator/escodegen": "2.3.0", - "@javascript-obfuscator/estraverse": "5.4.0", - "acorn": "8.8.2", - "assert": "2.0.0", - "chalk": "4.1.2", - "chance": "1.1.9", - "class-validator": "0.14.0", - "commander": "10.0.0", - "eslint-scope": "7.1.1", - "eslint-visitor-keys": "3.3.0", - "fast-deep-equal": "3.1.3", - "inversify": "6.0.1", - "js-string-escape": "1.0.1", - "md5": "2.3.0", - "mkdirp": "2.1.3", - "multimatch": "5.0.0", - "opencollective-postinstall": "2.0.3", - "process": "0.11.10", - "reflect-metadata": "0.1.13", - "source-map-support": "0.5.21", - "string-template": "1.0.0", - "stringz": "2.1.0", - "tslib": "2.5.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "commander": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", - "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", - "dev": true - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - } - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "jest": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.1.0.tgz", - "integrity": "sha512-pSQDVwRSwb109Ss13lcMtdfS9r8/w2Zz8+mTUA9VORD66GflCdl8nUFCqM96geOD2EBwWCNURrNAfQsLIDNBdg==", - "dev": true, - "requires": { - "@jest/core": "^27.1.0", - "import-local": "^3.0.2", - "jest-cli": "^27.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "cliui": { - "version": "7.0.4", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "jest-cli": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "yargs": { - "version": "16.2.0", - "dev": true, - "requires": { - "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" - } - } - } + "ms": { + "version": "2.1.2", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "3.1.4", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jackspeak": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.2.tgz", + "integrity": "sha512-mgNtVv4vUuaKA97yxUHoA3+FkuhtxkjdXEWOyB/N76fjy0FjezEt34oy3epBtvCvS+7DyKwqCFWx/oJLV5+kCg==", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, + "java-properties": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", + "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==" + }, + "javascript-obfuscator": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/javascript-obfuscator/-/javascript-obfuscator-4.0.2.tgz", + "integrity": "sha512-MRBQREvjEwqEGdwNGG7yp0te5uZBFzrPZdxEs4rDYkPpHhhOQu+E0IhSXP7bO9dIUWXZU0Kkdohsuws525aVGQ==", + "dev": true, + "requires": { + "@javascript-obfuscator/escodegen": "2.3.0", + "@javascript-obfuscator/estraverse": "5.4.0", + "acorn": "8.8.2", + "assert": "2.0.0", + "chalk": "4.1.2", + "chance": "1.1.9", + "class-validator": "0.14.0", + "commander": "10.0.0", + "eslint-scope": "7.1.1", + "eslint-visitor-keys": "3.3.0", + "fast-deep-equal": "3.1.3", + "inversify": "6.0.1", + "js-string-escape": "1.0.1", + "md5": "2.3.0", + "mkdirp": "2.1.3", + "multimatch": "5.0.0", + "opencollective-postinstall": "2.0.3", + "process": "0.11.10", + "reflect-metadata": "0.1.13", + "source-map-support": "0.5.21", + "string-template": "1.0.0", + "stringz": "2.1.0", + "tslib": "2.5.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "jest-changed-files": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "execa": "^5.0.0", - "throat": "^6.0.1" - }, - "dependencies": { - "execa": { - "version": "5.1.1", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "onetime": { - "version": "5.1.2", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - } - } + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "jest-circus": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "jest-config": { - "version": "27.5.1", - "dev": true, - "requires": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "jest-diff": { - "version": "27.5.1", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "commander": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", + "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", + "dev": true }, - "jest-docblock": { - "version": "27.5.1", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true }, - "jest-each": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, - "jest-environment-jsdom": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" - } + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } }, - "jest-environment-node": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - } + "tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "dev": true + } + } + }, + "jest": { + "version": "27.1.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.1.0.tgz", + "integrity": "sha512-pSQDVwRSwb109Ss13lcMtdfS9r8/w2Zz8+mTUA9VORD66GflCdl8nUFCqM96geOD2EBwWCNURrNAfQsLIDNBdg==", + "dev": true, + "requires": { + "@jest/core": "^27.1.0", + "import-local": "^3.0.2", + "jest-cli": "^27.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "jest-get-type": { - "version": "27.5.1", - "dev": true - }, - "jest-haste-map": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - } + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "jest-jasmine2": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "cliui": { + "version": "7.0.4", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } }, - "jest-leak-detector": { - "version": "27.5.1", - "dev": true, - "requires": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "jest-matcher-utils": { - "version": "27.5.1", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "color-name": { + "version": "1.1.4", + "dev": true }, - "jest-message-util": { - "version": "27.5.1", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "jest-cli": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + } }, - "jest-mock": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*" - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } }, - "jest-pnp-resolver": { - "version": "1.2.2", - "dev": true, - "requires": {} + "yargs": { + "version": "16.2.0", + "dev": true, + "requires": { + "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" + } + } + } + }, + "jest-changed-files": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "dependencies": { + "execa": { + "version": "5.1.1", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } }, - "jest-regex-util": { - "version": "27.5.1", - "dev": true + "mimic-fn": { + "version": "2.1.0", + "dev": true }, - "jest-resolve": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "npm-run-path": { + "version": "4.0.1", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } }, - "jest-resolve-dependencies": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" - } + "onetime": { + "version": "5.1.2", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + } + } + }, + "jest-circus": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "jest-runner": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "jest-runtime": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "execa": { - "version": "5.1.1", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "mimic-fn": { - "version": "2.1.0", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "onetime": { - "version": "5.1.2", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "strip-bom": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "jest-serializer": { - "version": "27.5.1", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } + "color-name": { + "version": "1.1.4", + "dev": true }, - "jest-snapshot": { - "version": "27.5.1", - "dev": true, - "requires": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "semver": { - "version": "7.3.7", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "jest-util": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-config": { + "version": "27.5.1", + "dev": true, + "requires": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "jest-validate": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "leven": "^3.1.0", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "camelcase": { - "version": "6.3.0", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "jest-watcher": { - "version": "27.5.1", - "dev": true, - "requires": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.5.1", - "string-length": "^4.0.1" - }, - "dependencies": { - "ansi-escapes": { - "version": "4.3.2", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-fest": { - "version": "0.21.3", - "dev": true - } - } + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "jest-worker": { - "version": "27.5.1", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "color-name": { + "version": "1.1.4", + "dev": true }, - "js-string-escape": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", - "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", - "dev": true + "has-flag": { + "version": "4.0.0", + "dev": true }, - "js-tokens": { - "version": "4.0.0" + "strip-json-comments": { + "version": "3.1.1", + "dev": true }, - "js-yaml": { - "version": "3.14.1", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-diff": { + "version": "27.5.1", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "jsdoctypeparser": { - "version": "9.0.0", - "dev": true - }, - "jsdom": { - "version": "16.7.0", - "dev": true, - "requires": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "form-data": { - "version": "3.0.1", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "tough-cookie": { - "version": "4.0.0", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - } - } - } + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "jsesc": { - "version": "2.5.2", - "dev": true + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "json-beautify": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/json-beautify/-/json-beautify-1.1.1.tgz", - "integrity": "sha512-17j+Hk2lado0xqKtUcyAjK0AtoHnPSIgktWRsEXgdFQFG9UnaGw6CHa0J7xsvulxRpFl6CrkDFHght1p5ZJc4A==", - "dev": true + "color-name": { + "version": "1.1.4", + "dev": true }, - "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==" + "has-flag": { + "version": "4.0.0", + "dev": true }, - "json-parse-even-better-errors": { - "version": "2.3.1" + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-docblock": { + "version": "27.5.1", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "json-schema-traverse": { - "version": "0.4.1", - "dev": true + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "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==" + "color-name": { + "version": "1.1.4", + "dev": true }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true + "has-flag": { + "version": "4.0.0", + "dev": true }, - "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 + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-environment-jsdom": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + } + }, + "jest-environment-node": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "jest-get-type": { + "version": "27.5.1", + "dev": true + }, + "jest-haste-map": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + } + }, + "jest-jasmine2": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "jsonfile": { - "version": "4.0.0", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==" - }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "just-extend": { - "version": "4.2.1", - "dev": true + "color-name": { + "version": "1.1.4", + "dev": true }, - "khroma": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz", - "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==" + "has-flag": { + "version": "4.0.0", + "dev": true }, - "kind-of": { - "version": "6.0.3" + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-leak-detector": { + "version": "27.5.1", + "dev": true, + "requires": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-matcher-utils": { + "version": "27.5.1", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "kleur": { - "version": "3.0.3", - "dev": true + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "kuler": { - "version": "2.0.0", - "dev": true + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "layout-base": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", - "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==" + "color-name": { + "version": "1.1.4", + "dev": true }, - "leven": { - "version": "3.1.0", - "dev": true + "has-flag": { + "version": "4.0.0", + "dev": true }, - "levn": { - "version": "0.3.0", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-message-util": { + "version": "27.5.1", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "libphonenumber-js": { - "version": "1.10.37", - "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.37.tgz", - "integrity": "sha512-Z10PCaOCiAxbUxLyR31DNeeNugSVP6iv/m7UrSKS5JHziEMApJtgku4e9Q69pzzSC9LnQiM09sqsGf2ticZnMw==", - "dev": true + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "lines-and-columns": { - "version": "1.2.4" - }, - "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==", - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "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==", - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - } - } + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "locate-path": { - "version": "2.0.0", - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } + "color-name": { + "version": "1.1.4", + "dev": true }, - "lodash": { - "version": "3.10.1", - "dev": true - }, - "lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" - }, - "lodash.capitalize": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", - "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "lodash.escaperegexp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", - "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==" - }, - "lodash.get": { - "version": "4.4.2", - "dev": true - }, - "lodash.ismatch": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==" - }, - "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==" - }, - "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==" - }, - "lodash.merge": { - "version": "4.6.2", - "dev": true - }, - "lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", - "dev": true - }, - "lodash.truncate": { - "version": "4.4.2", - "dev": true - }, - "lodash.uniqby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", - "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==" - }, - "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, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "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 - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "logform": { - "version": "2.4.2", - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" - }, - "dependencies": { - "ms": { - "version": "2.1.3", - "dev": true - } - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-mock": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*" + } + }, + "jest-pnp-resolver": { + "version": "1.2.2", + "dev": true, + "requires": {} + }, + "jest-regex-util": { + "version": "27.5.1", + "dev": true + }, + "jest-resolve": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "loglevel": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", - "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", - "dev": true + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "loglevel-plugin-prefix": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", - "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", - "dev": true + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "lolex": { - "version": "2.7.5", - "dev": true - }, - "loupe": { - "version": "2.3.4", - "dev": true, - "requires": { - "get-func-name": "^2.0.0" - } + "color-name": { + "version": "1.1.4", + "dev": true }, - "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==", - "requires": { - "yallist": "^4.0.0" - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-resolve-dependencies": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + } + }, + "jest-runner": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "macos-release": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.1.tgz", - "integrity": "sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A==", - "dev": true + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "magic-bytes.js": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.0.17.tgz", - "integrity": "sha512-PEDpPzHpKe5AxkVmQrNPHFRvPN2ELkkj3eIg4IZO9JdhBiAY3aU53lgYXs9j8B7lpza+QiW0UA4QHCH7EskSeg==", - "dev": true + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } + "color-name": { + "version": "1.1.4", + "dev": true }, - "make-dir": { - "version": "3.1.0", - "dev": true, - "requires": { - "semver": "^6.0.0" - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "make-error": { - "version": "1.3.6", - "dev": true + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-runtime": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "makeerror": { - "version": "1.0.12", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==" + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "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==", - "dev": true + "color-name": { + "version": "1.1.4", + "dev": true }, - "marked": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-5.1.2.tgz", - "integrity": "sha512-ahRPGXJpjMjwSOlBoTMZAK7ATXkli5qCPxZ21TG44rx1KEo44bii4ekgTDQPNRQ4Kh7JMb9Ub1PVk1NxRSsorg==" - }, - "marked-terminal": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-5.2.0.tgz", - "integrity": "sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA==", - "requires": { - "ansi-escapes": "^6.2.0", - "cardinal": "^2.1.1", - "chalk": "^5.2.0", - "cli-table3": "^0.6.3", - "node-emoji": "^1.11.0", - "supports-hyperlinks": "^2.3.0" - }, - "dependencies": { - "chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==" - } - } + "execa": { + "version": "5.1.1", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } }, - "md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "dev": true, - "requires": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "mdast-util-from-markdown": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", - "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - } + "mimic-fn": { + "version": "2.1.0", + "dev": true }, - "mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", - "requires": { - "@types/mdast": "^3.0.0" - } + "npm-run-path": { + "version": "4.0.1", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } }, - "meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "requires": { - "@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" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "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==" - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "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==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "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==" - }, - "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==" - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "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==", - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "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==" - } - } - }, - "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==", - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" - } - } - }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" - }, - "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==" - } - } + "onetime": { + "version": "5.1.2", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } }, - "merge-source-map": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", - "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", - "dev": true, - "requires": { - "source-map": "^0.5.6" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true - } - } + "strip-bom": { + "version": "4.0.0", + "dev": true }, - "merge-stream": { - "version": "2.0.0" - }, - "merge2": { - "version": "1.4.1" - }, - "mermaid": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.3.0.tgz", - "integrity": "sha512-H5quxuQjwXC8M1WuuzhAp2TdqGg74t5skfDBrNKJ7dt3z8Wprl5S6h9VJsRhoBUTSs1TMtHEdplLhCqXleZZLw==", - "requires": { - "@braintree/sanitize-url": "^6.0.2", - "@types/d3-scale": "^4.0.3", - "@types/d3-scale-chromatic": "^3.0.0", - "cytoscape": "^3.23.0", - "cytoscape-cose-bilkent": "^4.1.0", - "cytoscape-fcose": "^2.1.0", - "d3": "^7.4.0", - "d3-sankey": "^0.12.3", - "dagre-d3-es": "7.0.10", - "dayjs": "^1.11.7", - "dompurify": "3.0.5", - "elkjs": "^0.8.2", - "khroma": "^2.0.0", - "lodash-es": "^4.17.21", - "mdast-util-from-markdown": "^1.3.0", - "non-layered-tidy-tree-layout": "^2.0.2", - "stylis": "^4.1.3", - "ts-dedent": "^2.2.0", - "uuid": "^9.0.0", - "web-worker": "^1.2.0" - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-serializer": { + "version": "27.5.1", + "dev": true, + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + } + }, + "jest-snapshot": { + "version": "27.5.1", + "dev": true, + "requires": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "micromark": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", - "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", - "requires": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "micromark-core-commonmark": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", - "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", - "requires": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "micromark-factory-destination": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", - "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } + "color-name": { + "version": "1.1.4", + "dev": true }, - "micromark-factory-label": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", - "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "micromark-factory-space": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", - "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" - } + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, - "micromark-factory-title": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", - "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-util": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "micromark-factory-whitespace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", - "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "micromark-util-character": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", - "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", - "requires": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "micromark-util-chunked": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", - "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", - "requires": { - "micromark-util-symbol": "^1.0.0" - } + "color-name": { + "version": "1.1.4", + "dev": true }, - "micromark-util-classify-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", - "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "micromark-util-combine-extensions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", - "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", - "requires": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-validate": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "micromark-util-decode-numeric-character-reference": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", - "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", - "requires": { - "micromark-util-symbol": "^1.0.0" - } + "camelcase": { + "version": "6.3.0", + "dev": true }, - "micromark-util-decode-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", - "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", - "requires": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "micromark-util-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", - "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==" - }, - "micromark-util-html-tag-name": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", - "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==" - }, - "micromark-util-normalize-identifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", - "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", - "requires": { - "micromark-util-symbol": "^1.0.0" - } + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "micromark-util-resolve-all": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", - "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", - "requires": { - "micromark-util-types": "^1.0.0" - } + "color-name": { + "version": "1.1.4", + "dev": true }, - "micromark-util-sanitize-uri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", - "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "micromark-util-subtokenize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", - "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", - "requires": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-watcher": { + "version": "27.5.1", + "dev": true, + "requires": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.2", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } }, - "micromark-util-symbol": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", - "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==" - }, - "micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==" - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==" - }, - "mime-db": { - "version": "1.52.0", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==" + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "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==" + "color-name": { + "version": "1.1.4", + "dev": true }, - "minimatch": { - "version": "3.1.2", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } + "has-flag": { + "version": "4.0.0", + "dev": true }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" - }, - "minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "dependencies": { - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" - } - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } }, - "minipass": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz", - "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==", - "dev": true + "type-fest": { + "version": "0.21.3", + "dev": true + } + } + }, + "jest-worker": { + "version": "27.5.1", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "dev": true }, - "mkdirp": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.3.tgz", - "integrity": "sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw==", - "dev": true - }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "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==" - }, - "morgan": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", - "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", - "dev": true, - "requires": { - "basic-auth": "~2.0.1", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-finished": "~2.3.0", - "on-headers": "~1.0.2" - } + "supports-color": { + "version": "8.1.1", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-string-escape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", + "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0" + }, + "js-yaml": { + "version": "3.14.1", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsdoctypeparser": { + "version": "9.0.0", + "dev": true + }, + "jsdom": { + "version": "16.7.0", + "dev": true, + "requires": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "form-data": { + "version": "3.0.1", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "tough-cookie": { + "version": "4.0.0", + "dev": true, + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + } + } + } + }, + "jsesc": { + "version": "2.5.2", + "dev": true + }, + "json-beautify": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/json-beautify/-/json-beautify-1.1.1.tgz", + "integrity": "sha512-17j+Hk2lado0xqKtUcyAjK0AtoHnPSIgktWRsEXgdFQFG9UnaGw6CHa0J7xsvulxRpFl6CrkDFHght1p5ZJc4A==", + "dev": true + }, + "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==" + }, + "json-parse-even-better-errors": { + "version": "2.3.1" + }, + "json-schema-traverse": { + "version": "0.4.1", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true + }, + "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==" + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "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 + }, + "jsonfile": { + "version": "4.0.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==" + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "just-extend": { + "version": "4.2.1", + "dev": true + }, + "khroma": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz", + "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==" + }, + "kind-of": { + "version": "6.0.3" + }, + "kleur": { + "version": "3.0.3", + "dev": true + }, + "kuler": { + "version": "2.0.0", + "dev": true + }, + "layout-base": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==" + }, + "leven": { + "version": "3.1.0", + "dev": true + }, + "levn": { + "version": "0.3.0", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "libphonenumber-js": { + "version": "1.10.37", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.37.tgz", + "integrity": "sha512-Z10PCaOCiAxbUxLyR31DNeeNugSVP6iv/m7UrSKS5JHziEMApJtgku4e9Q69pzzSC9LnQiM09sqsGf2ticZnMw==", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4" + }, + "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==", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "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==", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + } + } + }, + "locate-path": { + "version": "2.0.0", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "3.10.1", + "dev": true + }, + "lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "lodash.capitalize": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", + "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==" + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==" + }, + "lodash.get": { + "version": "4.4.2", + "dev": true + }, + "lodash.ismatch": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==" + }, + "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==" + }, + "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==" + }, + "lodash.merge": { + "version": "4.6.2", + "dev": true + }, + "lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", + "dev": true + }, + "lodash.truncate": { + "version": "4.4.2", + "dev": true + }, + "lodash.uniqby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", + "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==" + }, + "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, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==" + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "ms": { - "version": "2.0.0", - "dev": true - }, - "multimatch": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", - "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", - "dev": true, - "requires": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" - } + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "nan": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", - "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", - "dev": true, - "optional": true + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "nanoid": { - "version": "3.3.4", - "dev": true + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, - "natural-compare": { - "version": "1.4.0", - "dev": true + "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 }, - "ncp": { - "version": "2.0.0", - "dev": true + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "logform": { + "version": "2.4.2", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "dev": true + } + } + }, + "loglevel": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", + "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", + "dev": true + }, + "loglevel-plugin-prefix": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", + "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", + "dev": true + }, + "lolex": { + "version": "2.7.5", + "dev": true + }, + "loupe": { + "version": "2.3.4", + "dev": true, + "requires": { + "get-func-name": "^2.0.0" + } + }, + "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==", + "requires": { + "yallist": "^4.0.0" + } + }, + "lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "macos-release": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.1.tgz", + "integrity": "sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A==", + "dev": true + }, + "magic-bytes.js": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.0.17.tgz", + "integrity": "sha512-PEDpPzHpKe5AxkVmQrNPHFRvPN2ELkkj3eIg4IZO9JdhBiAY3aU53lgYXs9j8B7lpza+QiW0UA4QHCH7EskSeg==", + "dev": true + }, + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "make-dir": { + "version": "3.1.0", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "make-error": { + "version": "1.3.6", + "dev": true + }, + "makeerror": { + "version": "1.0.12", + "dev": true, + "requires": { + "tmpl": "1.0.5" + } + }, + "map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==" + }, + "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==", + "dev": true + }, + "marked": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-5.1.2.tgz", + "integrity": "sha512-ahRPGXJpjMjwSOlBoTMZAK7ATXkli5qCPxZ21TG44rx1KEo44bii4ekgTDQPNRQ4Kh7JMb9Ub1PVk1NxRSsorg==" + }, + "marked-terminal": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-5.2.0.tgz", + "integrity": "sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA==", + "requires": { + "ansi-escapes": "^6.2.0", + "cardinal": "^2.1.1", + "chalk": "^5.2.0", + "cli-table3": "^0.6.3", + "node-emoji": "^1.11.0", + "supports-hyperlinks": "^2.3.0" + }, + "dependencies": { + "chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==" + } + } + }, + "md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dev": true, + "requires": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "mdast-util-from-markdown": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", + "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" + } + }, + "mdast-util-to-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", + "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "requires": { + "@types/mdast": "^3.0.0" + } + }, + "meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "requires": { + "@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" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } }, - "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 - }, - "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==" - }, - "nerf-dart": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", - "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==" - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true - }, - "nise": { - "version": "1.5.3", - "dev": true, - "requires": { - "@sinonjs/formatio": "^3.2.1", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "lolex": "^5.0.1", - "path-to-regexp": "^1.7.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "dev": true - }, - "lolex": { - "version": "5.1.2", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "path-to-regexp": { - "version": "1.8.0", - "dev": true, - "requires": { - "isarray": "0.0.1" - } - } - } + "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==" }, - "node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "dev": true - }, - "node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "requires": { - "lodash": "^4.17.21" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - } - } + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } }, - "node-fetch": { - "version": "2.6.7", - "dev": true, - "requires": { - "whatwg-url": "^5.0.0" - }, - "dependencies": { - "tr46": { - "version": "0.0.3", - "dev": true - }, - "webidl-conversions": { - "version": "3.0.1", - "dev": true - }, - "whatwg-url": { - "version": "5.0.0", - "dev": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - } - } + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } }, - "node-gyp-build": { - "version": "4.4.0", - "dev": true, - "optional": true - }, - "node-int64": { - "version": "0.4.0", - "dev": true - }, - "node-powershell": { - "version": "5.0.1", - "dev": true, - "requires": { - "child-shell": "^5.0.0", - "is-wsl": "^2.2.0" - } + "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==", + "requires": { + "p-limit": "^2.2.0" + } }, - "node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true + "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==" }, - "non-layered-tidy-tree-layout": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", - "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" + "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==" }, - "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==", - "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "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==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" + } }, - "dependencies": { - "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==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "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==", - "requires": { - "lru-cache": "^6.0.0" - } - } + "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==" } + } }, - "normalize-path": { - "version": "3.0.0", - "dev": true - }, - "normalize-url": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", - "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==" - }, - "npm": { - "version": "9.8.1", - "resolved": "https://registry.npmjs.org/npm/-/npm-9.8.1.tgz", - "integrity": "sha512-AfDvThQzsIXhYgk9zhbk5R+lh811lKkLAeQMMhSypf1BM7zUafeIIBzMzespeuVEJ0+LvY36oRQYf7IKLzU3rw==", - "requires": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^6.3.0", - "@npmcli/config": "^6.2.1", - "@npmcli/fs": "^3.1.0", - "@npmcli/map-workspaces": "^3.0.4", - "@npmcli/package-json": "^4.0.1", - "@npmcli/promise-spawn": "^6.0.2", - "@npmcli/run-script": "^6.0.2", - "abbrev": "^2.0.0", - "archy": "~1.0.0", - "cacache": "^17.1.3", - "chalk": "^5.3.0", - "ci-info": "^3.8.0", - "cli-columns": "^4.0.0", - "cli-table3": "^0.6.3", - "columnify": "^1.6.0", - "fastest-levenshtein": "^1.0.16", - "fs-minipass": "^3.0.2", - "glob": "^10.2.7", - "graceful-fs": "^4.2.11", - "hosted-git-info": "^6.1.1", - "ini": "^4.1.1", - "init-package-json": "^5.0.0", - "is-cidr": "^4.0.2", - "json-parse-even-better-errors": "^3.0.0", - "libnpmaccess": "^7.0.2", - "libnpmdiff": "^5.0.19", - "libnpmexec": "^6.0.3", - "libnpmfund": "^4.0.19", - "libnpmhook": "^9.0.3", - "libnpmorg": "^5.0.4", - "libnpmpack": "^5.0.19", - "libnpmpublish": "^7.5.0", - "libnpmsearch": "^6.0.2", - "libnpmteam": "^5.0.3", - "libnpmversion": "^4.0.2", - "make-fetch-happen": "^11.1.1", - "minimatch": "^9.0.3", - "minipass": "^5.0.0", - "minipass-pipeline": "^1.2.4", - "ms": "^2.1.2", - "node-gyp": "^9.4.0", - "nopt": "^7.2.0", - "npm-audit-report": "^5.0.0", - "npm-install-checks": "^6.1.1", - "npm-package-arg": "^10.1.0", - "npm-pick-manifest": "^8.0.1", - "npm-profile": "^7.0.1", - "npm-registry-fetch": "^14.0.5", - "npm-user-validate": "^2.0.0", - "npmlog": "^7.0.1", - "p-map": "^4.0.0", - "pacote": "^15.2.0", - "parse-conflict-json": "^3.0.1", - "proc-log": "^3.0.0", - "qrcode-terminal": "^0.12.0", - "read": "^2.1.0", - "semver": "^7.5.4", - "sigstore": "^1.7.0", - "ssri": "^10.0.4", - "supports-color": "^9.4.0", - "tar": "^6.1.15", - "text-table": "~0.2.0", - "tiny-relative-date": "^1.3.0", - "treeverse": "^3.0.0", - "validate-npm-package-name": "^5.0.0", - "which": "^3.0.1", - "write-file-atomic": "^5.0.1" - }, - "dependencies": { - "@colors/colors": { - "version": "1.5.0", - "bundled": true, - "optional": true - }, - "@isaacs/cliui": { - "version": "8.0.2", - "bundled": true, - "requires": { - "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" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "bundled": true - }, - "emoji-regex": { - "version": "9.2.2", - "bundled": true - }, - "string-width": { - "version": "5.1.2", - "bundled": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.1.0", - "bundled": true, - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "@isaacs/string-locale-compare": { - "version": "1.1.0", - "bundled": true - }, - "@npmcli/arborist": { - "version": "6.3.0", - "bundled": true, - "requires": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^3.1.0", - "@npmcli/installed-package-contents": "^2.0.2", - "@npmcli/map-workspaces": "^3.0.2", - "@npmcli/metavuln-calculator": "^5.0.0", - "@npmcli/name-from-folder": "^2.0.0", - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^4.0.0", - "@npmcli/query": "^3.0.0", - "@npmcli/run-script": "^6.0.0", - "bin-links": "^4.0.1", - "cacache": "^17.0.4", - "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^6.1.1", - "json-parse-even-better-errors": "^3.0.0", - "json-stringify-nice": "^1.1.4", - "minimatch": "^9.0.0", - "nopt": "^7.0.0", - "npm-install-checks": "^6.0.0", - "npm-package-arg": "^10.1.0", - "npm-pick-manifest": "^8.0.1", - "npm-registry-fetch": "^14.0.3", - "npmlog": "^7.0.1", - "pacote": "^15.0.8", - "parse-conflict-json": "^3.0.0", - "proc-log": "^3.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.2", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^10.0.1", - "treeverse": "^3.0.0", - "walk-up-path": "^3.0.1" - } - }, - "@npmcli/config": { - "version": "6.2.1", - "bundled": true, - "requires": { - "@npmcli/map-workspaces": "^3.0.2", - "ci-info": "^3.8.0", - "ini": "^4.1.0", - "nopt": "^7.0.0", - "proc-log": "^3.0.0", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.5", - "walk-up-path": "^3.0.1" - } - }, - "@npmcli/disparity-colors": { - "version": "3.0.0", - "bundled": true, - "requires": { - "ansi-styles": "^4.3.0" - } - }, - "@npmcli/fs": { - "version": "3.1.0", - "bundled": true, - "requires": { - "semver": "^7.3.5" - } - }, - "@npmcli/git": { - "version": "4.1.0", - "bundled": true, - "requires": { - "@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" - } - }, - "@npmcli/installed-package-contents": { - "version": "2.0.2", - "bundled": true, - "requires": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - } - }, - "@npmcli/map-workspaces": { - "version": "3.0.4", - "bundled": true, - "requires": { - "@npmcli/name-from-folder": "^2.0.0", - "glob": "^10.2.2", - "minimatch": "^9.0.0", - "read-package-json-fast": "^3.0.0" - } - }, - "@npmcli/metavuln-calculator": { - "version": "5.0.1", - "bundled": true, - "requires": { - "cacache": "^17.0.0", - "json-parse-even-better-errors": "^3.0.0", - "pacote": "^15.0.0", - "semver": "^7.3.5" - } - }, - "@npmcli/name-from-folder": { - "version": "2.0.0", - "bundled": true - }, - "@npmcli/node-gyp": { - "version": "3.0.0", - "bundled": true - }, - "@npmcli/package-json": { - "version": "4.0.1", - "bundled": true, - "requires": { - "@npmcli/git": "^4.1.0", - "glob": "^10.2.2", - "hosted-git-info": "^6.1.1", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", - "proc-log": "^3.0.0", - "semver": "^7.5.3" - } - }, - "@npmcli/promise-spawn": { - "version": "6.0.2", - "bundled": true, - "requires": { - "which": "^3.0.0" - } - }, - "@npmcli/query": { - "version": "3.0.0", - "bundled": true, - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "@npmcli/run-script": { - "version": "6.0.2", - "bundled": true, - "requires": { - "@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" - } - }, - "@pkgjs/parseargs": { - "version": "0.11.0", - "bundled": true, - "optional": true - }, - "@sigstore/protobuf-specs": { - "version": "0.1.0", - "bundled": true - }, - "@sigstore/tuf": { - "version": "1.0.2", - "bundled": true, - "requires": { - "@sigstore/protobuf-specs": "^0.1.0", - "tuf-js": "^1.1.7" - } - }, - "@tootallnate/once": { - "version": "2.0.0", - "bundled": true - }, - "@tufjs/canonical-json": { - "version": "1.0.0", - "bundled": true - }, - "@tufjs/models": { - "version": "1.0.4", - "bundled": true, - "requires": { - "@tufjs/canonical-json": "1.0.0", - "minimatch": "^9.0.0" - } - }, - "abbrev": { - "version": "2.0.0", - "bundled": true - }, - "abort-controller": { - "version": "3.0.0", - "bundled": true, - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "agent-base": { - "version": "6.0.2", - "bundled": true, - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.3.0", - "bundled": true, - "requires": { - "debug": "^4.1.0", - "depd": "^2.0.0", - "humanize-ms": "^1.2.1" - } - }, - "aggregate-error": { - "version": "3.1.0", - "bundled": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ansi-regex": { - "version": "5.0.1", - "bundled": true - }, - "ansi-styles": { - "version": "4.3.0", - "bundled": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "aproba": { - "version": "2.0.0", - "bundled": true - }, - "archy": { - "version": "1.0.0", - "bundled": true - }, - "are-we-there-yet": { - "version": "4.0.0", - "bundled": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^4.1.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "bundled": true - }, - "base64-js": { - "version": "1.5.1", - "bundled": true - }, - "bin-links": { - "version": "4.0.2", - "bundled": true, - "requires": { - "cmd-shim": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "read-cmd-shim": "^4.0.0", - "write-file-atomic": "^5.0.0" - } - }, - "binary-extensions": { - "version": "2.2.0", - "bundled": true - }, - "brace-expansion": { - "version": "2.0.1", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "buffer": { - "version": "6.0.3", - "bundled": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "builtins": { - "version": "5.0.1", - "bundled": true, - "requires": { - "semver": "^7.0.0" - } - }, - "cacache": { - "version": "17.1.3", - "bundled": true, - "requires": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "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" - } - }, - "chalk": { - "version": "5.3.0", - "bundled": true - }, - "chownr": { - "version": "2.0.0", - "bundled": true - }, - "ci-info": { - "version": "3.8.0", - "bundled": true - }, - "cidr-regex": { - "version": "3.1.1", - "bundled": true, - "requires": { - "ip-regex": "^4.1.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "bundled": true - }, - "cli-columns": { - "version": "4.0.0", - "bundled": true, - "requires": { - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - } - }, - "cli-table3": { - "version": "0.6.3", - "bundled": true, - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - } - }, - "clone": { - "version": "1.0.4", - "bundled": true - }, - "cmd-shim": { - "version": "6.0.1", - "bundled": true - }, - "color-convert": { - "version": "2.0.1", - "bundled": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "bundled": true - }, - "color-support": { - "version": "1.1.3", - "bundled": true - }, - "columnify": { - "version": "1.6.0", - "bundled": true, - "requires": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - } - }, - "common-ancestor-path": { - "version": "1.0.1", - "bundled": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true - }, - "cross-spawn": { - "version": "7.0.3", - "bundled": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "dependencies": { - "which": { - "version": "2.0.2", - "bundled": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "cssesc": { - "version": "3.0.0", - "bundled": true - }, - "debug": { - "version": "4.3.4", - "bundled": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "bundled": true - } - } - }, - "defaults": { - "version": "1.0.4", - "bundled": true, - "requires": { - "clone": "^1.0.2" - } - }, - "delegates": { - "version": "1.0.0", - "bundled": true - }, - "depd": { - "version": "2.0.0", - "bundled": true - }, - "diff": { - "version": "5.1.0", - "bundled": true - }, - "eastasianwidth": { - "version": "0.2.0", - "bundled": true - }, - "emoji-regex": { - "version": "8.0.0", - "bundled": true - }, - "encoding": { - "version": "0.1.13", - "bundled": true, - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - } - }, - "env-paths": { - "version": "2.2.1", - "bundled": true - }, - "err-code": { - "version": "2.0.3", - "bundled": true - }, - "event-target-shim": { - "version": "5.0.1", - "bundled": true - }, - "events": { - "version": "3.3.0", - "bundled": true - }, - "exponential-backoff": { - "version": "3.1.1", - "bundled": true - }, - "fastest-levenshtein": { - "version": "1.0.16", - "bundled": true - }, - "foreground-child": { - "version": "3.1.1", - "bundled": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - } - }, - "fs-minipass": { - "version": "3.0.2", - "bundled": true, - "requires": { - "minipass": "^5.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true - }, - "function-bind": { - "version": "1.1.1", - "bundled": true - }, - "gauge": { - "version": "5.0.1", - "bundled": true, - "requires": { - "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": "^4.0.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - } - }, - "glob": { - "version": "10.2.7", - "bundled": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" - } - }, - "graceful-fs": { - "version": "4.2.11", - "bundled": true - }, - "has": { - "version": "1.0.3", - "bundled": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true - }, - "hosted-git-info": { - "version": "6.1.1", - "bundled": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "http-cache-semantics": { - "version": "4.1.1", - "bundled": true - }, - "http-proxy-agent": { - "version": "5.0.0", - "bundled": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "bundled": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "humanize-ms": { - "version": "1.2.1", - "bundled": true, - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.6.3", - "bundled": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "ieee754": { - "version": "1.2.1", - "bundled": true - }, - "ignore-walk": { - "version": "6.0.3", - "bundled": true, - "requires": { - "minimatch": "^9.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "bundled": true - }, - "indent-string": { - "version": "4.0.0", - "bundled": true - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "bundled": true - }, - "ini": { - "version": "4.1.1", - "bundled": true - }, - "init-package-json": { - "version": "5.0.0", - "bundled": true, - "requires": { - "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" - } - }, - "ip": { - "version": "2.0.0", - "bundled": true - }, - "ip-regex": { - "version": "4.3.0", - "bundled": true - }, - "is-cidr": { - "version": "4.0.2", - "bundled": true, - "requires": { - "cidr-regex": "^3.1.1" - } - }, - "is-core-module": { - "version": "2.12.1", - "bundled": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "bundled": true - }, - "is-lambda": { - "version": "1.0.1", - "bundled": true - }, - "isexe": { - "version": "2.0.0", - "bundled": true - }, - "jackspeak": { - "version": "2.2.1", - "bundled": true, - "requires": { - "@isaacs/cliui": "^8.0.2", - "@pkgjs/parseargs": "^0.11.0" - } - }, - "json-parse-even-better-errors": { - "version": "3.0.0", - "bundled": true - }, - "json-stringify-nice": { - "version": "1.1.4", - "bundled": true - }, - "jsonparse": { - "version": "1.3.1", - "bundled": true - }, - "just-diff": { - "version": "6.0.2", - "bundled": true - }, - "just-diff-apply": { - "version": "5.5.0", - "bundled": true - }, - "libnpmaccess": { - "version": "7.0.2", - "bundled": true, - "requires": { - "npm-package-arg": "^10.1.0", - "npm-registry-fetch": "^14.0.3" - } - }, - "libnpmdiff": { - "version": "5.0.19", - "bundled": true, - "requires": { - "@npmcli/arborist": "^6.3.0", - "@npmcli/disparity-colors": "^3.0.0", - "@npmcli/installed-package-contents": "^2.0.2", - "binary-extensions": "^2.2.0", - "diff": "^5.1.0", - "minimatch": "^9.0.0", - "npm-package-arg": "^10.1.0", - "pacote": "^15.0.8", - "tar": "^6.1.13" - } - }, - "libnpmexec": { - "version": "6.0.3", - "bundled": true, - "requires": { - "@npmcli/arborist": "^6.3.0", - "@npmcli/run-script": "^6.0.0", - "ci-info": "^3.7.1", - "npm-package-arg": "^10.1.0", - "npmlog": "^7.0.1", - "pacote": "^15.0.8", - "proc-log": "^3.0.0", - "read": "^2.0.0", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.7", - "walk-up-path": "^3.0.1" - } - }, - "libnpmfund": { - "version": "4.0.19", - "bundled": true, - "requires": { - "@npmcli/arborist": "^6.3.0" - } - }, - "libnpmhook": { - "version": "9.0.3", - "bundled": true, - "requires": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^14.0.3" - } - }, - "libnpmorg": { - "version": "5.0.4", - "bundled": true, - "requires": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^14.0.3" - } - }, - "libnpmpack": { - "version": "5.0.19", - "bundled": true, - "requires": { - "@npmcli/arborist": "^6.3.0", - "@npmcli/run-script": "^6.0.0", - "npm-package-arg": "^10.1.0", - "pacote": "^15.0.8" - } - }, - "libnpmpublish": { - "version": "7.5.0", - "bundled": true, - "requires": { - "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" - } - }, - "libnpmsearch": { - "version": "6.0.2", - "bundled": true, - "requires": { - "npm-registry-fetch": "^14.0.3" - } - }, - "libnpmteam": { - "version": "5.0.3", - "bundled": true, - "requires": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^14.0.3" - } - }, - "libnpmversion": { - "version": "4.0.2", - "bundled": true, - "requires": { - "@npmcli/git": "^4.0.1", - "@npmcli/run-script": "^6.0.0", - "json-parse-even-better-errors": "^3.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.7" - } - }, - "lru-cache": { - "version": "7.18.3", - "bundled": true - }, - "make-fetch-happen": { - "version": "11.1.1", - "bundled": true, - "requires": { - "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" - } - }, - "minimatch": { - "version": "9.0.3", - "bundled": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "minipass": { - "version": "5.0.0", - "bundled": true - }, - "minipass-collect": { - "version": "1.0.2", - "bundled": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minipass-fetch": { - "version": "3.0.3", - "bundled": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^5.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - } - }, - "minipass-flush": { - "version": "1.0.5", - "bundled": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minipass-json-stream": { - "version": "1.0.1", - "bundled": true, - "requires": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "bundled": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minipass-sized": { - "version": "1.0.3", - "bundled": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minizlib": { - "version": "2.1.2", - "bundled": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "mkdirp": { - "version": "1.0.4", - "bundled": true - }, - "ms": { - "version": "2.1.3", - "bundled": true - }, - "mute-stream": { - "version": "1.0.0", - "bundled": true - }, - "negotiator": { - "version": "0.6.3", - "bundled": true - }, - "node-gyp": { - "version": "9.4.0", - "bundled": true, - "requires": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^11.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" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true - }, - "are-we-there-yet": { - "version": "3.0.1", - "bundled": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "gauge": { - "version": "4.0.4", - "bundled": true, - "requires": { - "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" - } - }, - "glob": { - "version": "7.2.3", - "bundled": true, - "requires": { - "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" - } - }, - "minimatch": { - "version": "3.1.2", - "bundled": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "nopt": { - "version": "6.0.0", - "bundled": true, - "requires": { - "abbrev": "^1.0.0" - } - }, - "npmlog": { - "version": "6.0.2", - "bundled": true, - "requires": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - } - }, - "readable-stream": { - "version": "3.6.2", - "bundled": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "signal-exit": { - "version": "3.0.7", - "bundled": true - }, - "which": { - "version": "2.0.2", - "bundled": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "nopt": { - "version": "7.2.0", - "bundled": true, - "requires": { - "abbrev": "^2.0.0" - } - }, - "normalize-package-data": { - "version": "5.0.0", - "bundled": true, - "requires": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - } - }, - "npm-audit-report": { - "version": "5.0.0", - "bundled": true - }, - "npm-bundled": { - "version": "3.0.0", - "bundled": true, - "requires": { - "npm-normalize-package-bin": "^3.0.0" - } - }, - "npm-install-checks": { - "version": "6.1.1", - "bundled": true, - "requires": { - "semver": "^7.1.1" - } - }, - "npm-normalize-package-bin": { - "version": "3.0.1", - "bundled": true - }, - "npm-package-arg": { - "version": "10.1.0", - "bundled": true, - "requires": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - } - }, - "npm-packlist": { - "version": "7.0.4", - "bundled": true, - "requires": { - "ignore-walk": "^6.0.0" - } - }, - "npm-pick-manifest": { - "version": "8.0.1", - "bundled": true, - "requires": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^10.0.0", - "semver": "^7.3.5" - } - }, - "npm-profile": { - "version": "7.0.1", - "bundled": true, - "requires": { - "npm-registry-fetch": "^14.0.0", - "proc-log": "^3.0.0" - } - }, - "npm-registry-fetch": { - "version": "14.0.5", - "bundled": true, - "requires": { - "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" - } - }, - "npm-user-validate": { - "version": "2.0.0", - "bundled": true - }, - "npmlog": { - "version": "7.0.1", - "bundled": true, - "requires": { - "are-we-there-yet": "^4.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^5.0.0", - "set-blocking": "^2.0.0" - } - }, - "once": { - "version": "1.4.0", - "bundled": true, - "requires": { - "wrappy": "1" - } - }, - "p-map": { - "version": "4.0.0", - "bundled": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "pacote": { - "version": "15.2.0", - "bundled": true, - "requires": { - "@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" - } - }, - "parse-conflict-json": { - "version": "3.0.1", - "bundled": true, - "requires": { - "json-parse-even-better-errors": "^3.0.0", - "just-diff": "^6.0.0", - "just-diff-apply": "^5.2.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true - }, - "path-key": { - "version": "3.1.1", - "bundled": true - }, - "path-scurry": { - "version": "1.9.2", - "bundled": true, - "requires": { - "lru-cache": "^9.1.1", - "minipass": "^5.0.0 || ^6.0.2" - }, - "dependencies": { - "lru-cache": { - "version": "9.1.1", - "bundled": true - } - } - }, - "postcss-selector-parser": { - "version": "6.0.13", - "bundled": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "proc-log": { - "version": "3.0.0", - "bundled": true - }, - "process": { - "version": "0.11.10", - "bundled": true - }, - "promise-all-reject-late": { - "version": "1.0.1", - "bundled": true - }, - "promise-call-limit": { - "version": "1.0.2", - "bundled": true - }, - "promise-inflight": { - "version": "1.0.1", - "bundled": true - }, - "promise-retry": { - "version": "2.0.1", - "bundled": true, - "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - } - }, - "promzard": { - "version": "1.0.0", - "bundled": true, - "requires": { - "read": "^2.0.0" - } - }, - "qrcode-terminal": { - "version": "0.12.0", - "bundled": true - }, - "read": { - "version": "2.1.0", - "bundled": true, - "requires": { - "mute-stream": "~1.0.0" - } - }, - "read-cmd-shim": { - "version": "4.0.0", - "bundled": true - }, - "read-package-json": { - "version": "6.0.4", - "bundled": true, - "requires": { - "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" - } - }, - "read-package-json-fast": { - "version": "3.0.2", - "bundled": true, - "requires": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - } - }, - "readable-stream": { - "version": "4.4.0", - "bundled": true, - "requires": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10" - } - }, - "retry": { - "version": "0.12.0", - "bundled": true - }, - "rimraf": { - "version": "3.0.2", - "bundled": true, - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.2.3", - "bundled": true, - "requires": { - "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" - } - }, - "minimatch": { - "version": "3.1.2", - "bundled": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "safe-buffer": { - "version": "5.2.1", - "bundled": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "optional": true - }, - "semver": { - "version": "7.5.4", - "bundled": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "bundled": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true - }, - "shebang-command": { - "version": "2.0.0", - "bundled": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "bundled": true - }, - "signal-exit": { - "version": "4.0.2", - "bundled": true - }, - "sigstore": { - "version": "1.7.0", - "bundled": true, - "requires": { - "@sigstore/protobuf-specs": "^0.1.0", - "@sigstore/tuf": "^1.0.1", - "make-fetch-happen": "^11.0.1" - } - }, - "smart-buffer": { - "version": "4.2.0", - "bundled": true - }, - "socks": { - "version": "2.7.1", - "bundled": true, - "requires": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - } - }, - "socks-proxy-agent": { - "version": "7.0.0", - "bundled": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - } - }, - "spdx-correct": { - "version": "3.2.0", - "bundled": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "bundled": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "bundled": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.13", - "bundled": true - }, - "ssri": { - "version": "10.0.4", - "bundled": true, - "requires": { - "minipass": "^5.0.0" - } - }, - "string_decoder": { - "version": "1.3.0", - "bundled": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-width": { - "version": "4.2.3", - "bundled": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string-width-cjs": { - "version": "npm:string-width@4.2.3", - "bundled": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "bundled": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-ansi-cjs": { - "version": "npm:strip-ansi@6.0.1", - "bundled": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "supports-color": { - "version": "9.4.0", - "bundled": true - }, - "tar": { - "version": "6.1.15", - "bundled": true, - "requires": { - "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" - }, - "dependencies": { - "fs-minipass": { - "version": "2.1.0", - "bundled": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "bundled": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - } - } - }, - "text-table": { - "version": "0.2.0", - "bundled": true - }, - "tiny-relative-date": { - "version": "1.3.0", - "bundled": true - }, - "treeverse": { - "version": "3.0.0", - "bundled": true - }, - "tuf-js": { - "version": "1.1.7", - "bundled": true, - "requires": { - "@tufjs/models": "1.0.4", - "debug": "^4.3.4", - "make-fetch-happen": "^11.1.1" - } - }, - "unique-filename": { - "version": "3.0.0", - "bundled": true, - "requires": { - "unique-slug": "^4.0.0" - } - }, - "unique-slug": { - "version": "4.0.0", - "bundled": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "bundled": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validate-npm-package-name": { - "version": "5.0.0", - "bundled": true, - "requires": { - "builtins": "^5.0.0" - } - }, - "walk-up-path": { - "version": "3.0.1", - "bundled": true - }, - "wcwidth": { - "version": "1.0.1", - "bundled": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "which": { - "version": "3.0.1", - "bundled": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wide-align": { - "version": "1.1.5", - "bundled": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "wrap-ansi": { - "version": "8.1.0", - "bundled": true, - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "bundled": true - }, - "ansi-styles": { - "version": "6.2.1", - "bundled": true - }, - "emoji-regex": { - "version": "9.2.2", - "bundled": true - }, - "string-width": { - "version": "5.1.2", - "bundled": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.1.0", - "bundled": true, - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "wrap-ansi-cjs": { - "version": "npm:wrap-ansi@7.0.0", - "bundled": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true - }, - "write-file-atomic": { - "version": "5.0.1", - "bundled": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - } - }, - "yallist": { - "version": "4.0.0", - "bundled": true - } - } + "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==", + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + } + } }, - "npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "requires": { - "path-key": "^4.0.0" - }, - "dependencies": { - "path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==" - } - } + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } + "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==" + } + } + }, + "merge-source-map": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", + "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", + "dev": true, + "requires": { + "source-map": "^0.5.6" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true + } + } + }, + "merge-stream": { + "version": "2.0.0" + }, + "merge2": { + "version": "1.4.1" + }, + "mermaid": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-10.3.0.tgz", + "integrity": "sha512-H5quxuQjwXC8M1WuuzhAp2TdqGg74t5skfDBrNKJ7dt3z8Wprl5S6h9VJsRhoBUTSs1TMtHEdplLhCqXleZZLw==", + "requires": { + "@braintree/sanitize-url": "^6.0.2", + "@types/d3-scale": "^4.0.3", + "@types/d3-scale-chromatic": "^3.0.0", + "cytoscape": "^3.23.0", + "cytoscape-cose-bilkent": "^4.1.0", + "cytoscape-fcose": "^2.1.0", + "d3": "^7.4.0", + "d3-sankey": "^0.12.3", + "dagre-d3-es": "7.0.10", + "dayjs": "^1.11.7", + "dompurify": "3.0.5", + "elkjs": "^0.8.2", + "khroma": "^2.0.0", + "lodash-es": "^4.17.21", + "mdast-util-from-markdown": "^1.3.0", + "non-layered-tidy-tree-layout": "^2.0.2", + "stylis": "^4.1.3", + "ts-dedent": "^2.2.0", + "uuid": "^9.0.0", + "web-worker": "^1.2.0" + } + }, + "micromark": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", + "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", + "requires": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } }, - "nwsapi": { - "version": "2.2.0", - "dev": true - }, - "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 - }, - "object-inspect": { - "version": "1.12.2", - "dev": true - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "micromark-core-commonmark": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", + "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", + "requires": { + "decode-named-character-reference": "^1.0.0", + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "micromark-factory-destination": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", + "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-factory-label": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", + "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "micromark-factory-space": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", + "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-factory-title": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", + "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", + "requires": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-factory-whitespace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", + "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", + "requires": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-character": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", + "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", + "requires": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-chunked": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", + "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", + "requires": { + "micromark-util-symbol": "^1.0.0" + } + }, + "micromark-util-classify-character": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", + "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-combine-extensions": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", + "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", + "requires": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-decode-numeric-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", + "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", + "requires": { + "micromark-util-symbol": "^1.0.0" + } + }, + "micromark-util-decode-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", + "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", + "requires": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "micromark-util-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", + "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==" + }, + "micromark-util-html-tag-name": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", + "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==" + }, + "micromark-util-normalize-identifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", + "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", + "requires": { + "micromark-util-symbol": "^1.0.0" + } + }, + "micromark-util-resolve-all": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", + "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", + "requires": { + "micromark-util-types": "^1.0.0" + } + }, + "micromark-util-sanitize-uri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", + "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "micromark-util-subtokenize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", + "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", + "requires": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "micromark-util-symbol": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", + "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==" + }, + "micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==" + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==" + }, + "mime-db": { + "version": "1.52.0", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==" + }, + "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==" + }, + "minimatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" + }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "dependencies": { + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" + } + } + }, + "minipass": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz", + "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==", + "dev": true + }, + "mkdirp": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.3.tgz", + "integrity": "sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw==", + "dev": true + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "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==" + }, + "morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dev": true, + "requires": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + } + }, + "mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==" + }, + "ms": { + "version": "2.0.0", + "dev": true + }, + "multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + } + }, + "nan": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", + "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", + "dev": true, + "optional": true + }, + "nanoid": { + "version": "3.3.4", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "dev": true + }, + "ncp": { + "version": "2.0.0", + "dev": true + }, + "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 + }, + "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==" + }, + "nerf-dart": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", + "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==" + }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, + "nise": { + "version": "1.5.3", + "dev": true, + "requires": { + "@sinonjs/formatio": "^3.2.1", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "lolex": "^5.0.1", + "path-to-regexp": "^1.7.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "dev": true }, - "object-keys": { - "version": "1.1.1", - "dev": true - }, - "object.assign": { - "version": "4.1.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } + "lolex": { + "version": "5.1.2", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "path-to-regexp": { + "version": "1.8.0", + "dev": true, + "requires": { + "isarray": "0.0.1" + } + } + } + }, + "node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "dev": true + }, + "node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "requires": { + "lodash": "^4.17.21" + }, + "dependencies": { + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + } + } + }, + "node-fetch": { + "version": "2.6.7", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "0.0.3", + "dev": true }, - "object.values": { - "version": "1.1.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } + "webidl-conversions": { + "version": "3.0.1", + "dev": true }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } + "whatwg-url": { + "version": "5.0.0", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, + "node-gyp-build": { + "version": "4.4.0", + "dev": true, + "optional": true + }, + "node-int64": { + "version": "0.4.0", + "dev": true + }, + "node-powershell": { + "version": "5.0.1", + "dev": true, + "requires": { + "child-shell": "^5.0.0", + "is-wsl": "^2.2.0" + } + }, + "node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, + "non-layered-tidy-tree-layout": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", + "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" + }, + "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==", + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "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==", + "requires": { + "lru-cache": "^6.0.0" + } }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true + "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==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "normalize-path": { + "version": "3.0.0", + "dev": true + }, + "normalize-url": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", + "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==" + }, + "npm": { + "version": "9.8.1", + "resolved": "https://registry.npmjs.org/npm/-/npm-9.8.1.tgz", + "integrity": "sha512-AfDvThQzsIXhYgk9zhbk5R+lh811lKkLAeQMMhSypf1BM7zUafeIIBzMzespeuVEJ0+LvY36oRQYf7IKLzU3rw==", + "requires": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^6.3.0", + "@npmcli/config": "^6.2.1", + "@npmcli/fs": "^3.1.0", + "@npmcli/map-workspaces": "^3.0.4", + "@npmcli/package-json": "^4.0.1", + "@npmcli/promise-spawn": "^6.0.2", + "@npmcli/run-script": "^6.0.2", + "abbrev": "^2.0.0", + "archy": "~1.0.0", + "cacache": "^17.1.3", + "chalk": "^5.3.0", + "ci-info": "^3.8.0", + "cli-columns": "^4.0.0", + "cli-table3": "^0.6.3", + "columnify": "^1.6.0", + "fastest-levenshtein": "^1.0.16", + "fs-minipass": "^3.0.2", + "glob": "^10.2.7", + "graceful-fs": "^4.2.11", + "hosted-git-info": "^6.1.1", + "ini": "^4.1.1", + "init-package-json": "^5.0.0", + "is-cidr": "^4.0.2", + "json-parse-even-better-errors": "^3.0.0", + "libnpmaccess": "^7.0.2", + "libnpmdiff": "^5.0.19", + "libnpmexec": "^6.0.3", + "libnpmfund": "^4.0.19", + "libnpmhook": "^9.0.3", + "libnpmorg": "^5.0.4", + "libnpmpack": "^5.0.19", + "libnpmpublish": "^7.5.0", + "libnpmsearch": "^6.0.2", + "libnpmteam": "^5.0.3", + "libnpmversion": "^4.0.2", + "make-fetch-happen": "^11.1.1", + "minimatch": "^9.0.3", + "minipass": "^5.0.0", + "minipass-pipeline": "^1.2.4", + "ms": "^2.1.2", + "node-gyp": "^9.4.0", + "nopt": "^7.2.0", + "npm-audit-report": "^5.0.0", + "npm-install-checks": "^6.1.1", + "npm-package-arg": "^10.1.0", + "npm-pick-manifest": "^8.0.1", + "npm-profile": "^7.0.1", + "npm-registry-fetch": "^14.0.5", + "npm-user-validate": "^2.0.0", + "npmlog": "^7.0.1", + "p-map": "^4.0.0", + "pacote": "^15.2.0", + "parse-conflict-json": "^3.0.1", + "proc-log": "^3.0.0", + "qrcode-terminal": "^0.12.0", + "read": "^2.1.0", + "semver": "^7.5.4", + "sigstore": "^1.7.0", + "ssri": "^10.0.4", + "supports-color": "^9.4.0", + "tar": "^6.1.15", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "treeverse": "^3.0.0", + "validate-npm-package-name": "^5.0.0", + "which": "^3.0.1", + "write-file-atomic": "^5.0.1" + }, + "dependencies": { + "@colors/colors": { + "version": "1.5.0", + "bundled": true, + "optional": true }, - "once": { - "version": "1.4.0", - "requires": { - "wrappy": "1" - } + "@isaacs/cliui": { + "version": "8.0.2", + "bundled": true, + "requires": { + "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" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "bundled": true + }, + "emoji-regex": { + "version": "9.2.2", + "bundled": true + }, + "string-width": { + "version": "5.1.2", + "bundled": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "bundled": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "@isaacs/string-locale-compare": { + "version": "1.1.0", + "bundled": true + }, + "@npmcli/arborist": { + "version": "6.3.0", + "bundled": true, + "requires": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^3.1.0", + "@npmcli/installed-package-contents": "^2.0.2", + "@npmcli/map-workspaces": "^3.0.2", + "@npmcli/metavuln-calculator": "^5.0.0", + "@npmcli/name-from-folder": "^2.0.0", + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^4.0.0", + "@npmcli/query": "^3.0.0", + "@npmcli/run-script": "^6.0.0", + "bin-links": "^4.0.1", + "cacache": "^17.0.4", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^6.1.1", + "json-parse-even-better-errors": "^3.0.0", + "json-stringify-nice": "^1.1.4", + "minimatch": "^9.0.0", + "nopt": "^7.0.0", + "npm-install-checks": "^6.0.0", + "npm-package-arg": "^10.1.0", + "npm-pick-manifest": "^8.0.1", + "npm-registry-fetch": "^14.0.3", + "npmlog": "^7.0.1", + "pacote": "^15.0.8", + "parse-conflict-json": "^3.0.0", + "proc-log": "^3.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.2", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^10.0.1", + "treeverse": "^3.0.0", + "walk-up-path": "^3.0.1" + } + }, + "@npmcli/config": { + "version": "6.2.1", + "bundled": true, + "requires": { + "@npmcli/map-workspaces": "^3.0.2", + "ci-info": "^3.8.0", + "ini": "^4.1.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.5", + "walk-up-path": "^3.0.1" + } + }, + "@npmcli/disparity-colors": { + "version": "3.0.0", + "bundled": true, + "requires": { + "ansi-styles": "^4.3.0" + } + }, + "@npmcli/fs": { + "version": "3.1.0", + "bundled": true, + "requires": { + "semver": "^7.3.5" + } + }, + "@npmcli/git": { + "version": "4.1.0", + "bundled": true, + "requires": { + "@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" + } + }, + "@npmcli/installed-package-contents": { + "version": "2.0.2", + "bundled": true, + "requires": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + } + }, + "@npmcli/map-workspaces": { + "version": "3.0.4", + "bundled": true, + "requires": { + "@npmcli/name-from-folder": "^2.0.0", + "glob": "^10.2.2", + "minimatch": "^9.0.0", + "read-package-json-fast": "^3.0.0" + } + }, + "@npmcli/metavuln-calculator": { + "version": "5.0.1", + "bundled": true, + "requires": { + "cacache": "^17.0.0", + "json-parse-even-better-errors": "^3.0.0", + "pacote": "^15.0.0", + "semver": "^7.3.5" + } + }, + "@npmcli/name-from-folder": { + "version": "2.0.0", + "bundled": true + }, + "@npmcli/node-gyp": { + "version": "3.0.0", + "bundled": true + }, + "@npmcli/package-json": { + "version": "4.0.1", + "bundled": true, + "requires": { + "@npmcli/git": "^4.1.0", + "glob": "^10.2.2", + "hosted-git-info": "^6.1.1", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "proc-log": "^3.0.0", + "semver": "^7.5.3" + } + }, + "@npmcli/promise-spawn": { + "version": "6.0.2", + "bundled": true, + "requires": { + "which": "^3.0.0" + } + }, + "@npmcli/query": { + "version": "3.0.0", + "bundled": true, + "requires": { + "postcss-selector-parser": "^6.0.10" + } + }, + "@npmcli/run-script": { + "version": "6.0.2", + "bundled": true, + "requires": { + "@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" + } }, - "one-time": { - "version": "1.0.0", - "dev": true, - "requires": { - "fn.name": "1.x.x" - } + "@pkgjs/parseargs": { + "version": "0.11.0", + "bundled": true, + "optional": true + }, + "@sigstore/protobuf-specs": { + "version": "0.1.0", + "bundled": true + }, + "@sigstore/tuf": { + "version": "1.0.2", + "bundled": true, + "requires": { + "@sigstore/protobuf-specs": "^0.1.0", + "tuf-js": "^1.1.7" + } }, - "onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "requires": { - "mimic-fn": "^4.0.0" - } + "@tootallnate/once": { + "version": "2.0.0", + "bundled": true + }, + "@tufjs/canonical-json": { + "version": "1.0.0", + "bundled": true + }, + "@tufjs/models": { + "version": "1.0.4", + "bundled": true, + "requires": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + } + }, + "abbrev": { + "version": "2.0.0", + "bundled": true + }, + "abort-controller": { + "version": "3.0.0", + "bundled": true, + "requires": { + "event-target-shim": "^5.0.0" + } }, - "open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } + "agent-base": { + "version": "6.0.2", + "bundled": true, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.3.0", + "bundled": true, + "requires": { + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" + } }, - "opencollective-postinstall": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", - "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", - "dev": true + "aggregate-error": { + "version": "3.1.0", + "bundled": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } }, - "optionator": { - "version": "0.8.3", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } + "ansi-regex": { + "version": "5.0.1", + "bundled": true }, - "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, - "requires": { - "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" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "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 - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "ansi-styles": { + "version": "4.3.0", + "bundled": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "aproba": { + "version": "2.0.0", + "bundled": true + }, + "archy": { + "version": "1.0.0", + "bundled": true + }, + "are-we-there-yet": { + "version": "4.0.0", + "bundled": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^4.1.0" + } }, - "os-name": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz", - "integrity": "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==", - "dev": true, - "requires": { - "macos-release": "^2.5.0", - "windows-release": "^4.0.0" - } + "balanced-match": { + "version": "1.0.2", + "bundled": true }, - "p-each-series": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz", - "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==" - }, - "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==", - "requires": { - "p-map": "^5.1.0" - } + "base64-js": { + "version": "1.5.1", + "bundled": true + }, + "bin-links": { + "version": "4.0.2", + "bundled": true, + "requires": { + "cmd-shim": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "read-cmd-shim": "^4.0.0", + "write-file-atomic": "^5.0.0" + } }, - "p-finally": { - "version": "1.0.0", - "dev": true + "binary-extensions": { + "version": "2.2.0", + "bundled": true }, - "p-is-promise": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", - "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==" + "brace-expansion": { + "version": "2.0.1", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0" + } }, - "p-limit": { - "version": "1.3.0", - "requires": { - "p-try": "^1.0.0" - } + "buffer": { + "version": "6.0.3", + "bundled": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "builtins": { + "version": "5.0.1", + "bundled": true, + "requires": { + "semver": "^7.0.0" + } + }, + "cacache": { + "version": "17.1.3", + "bundled": true, + "requires": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "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" + } }, - "p-locate": { - "version": "2.0.0", - "requires": { - "p-limit": "^1.1.0" - } + "chalk": { + "version": "5.3.0", + "bundled": true }, - "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==", - "requires": { - "aggregate-error": "^4.0.0" - } + "chownr": { + "version": "2.0.0", + "bundled": true }, - "p-queue": { - "version": "6.6.2", - "dev": true, - "requires": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" - }, - "dependencies": { - "p-timeout": { - "version": "3.2.0", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - } - } + "ci-info": { + "version": "3.8.0", + "bundled": true }, - "p-reduce": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", - "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==" + "cidr-regex": { + "version": "3.1.1", + "bundled": true, + "requires": { + "ip-regex": "^4.1.0" + } }, - "p-timeout": { - "version": "4.1.0", - "dev": true + "clean-stack": { + "version": "2.2.0", + "bundled": true }, - "p-try": { - "version": "1.0.0" - }, - "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "requires": { - "callsites": "^3.0.0" - } + "cli-columns": { + "version": "4.0.0", + "bundled": true, + "requires": { + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + } }, - "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==", - "requires": { - "@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" - } + "cli-table3": { + "version": "0.6.3", + "bundled": true, + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } }, - "parse5": { - "version": "6.0.1", - "dev": true - }, - "parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "dev": true, - "requires": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - }, - "dependencies": { - "parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, - "requires": { - "entities": "^4.4.0" - } - } - } + "clone": { + "version": "1.0.4", + "bundled": true }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pastebin-api": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/pastebin-api/-/pastebin-api-5.1.6.tgz", - "integrity": "sha512-FI2ZeXLxroI2tuRVd5LI7eNmiANFxDOdlhXxSMqtOXTJn1KSt2UC8kglhndUOOPt6p9XPVnuS7XGW/KbiBbbzw==", - "dev": true, - "requires": { - "fast-xml-parser": "^4.1.3", - "undici": "^5.21.0" - } + "cmd-shim": { + "version": "6.0.1", + "bundled": true }, - "path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true + "color-convert": { + "version": "2.0.1", + "bundled": true, + "requires": { + "color-name": "~1.1.4" + } }, - "path-exists": { - "version": "3.0.0" + "color-name": { + "version": "1.1.4", + "bundled": true }, - "path-is-absolute": { - "version": "1.0.1", - "dev": true + "color-support": { + "version": "1.1.3", + "bundled": true }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "columnify": { + "version": "1.6.0", + "bundled": true, + "requires": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + } }, - "path-parse": { - "version": "1.0.7" + "common-ancestor-path": { + "version": "1.0.1", + "bundled": true }, - "path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "dev": true, - "requires": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", - "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", - "dev": true - } - } + "concat-map": { + "version": "0.0.1", + "bundled": true }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "pathval": { - "version": "1.1.1", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "through": "~2.3" - } + "console-control-strings": { + "version": "1.1.0", + "bundled": true }, - "pdfjs-dist": { - "version": "2.12.313", - "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.12.313.tgz", - "integrity": "sha512-1x6iXO4Qnv6Eb+YFdN5JdUzt4pAkxSp3aLAYPX93eQCyg/m7QFzXVWJHJVtoW48CI8HCXju4dSkhQZwoheL5mA==", - "dev": true, - "requires": {} - }, - "pdfmake": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/pdfmake/-/pdfmake-0.2.7.tgz", - "integrity": "sha512-ClLpgx30H5G3EDvRW1MrA1Xih6YxEaSgIVFrOyBMgAAt62V+hxsyWAi6JNP7u1Fc5JKYAbpb4RRVw8Rhvmz5cQ==", - "dev": true, - "requires": { - "@foliojs-fork/linebreak": "^1.1.1", - "@foliojs-fork/pdfkit": "^0.13.0", - "iconv-lite": "^0.6.3", - "xmldoc": "^1.1.2" - }, - "dependencies": { - "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, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } + "cross-spawn": { + "version": "7.0.3", + "bundled": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "bundled": true, + "requires": { + "isexe": "^2.0.0" + } } + } }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1" - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" - }, - "pirates": { - "version": "4.0.5", - "dev": true - }, - "pkg-conf": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", - "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", - "requires": { - "find-up": "^2.0.0", - "load-json-file": "^4.0.0" - } + "cssesc": { + "version": "3.0.0", + "bundled": true }, - "pkg-dir": { - "version": "4.2.0", - "dev": true, - "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "dev": true - } - } + "debug": { + "version": "4.3.4", + "bundled": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "bundled": true + } + } }, - "png-js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz", - "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==", - "dev": true + "defaults": { + "version": "1.0.4", + "bundled": true, + "requires": { + "clone": "^1.0.2" + } }, - "prelude-ls": { - "version": "1.1.2", - "dev": true - }, - "prettier": { - "version": "2.7.1", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } + "delegates": { + "version": "1.0.0", + "bundled": true }, - "pretty-format": { - "version": "27.5.1", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "dev": true - } - } + "depd": { + "version": "2.0.0", + "bundled": true }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true - }, - "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==" - }, - "progress": { - "version": "2.0.3", - "dev": true - }, - "prompts": { - "version": "2.4.2", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } + "diff": { + "version": "5.1.0", + "bundled": true }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" - }, - "proxy-middleware": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", - "integrity": "sha512-EGCG8SeoIRVMhsqHQUdDigB2i7qU7fCsWASwn54+nPutYO8n4q6EiwMzyfWlC+dzRFExP+kvcnDFdBDHoZBU7Q==", - "dev": true - }, - "psl": { - "version": "1.8.0", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } + "eastasianwidth": { + "version": "0.2.0", + "bundled": true }, - "punycode": { - "version": "2.1.1", - "dev": true - }, - "q": { - "version": "1.5.1", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3" - }, - "quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==" - }, - "quote-stream": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", - "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==", - "dev": true, - "requires": { - "buffer-equal": "0.0.1", - "minimist": "^1.1.3", - "through2": "^2.0.0" - } + "emoji-regex": { + "version": "8.0.0", + "bundled": true }, - "randombytes": { - "version": "2.1.0", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } + "encoding": { + "version": "0.1.13", + "bundled": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + } }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } + "env-paths": { + "version": "2.2.1", + "bundled": true }, - "react-is": { - "version": "17.0.2", - "dev": true + "err-code": { + "version": "2.0.3", + "bundled": true }, - "read-pkg": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-8.0.0.tgz", - "integrity": "sha512-Ajb9oSjxXBw0YyOiwtQ2dKbAA/vMnUPnY63XcCk+mXo0BwIdQEMgZLZiMWGttQHcUhUgbK0mH85ethMPKXxziw==", - "requires": { - "@types/normalize-package-data": "^2.4.1", - "normalize-package-data": "^5.0.0", - "parse-json": "^7.0.0", - "type-fest": "^3.8.0" - }, - "dependencies": { - "json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==" - }, - "lines-and-columns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==" - }, - "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==", - "requires": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - } - }, - "parse-json": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.0.0.tgz", - "integrity": "sha512-kP+TQYAzAiVnzOlWOe0diD6L35s9bJh0SCn95PIbZFKrOYuIRQsQkeWEYxzVDuHTt9V9YqvYCJ2Qo4z9wdfZPw==", - "requires": { - "@babel/code-frame": "^7.21.4", - "error-ex": "^1.3.2", - "json-parse-even-better-errors": "^3.0.0", - "lines-and-columns": "^2.0.3", - "type-fest": "^3.8.0" - } - }, - "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==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==" - } - } + "event-target-shim": { + "version": "5.0.1", + "bundled": true }, - "read-pkg-up": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-10.0.0.tgz", - "integrity": "sha512-jgmKiS//w2Zs+YbX039CorlkOp8FIVbSAN8r8GJHDsGlmNPXo+VeHkqAwCiQVTTx5/LwLZTcEw59z3DvcLbr0g==", - "requires": { - "find-up": "^6.3.0", - "read-pkg": "^8.0.0", - "type-fest": "^3.12.0" - }, - "dependencies": { - "find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "requires": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - } - }, - "locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "requires": { - "p-locate": "^6.0.0" - } - }, - "p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "requires": { - "yocto-queue": "^1.0.0" - } - }, - "p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "requires": { - "p-limit": "^4.0.0" - } - }, - "path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==" - }, - "type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==" - } - } + "events": { + "version": "3.3.0", + "bundled": true }, - "readable-stream": { - "version": "3.6.0", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } + "exponential-backoff": { + "version": "3.1.1", + "bundled": true }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } + "fastest-levenshtein": { + "version": "1.0.16", + "bundled": true }, - "rechoir": { - "version": "0.6.2", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } + "foreground-child": { + "version": "3.1.1", + "bundled": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, + "fs-minipass": { + "version": "3.0.2", + "bundled": true, + "requires": { + "minipass": "^5.0.0" + } }, - "redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "dependencies": { - "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==" - } - } + "fs.realpath": { + "version": "1.0.0", + "bundled": true }, - "redeyed": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", - "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==", - "requires": { - "esprima": "~4.0.0" - } + "function-bind": { + "version": "1.1.1", + "bundled": true + }, + "gauge": { + "version": "5.0.1", + "bundled": true, + "requires": { + "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": "^4.0.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + } }, - "reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", - "dev": true - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.2" - } + "glob": { + "version": "10.2.7", + "bundled": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + } }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } + "graceful-fs": { + "version": "4.2.11", + "bundled": true }, - "regexp.prototype.flags": { - "version": "1.4.3", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } + "has": { + "version": "1.0.3", + "bundled": true, + "requires": { + "function-bind": "^1.1.1" + } }, - "regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "requires": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - } + "has-unicode": { + "version": "2.0.1", + "bundled": true }, - "regextras": { - "version": "0.7.1", - "dev": true + "hosted-git-info": { + "version": "6.1.1", + "bundled": true, + "requires": { + "lru-cache": "^7.5.1" + } }, - "registry-auth-token": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", - "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", - "requires": { - "@pnpm/npm-conf": "^2.1.0" - } + "http-cache-semantics": { + "version": "4.1.1", + "bundled": true }, - "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true - } - } + "http-proxy-agent": { + "version": "5.0.0", + "bundled": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } }, - "require-directory": { - "version": "2.1.1" + "https-proxy-agent": { + "version": "5.0.1", + "bundled": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "humanize-ms": { + "version": "1.2.1", + "bundled": true, + "requires": { + "ms": "^2.0.0" + } }, - "require-from-string": { - "version": "2.0.2", - "dev": true + "iconv-lite": { + "version": "0.6.3", + "bundled": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } }, - "resolve": { - "version": "1.22.1", - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } + "ieee754": { + "version": "1.2.1", + "bundled": true }, - "resolve-cwd": { - "version": "3.0.0", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "dev": true - } - } + "ignore-walk": { + "version": "6.0.3", + "bundled": true, + "requires": { + "minimatch": "^9.0.0" + } }, - "resolve-from": { - "version": "4.0.0" - }, - "resolve.exports": { - "version": "1.1.0", - "dev": true - }, - "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, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "dependencies": { - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - } - } + "imurmurhash": { + "version": "0.1.4", + "bundled": true }, - "reusify": { - "version": "1.0.4" + "indent-string": { + "version": "4.0.0", + "bundled": true }, - "rimraf": { - "version": "2.6.3", - "dev": true, - "requires": { - "glob": "^7.1.3" - } + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true + }, + "ini": { + "version": "4.1.1", + "bundled": true + }, + "init-package-json": { + "version": "5.0.0", + "bundled": true, + "requires": { + "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" + } + }, + "ip": { + "version": "2.0.0", + "bundled": true + }, + "ip-regex": { + "version": "4.3.0", + "bundled": true + }, + "is-cidr": { + "version": "4.0.2", + "bundled": true, + "requires": { + "cidr-regex": "^3.1.1" + } + }, + "is-core-module": { + "version": "2.12.1", + "bundled": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "bundled": true }, - "robust-predicates": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", - "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" - }, - "rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } + "is-lambda": { + "version": "1.0.1", + "bundled": true }, - "rollup-plugin-clear": { - "version": "2.0.7", - "dev": true, - "requires": { - "rimraf": "^2.6.2" - } + "isexe": { + "version": "2.0.0", + "bundled": true }, - "rollup-plugin-copy": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-copy/-/rollup-plugin-copy-3.4.0.tgz", - "integrity": "sha512-rGUmYYsYsceRJRqLVlE9FivJMxJ7X6jDlP79fmFkL8sJs7VVMSVyA2yfyL+PGyO/vJs4A87hwhgVfz61njI+uQ==", - "dev": true, - "requires": { - "@types/fs-extra": "^8.0.1", - "colorette": "^1.1.0", - "fs-extra": "^8.1.0", - "globby": "10.0.1", - "is-plain-object": "^3.0.0" - }, - "dependencies": { - "globby": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", - "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - } - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true - } - } + "jackspeak": { + "version": "2.2.1", + "bundled": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } }, - "rollup-plugin-screeps-world": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/rollup-plugin-screeps-world/-/rollup-plugin-screeps-world-1.0.4.tgz", - "integrity": "sha512-+NB/KH8kuOjaenOySZVrPnRU5O/ny48otYYyI/Flg5tww59XIA95JZbmgnoN8J8GbjmDk+D5s+RV4YSK9r2ucw==", - "dev": true, - "requires": { - "git-rev-sync": "^3.0.2", - "screeps-api": "^1.11.0" - }, - "dependencies": { - "git-rev-sync": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/git-rev-sync/-/git-rev-sync-3.0.2.tgz", - "integrity": "sha512-Nd5RiYpyncjLv0j6IONy0lGzAqdRXUaBctuGBbrEA2m6Bn4iDrN/9MeQTXuiquw8AEKL9D2BW0nw5m/lQvxqnQ==", - "dev": true, - "requires": { - "escape-string-regexp": "1.0.5", - "graceful-fs": "4.1.15", - "shelljs": "0.8.5" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - } - } + "json-parse-even-better-errors": { + "version": "3.0.0", + "bundled": true }, - "rollup-plugin-terser": { - "version": "7.0.2", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "jest-worker": { - "version": "26.6.2", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "serialize-javascript": { - "version": "4.0.0", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "json-stringify-nice": { + "version": "1.1.4", + "bundled": true }, - "rollup-plugin-typescript2": { - "version": "0.36.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.36.0.tgz", - "integrity": "sha512-NB2CSQDxSe9+Oe2ahZbf+B4bh7pHwjV5L+RSYpCu7Q5ROuN94F9b6ioWwKfz3ueL3KTtmX4o2MUH2cgHDIEUsw==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^4.1.2", - "find-cache-dir": "^3.3.2", - "fs-extra": "^10.0.0", - "semver": "^7.5.4", - "tslib": "^2.6.2" - }, - "dependencies": { - "@rollup/pluginutils": { - "version": "4.2.1", - "dev": true, - "requires": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - } - }, - "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, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } + "jsonparse": { + "version": "1.3.1", + "bundled": true + }, + "just-diff": { + "version": "6.0.2", + "bundled": true + }, + "just-diff-apply": { + "version": "5.5.0", + "bundled": true + }, + "libnpmaccess": { + "version": "7.0.2", + "bundled": true, + "requires": { + "npm-package-arg": "^10.1.0", + "npm-registry-fetch": "^14.0.3" + } + }, + "libnpmdiff": { + "version": "5.0.19", + "bundled": true, + "requires": { + "@npmcli/arborist": "^6.3.0", + "@npmcli/disparity-colors": "^3.0.0", + "@npmcli/installed-package-contents": "^2.0.2", + "binary-extensions": "^2.2.0", + "diff": "^5.1.0", + "minimatch": "^9.0.0", + "npm-package-arg": "^10.1.0", + "pacote": "^15.0.8", + "tar": "^6.1.13" + } + }, + "libnpmexec": { + "version": "6.0.3", + "bundled": true, + "requires": { + "@npmcli/arborist": "^6.3.0", + "@npmcli/run-script": "^6.0.0", + "ci-info": "^3.7.1", + "npm-package-arg": "^10.1.0", + "npmlog": "^7.0.1", + "pacote": "^15.0.8", + "proc-log": "^3.0.0", + "read": "^2.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "walk-up-path": "^3.0.1" + } + }, + "libnpmfund": { + "version": "4.0.19", + "bundled": true, + "requires": { + "@npmcli/arborist": "^6.3.0" + } + }, + "libnpmhook": { + "version": "9.0.3", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + } + }, + "libnpmorg": { + "version": "5.0.4", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + } + }, + "libnpmpack": { + "version": "5.0.19", + "bundled": true, + "requires": { + "@npmcli/arborist": "^6.3.0", + "@npmcli/run-script": "^6.0.0", + "npm-package-arg": "^10.1.0", + "pacote": "^15.0.8" + } + }, + "libnpmpublish": { + "version": "7.5.0", + "bundled": true, + "requires": { + "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" + } + }, + "libnpmsearch": { + "version": "6.0.2", + "bundled": true, + "requires": { + "npm-registry-fetch": "^14.0.3" + } + }, + "libnpmteam": { + "version": "5.0.3", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + } + }, + "libnpmversion": { + "version": "4.0.2", + "bundled": true, + "requires": { + "@npmcli/git": "^4.0.1", + "@npmcli/run-script": "^6.0.0", + "json-parse-even-better-errors": "^3.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.7" + } }, - "run-parallel": { - "version": "1.2.0", - "requires": { - "queue-microtask": "^1.2.2" - } + "lru-cache": { + "version": "7.18.3", + "bundled": true + }, + "make-fetch-happen": { + "version": "11.1.1", + "bundled": true, + "requires": { + "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" + } }, - "rw": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" - }, - "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, - "requires": { - "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", - "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", - "dev": true - } - } + "minimatch": { + "version": "9.0.3", + "bundled": true, + "requires": { + "brace-expansion": "^2.0.1" + } }, - "sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "requires": { - "mri": "^1.1.0" + "minipass": { + "version": "5.0.0", + "bundled": true + }, + "minipass-collect": { + "version": "1.0.2", + "bundled": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-fetch": { + "version": "3.0.3", + "bundled": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^5.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + }, + "minipass-flush": { + "version": "1.0.5", + "bundled": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-json-stream": { + "version": "1.0.1", + "bundled": true, + "requires": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "bundled": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-sized": { + "version": "1.0.3", + "bundled": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minizlib": { + "version": "2.1.2", + "bundled": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } } + } }, - "safe-buffer": { - "version": "5.2.1" - }, - "safe-stable-stringify": { - "version": "2.4.0", - "dev": true + "mkdirp": { + "version": "1.0.4", + "bundled": true }, - "safer-buffer": { - "version": "2.1.2" - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "saxes": { - "version": "5.0.1", - "dev": true, - "requires": { - "xmlchars": "^2.2.0" - } + "ms": { + "version": "2.1.3", + "bundled": true }, - "scope-analyzer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.2.tgz", - "integrity": "sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ==", - "dev": true, - "requires": { - "array-from": "^2.1.1", - "dash-ast": "^2.0.1", - "es6-map": "^0.1.5", - "es6-set": "^0.1.5", - "es6-symbol": "^3.1.1", - "estree-is-function": "^1.0.0", - "get-assigned-identifiers": "^1.1.0" - } + "mute-stream": { + "version": "1.0.0", + "bundled": true }, - "screeps-api": { - "version": "1.16.0", - "dev": true, - "requires": { - "axios": "^0.21.1", - "bufferutil": "^4.0.1", - "commander": "^7.2.0", - "debug": "^4.1.1", - "utf-8-validate": "^5.0.2", - "ws": "^7.4.4", - "yamljs": "^0.3.0" + "negotiator": { + "version": "0.6.3", + "bundled": true + }, + "node-gyp": { + "version": "9.4.0", + "bundled": true, + "requires": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^11.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" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true + }, + "are-we-there-yet": { + "version": "3.0.1", + "bundled": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } }, - "dependencies": { - "commander": { - "version": "7.2.0", - "dev": true - }, - "debug": { - "version": "4.3.4", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "dev": true - } - } - }, - "screeps-db-importer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/screeps-db-importer/-/screeps-db-importer-1.1.0.tgz", - "integrity": "sha512-bbkO0n7DJpu9DzG2PGwEi4FZA64+iCbkYcBiqNYIx/l5vurldEF16UZLBir7tIpC1aJ2OCl6y7Mb1xaN2qDTMQ==", - "dev": true, - "requires": { - "node-fetch": "^3.3.1", - "winston": "^3.8.2" + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "dependencies": { - "node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "dev": true, - "requires": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - } - } - } - }, - "screeps-grafana-go_carbon": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/screeps-grafana-go_carbon/-/screeps-grafana-go_carbon-1.0.5.tgz", - "integrity": "sha512-YLN87Jd9d1wrcWB38kTJLHMR7aoEgfXlNAexP6axBLDmBxpBPwcW6M7bb9/P0q1Q/m20GRtcPBrdFn1Sk4R39A==", - "dev": true, - "requires": { - "axios": "^0.27.2", - "dotenv": "^16.0.2", - "fs-extra": "^11.1.0", - "get-port-please": "^3.0.1", - "minimist": "^1.2.7", - "winston": "^3.8.1" + "gauge": { + "version": "4.0.4", + "bundled": true, + "requires": { + "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" + } }, - "dependencies": { - "axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "dev": true, - "requires": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" - } - }, - "fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "screeps-jest": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/screeps-jest/-/screeps-jest-2.0.2.tgz", - "integrity": "sha512-2jVH1fKX2U4SQBbbGe5rF5lUGtsE7AcsteV7+L4//WngXl5z16nv7DyHq0yNFrxuaRYZUUBLOaSE4gjr7h6H0A==", - "dev": true, - "requires": {} - }, - "screeps-performance-server": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.14.1.tgz", - "integrity": "sha512-gH7sYnoAvSKqXok/HQ5qRNLXc0ORm6E/xkweMt+Zd4qYp2uSyuxFSNRL1DsG2A5T74ZrOyVTGmX5J95WjwFGXg==", - "dev": true, - "requires": { - "@octokit/core": "^4.2.0", - "discord.js": "^14.9.0", - "dockerode": "^4.0.2", - "dotenv": "^16.0.3", - "get-port": "^6.1.2", - "json-beautify": "^1.1.1", - "lodash": "^4.17.21", - "minimist": "^1.2.7", - "ncp": "^2.0.0", - "node-fetch": "^2.6.7", - "node-powershell": "^5.0.1", - "pastebin-api": "^5.1.6", - "q": "^1.5.1", - "screeps-api": "1.16.0", - "screeps-db-importer": "latest", - "winston": "^3.8.2" + "glob": { + "version": "7.2.3", + "bundled": true, + "requires": { + "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" + } }, - "dependencies": { - "@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 - }, - "@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, - "requires": { - "@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" - } - }, - "@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, - "requires": { - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@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, - "requires": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^9.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@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, - "requires": { - "@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" - } - }, - "@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, - "requires": { - "@octokit/types": "^9.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "@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, - "requires": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "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 - }, - "lodash": { - "version": "4.17.21", - "dev": true - } - } - }, - "screeps-viz": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/screeps-viz/-/screeps-viz-2.1.3.tgz", - "integrity": "sha512-c96u2MTtrXzjv4O1K89J1EWgapbP0C9xqx2gCOZ5uLTBDr1RaAuIQZkOquqHA8ELhSNd9xr9X7Qt5vCOMMknSw==", - "dev": true - }, - "semantic-release": { - "version": "21.0.7", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-21.0.7.tgz", - "integrity": "sha512-peRDSXN+hF8EFSKzze90ff/EnAmgITHQ/a3SZpRV3479ny0BIZWEJ33uX6/GlOSKdaSxo9hVRDyv2/u2MuF+Bw==", - "requires": { - "@semantic-release/commit-analyzer": "^10.0.0", - "@semantic-release/error": "^4.0.0", - "@semantic-release/github": "^9.0.0", - "@semantic-release/npm": "^10.0.2", - "@semantic-release/release-notes-generator": "^11.0.0", - "aggregate-error": "^4.0.1", - "cosmiconfig": "^8.0.0", - "debug": "^4.0.0", - "env-ci": "^9.0.0", - "execa": "^7.0.0", - "figures": "^5.0.0", - "find-versions": "^5.1.0", - "get-stream": "^6.0.0", - "git-log-parser": "^1.2.0", - "hook-std": "^3.0.0", - "hosted-git-info": "^6.0.0", - "lodash-es": "^4.17.21", - "marked": "^5.0.0", - "marked-terminal": "^5.1.1", - "micromatch": "^4.0.2", - "p-each-series": "^3.0.0", - "p-reduce": "^3.0.0", - "read-pkg-up": "^10.0.0", - "resolve-from": "^5.0.0", - "semver": "^7.3.2", - "semver-diff": "^4.0.0", - "signale": "^1.2.1", - "yargs": "^17.5.1" + "minimatch": { + "version": "3.1.2", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + } }, - "dependencies": { - "@semantic-release/commit-analyzer": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-10.0.1.tgz", - "integrity": "sha512-9ejHzTAijYs9z246sY/dKBatmOPcd0GQ7lH4MgLCkv1q4GCiDZRkjHJkaQZXZVaK7mJybS+sH3Ng6G8i3pYMGQ==", - "requires": { - "conventional-changelog-angular": "^6.0.0", - "conventional-commits-filter": "^3.0.0", - "conventional-commits-parser": "^4.0.0", - "debug": "^4.0.0", - "import-from": "^4.0.0", - "lodash-es": "^4.17.21", - "micromatch": "^4.0.2" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" - }, - "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==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - }, - "semver-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", - "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", - "requires": { - "semver": "^7.3.5" + "nopt": { + "version": "6.0.0", + "bundled": true, + "requires": { + "abbrev": "^1.0.0" + } }, - "dependencies": { - "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==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "semver-regex": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", - "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==" - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "npmlog": { + "version": "6.0.2", + "bundled": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + } }, - "dependencies": { - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "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 - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - } - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" + "readable-stream": { + "version": "3.6.2", + "bundled": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } }, - "dependencies": { - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - } + "signal-exit": { + "version": "3.0.7", + "bundled": true + }, + "which": { + "version": "2.0.2", + "bundled": true, + "requires": { + "isexe": "^2.0.0" + } } + } }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true + "nopt": { + "version": "7.2.0", + "bundled": true, + "requires": { + "abbrev": "^2.0.0" + } }, - "shallow-copy": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", - "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==", - "dev": true + "normalize-package-data": { + "version": "5.0.0", + "bundled": true, + "requires": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + } + }, + "npm-audit-report": { + "version": "5.0.0", + "bundled": true + }, + "npm-bundled": { + "version": "3.0.0", + "bundled": true, + "requires": { + "npm-normalize-package-bin": "^3.0.0" + } + }, + "npm-install-checks": { + "version": "6.1.1", + "bundled": true, + "requires": { + "semver": "^7.1.1" + } + }, + "npm-normalize-package-bin": { + "version": "3.0.1", + "bundled": true + }, + "npm-package-arg": { + "version": "10.1.0", + "bundled": true, + "requires": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + } + }, + "npm-packlist": { + "version": "7.0.4", + "bundled": true, + "requires": { + "ignore-walk": "^6.0.0" + } + }, + "npm-pick-manifest": { + "version": "8.0.1", + "bundled": true, + "requires": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + } + }, + "npm-profile": { + "version": "7.0.1", + "bundled": true, + "requires": { + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0" + } + }, + "npm-registry-fetch": { + "version": "14.0.5", + "bundled": true, + "requires": { + "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" + } + }, + "npm-user-validate": { + "version": "2.0.0", + "bundled": true + }, + "npmlog": { + "version": "7.0.1", + "bundled": true, + "requires": { + "are-we-there-yet": "^4.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^5.0.0", + "set-blocking": "^2.0.0" + } }, - "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==", - "requires": { - "shebang-regex": "^3.0.0" - } + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1" + } }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "side-channel": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } + "p-map": { + "version": "4.0.0", + "bundled": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "pacote": { + "version": "15.2.0", + "bundled": true, + "requires": { + "@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" + } + }, + "parse-conflict-json": { + "version": "3.0.1", + "bundled": true, + "requires": { + "json-parse-even-better-errors": "^3.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" + } }, - "signal-exit": { - "version": "3.0.7" - }, - "signale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", - "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", - "requires": { - "chalk": "^2.3.2", - "figures": "^2.0.0", - "pkg-conf": "^2.1.0" - }, - "dependencies": { - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", - "requires": { - "escape-string-regexp": "^1.0.5" - } - } - } + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + }, + "path-key": { + "version": "3.1.1", + "bundled": true + }, + "path-scurry": { + "version": "1.9.2", + "bundled": true, + "requires": { + "lru-cache": "^9.1.1", + "minipass": "^5.0.0 || ^6.0.2" + }, + "dependencies": { + "lru-cache": { + "version": "9.1.1", + "bundled": true + } + } + }, + "postcss-selector-parser": { + "version": "6.0.13", + "bundled": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "proc-log": { + "version": "3.0.0", + "bundled": true + }, + "process": { + "version": "0.11.10", + "bundled": true + }, + "promise-all-reject-late": { + "version": "1.0.1", + "bundled": true + }, + "promise-call-limit": { + "version": "1.0.2", + "bundled": true + }, + "promise-inflight": { + "version": "1.0.1", + "bundled": true + }, + "promise-retry": { + "version": "2.0.1", + "bundled": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "promzard": { + "version": "1.0.0", + "bundled": true, + "requires": { + "read": "^2.0.0" + } + }, + "qrcode-terminal": { + "version": "0.12.0", + "bundled": true + }, + "read": { + "version": "2.1.0", + "bundled": true, + "requires": { + "mute-stream": "~1.0.0" + } + }, + "read-cmd-shim": { + "version": "4.0.0", + "bundled": true + }, + "read-package-json": { + "version": "6.0.4", + "bundled": true, + "requires": { + "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" + } + }, + "read-package-json-fast": { + "version": "3.0.2", + "bundled": true, + "requires": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + } + }, + "readable-stream": { + "version": "4.4.0", + "bundled": true, + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10" + } + }, + "retry": { + "version": "0.12.0", + "bundled": true }, - "simple-swizzle": { - "version": "0.2.2", - "dev": true, - "requires": { - "is-arrayish": "^0.3.1" + "rimraf": { + "version": "3.0.2", + "bundled": true, + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "dev": true - } + "glob": { + "version": "7.2.3", + "bundled": true, + "requires": { + "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" + } + }, + "minimatch": { + "version": "3.1.2", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + } } + } }, - "sinon": { - "version": "6.3.5", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.0.2", - "@sinonjs/formatio": "^3.0.0", - "@sinonjs/samsam": "^2.1.2", - "diff": "^3.5.0", - "lodash.get": "^4.4.2", - "lolex": "^2.7.5", - "nise": "^1.4.5", - "supports-color": "^5.5.0", - "type-detect": "^4.0.8" - } + "safe-buffer": { + "version": "5.2.1", + "bundled": true }, - "sinon-chai": { - "version": "3.7.0", - "dev": true, - "requires": {} + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "optional": true }, - "sisteransi": { - "version": "1.0.5", - "dev": true + "semver": { + "version": "7.5.4", + "bundled": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + } + } }, - "slash": { - "version": "3.0.0", - "dev": true + "set-blocking": { + "version": "2.0.0", + "bundled": true }, - "source-map": { - "version": "0.6.1" - }, - "source-map-support": { - "version": "0.5.21", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } + "shebang-command": { + "version": "2.0.0", + "bundled": true, + "requires": { + "shebang-regex": "^3.0.0" + } }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true + "shebang-regex": { + "version": "3.0.0", + "bundled": true }, - "spawn-error-forwarder": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", - "integrity": "sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==" + "signal-exit": { + "version": "4.0.2", + "bundled": true + }, + "sigstore": { + "version": "1.7.0", + "bundled": true, + "requires": { + "@sigstore/protobuf-specs": "^0.1.0", + "@sigstore/tuf": "^1.0.1", + "make-fetch-happen": "^11.0.1" + } + }, + "smart-buffer": { + "version": "4.2.0", + "bundled": true + }, + "socks": { + "version": "2.7.1", + "bundled": true, + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "7.0.0", + "bundled": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } }, "spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } + "version": "3.2.0", + "bundled": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } }, "spdx-exceptions": { - "version": "2.3.0" + "version": "2.3.0", + "bundled": true }, "spdx-expression-parse": { - "version": "3.0.1", - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } + "version": "3.0.1", + "bundled": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } }, "spdx-license-ids": { - "version": "3.0.11" - }, - "split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "requires": { - "through": "2" - } - }, - "split-ca": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz", - "integrity": "sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==", - "dev": true - }, - "split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "requires": { - "readable-stream": "^3.0.0" - } + "version": "3.0.13", + "bundled": true }, - "sprintf-js": { - "version": "1.0.3", - "dev": true - }, - "ssh2": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.15.0.tgz", - "integrity": "sha512-C0PHgX4h6lBxYx7hcXwu3QWdh4tg6tZZsTfXcdvc5caW/EMxaB4H9dWsl7qk+F7LAW762hp8VbXOX7x4xUYvEw==", - "dev": true, - "requires": { - "asn1": "^0.2.6", - "bcrypt-pbkdf": "^1.0.2", - "cpu-features": "~0.0.9", - "nan": "^2.18.0" - } + "ssri": { + "version": "10.0.4", + "bundled": true, + "requires": { + "minipass": "^5.0.0" + } }, - "stack-trace": { - "version": "0.0.10", - "dev": true + "string_decoder": { + "version": "1.3.0", + "bundled": true, + "requires": { + "safe-buffer": "~5.2.0" + } }, - "stack-utils": { - "version": "2.0.5", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "dev": true - } - } + "string-width": { + "version": "4.2.3", + "bundled": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } }, - "static-eval": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz", - "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==", - "dev": true, - "requires": { - "escodegen": "^1.11.1" - }, - "dependencies": { - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - } - } + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "bundled": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } }, - "static-module": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/static-module/-/static-module-3.0.4.tgz", - "integrity": "sha512-gb0v0rrgpBkifXCa3yZXxqVmXDVE+ETXj6YlC/jt5VzOnGXR2C15+++eXuMDUYsePnbhf+lwW0pE1UXyOLtGCw==", - "dev": true, - "requires": { - "acorn-node": "^1.3.0", - "concat-stream": "~1.6.0", - "convert-source-map": "^1.5.1", - "duplexer2": "~0.1.4", - "escodegen": "^1.11.1", - "has": "^1.0.1", - "magic-string": "0.25.1", - "merge-source-map": "1.0.4", - "object-inspect": "^1.6.0", - "readable-stream": "~2.3.3", - "scope-analyzer": "^2.0.1", - "shallow-copy": "~0.0.1", - "static-eval": "^2.0.5", - "through2": "~2.0.3" - }, - "dependencies": { - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "magic-string": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz", - "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.1" - } - }, - "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, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } + "strip-ansi": { + "version": "6.0.1", + "bundled": true, + "requires": { + "ansi-regex": "^5.0.1" + } }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true - }, - "stream-combiner": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", - "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", - "dev": true, - "requires": { - "duplexer": "~0.1.1", - "through": "~2.3.4" - } + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "bundled": true, + "requires": { + "ansi-regex": "^5.0.1" + } }, - "stream-combiner2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", - "requires": { - "duplexer2": "~0.1.0", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "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==", - "requires": { - "safe-buffer": "~5.1.0" - } + "supports-color": { + "version": "9.4.0", + "bundled": true + }, + "tar": { + "version": "6.1.15", + "bundled": true, + "requires": { + "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" + }, + "dependencies": { + "fs-minipass": { + "version": "2.1.0", + "bundled": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } } + } } + } }, - "streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "requires": { - "safe-buffer": "~5.2.0" - } + "text-table": { + "version": "0.2.0", + "bundled": true + }, + "tiny-relative-date": { + "version": "1.3.0", + "bundled": true + }, + "treeverse": { + "version": "3.0.0", + "bundled": true + }, + "tuf-js": { + "version": "1.1.7", + "bundled": true, + "requires": { + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.1" + } + }, + "unique-filename": { + "version": "3.0.0", + "bundled": true, + "requires": { + "unique-slug": "^4.0.0" + } + }, + "unique-slug": { + "version": "4.0.0", + "bundled": true, + "requires": { + "imurmurhash": "^0.1.4" + } }, - "string-length": { - "version": "4.0.2", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } + "util-deprecate": { + "version": "1.0.2", + "bundled": true }, - "string-template": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string-template/-/string-template-1.0.0.tgz", - "integrity": "sha512-SLqR3GBUXuoPP5MmYtD7ompvXiG87QjT6lzOszyXjTM86Uu7At7vNnt2xgyTLq5o9T4IxTYFyGxcULqpsmsfdg==", - "dev": true + "validate-npm-package-license": { + "version": "3.0.4", + "bundled": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "5.0.0", + "bundled": true, + "requires": { + "builtins": "^5.0.0" + } + }, + "walk-up-path": { + "version": "3.0.1", + "bundled": true }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } + "wcwidth": { + "version": "1.0.1", + "bundled": true, + "requires": { + "defaults": "^1.0.3" + } }, - "string-width-cjs": { - "version": "npm:string-width@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, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } + "which": { + "version": "3.0.1", + "bundled": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.5", + "bundled": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } }, - "string.prototype.trimend": { - "version": "1.0.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "wrap-ansi": { + "version": "8.1.0", + "bundled": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "bundled": true + }, + "ansi-styles": { + "version": "6.2.1", + "bundled": true + }, + "emoji-regex": { + "version": "9.2.2", + "bundled": true + }, + "string-width": { + "version": "5.1.2", + "bundled": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "bundled": true, + "requires": { + "ansi-regex": "^6.0.1" + } } + } }, - "string.prototype.trimstart": { - "version": "1.0.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "bundled": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } }, - "stringz": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/stringz/-/stringz-2.1.0.tgz", - "integrity": "sha512-KlywLT+MZ+v0IRepfMxRtnSvDCMc3nR1qqCs3m/qIbSOWkNZYT8XHQA31rS3TnKp0c5xjZu3M4GY/2aRKSi/6A==", - "dev": true, - "requires": { - "char-regex": "^1.0.2" - } + "wrappy": { + "version": "1.0.2", + "bundled": true }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } + "write-file-atomic": { + "version": "5.0.1", + "bundled": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + } }, - "strip-ansi-cjs": { - "version": "npm:strip-ansi@6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } + "yallist": { + "version": "4.0.0", + "bundled": true + } + } + }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "requires": { + "path-key": "^4.0.0" + }, + "dependencies": { + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==" + } + } + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "nwsapi": { + "version": "2.2.0", + "dev": true + }, + "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 + }, + "object-inspect": { + "version": "1.12.2", + "dev": true + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "dev": true + }, + "object.assign": { + "version": "4.1.4", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "object.values": { + "version": "1.1.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "requires": { + "wrappy": "1" + } + }, + "one-time": { + "version": "1.0.0", + "dev": true, + "requires": { + "fn.name": "1.x.x" + } + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", + "dev": true + }, + "optionator": { + "version": "0.8.3", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "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, + "requires": { + "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" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "strip-bom": { - "version": "3.0.0" + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "strip-final-newline": { - "version": "2.0.0", - "dev": true - }, - "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==", - "requires": { - "min-indent": "^1.0.0" - } + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "dev": true + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, - "stylis": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", - "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" + "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 }, "supports-color": { - "version": "5.5.0", - "requires": { - "has-flag": "^3.0.0" - } + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "os-name": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz", + "integrity": "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==", + "dev": true, + "requires": { + "macos-release": "^2.5.0", + "windows-release": "^4.0.0" + } + }, + "p-each-series": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz", + "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==" + }, + "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==", + "requires": { + "p-map": "^5.1.0" + } + }, + "p-finally": { + "version": "1.0.0", + "dev": true + }, + "p-is-promise": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", + "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==" + }, + "p-limit": { + "version": "1.3.0", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "requires": { + "p-limit": "^1.1.0" + } + }, + "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==", + "requires": { + "aggregate-error": "^4.0.0" + } + }, + "p-queue": { + "version": "6.6.2", + "dev": true, + "requires": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "dependencies": { + "p-timeout": { + "version": "3.2.0", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + } + } + }, + "p-reduce": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", + "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==" + }, + "p-timeout": { + "version": "4.1.0", + "dev": true + }, + "p-try": { + "version": "1.0.0" + }, + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "requires": { + "callsites": "^3.0.0" + } + }, + "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==", + "requires": { + "@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" + } + }, + "parse5": { + "version": "6.0.1", + "dev": true + }, + "parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dev": true, + "requires": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "dependencies": { + "parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "requires": { + "entities": "^4.4.0" + } + } + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pastebin-api": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/pastebin-api/-/pastebin-api-5.1.6.tgz", + "integrity": "sha512-FI2ZeXLxroI2tuRVd5LI7eNmiANFxDOdlhXxSMqtOXTJn1KSt2UC8kglhndUOOPt6p9XPVnuS7XGW/KbiBbbzw==", + "dev": true, + "requires": { + "fast-xml-parser": "^4.1.3", + "undici": "^5.21.0" + } + }, + "path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "path-exists": { + "version": "3.0.0" + }, + "path-is-absolute": { + "version": "1.0.1", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "path-parse": { + "version": "1.0.7" + }, + "path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "requires": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", + "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", + "dev": true + } + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "pathval": { + "version": "1.1.1", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "through": "~2.3" + } + }, + "pdfjs-dist": { + "version": "2.12.313", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.12.313.tgz", + "integrity": "sha512-1x6iXO4Qnv6Eb+YFdN5JdUzt4pAkxSp3aLAYPX93eQCyg/m7QFzXVWJHJVtoW48CI8HCXju4dSkhQZwoheL5mA==", + "dev": true, + "requires": {} + }, + "pdfmake": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/pdfmake/-/pdfmake-0.2.7.tgz", + "integrity": "sha512-ClLpgx30H5G3EDvRW1MrA1Xih6YxEaSgIVFrOyBMgAAt62V+hxsyWAi6JNP7u1Fc5JKYAbpb4RRVw8Rhvmz5cQ==", + "dev": true, + "requires": { + "@foliojs-fork/linebreak": "^1.1.1", + "@foliojs-fork/pdfkit": "^0.13.0", + "iconv-lite": "^0.6.3", + "xmldoc": "^1.1.2" + }, + "dependencies": { + "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, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" + }, + "pirates": { + "version": "4.0.5", + "dev": true + }, + "pkg-conf": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", + "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", + "requires": { + "find-up": "^2.0.0", + "load-json-file": "^4.0.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } }, - "supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0" - }, - "supports-color": { - "version": "7.2.0", - "requires": { - "has-flag": "^4.0.0" - } - } - } + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0" - }, - "symbol-tree": { - "version": "3.2.4", - "dev": true - }, - "tar-fs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", - "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", - "dev": true, - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.0.0" - } + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } }, - "temp-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", - "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==" - }, - "tempy": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz", - "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==", - "requires": { - "is-stream": "^3.0.0", - "temp-dir": "^3.0.0", - "type-fest": "^2.12.2", - "unique-string": "^3.0.0" - }, - "dependencies": { - "is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" - }, - "type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==" - } - } + "p-try": { + "version": "2.2.0", + "dev": true }, - "terminal-link": { - "version": "2.1.1", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "dependencies": { - "ansi-escapes": { - "version": "4.3.2", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "type-fest": { - "version": "0.21.3", - "dev": true - } - } + "path-exists": { + "version": "4.0.0", + "dev": true + } + } + }, + "png-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz", + "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "dev": true + }, + "prettier": { + "version": "2.7.1", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "pretty-format": { + "version": "27.5.1", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "dev": true + } + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true + }, + "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==" + }, + "progress": { + "version": "2.0.3", + "dev": true + }, + "prompts": { + "version": "2.4.2", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" + }, + "proxy-middleware": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", + "integrity": "sha512-EGCG8SeoIRVMhsqHQUdDigB2i7qU7fCsWASwn54+nPutYO8n4q6EiwMzyfWlC+dzRFExP+kvcnDFdBDHoZBU7Q==", + "dev": true + }, + "psl": { + "version": "1.8.0", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "dev": true + }, + "q": { + "version": "1.5.1", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3" + }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==" + }, + "quote-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", + "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==", + "dev": true, + "requires": { + "buffer-equal": "0.0.1", + "minimist": "^1.1.3", + "through2": "^2.0.0" + } + }, + "randombytes": { + "version": "2.1.0", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "react-is": { + "version": "17.0.2", + "dev": true + }, + "read-pkg": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-8.0.0.tgz", + "integrity": "sha512-Ajb9oSjxXBw0YyOiwtQ2dKbAA/vMnUPnY63XcCk+mXo0BwIdQEMgZLZiMWGttQHcUhUgbK0mH85ethMPKXxziw==", + "requires": { + "@types/normalize-package-data": "^2.4.1", + "normalize-package-data": "^5.0.0", + "parse-json": "^7.0.0", + "type-fest": "^3.8.0" + }, + "dependencies": { + "json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==" }, - "terser": { - "version": "5.14.2", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - } + "lines-and-columns": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==" }, - "test-exclude": { - "version": "6.0.0", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } + "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==", + "requires": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + } }, - "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==" + "parse-json": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.0.0.tgz", + "integrity": "sha512-kP+TQYAzAiVnzOlWOe0diD6L35s9bJh0SCn95PIbZFKrOYuIRQsQkeWEYxzVDuHTt9V9YqvYCJ2Qo4z9wdfZPw==", + "requires": { + "@babel/code-frame": "^7.21.4", + "error-ex": "^1.3.2", + "json-parse-even-better-errors": "^3.0.0", + "lines-and-columns": "^2.0.3", + "type-fest": "^3.8.0" + } }, - "text-hex": { - "version": "1.0.0", - "dev": true + "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==", + "requires": { + "lru-cache": "^6.0.0" + } }, - "text-table": { - "version": "0.2.0", - "dev": true + "type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==" + } + } + }, + "read-pkg-up": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-10.0.0.tgz", + "integrity": "sha512-jgmKiS//w2Zs+YbX039CorlkOp8FIVbSAN8r8GJHDsGlmNPXo+VeHkqAwCiQVTTx5/LwLZTcEw59z3DvcLbr0g==", + "requires": { + "find-up": "^6.3.0", + "read-pkg": "^8.0.0", + "type-fest": "^3.12.0" + }, + "dependencies": { + "find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "requires": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + } }, - "throat": { - "version": "6.0.1", - "dev": true + "locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "requires": { + "p-locate": "^6.0.0" + } }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "requires": { + "yocto-queue": "^1.0.0" + } }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "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==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } + "p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "requires": { + "p-limit": "^4.0.0" + } }, - "tiny-inflate": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", - "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", - "dev": true + "path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==" }, - "tmpl": { - "version": "1.0.5", - "dev": true + "type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==" + } + } + }, + "readable-stream": { + "version": "3.6.0", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "rechoir": { + "version": "0.6.2", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "dependencies": { + "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==" + } + } + }, + "redeyed": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", + "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==", + "requires": { + "esprima": "~4.0.0" + } + }, + "reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "dev": true + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "requires": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + } + }, + "regextras": { + "version": "0.7.1", + "dev": true + }, + "registry-auth-token": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", + "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", + "requires": { + "@pnpm/npm-conf": "^2.1.0" + } + }, + "regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + } + } + }, + "require-directory": { + "version": "2.1.1" + }, + "require-from-string": { + "version": "2.0.2", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "dev": true + } + } + }, + "resolve-from": { + "version": "4.0.0" + }, + "resolve.exports": { + "version": "1.1.0", + "dev": true + }, + "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, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true }, - "to-fast-properties": { - "version": "2.0.0", - "dev": true + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + } + } + }, + "reusify": { + "version": "1.0.4" + }, + "rimraf": { + "version": "2.6.3", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" + }, + "rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "rollup-plugin-clear": { + "version": "2.0.7", + "dev": true, + "requires": { + "rimraf": "^2.6.2" + } + }, + "rollup-plugin-copy": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-copy/-/rollup-plugin-copy-3.4.0.tgz", + "integrity": "sha512-rGUmYYsYsceRJRqLVlE9FivJMxJ7X6jDlP79fmFkL8sJs7VVMSVyA2yfyL+PGyO/vJs4A87hwhgVfz61njI+uQ==", + "dev": true, + "requires": { + "@types/fs-extra": "^8.0.1", + "colorette": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "10.0.1", + "is-plain-object": "^3.0.0" + }, + "dependencies": { + "globby": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", + "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + } }, - "to-regex-range": { - "version": "5.0.1", - "requires": { - "is-number": "^7.0.0" - } + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true + } + } + }, + "rollup-plugin-screeps-world": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/rollup-plugin-screeps-world/-/rollup-plugin-screeps-world-1.0.4.tgz", + "integrity": "sha512-+NB/KH8kuOjaenOySZVrPnRU5O/ny48otYYyI/Flg5tww59XIA95JZbmgnoN8J8GbjmDk+D5s+RV4YSK9r2ucw==", + "dev": true, + "requires": { + "git-rev-sync": "^3.0.2", + "screeps-api": "^1.11.0" + }, + "dependencies": { + "git-rev-sync": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/git-rev-sync/-/git-rev-sync-3.0.2.tgz", + "integrity": "sha512-Nd5RiYpyncjLv0j6IONy0lGzAqdRXUaBctuGBbrEA2m6Bn4iDrN/9MeQTXuiquw8AEKL9D2BW0nw5m/lQvxqnQ==", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "graceful-fs": "4.1.15", + "shelljs": "0.8.5" + } }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true + }, + "shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + } + } + }, + "rollup-plugin-terser": { + "version": "7.0.2", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "dev": true }, - "tr46": { - "version": "2.1.0", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } + "jest-worker": { + "version": "26.6.2", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "serialize-javascript": { + "version": "4.0.0", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } }, - "traverse": { - "version": "0.6.7", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", - "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==" - }, - "trim-buffer": { - "version": "5.0.0", - "dev": true - }, - "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==" - }, - "triple-beam": { - "version": "1.3.0", - "dev": true - }, - "ts-dedent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", - "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==" - }, - "ts-jest": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.5.tgz", - "integrity": "sha512-lIJApzfTaSSbtlksfFNHkWOzLJuuSm4faFAfo5kvzOiRAuoN4/eKxVJ2zEAho8aecE04qX6K1pAzfH5QHL1/8w==", - "dev": true, - "requires": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", - "json5": "2.x", - "lodash": "4.x", - "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "rollup-plugin-typescript2": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.36.0.tgz", + "integrity": "sha512-NB2CSQDxSe9+Oe2ahZbf+B4bh7pHwjV5L+RSYpCu7Q5ROuN94F9b6ioWwKfz3ueL3KTtmX4o2MUH2cgHDIEUsw==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^4.1.2", + "find-cache-dir": "^3.3.2", + "fs-extra": "^10.0.0", + "semver": "^7.5.4", + "tslib": "^2.6.2" + }, + "dependencies": { + "@rollup/pluginutils": { + "version": "4.2.1", + "dev": true, + "requires": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + } }, - "ts-mixer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz", - "integrity": "sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==", - "dev": true - }, - "ts-morph": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-18.0.0.tgz", - "integrity": "sha512-Kg5u0mk19PIIe4islUI/HWRvm9bC1lHejK4S0oh1zaZ77TMZAEmQC0sHQYiu2RgCQFZKXz1fMVi/7nOOeirznA==", - "dev": true, - "requires": { - "@ts-morph/common": "~0.19.0", - "code-block-writer": "^12.0.0" - } + "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, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } }, - "ts-node": { - "version": "10.8.1", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "acorn-walk": { - "version": "8.2.0", - "dev": true - }, - "diff": { - "version": "4.0.2", - "dev": true - } - } + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } }, - "tsconfig-paths": { - "version": "3.14.1", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - } - } + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, "tslib": { - "version": "1.14.1", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true }, - "type-check": { - "version": "0.3.2", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-detect": { - "version": "4.0.8", - "dev": true - }, - "type-fest": { - "version": "0.20.2", - "dev": true - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "run-parallel": { + "version": "1.2.0", + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" + }, + "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, + "requires": { + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", + "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", + "dev": true + } + } + }, + "sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "requires": { + "mri": "^1.1.0" + } + }, + "safe-buffer": { + "version": "5.2.1" + }, + "safe-stable-stringify": { + "version": "2.4.0", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "saxes": { + "version": "5.0.1", + "dev": true, + "requires": { + "xmlchars": "^2.2.0" + } + }, + "scope-analyzer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.2.tgz", + "integrity": "sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ==", + "dev": true, + "requires": { + "array-from": "^2.1.1", + "dash-ast": "^2.0.1", + "es6-map": "^0.1.5", + "es6-set": "^0.1.5", + "es6-symbol": "^3.1.1", + "estree-is-function": "^1.0.0", + "get-assigned-identifiers": "^1.1.0" + } + }, + "screeps-api": { + "version": "1.16.0", + "dev": true, + "requires": { + "axios": "^0.21.1", + "bufferutil": "^4.0.1", + "commander": "^7.2.0", + "debug": "^4.1.1", + "utf-8-validate": "^5.0.2", + "ws": "^7.4.4", + "yamljs": "^0.3.0" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "dev": true }, - "typescript": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", - "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", - "dev": true - }, - "uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", - "optional": true - }, - "unbox-primitive": { - "version": "1.0.2", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } + "debug": { + "version": "4.3.4", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, - "undici": { - "version": "5.22.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz", - "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==", - "dev": true, - "requires": { - "busboy": "^1.6.0" - } + "ms": { + "version": "2.1.2", + "dev": true + } + } + }, + "screeps-db-importer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/screeps-db-importer/-/screeps-db-importer-1.1.0.tgz", + "integrity": "sha512-bbkO0n7DJpu9DzG2PGwEi4FZA64+iCbkYcBiqNYIx/l5vurldEF16UZLBir7tIpC1aJ2OCl6y7Mb1xaN2qDTMQ==", + "dev": true, + "requires": { + "node-fetch": "^3.3.1", + "winston": "^3.8.2" + }, + "dependencies": { + "node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dev": true, + "requires": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + } + } + } + }, + "screeps-grafana-go_carbon": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/screeps-grafana-go_carbon/-/screeps-grafana-go_carbon-1.0.5.tgz", + "integrity": "sha512-YLN87Jd9d1wrcWB38kTJLHMR7aoEgfXlNAexP6axBLDmBxpBPwcW6M7bb9/P0q1Q/m20GRtcPBrdFn1Sk4R39A==", + "dev": true, + "requires": { + "axios": "^0.27.2", + "dotenv": "^16.0.2", + "fs-extra": "^11.1.0", + "get-port-please": "^3.0.1", + "minimist": "^1.2.7", + "winston": "^3.8.1" + }, + "dependencies": { + "axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dev": true, + "requires": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } + "fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } }, - "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true - }, - "unicode-properties": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", - "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", - "dev": true, - "requires": { - "base64-js": "^1.3.0", - "unicode-trie": "^2.0.0" - } + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } }, - "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true - }, - "unicode-trie": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", - "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", - "dev": true, - "requires": { - "pako": "^0.2.5", - "tiny-inflate": "^1.0.0" - } + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "screeps-jest": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/screeps-jest/-/screeps-jest-2.0.2.tgz", + "integrity": "sha512-2jVH1fKX2U4SQBbbGe5rF5lUGtsE7AcsteV7+L4//WngXl5z16nv7DyHq0yNFrxuaRYZUUBLOaSE4gjr7h6H0A==", + "dev": true, + "requires": {} + }, + "screeps-performance-server": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.14.3.tgz", + "integrity": "sha512-xvVOd4u5QuDjs2mDsuyCid/cjk2DPG9zFmZTzQEljGkyWLEaJbV17QH7pFLaTA9bT88/4pOCHjExT4v9/AuGzg==", + "dev": true, + "requires": { + "@octokit/core": "^4.2.0", + "discord.js": "^14.9.0", + "dockerode": "^4.0.2", + "dotenv": "^16.0.3", + "get-port": "^6.1.2", + "json-beautify": "^1.1.1", + "lodash": "^4.17.21", + "minimist": "^1.2.7", + "ncp": "^2.0.0", + "node-fetch": "^2.6.7", + "node-powershell": "^5.0.1", + "pastebin-api": "^5.1.6", + "q": "^1.5.1", + "screeps-api": "1.16.0", + "screeps-db-importer": "latest", + "winston": "^3.8.2" + }, + "dependencies": { + "@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 }, - "unique-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", - "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", - "requires": { - "crypto-random-string": "^4.0.0" - } + "@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, + "requires": { + "@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" + } }, - "unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "requires": { - "@types/unist": "^2.0.0" - } + "@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, + "requires": { + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } }, - "universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" + "@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, + "requires": { + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", + "universal-user-agent": "^6.0.0" + } }, - "universalify": { - "version": "0.1.2", - "dev": true - }, - "unix-crypt-td-js": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz", - "integrity": "sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true - }, - "update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } + "@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, + "requires": { + "@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" + } }, - "uri-js": { - "version": "4.4.1", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } + "@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, + "requires": { + "@octokit/types": "^9.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } }, - "url-join": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", - "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==" + "@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, + "requires": { + "@octokit/openapi-types": "^18.0.0" + } }, - "utf-8-validate": { - "version": "5.0.9", - "dev": true, - "optional": true, - "requires": { - "node-gyp-build": "^4.3.0" - } + "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 }, - "util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } + "lodash": { + "version": "4.17.21", + "dev": true + } + } + }, + "screeps-viz": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/screeps-viz/-/screeps-viz-2.1.3.tgz", + "integrity": "sha512-c96u2MTtrXzjv4O1K89J1EWgapbP0C9xqx2gCOZ5uLTBDr1RaAuIQZkOquqHA8ELhSNd9xr9X7Qt5vCOMMknSw==", + "dev": true + }, + "semantic-release": { + "version": "21.0.7", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-21.0.7.tgz", + "integrity": "sha512-peRDSXN+hF8EFSKzze90ff/EnAmgITHQ/a3SZpRV3479ny0BIZWEJ33uX6/GlOSKdaSxo9hVRDyv2/u2MuF+Bw==", + "requires": { + "@semantic-release/commit-analyzer": "^10.0.0", + "@semantic-release/error": "^4.0.0", + "@semantic-release/github": "^9.0.0", + "@semantic-release/npm": "^10.0.2", + "@semantic-release/release-notes-generator": "^11.0.0", + "aggregate-error": "^4.0.1", + "cosmiconfig": "^8.0.0", + "debug": "^4.0.0", + "env-ci": "^9.0.0", + "execa": "^7.0.0", + "figures": "^5.0.0", + "find-versions": "^5.1.0", + "get-stream": "^6.0.0", + "git-log-parser": "^1.2.0", + "hook-std": "^3.0.0", + "hosted-git-info": "^6.0.0", + "lodash-es": "^4.17.21", + "marked": "^5.0.0", + "marked-terminal": "^5.1.1", + "micromatch": "^4.0.2", + "p-each-series": "^3.0.0", + "p-reduce": "^3.0.0", + "read-pkg-up": "^10.0.0", + "resolve-from": "^5.0.0", + "semver": "^7.3.2", + "semver-diff": "^4.0.0", + "signale": "^1.2.1", + "yargs": "^17.5.1" + }, + "dependencies": { + "@semantic-release/commit-analyzer": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-10.0.1.tgz", + "integrity": "sha512-9ejHzTAijYs9z246sY/dKBatmOPcd0GQ7lH4MgLCkv1q4GCiDZRkjHJkaQZXZVaK7mJybS+sH3Ng6G8i3pYMGQ==", + "requires": { + "conventional-changelog-angular": "^6.0.0", + "conventional-commits-filter": "^3.0.0", + "conventional-commits-parser": "^4.0.0", + "debug": "^4.0.0", + "import-from": "^4.0.0", + "lodash-es": "^4.17.21", + "micromatch": "^4.0.2" + } }, - "util-deprecate": { - "version": "1.0.2" + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" - }, - "uvu": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", - "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", - "requires": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3" - }, - "dependencies": { - "diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==" - }, - "kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==" - } - } + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" }, - "v8-compile-cache": { - "version": "2.3.0", - "dev": true - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "dev": true - }, - "v8-to-istanbul": { - "version": "8.1.1", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "dev": true - } - } + "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==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + }, + "semver-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", + "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", + "requires": { + "semver": "^7.3.5" + }, + "dependencies": { + "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==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "semver-regex": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", + "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==" + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true }, - "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==", - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } + "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 }, - "validator": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", - "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", - "dev": true - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true - }, - "w3c-hr-time": { - "version": "1.0.2", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } }, - "w3c-xmlserializer": { - "version": "2.0.0", - "dev": true, - "requires": { - "xml-name-validator": "^3.0.0" - } + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + } + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true }, - "walker": { - "version": "1.0.8", - "dev": true, - "requires": { - "makeerror": "1.0.12" - } + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true }, - "web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", - "dev": true + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "shallow-copy": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", + "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==", + "dev": true + }, + "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==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "side-channel": { + "version": "1.0.4", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7" + }, + "signale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", + "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", + "requires": { + "chalk": "^2.3.2", + "figures": "^2.0.0", + "pkg-conf": "^2.1.0" + }, + "dependencies": { + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "requires": { + "escape-string-regexp": "^1.0.5" + } + } + } + }, + "simple-swizzle": { + "version": "0.2.2", + "dev": true, + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "dev": true + } + } + }, + "sinon": { + "version": "6.3.5", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.0.2", + "@sinonjs/formatio": "^3.0.0", + "@sinonjs/samsam": "^2.1.2", + "diff": "^3.5.0", + "lodash.get": "^4.4.2", + "lolex": "^2.7.5", + "nise": "^1.4.5", + "supports-color": "^5.5.0", + "type-detect": "^4.0.8" + } + }, + "sinon-chai": { + "version": "3.7.0", + "dev": true, + "requires": {} + }, + "sisteransi": { + "version": "1.0.5", + "dev": true + }, + "slash": { + "version": "3.0.0", + "dev": true + }, + "source-map": { + "version": "0.6.1" + }, + "source-map-support": { + "version": "0.5.21", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "spawn-error-forwarder": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", + "integrity": "sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==" + }, + "spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0" + }, + "spdx-expression-parse": { + "version": "3.0.1", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11" + }, + "split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "requires": { + "through": "2" + } + }, + "split-ca": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz", + "integrity": "sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==", + "dev": true + }, + "split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "requires": { + "readable-stream": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "dev": true + }, + "ssh2": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.15.0.tgz", + "integrity": "sha512-C0PHgX4h6lBxYx7hcXwu3QWdh4tg6tZZsTfXcdvc5caW/EMxaB4H9dWsl7qk+F7LAW762hp8VbXOX7x4xUYvEw==", + "dev": true, + "requires": { + "asn1": "^0.2.6", + "bcrypt-pbkdf": "^1.0.2", + "cpu-features": "~0.0.9", + "nan": "^2.18.0" + } + }, + "stack-trace": { + "version": "0.0.10", + "dev": true + }, + "stack-utils": { + "version": "2.0.5", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "dev": true + } + } + }, + "static-eval": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz", + "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==", + "dev": true, + "requires": { + "escodegen": "^1.11.1" + }, + "dependencies": { + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + } + } + }, + "static-module": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/static-module/-/static-module-3.0.4.tgz", + "integrity": "sha512-gb0v0rrgpBkifXCa3yZXxqVmXDVE+ETXj6YlC/jt5VzOnGXR2C15+++eXuMDUYsePnbhf+lwW0pE1UXyOLtGCw==", + "dev": true, + "requires": { + "acorn-node": "^1.3.0", + "concat-stream": "~1.6.0", + "convert-source-map": "^1.5.1", + "duplexer2": "~0.1.4", + "escodegen": "^1.11.1", + "has": "^1.0.1", + "magic-string": "0.25.1", + "merge-source-map": "1.0.4", + "object-inspect": "^1.6.0", + "readable-stream": "~2.3.3", + "scope-analyzer": "^2.0.1", + "shallow-copy": "~0.0.1", + "static-eval": "^2.0.5", + "through2": "~2.0.3" + }, + "dependencies": { + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } }, - "web-worker": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", - "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" + "magic-string": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz", + "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.1" + } }, - "webidl-conversions": { - "version": "6.1.0", - "dev": true - }, - "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "requires": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } + "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, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } + "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 }, - "whatwg-mimetype": { - "version": "2.3.0", - "dev": true + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true + }, + "stream-combiner": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", + "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", + "dev": true, + "requires": { + "duplexer": "~0.1.1", + "through": "~2.3.4" + } + }, + "stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", + "requires": { + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } }, - "whatwg-url": { - "version": "8.7.0", - "dev": true, - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "dependencies": { - "lodash": { - "version": "4.17.21", - "dev": true - } - } + "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==" }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } + "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==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "dev": true + }, + "string_decoder": { + "version": "1.3.0", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-length": { + "version": "4.0.2", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "string-template": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-1.0.0.tgz", + "integrity": "sha512-SLqR3GBUXuoPP5MmYtD7ompvXiG87QjT6lzOszyXjTM86Uu7At7vNnt2xgyTLq5o9T4IxTYFyGxcULqpsmsfdg==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string-width-cjs": { + "version": "npm:string-width@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, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "stringz": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/stringz/-/stringz-2.1.0.tgz", + "integrity": "sha512-KlywLT+MZ+v0IRepfMxRtnSvDCMc3nR1qqCs3m/qIbSOWkNZYT8XHQA31rS3TnKp0c5xjZu3M4GY/2aRKSi/6A==", + "dev": true, + "requires": { + "char-regex": "^1.0.2" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0" + }, + "strip-final-newline": { + "version": "2.0.0", + "dev": true + }, + "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==", + "requires": { + "min-indent": "^1.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" + }, + "strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "dev": true + }, + "stylis": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", + "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" + }, + "supports-color": { + "version": "5.5.0", + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0" }, - "which-boxed-primitive": { - "version": "1.0.2", - "dev": true, - "requires": { - "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" - } + "supports-color": { + "version": "7.2.0", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0" + }, + "symbol-tree": { + "version": "3.2.4", + "dev": true + }, + "tar-fs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", + "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.0.0" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, + "temp-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", + "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==" + }, + "tempy": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz", + "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==", + "requires": { + "is-stream": "^3.0.0", + "temp-dir": "^3.0.0", + "type-fest": "^2.12.2", + "unique-string": "^3.0.0" + }, + "dependencies": { + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" }, - "which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } + "type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==" + } + } + }, + "terminal-link": { + "version": "2.1.1", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.2", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } }, - "windows-release": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", - "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==", - "dev": true, - "requires": { - "execa": "^4.0.2" - }, - "dependencies": { - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - } - } + "type-fest": { + "version": "0.21.3", + "dev": true + } + } + }, + "terser": { + "version": "5.14.2", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } + }, + "test-exclude": { + "version": "6.0.0", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "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==" + }, + "text-hex": { + "version": "1.0.0", + "dev": true + }, + "text-table": { + "version": "0.2.0", + "dev": true + }, + "throat": { + "version": "6.0.1", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } }, - "winston": { - "version": "3.8.2", - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "@dabh/diagnostics": "^2.0.2", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.4.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.5.0" - } + "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==" }, - "winston-transport": { - "version": "4.5.0", - "dev": true, - "requires": { - "logform": "^2.3.2", - "readable-stream": "^3.6.0", - "triple-beam": "^1.3.0" - } + "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==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "dev": true + }, + "tmpl": { + "version": "1.0.5", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "tr46": { + "version": "2.1.0", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "traverse": { + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", + "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==" + }, + "trim-buffer": { + "version": "5.0.0", + "dev": true + }, + "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==" + }, + "triple-beam": { + "version": "1.3.0", + "dev": true + }, + "ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==" + }, + "ts-jest": { + "version": "27.0.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.5.tgz", + "integrity": "sha512-lIJApzfTaSSbtlksfFNHkWOzLJuuSm4faFAfo5kvzOiRAuoN4/eKxVJ2zEAho8aecE04qX6K1pAzfH5QHL1/8w==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^27.0.0", + "json5": "2.x", + "lodash": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + }, + "dependencies": { + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, - "word-wrap": { - "version": "1.2.3", - "dev": true + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "ts-mixer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz", + "integrity": "sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==", + "dev": true + }, + "ts-morph": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-18.0.0.tgz", + "integrity": "sha512-Kg5u0mk19PIIe4islUI/HWRvm9bC1lHejK4S0oh1zaZ77TMZAEmQC0sHQYiu2RgCQFZKXz1fMVi/7nOOeirznA==", + "dev": true, + "requires": { + "@ts-morph/common": "~0.19.0", + "code-block-writer": "^12.0.0" + } + }, + "ts-node": { + "version": "10.8.1", + "dev": true, + "requires": { + "@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" + }, + "dependencies": { + "acorn-walk": { + "version": "8.2.0", + "dev": true }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + "diff": { + "version": "4.0.2", + "dev": true + } + } + }, + "tsconfig-paths": { + "version": "3.14.1", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "tslib": { + "version": "1.14.1", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-detect": { + "version": "4.0.8", + "dev": true + }, + "type-fest": { + "version": "0.20.2", + "dev": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", + "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", + "dev": true + }, + "uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "optional": true + }, + "unbox-primitive": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "undici": { + "version": "5.22.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz", + "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==", + "dev": true, + "requires": { + "busboy": "^1.6.0" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true + }, + "unicode-properties": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", + "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", + "dev": true, + "requires": { + "base64-js": "^1.3.0", + "unicode-trie": "^2.0.0" + } + }, + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true + }, + "unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "dev": true, + "requires": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } + }, + "unique-string": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", + "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", + "requires": { + "crypto-random-string": "^4.0.0" + } + }, + "unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "requires": { + "@types/unist": "^2.0.0" + } + }, + "universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" + }, + "universalify": { + "version": "0.1.2", + "dev": true + }, + "unix-crypt-td-js": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz", + "integrity": "sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "url-join": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", + "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==" + }, + "utf-8-validate": { + "version": "5.0.9", + "dev": true, + "optional": true, + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "util-deprecate": { + "version": "1.0.2" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true + }, + "uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" + }, + "uvu": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", + "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", + "requires": { + "dequal": "^2.0.0", + "diff": "^5.0.0", + "kleur": "^4.0.3", + "sade": "^1.7.3" + }, + "dependencies": { + "diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==" }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - } - } + "kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==" + } + } + }, + "v8-compile-cache": { + "version": "2.3.0", + "dev": true + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "dev": true + }, + "v8-to-istanbul": { + "version": "8.1.1", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.4", + "dev": true + } + } + }, + "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==", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validator": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", + "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true + }, + "w3c-hr-time": { + "version": "1.0.2", + "dev": true, + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "2.0.0", + "dev": true, + "requires": { + "xml-name-validator": "^3.0.0" + } + }, + "walker": { + "version": "1.0.8", + "dev": true, + "requires": { + "makeerror": "1.0.12" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "dev": true + }, + "web-worker": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", + "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" + }, + "webidl-conversions": { + "version": "6.1.0", + "dev": true + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.5", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "dev": true + }, + "whatwg-url": { + "version": "8.7.0", + "dev": true, + "requires": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "dependencies": { + "lodash": { + "version": "4.17.21", + "dev": true + } + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "requires": { + "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" + } + }, + "which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, + "windows-release": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", + "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==", + "dev": true, + "requires": { + "execa": "^4.0.2" + }, + "dependencies": { + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } }, - "wrap-ansi-cjs": { - "version": "npm:wrap-ansi@7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } }, - "wrappy": { - "version": "1.0.2" + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true }, - "write-file-atomic": { - "version": "3.0.3", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true }, - "ws": { - "version": "7.5.8", - "dev": true, - "requires": {} - }, - "xml-name-validator": { - "version": "3.0.0", - "dev": true - }, - "xmlchars": { - "version": "2.2.0", - "dev": true - }, - "xmldoc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.3.0.tgz", - "integrity": "sha512-y7IRWW6PvEnYQZNZFMRLNJw+p3pezM4nKYPfr15g4OOW9i8VpeydycFuipE2297OvZnh3jSb2pxOt9QpkZUVng==", - "dev": true, - "requires": { - "sax": "^1.2.4" - } + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + } + } + }, + "winston": { + "version": "3.8.2", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.4.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.5.0" + } + }, + "winston-transport": { + "version": "4.5.0", + "dev": true, + "requires": { + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "dev": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - }, - "yamljs": { - "version": "0.3.0", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "glob": "^7.0.5" - } + "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==" + } + } + }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "dependencies": { - "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==" - } - } + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "wrappy": { + "version": "1.0.2" + }, + "write-file-atomic": { + "version": "3.0.3", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "7.5.8", + "dev": true, + "requires": {} + }, + "xml-name-validator": { + "version": "3.0.0", + "dev": true + }, + "xmlchars": { + "version": "2.2.0", + "dev": true + }, + "xmldoc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.3.0.tgz", + "integrity": "sha512-y7IRWW6PvEnYQZNZFMRLNJw+p3pezM4nKYPfr15g4OOW9i8VpeydycFuipE2297OvZnh3jSb2pxOt9QpkZUVng==", + "dev": true, + "requires": { + "sax": "^1.2.4" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yamljs": { + "version": "0.3.0", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "glob": "^7.0.5" + } + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "dependencies": { "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==" - }, - "yn": { - "version": "3.1.1", - "dev": true - }, - "yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==" + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" } + } + }, + "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==" + }, + "yn": { + "version": "3.1.1", + "dev": true + }, + "yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==" } + } } diff --git a/package.json b/package.json index 3ecae7873..57ff4e1d6 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "rollup-plugin-typescript2": "^0.36.0", "screeps-grafana-go_carbon": "^1.0.5", "screeps-jest": "^2.0.2", - "screeps-performance-server": "^1.14.1", + "screeps-performance-server": "^1.14.3", "screeps-viz": "^2.1.3", "sinon": "^6.3.5", "sinon-chai": "^3.2.0", From affa78864d55cc8f3fda68c82e26732cc40373d4 Mon Sep 17 00:00:00 2001 From: Pieter Brandsen Date: Sat, 10 Feb 2024 20:51:29 +0100 Subject: [PATCH 173/190] Update screeps-performance-server version --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 30f7bf078..bd3b35b8f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -53,7 +53,7 @@ "rollup-plugin-typescript2": "^0.36.0", "screeps-grafana-go_carbon": "^1.0.5", "screeps-jest": "^2.0.2", - "screeps-performance-server": "^1.14.3", + "screeps-performance-server": "^1.14.6", "screeps-viz": "^2.1.3", "sinon": "^6.3.5", "sinon-chai": "^3.2.0", @@ -19513,9 +19513,9 @@ } }, "node_modules/screeps-performance-server": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.14.3.tgz", - "integrity": "sha512-xvVOd4u5QuDjs2mDsuyCid/cjk2DPG9zFmZTzQEljGkyWLEaJbV17QH7pFLaTA9bT88/4pOCHjExT4v9/AuGzg==", + "version": "1.14.6", + "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.14.6.tgz", + "integrity": "sha512-AW8OXBt6ONKNhH7sFqxeCCAFCaCWRXA7/rUIuHL5/baWaWbRNBwzooHtoT8CLQYioaQK8+T6oS7fx3BSxep74A==", "dev": true, "dependencies": { "@octokit/core": "^4.2.0", @@ -35237,9 +35237,9 @@ "requires": {} }, "screeps-performance-server": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.14.3.tgz", - "integrity": "sha512-xvVOd4u5QuDjs2mDsuyCid/cjk2DPG9zFmZTzQEljGkyWLEaJbV17QH7pFLaTA9bT88/4pOCHjExT4v9/AuGzg==", + "version": "1.14.6", + "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.14.6.tgz", + "integrity": "sha512-AW8OXBt6ONKNhH7sFqxeCCAFCaCWRXA7/rUIuHL5/baWaWbRNBwzooHtoT8CLQYioaQK8+T6oS7fx3BSxep74A==", "dev": true, "requires": { "@octokit/core": "^4.2.0", diff --git a/package.json b/package.json index 57ff4e1d6..888d750fc 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "rollup-plugin-typescript2": "^0.36.0", "screeps-grafana-go_carbon": "^1.0.5", "screeps-jest": "^2.0.2", - "screeps-performance-server": "^1.14.3", + "screeps-performance-server": "^1.14.6", "screeps-viz": "^2.1.3", "sinon": "^6.3.5", "sinon-chai": "^3.2.0", From 47132dd4ae2bd3987d828d46022f8cc672898f3f Mon Sep 17 00:00:00 2001 From: Pieter Brandsen Date: Sat, 10 Feb 2024 21:43:07 +0100 Subject: [PATCH 174/190] Update screeps-performance-server version --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index bd3b35b8f..369be81ad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -53,7 +53,7 @@ "rollup-plugin-typescript2": "^0.36.0", "screeps-grafana-go_carbon": "^1.0.5", "screeps-jest": "^2.0.2", - "screeps-performance-server": "^1.14.6", + "screeps-performance-server": "^1.14.7", "screeps-viz": "^2.1.3", "sinon": "^6.3.5", "sinon-chai": "^3.2.0", @@ -19513,9 +19513,9 @@ } }, "node_modules/screeps-performance-server": { - "version": "1.14.6", - "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.14.6.tgz", - "integrity": "sha512-AW8OXBt6ONKNhH7sFqxeCCAFCaCWRXA7/rUIuHL5/baWaWbRNBwzooHtoT8CLQYioaQK8+T6oS7fx3BSxep74A==", + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.14.7.tgz", + "integrity": "sha512-NA+b+g1TRaywSvTRSEdhom3xGjW4PV8KzSFNYd6GsLfEmeJucIy22xb3wjnlVdYuYeC3wzA4R2r211XMmiJ0gA==", "dev": true, "dependencies": { "@octokit/core": "^4.2.0", @@ -35237,9 +35237,9 @@ "requires": {} }, "screeps-performance-server": { - "version": "1.14.6", - "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.14.6.tgz", - "integrity": "sha512-AW8OXBt6ONKNhH7sFqxeCCAFCaCWRXA7/rUIuHL5/baWaWbRNBwzooHtoT8CLQYioaQK8+T6oS7fx3BSxep74A==", + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/screeps-performance-server/-/screeps-performance-server-1.14.7.tgz", + "integrity": "sha512-NA+b+g1TRaywSvTRSEdhom3xGjW4PV8KzSFNYd6GsLfEmeJucIy22xb3wjnlVdYuYeC3wzA4R2r211XMmiJ0gA==", "dev": true, "requires": { "@octokit/core": "^4.2.0", diff --git a/package.json b/package.json index 888d750fc..324e0cfa8 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "rollup-plugin-typescript2": "^0.36.0", "screeps-grafana-go_carbon": "^1.0.5", "screeps-jest": "^2.0.2", - "screeps-performance-server": "^1.14.6", + "screeps-performance-server": "^1.14.7", "screeps-viz": "^2.1.3", "sinon": "^6.3.5", "sinon-chai": "^3.2.0", From 0335bac4b8c1488d0c8474ccfec0198e11f248c2 Mon Sep 17 00:00:00 2001 From: Carson Date: Sat, 10 Feb 2024 13:26:14 -0800 Subject: [PATCH 175/190] corect order for remote path finding --- src/international/creepOrganizer.ts | 6 +- src/other/profilerRegister.ts | 4 +- .../commune/spawning/spawningStructureOps.ts | 4 +- .../creeps/{creepProcs.ts => creepOps.ts} | 173 ++- .../creeps/creepPrototypes/creepFunctions.ts | 162 +-- src/room/creeps/creepUtils.ts | 1065 ++++++++--------- .../commune/controllerUpgrader.ts | 4 +- .../creeps/roleManagers/commune/fastFiller.ts | 4 +- .../creeps/roleManagers/commune/hauler.ts | 20 +- .../creeps/roleManagers/commune/hubHauler.ts | 54 +- .../creeps/roleManagers/commune/maintainer.ts | 6 +- .../roleManagers/commune/mineralHarvester.ts | 3 +- .../roleManagers/commune/sourceHarvester.ts | 13 +- .../international/allyVanguard.ts | 10 +- .../roleManagers/international/vanguard.ts | 8 +- .../remote/remoteSourceHarvester.ts | 32 +- src/room/creeps/roles/haulerOps.ts | 14 +- src/room/room.ts | 4 +- src/types.d.ts | 9 - 19 files changed, 794 insertions(+), 801 deletions(-) rename src/room/creeps/{creepProcs.ts => creepOps.ts} (86%) diff --git a/src/international/creepOrganizer.ts b/src/international/creepOrganizer.ts index db2ec1f63..f43a7ada9 100644 --- a/src/international/creepOrganizer.ts +++ b/src/international/creepOrganizer.ts @@ -11,7 +11,7 @@ import { packCoord } from 'other/codec' import { StatsManager } from './stats' import { CreepUtils } from 'room/creeps/creepUtils' import { CreepDataProcs, creepData } from 'room/creeps/creepData' -import { CreepProcs } from 'room/creeps/creepProcs' +import { CreepOps } from 'room/creeps/creepOps' export class CreepOrganizer { public static run() { @@ -84,9 +84,9 @@ export class CreepOrganizer { if (!creep.spawning) creep.room.creepPositions[packCoord(creep.pos)] = creep.name if (roomLogisticsRoles.has(role)) { - CreepProcs.updateLogisticsRequests(creep) + CreepOps.updateLogisticsRequests(creep) } - CreepProcs.registerInterTickRepairTarget(creep) + CreepOps.registerInterTickRepairTarget(creep) // initialize inter-tick data for the creep if it isn't already CreepDataProcs.initCreep(creep.name) diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index af9fa7474..19e338473 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -83,7 +83,7 @@ import { CreepMoveProcs } from 'room/creeps/creepMoveProcs' import { CommuneOps } from 'room/commune/communeOps' import { PowerCreepProcs } from 'room/creeps/powerCreeps/powerCreepProcs' import { PowerCreepUtils } from 'room/creeps/powerCreeps/powerCreepUtils' -import { CreepProcs } from 'room/creeps/creepProcs' +import { CreepOps } from 'room/creeps/creepOps' import { Procs } from 'utils/procs' import { RoomObjectUtils } from 'room/roomObjectUtils' import { StructureUtils } from 'room/structureUtils' @@ -199,7 +199,7 @@ export function profilerRegister() { // Creep classes profiler.registerClass(MyCreepServices, 'MyCreepServices') - profiler.registerClass(CreepProcs, 'CreepProcs') + profiler.registerClass(CreepOps, 'CreepProcs') profiler.registerClass(CreepMoveProcs, 'CreepMoveProcs') profiler.registerClass(CreepUtils, 'CreepUtils') profiler.registerClass(MyCreepProcs, 'MyCreepProcs') diff --git a/src/room/commune/spawning/spawningStructureOps.ts b/src/room/commune/spawning/spawningStructureOps.ts index 0a8a3bbb8..4b2e19326 100644 --- a/src/room/commune/spawning/spawningStructureOps.ts +++ b/src/room/commune/spawning/spawningStructureOps.ts @@ -14,7 +14,7 @@ import { } from '../../../constants/general' import { StatsManager } from 'international/stats' import { unpackPosAt, packCoord, unpackCoord } from 'other/codec' -import { CreepProcs } from 'room/creeps/creepProcs' +import { CreepOps } from 'room/creeps/creepOps' import { StructureUtils } from 'room/structureUtils' import { SpawnRequest, BodyPartCounts, SpawnRequestTypes } from 'types/spawnRequest' import { LogOps, LogTypes } from 'utils/logOps' @@ -61,7 +61,7 @@ export class SpawningStructureOps { private static registerSpawningCreeps(room: Room, activeSpawns: StructureSpawn[]) { for (const spawn of activeSpawns) { const creep = Game.creeps[spawn.spawning.name] - CreepProcs.registerSpawning(creep, spawn) + CreepOps.registerSpawning(creep, spawn) creep.spawnID = spawn.id if ( diff --git a/src/room/creeps/creepProcs.ts b/src/room/creeps/creepOps.ts similarity index 86% rename from src/room/creeps/creepProcs.ts rename to src/room/creeps/creepOps.ts index 084269cee..6fe08e636 100644 --- a/src/room/creeps/creepProcs.ts +++ b/src/room/creeps/creepOps.ts @@ -16,21 +16,22 @@ import { RoomLogisticsRequestTypes, offsetsByDirection, RoomStatsKeys, + ReservedCoordTypes, + WorkTypes, } from '../../constants/general' import { CreepUtils } from './creepUtils' import { CommuneUtils } from 'room/commune/communeUtils' import { CreepLogisticsRequest, FindNewRoomLogisticsRequestArgs, - RoomLogisticsRequest, RoomLogisticsTargets, } from '../../types/roomLogistics' import { LogOps } from 'utils/logOps' import { RoomObjectUtils } from 'room/roomObjectUtils' import { StructureUtils } from 'room/structureUtils' -import { packCoord } from 'other/codec' +import { packCoord, unpackCoordAsPos } from 'other/codec' -export class CreepProcs { +export class CreepOps { static advancedUpgradeController(creep: Creep) { const creepMemory = Memory.creeps[creep.name] const controller = creep.room.controller @@ -1156,4 +1157,170 @@ export class CreepProcs { spawn.renewed = true } } + + static findSourceHarvestPos(creep: Creep, sourceIndex: number) { + creep.message = 'FSHP' + + const creepMemory = Memory.creeps[creep.name] + + // Stop if the creep already has a packedHarvestPos + + let packedCoord = creepMemory[CreepMemoryKeys.packedCoord] + if (packedCoord) { + // On random intervals take the best source pos if it's open + /* + if (randomTick()) { + const sourcePos = room.roomManager.communeSourceHarvestPositions[index][0] + const packedSourceCoord = packCoord(sourcePos) + if (!room.roomManager.reservedCoords.has(packedSourceCoord)) { + this.memory[CreepMemoryKeys.packedCoord] = packedSourceCoord + return sourcePos + } + } + */ + return unpackCoordAsPos(packedCoord, creep.room.name) + } + + // Get usedSourceHarvestPositions + + const usedSourceHarvestCoords = creep.room.roomManager.reservedCoords + + const usePos = creep.room.roomManager.sourceHarvestPositions[sourceIndex].find( + pos => !usedSourceHarvestCoords.has(packCoord(pos)), + ) + if (!usePos) return false + + packedCoord = packCoord(usePos) + + creepMemory[CreepMemoryKeys.packedCoord] = packedCoord + creep.room.roomManager.reservedCoords.set(packedCoord, ReservedCoordTypes.important) + + return usePos + } + + static findCommuneSourceHarvestPos(creep: Creep, sourceIndex: number) { + creep.message = 'FSHP' + + const creepMemory = Memory.creeps[creep.name] + + // Stop if the creep already has a packedHarvestPos + + let packedCoord = creepMemory[CreepMemoryKeys.packedCoord] + if (packedCoord) { + // On random intervals take the best source pos if it's open + /* + if (randomTick()) { + const sourcePos = room.roomManager.communeSourceHarvestPositions[index][0] + const packedSourceCoord = packCoord(sourcePos) + if (!room.roomManager.reservedCoords.has(packedSourceCoord)) { + this.memory[CreepMemoryKeys.packedCoord] = packedSourceCoord + return sourcePos + } + } + */ + return unpackCoordAsPos(packedCoord, creep.room.name) + } + + // Get usedSourceHarvestPositions + + const usePos = creep.room.roomManager.communeSourceHarvestPositions[sourceIndex].find( + pos => + creep.room.roomManager.reservedCoords.get(packCoord(pos)) !== ReservedCoordTypes.important, + ) + if (!usePos) return false + + packedCoord = packCoord(usePos) + + creepMemory[CreepMemoryKeys.packedCoord] = packedCoord + creep.room.roomManager.reservedCoords.set(packedCoord, ReservedCoordTypes.important) + + return usePos + } + + static findRemoteSourceHarvestPos(creep: Creep, sourceIndex: number) { + creep.message = 'FSHP' + + const creepMemory = Memory.creeps[creep.name] + + // Stop if the creep already has a packedHarvestPos + let packedCoord = creepMemory[CreepMemoryKeys.packedCoord] + if (packedCoord) { + // On random intervals take the best source pos if it's open + /* + if (randomTick()) { + const sourcePos = room.roomManager.remoteSourceHarvestPositions[index][0] + const packedSourceCoord = packCoord(sourcePos) + if (!room.roomManager.reservedCoords.has(packedSourceCoord)) { + this.memory[CreepMemoryKeys.packedCoord] = packedSourceCoord + return sourcePos + } + } + */ + + return unpackCoordAsPos(packedCoord, creep.room.name) + } + + // Get usedSourceHarvestPositions + + const reservedCoords = creep.room.roomManager.reservedCoords + const usePos = creep.room.roomManager.remoteSourceHarvestPositions[sourceIndex].find(pos => { + return reservedCoords.get(packCoord(pos)) !== ReservedCoordTypes.important + }) + if (!usePos) return false + + packedCoord = packCoord(usePos) + + creepMemory[CreepMemoryKeys.packedCoord] = packedCoord + creep.room.roomManager.reservedCoords.set(packedCoord, ReservedCoordTypes.important) + + return usePos + } + + static findMineralHarvestPos(creep: Creep) { + creep.message = 'FMHP' + + const creepMemory = Memory.creeps[creep.name] + + // Stop if the creep already has a packedHarvestPos + let packedCoord = creepMemory[CreepMemoryKeys.packedCoord] + if (packedCoord) return unpackCoordAsPos(packedCoord, creep.room.name) + + // Get usedSourceHarvestPositions + + const usedMineralCoords = creep.room.roomManager.reservedCoords + + const usePos = creep.room.roomManager.mineralHarvestPositions.find( + pos => !usedMineralCoords.has(packCoord(pos)), + ) + if (!usePos) return false + + packedCoord = packCoord(usePos) + + creepMemory[CreepMemoryKeys.packedCoord] = packedCoord + creep.room.roomManager.reservedCoords.set(packedCoord, ReservedCoordTypes.important) + + return usePos + } + + static harvestSource( + creep: Creep, + source: Source, + workParts: number = MyCreepUtils.parts(creep).work, + ) { + + const harvestResult = creep.harvest(source) + if (harvestResult !== OK) { + return harvestResult + } + + creep.worked = WorkTypes.harvest + + // Find the presumed energy harvested this tick + const energyHarvested = Math.min(workParts * HARVEST_POWER, source.energy) + creep.nextStore.energy += energyHarvested + // Record the harvest in stats + StatsManager.updateStat(creep.room.name, RoomStatsKeys.EnergyInputHarvest, energyHarvested) + + return Result.success + } } diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index 0ad53f10c..2bd676ed9 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -30,7 +30,7 @@ import { CustomPathFinder } from 'international/customPathFinder' import { CommuneUtils } from 'room/commune/communeUtils' import { MyCreepUtils } from '../myCreepUtils' import { StructureUtils } from 'room/structureUtils' -import { CreepProcs } from '../creepProcs' +import { CreepOps } from '../creepOps' Creep.prototype.update = function () {} @@ -187,7 +187,7 @@ Creep.prototype.builderGetEnergy = function () { return Result.noAction } - CreepProcs.runRoomLogisticsRequestAdvanced(this, { + CreepOps.runRoomLogisticsRequestAdvanced(this, { types: new Set([ RoomLogisticsRequestTypes.withdraw, RoomLogisticsRequestTypes.pickup, @@ -204,7 +204,7 @@ Creep.prototype.builderGetEnergy = function () { // We don't have a storage or terminal, don't allow use of sourceContainers - CreepProcs.runRoomLogisticsRequestAdvanced(this, { + CreepOps.runRoomLogisticsRequestAdvanced(this, { types: new Set([ RoomLogisticsRequestTypes.withdraw, RoomLogisticsRequestTypes.pickup, @@ -271,7 +271,11 @@ Creep.prototype.advancedBuildCSite = function (cSite) { // Add control points to total controlPoints counter and say the success - StatsManager.updateStat(this.room.name, RoomStatsKeys.EnergyOutputBuild, energySpentOnConstruction) + StatsManager.updateStat( + this.room.name, + RoomStatsKeys.EnergyOutputBuild, + energySpentOnConstruction, + ) this.message = `🚧 ` + energySpentOnConstruction return Result.success @@ -353,7 +357,11 @@ Creep.prototype.advancedBuildAllyCSite = function () { // Add control points to total controlPoints counter and say the success - StatsManager.updateStat(this.room.name, RoomStatsKeys.EnergyOutputBuild, energySpentOnConstruction) + StatsManager.updateStat( + this.room.name, + RoomStatsKeys.EnergyOutputBuild, + energySpentOnConstruction, + ) this.message = `🚧${energySpentOnConstruction}` // Inform true @@ -478,150 +486,6 @@ Creep.prototype.findRemoteSourceIndex = function () { return false } -Creep.prototype.findSourceHarvestPos = function (index) { - const { room } = this - - this.message = 'FSHP' - - // Stop if the creep already has a packedHarvestPos - - let packedCoord = this.memory[CreepMemoryKeys.packedCoord] - if (packedCoord) { - // On random intervals take the best source pos if it's open - /* - if (randomTick()) { - const sourcePos = room.roomManager.communeSourceHarvestPositions[index][0] - const packedSourceCoord = packCoord(sourcePos) - if (!room.roomManager.reservedCoords.has(packedSourceCoord)) { - this.memory[CreepMemoryKeys.packedCoord] = packedSourceCoord - return sourcePos - } - } - */ - return unpackCoordAsPos(packedCoord, room.name) - } - - // Get usedSourceHarvestPositions - - const usedSourceHarvestCoords = room.roomManager.reservedCoords - - const usePos = room.roomManager.sourceHarvestPositions[index].find( - pos => !usedSourceHarvestCoords.has(packCoord(pos)), - ) - if (!usePos) return false - - packedCoord = packCoord(usePos) - - this.memory[CreepMemoryKeys.packedCoord] = packedCoord - room.roomManager.reservedCoords.set(packedCoord, ReservedCoordTypes.important) - - return usePos -} - -Creep.prototype.findCommuneSourceHarvestPos = function (index) { - const { room } = this - - this.message = 'FSHP' - - // Stop if the creep already has a packedHarvestPos - - let packedCoord = this.memory[CreepMemoryKeys.packedCoord] - if (packedCoord) { - // On random intervals take the best source pos if it's open - /* - if (randomTick()) { - const sourcePos = room.roomManager.communeSourceHarvestPositions[index][0] - const packedSourceCoord = packCoord(sourcePos) - if (!room.roomManager.reservedCoords.has(packedSourceCoord)) { - this.memory[CreepMemoryKeys.packedCoord] = packedSourceCoord - return sourcePos - } - } - */ - return unpackCoordAsPos(packedCoord, room.name) - } - - // Get usedSourceHarvestPositions - - const usePos = room.roomManager.communeSourceHarvestPositions[index].find( - pos => room.roomManager.reservedCoords.get(packCoord(pos)) !== ReservedCoordTypes.important, - ) - if (!usePos) return false - - packedCoord = packCoord(usePos) - - this.memory[CreepMemoryKeys.packedCoord] = packedCoord - room.roomManager.reservedCoords.set(packedCoord, ReservedCoordTypes.important) - - return usePos -} - -Creep.prototype.findRemoteSourceHarvestPos = function (index) { - const { room } = this - - this.message = 'FSHP' - - // Stop if the creep already has a packedHarvestPos - let packedCoord = this.memory[CreepMemoryKeys.packedCoord] - if (packedCoord) { - // On random intervals take the best source pos if it's open - /* - if (randomTick()) { - const sourcePos = room.roomManager.remoteSourceHarvestPositions[index][0] - const packedSourceCoord = packCoord(sourcePos) - if (!room.roomManager.reservedCoords.has(packedSourceCoord)) { - this.memory[CreepMemoryKeys.packedCoord] = packedSourceCoord - return sourcePos - } - } - */ - - return unpackCoordAsPos(packedCoord, room.name) - } - - // Get usedSourceHarvestPositions - - const reservedCoords = room.roomManager.reservedCoords - const usePos = room.roomManager.remoteSourceHarvestPositions[index].find(pos => { - return reservedCoords.get(packCoord(pos)) !== ReservedCoordTypes.important - }) - if (!usePos) return false - - packedCoord = packCoord(usePos) - - this.memory[CreepMemoryKeys.packedCoord] = packedCoord - room.roomManager.reservedCoords.set(packedCoord, ReservedCoordTypes.important) - - return usePos -} - -Creep.prototype.findMineralHarvestPos = function () { - const { room } = this - - this.message = 'FMHP' - - // Stop if the creep already has a packedHarvestPos - - let packedCoord = this.memory[CreepMemoryKeys.packedCoord] - if (packedCoord) return unpackCoordAsPos(packedCoord, room.name) - - // Get usedSourceHarvestPositions - - const usedMineralCoords = room.roomManager.reservedCoords - - const usePos = room.roomManager.mineralHarvestPositions.find( - pos => !usedMineralCoords.has(packCoord(pos)), - ) - if (!usePos) return false - - packedCoord = packCoord(usePos) - - this.memory[CreepMemoryKeys.packedCoord] = packedCoord - room.roomManager.reservedCoords.set(packedCoord, ReservedCoordTypes.important) - - return usePos -} - Creep.prototype.needsResources = function () { const creepMemory = Memory.creeps[this.name] diff --git a/src/room/creeps/creepUtils.ts b/src/room/creeps/creepUtils.ts index 69e285639..fba78e1b1 100644 --- a/src/room/creeps/creepUtils.ts +++ b/src/room/creeps/creepUtils.ts @@ -1,9 +1,9 @@ import { - CreepLogisticsRequestKeys, - CreepMemoryKeys, - ReservedCoordTypes, - Result, - RoomLogisticsRequestTypes, + CreepLogisticsRequestKeys, + CreepMemoryKeys, + ReservedCoordTypes, + Result, + RoomLogisticsRequestTypes, RoomMemoryKeys, RoomStatsKeys, WorkTypes, @@ -13,700 +13,639 @@ import { roomLogisticsRoles, storingStructureTypesSet, } from '../../constants/general' -import { StatsManager } from 'international/stats' -import { arePositionsEqual, findObjectWithID, findWithLowestScore, getRange } from 'utils/utils' import { CreepRoleManager } from './creepRoleManager' import { packCoord, unpackCoord, unpackCoordAsPos, unpackPosAt } from 'other/codec' import { RoomManager } from 'room/room' import { CollectiveManager } from 'international/collective' import { creepClasses } from './creepClasses' +import { StatsManager } from 'international/stats' import { CommuneUtils } from 'room/commune/communeUtils' -import { MyCreepUtils } from './myCreepUtils' -import { - CreepLogisticsRequest, - FindNewRoomLogisticsRequestArgs, - RoomLogisticsRequest, -} from 'types/roomLogistics' +import { roomData } from 'room/roomData' import { RoomObjectUtils } from 'room/roomObjectUtils' import { RoomUtils } from 'room/roomUtils' -import { roomData } from 'room/roomData' +import { FindNewRoomLogisticsRequestArgs, RoomLogisticsRequest, CreepLogisticsRequest } from 'types/roomLogistics' +import { arePositionsEqual, findObjectWithID, getRange, findWithLowestScore } from 'utils/utils' +import { MyCreepUtils } from './myCreepUtils' export class CreepUtils { - static expandName(creepName: string) { - return creepName.split('_') - } - - static roleName(creepName: string) { - const expandedName = this.expandName(creepName) - return creepRoles[parseInt(expandedName[0])] - } - - static roleCreep(creep: Creep) { - if (creep._role !== undefined) return creep._role - - return (creep._role = this.roleName(creep.name)) - } - - static customIDName(creepName: string) { - const expandedName = this.expandName(creepName) - return parseInt(expandedName[1]) - } - - static findEnergySpentOnConstruction( - creep: Creep, - cSite: ConstructionSite, - workParts: number = MyCreepUtils.parts(creep).work, - ) { - const energySpent = Math.min( - workParts * BUILD_POWER, - // In private servers sometimes progress can be greater than progress total - Math.max((cSite.progressTotal - cSite.progress) * BUILD_POWER, 0), - creep.nextStore.energy, - ) - - return energySpent - } - static findUpgradePosWeak(creep: Creep): RoomPosition | undefined { - const upgradePos = creep.room.roomManager.upgradePositions.find( - pos => - arePositionsEqual(creep.pos, pos) && - !creep.room.roomManager.reservedCoords.has(packCoord(pos)), - ) - return upgradePos - } - static findUpgradePosStrong(creep: Creep): RoomPosition | undefined { - const creepMemory = Memory.creeps[creep.name] - // use our packed coord if we have one - if (creepMemory[CreepMemoryKeys.packedCoord]) { - return unpackCoordAsPos(creepMemory[CreepMemoryKeys.packedCoord], creep.room.name) + static expandName(creepName: string) { + return creepName.split('_') } - const upgradePos = creep.room.roomManager.upgradePositions.find(pos => { - const packedCoord = packCoord(pos) + static roleName(creepName: string) { + const expandedName = this.expandName(creepName) + return creepRoles[parseInt(expandedName[0])] + } - // Iterate if the pos is used - if (creep.room.roomManager.reservedCoords.get(packedCoord) > ReservedCoordTypes.dying) { - return false - } + static roleCreep(creep: Creep) { + if (creep._role !== undefined) return creep._role - // Otherwise record packedPos in the creep's memory and in usedUpgradeCoords + return (creep._role = this.roleName(creep.name)) + } - creepMemory[CreepMemoryKeys.packedCoord] = packedCoord - creep.room.roomManager.reservedCoords.set(packedCoord, ReservedCoordTypes.important) + static customIDName(creepName: string) { + const expandedName = this.expandName(creepName) + return parseInt(expandedName[1]) + } - return pos - }) + static findEnergySpentOnConstruction( + creep: Creep, + cSite: ConstructionSite, + workParts: number = MyCreepUtils.parts(creep).work + ) { + const energySpent = Math.min( + workParts * BUILD_POWER, + // In private servers sometimes progress can be greater than progress total + Math.max((cSite.progressTotal - cSite.progress) * BUILD_POWER, 0), + creep.nextStore.energy + ) - return upgradePos - } - static harvestSource( - creep: Creep, - source: Source, - workParts: number = MyCreepUtils.parts(creep).work, - ) { - if (creep.harvest(source) !== OK) { - return Result.fail + return energySpent } + static findUpgradePosWeak(creep: Creep): RoomPosition | undefined { + const upgradePos = creep.room.roomManager.upgradePositions.find( + pos => arePositionsEqual(creep.pos, pos) && + !creep.room.roomManager.reservedCoords.has(packCoord(pos)) + ) + return upgradePos + } + static findUpgradePosStrong(creep: Creep): RoomPosition | undefined { + const creepMemory = Memory.creeps[creep.name] + // use our packed coord if we have one + if (creepMemory[CreepMemoryKeys.packedCoord]) { + return unpackCoordAsPos(creepMemory[CreepMemoryKeys.packedCoord], creep.room.name) + } + + const upgradePos = creep.room.roomManager.upgradePositions.find(pos => { + const packedCoord = packCoord(pos) - creep.worked = WorkTypes.harvest + // Iterate if the pos is used + if (creep.room.roomManager.reservedCoords.get(packedCoord) > ReservedCoordTypes.dying) { + return false + } - // Find the presumed energy harvested this tick - const energyHarvested = Math.min(workParts * HARVEST_POWER, source.energy) - creep.nextStore.energy += energyHarvested - // Record the harvest in stats - StatsManager.updateStat(creep.room.name, RoomStatsKeys.EnergyInputHarvest, energyHarvested) + // Otherwise record packedPos in the creep's memory and in usedUpgradeCoords + creepMemory[CreepMemoryKeys.packedCoord] = packedCoord + creep.room.roomManager.reservedCoords.set(packedCoord, ReservedCoordTypes.important) - return Result.success - } + return pos + }) - static findRoomLogisticsRequest(creep: Creep, args?: FindNewRoomLogisticsRequestArgs) { - const creepMemory = Memory.creeps[creep.name] - if (creepMemory[CreepMemoryKeys.roomLogisticsRequests][0]) { - return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] + return upgradePos } - if (args) creep.noDelivery = args.noDelivery - else creep.noDelivery = undefined + static findRoomLogisticsRequest(creep: Creep, args?: FindNewRoomLogisticsRequestArgs) { + const creepMemory = Memory.creeps[creep.name] + if (creepMemory[CreepMemoryKeys.roomLogisticsRequests][0]) { + return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] + } - const types = this.findRoomLogisticsRequestTypes(creep, args) - if (types === Result.fail) return Result.fail + if (args) creep.noDelivery = args.noDelivery + else creep.noDelivery = undefined - let lowestScore = Infinity - let bestRequest: RoomLogisticsRequest | 0 + const types = this.findRoomLogisticsRequestTypes(creep, args) + if (types === Result.fail) return Result.fail - for (const type of types) { - for (const requestID in creep.room.roomLogisticsRequests[type]) { - const request = creep.room.roomLogisticsRequests[type][requestID] + let lowestScore = Infinity + let bestRequest: RoomLogisticsRequest | 0 - delete request.delivery - /* - // Make a personal amount based on existing amount plus estimated income for distance + for (const type of types) { + for (const requestID in creep.room.roomLogisticsRequests[type]) { + const request = creep.room.roomLogisticsRequests[type][requestID] - request.personalAmount = - request.amount + - (request.income ? getRange(findObjectWithID(request.targetID).pos, creep.pos) * request.income : 0) - */ + delete request.delivery + /* + // Make a personal amount based on existing amount plus estimated income for distance - // Customizable conditions + request.personalAmount = + request.amount + + (request.income ? getRange(findObjectWithID(request.targetID).pos, creep.pos) * request.income : 0) + */ + // Customizable conditions + if (args) { + if (args.resourceTypes && !args.resourceTypes.has(request.resourceType)) continue + if (args.conditions && !args.conditions(request)) continue + } - if (args) { - if (args.resourceTypes && !args.resourceTypes.has(request.resourceType)) continue - if (args.conditions && !args.conditions(request)) continue - } - - // Default conditions + // Default conditions + if (!this.canAcceptRoomLogisticsRequest(creep, request.type, request.ID)) continue - if (!this.canAcceptRoomLogisticsRequest(creep, request.type, request.ID)) continue + const targetPos = findObjectWithID(request.targetID).pos + const score = request.priority + getRange(targetPos, creep.pos) - const targetPos = findObjectWithID(request.targetID).pos - const score = request.priority + getRange(targetPos, creep.pos) + if (score >= lowestScore) continue - if (score >= lowestScore) continue + lowestScore = score + bestRequest = request + } + } + /* + log('FINDING REQ', bestRequest + ', ' + Array.from(types), { position: 1 }) + */ + let creepRequest: CreepLogisticsRequest | 0 + + if (!bestRequest) { + creepRequest = this.createBackupStoringStructuresRoomLogisticsRequest( + creep, + types, + args?.resourceTypes + ) + + if (creepRequest === Result.fail) return Result.fail + } - lowestScore = score - bestRequest = request - } - } - /* - log('FINDING REQ', bestRequest + ', ' + Array.from(types), { position: 1 }) - */ - let creepRequest: CreepLogisticsRequest | 0 - - if (!bestRequest) { - creepRequest = this.createBackupStoringStructuresRoomLogisticsRequest( - creep, - types, - args?.resourceTypes, - ) - - if (creepRequest === Result.fail) return Result.fail - } - // Otherwise we found a request - else { - creepRequest = { - [CreepLogisticsRequestKeys.type]: bestRequest.type, - [CreepLogisticsRequestKeys.target]: bestRequest.targetID, - [CreepLogisticsRequestKeys.resourceType]: bestRequest.resourceType, - [CreepLogisticsRequestKeys.amount]: this.findRoomLogisticRequestAmount(creep, bestRequest), - [CreepLogisticsRequestKeys.noReserve]: bestRequest.noReserve, - } - - if (bestRequest.delivery) { - // creep request will preceed the one we've accepted to provide for the delivery (withdraw task) - let nextCreepRequest: CreepLogisticsRequest - const storingStructure = findObjectWithID(bestRequest.delivery as Id) - - if (storingStructure) { - const amount = Math.min( - storingStructure.reserveStore[bestRequest.resourceType], - Math.max( - RoomObjectUtils.freeNextStoreOf(creep, bestRequest.resourceType), - creepRequest[CreepLogisticsRequestKeys.amount], - ), - ) - - nextCreepRequest = { - [CreepLogisticsRequestKeys.type]: RoomLogisticsRequestTypes.withdraw, - [CreepLogisticsRequestKeys.target]: storingStructure.id, - [CreepLogisticsRequestKeys.resourceType]: bestRequest.resourceType, - [CreepLogisticsRequestKeys.amount]: amount, - [CreepLogisticsRequestKeys.noReserve]: bestRequest.noReserve, - [CreepLogisticsRequestKeys.delivery]: true, - } - - storingStructure.reserveStore[nextCreepRequest[CreepLogisticsRequestKeys.resourceType]] -= - nextCreepRequest[CreepLogisticsRequestKeys.amount] - } else { - // The delivery provider is based on a request (withdraw) - - const nextRequest = - creep.room.roomLogisticsRequests[RoomLogisticsRequestTypes.withdraw][ - bestRequest.delivery - ] || - creep.room.roomLogisticsRequests[RoomLogisticsRequestTypes.offer][ - bestRequest.delivery - ] || - creep.room.roomLogisticsRequests[RoomLogisticsRequestTypes.pickup][bestRequest.delivery] - - const amount = Math.min( - nextRequest.amount, - Math.max( - RoomObjectUtils.freeNextStoreOf(creep, bestRequest.resourceType), - creepRequest[CreepLogisticsRequestKeys.amount], - ), - ) - - nextCreepRequest = { - [CreepLogisticsRequestKeys.type]: nextRequest.type, - [CreepLogisticsRequestKeys.target]: nextRequest.targetID, - [CreepLogisticsRequestKeys.resourceType]: nextRequest.resourceType, - [CreepLogisticsRequestKeys.amount]: amount, - [CreepLogisticsRequestKeys.noReserve]: - creepRequest[CreepLogisticsRequestKeys.noReserve], - [CreepLogisticsRequestKeys.delivery]: true, - } - - // Handle reservations for nextRequest - - if (!creepRequest[CreepLogisticsRequestKeys.noReserve]) { - // delete the parent request if it has no more utility, otherwise, reduce its amount - if (nextRequest.amount === nextCreepRequest[CreepLogisticsRequestKeys.amount]) { - delete creep.room.roomLogisticsRequests[nextRequest.type][nextRequest.ID] - } else { - nextRequest.amount -= nextCreepRequest[CreepLogisticsRequestKeys.amount] + // Otherwise we found a request + else { + creepRequest = { + [CreepLogisticsRequestKeys.type]: bestRequest.type, + [CreepLogisticsRequestKeys.target]: bestRequest.targetID, + [CreepLogisticsRequestKeys.resourceType]: bestRequest.resourceType, + [CreepLogisticsRequestKeys.amount]: this.findRoomLogisticRequestAmount(creep, bestRequest), + [CreepLogisticsRequestKeys.noReserve]: bestRequest.noReserve, } - const target = findObjectWithID(nextRequest.targetID) - - // Pickup type + if (bestRequest.delivery) { + // creep request will preceed the one we've accepted to provide for the delivery (withdraw task) + let nextCreepRequest: CreepLogisticsRequest + const storingStructure = findObjectWithID(bestRequest.delivery as Id) + + if (storingStructure) { + const amount = Math.min( + storingStructure.reserveStore[bestRequest.resourceType], + Math.max( + RoomObjectUtils.freeNextStoreOf(creep, bestRequest.resourceType), + creepRequest[CreepLogisticsRequestKeys.amount] + ) + ) + + nextCreepRequest = { + [CreepLogisticsRequestKeys.type]: RoomLogisticsRequestTypes.withdraw, + [CreepLogisticsRequestKeys.target]: storingStructure.id, + [CreepLogisticsRequestKeys.resourceType]: bestRequest.resourceType, + [CreepLogisticsRequestKeys.amount]: amount, + [CreepLogisticsRequestKeys.noReserve]: bestRequest.noReserve, + [CreepLogisticsRequestKeys.delivery]: true, + } + + storingStructure.reserveStore[nextCreepRequest[CreepLogisticsRequestKeys.resourceType]] -= + nextCreepRequest[CreepLogisticsRequestKeys.amount] + } else { + // The delivery provider is based on a request (withdraw) + const nextRequest = creep.room.roomLogisticsRequests[RoomLogisticsRequestTypes.withdraw][bestRequest.delivery] || + creep.room.roomLogisticsRequests[RoomLogisticsRequestTypes.offer][bestRequest.delivery] || + creep.room.roomLogisticsRequests[RoomLogisticsRequestTypes.pickup][bestRequest.delivery] + + const amount = Math.min( + nextRequest.amount, + Math.max( + RoomObjectUtils.freeNextStoreOf(creep, bestRequest.resourceType), + creepRequest[CreepLogisticsRequestKeys.amount] + ) + ) + + nextCreepRequest = { + [CreepLogisticsRequestKeys.type]: nextRequest.type, + [CreepLogisticsRequestKeys.target]: nextRequest.targetID, + [CreepLogisticsRequestKeys.resourceType]: nextRequest.resourceType, + [CreepLogisticsRequestKeys.amount]: amount, + [CreepLogisticsRequestKeys.noReserve]: creepRequest[CreepLogisticsRequestKeys.noReserve], + [CreepLogisticsRequestKeys.delivery]: true, + } + + // Handle reservations for nextRequest + if (!creepRequest[CreepLogisticsRequestKeys.noReserve]) { + // delete the parent request if it has no more utility, otherwise, reduce its amount + if (nextRequest.amount === nextCreepRequest[CreepLogisticsRequestKeys.amount]) { + delete creep.room.roomLogisticsRequests[nextRequest.type][nextRequest.ID] + } else { + nextRequest.amount -= nextCreepRequest[CreepLogisticsRequestKeys.amount] + } + + const target = findObjectWithID(nextRequest.targetID) + + // Pickup type + if (target instanceof Resource) { + target.reserveAmount -= nextCreepRequest[CreepLogisticsRequestKeys.amount] + } else { + // Withdraw or offer type + target.reserveStore[nextCreepRequest[CreepLogisticsRequestKeys.resourceType]] -= + nextCreepRequest[CreepLogisticsRequestKeys.amount] + } + } + } + + creepMemory[CreepMemoryKeys.roomLogisticsRequests].push(nextCreepRequest) + } - if (target instanceof Resource) { - target.reserveAmount -= nextCreepRequest[CreepLogisticsRequestKeys.amount] + // delete the parent request if it has no more utility, otherwise, reduce its amount + if (!creepRequest[CreepLogisticsRequestKeys.noReserve] && + bestRequest.amount === creepRequest[CreepLogisticsRequestKeys.amount]) { + delete creep.room.roomLogisticsRequests[bestRequest.type][bestRequest.ID] } else { - // Withdraw or offer type - - target.reserveStore[nextCreepRequest[CreepLogisticsRequestKeys.resourceType]] -= - nextCreepRequest[CreepLogisticsRequestKeys.amount] + bestRequest.amount -= creepRequest[CreepLogisticsRequestKeys.amount] } - } } - creepMemory[CreepMemoryKeys.roomLogisticsRequests].push(nextCreepRequest) - } - - // delete the parent request if it has no more utility, otherwise, reduce its amount - - if ( - !creepRequest[CreepLogisticsRequestKeys.noReserve] && - bestRequest.amount === creepRequest[CreepLogisticsRequestKeys.amount] - ) { - delete creep.room.roomLogisticsRequests[bestRequest.type][bestRequest.ID] - } else { - bestRequest.amount -= creepRequest[CreepLogisticsRequestKeys.amount] - } - } + creepMemory[CreepMemoryKeys.roomLogisticsRequests].push(creepRequest) + if (creepRequest[CreepLogisticsRequestKeys.noReserve]) { + return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] + } - creepMemory[CreepMemoryKeys.roomLogisticsRequests].push(creepRequest) - if (creepRequest[CreepLogisticsRequestKeys.noReserve]) { - return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] - } + const target = findObjectWithID(creepRequest[CreepLogisticsRequestKeys.target]) - const target = findObjectWithID(creepRequest[CreepLogisticsRequestKeys.target]) + // Pickup type + if (target instanceof Resource) { + target.reserveAmount -= creepRequest[CreepLogisticsRequestKeys.amount] - // Pickup type + return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] + } - if (target instanceof Resource) { - target.reserveAmount -= creepRequest[CreepLogisticsRequestKeys.amount] + if (creepRequest[CreepLogisticsRequestKeys.type] === RoomLogisticsRequestTypes.transfer) { + target.reserveStore[creepRequest[CreepLogisticsRequestKeys.resourceType]] += + creepRequest[CreepLogisticsRequestKeys.amount] - return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] - } + return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] + } - if (creepRequest[CreepLogisticsRequestKeys.type] === RoomLogisticsRequestTypes.transfer) { - target.reserveStore[creepRequest[CreepLogisticsRequestKeys.resourceType]] += - creepRequest[CreepLogisticsRequestKeys.amount] + // Withdraw or offer type + target.reserveStore[creepRequest[CreepLogisticsRequestKeys.resourceType]] -= + creepRequest[CreepLogisticsRequestKeys.amount] - return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] + return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] } - // Withdraw or offer type - - target.reserveStore[creepRequest[CreepLogisticsRequestKeys.resourceType]] -= - creepRequest[CreepLogisticsRequestKeys.amount] - - return creepMemory[CreepMemoryKeys.roomLogisticsRequests][0] - } + static findRoomLogisticsRequestTypes(creep: Creep, args: FindNewRoomLogisticsRequestArgs) { + if (args && args.types) { + if (args.types.has(RoomLogisticsRequestTypes.transfer) && creep.hasNonEnergyResource()) { + /* if (args && args.noDelivery) return Result.fail */ + creep.noDelivery = true + return new Set([RoomLogisticsRequestTypes.transfer]) + } - static findRoomLogisticsRequestTypes(creep: Creep, args: FindNewRoomLogisticsRequestArgs) { - if (args && args.types) { - if (args.types.has(RoomLogisticsRequestTypes.transfer) && creep.hasNonEnergyResource()) { - /* if (args && args.noDelivery) return Result.fail */ + // Make sure we have the right store values for our types + if (creep.needsResources()) { + args.types.delete(RoomLogisticsRequestTypes.transfer) + return args.types + } - creep.noDelivery = true - return new Set([RoomLogisticsRequestTypes.transfer]) - } + args.types.delete(RoomLogisticsRequestTypes.pickup) + args.types.delete(RoomLogisticsRequestTypes.offer) + args.types.delete(RoomLogisticsRequestTypes.withdraw) + return args.types + } - // Make sure we have the right store values for our types + if (creep.hasNonEnergyResource()) { + if (args && args.noDelivery) return Result.fail - if (creep.needsResources()) { - args.types.delete(RoomLogisticsRequestTypes.transfer) - return args.types - } + creep.noDelivery = true + return new Set([RoomLogisticsRequestTypes.transfer]) + } - args.types.delete(RoomLogisticsRequestTypes.pickup) - args.types.delete(RoomLogisticsRequestTypes.offer) - args.types.delete(RoomLogisticsRequestTypes.withdraw) - return args.types + if (!creep.needsResources()) return new Set([RoomLogisticsRequestTypes.transfer]) + return new Set([ + RoomLogisticsRequestTypes.withdraw, + RoomLogisticsRequestTypes.pickup, + RoomLogisticsRequestTypes.transfer, + ]) } - if (creep.hasNonEnergyResource()) { - if (args && args.noDelivery) return Result.fail + static canAcceptRoomLogisticsRequest( + creep: Creep, + requestType: RoomLogisticsRequestTypes, + requestID: string + ) { + const request = creep.room.roomLogisticsRequests[requestType][requestID] + const target = findObjectWithID(request.targetID) + + // Pickup type + if (target instanceof Resource) { + if (request.onlyFull) { + // If the creep has enough space + /* if (creep.freeNextStore >= target.reserveAmount) return true */ + if (target.reserveAmount >= creep.freeNextStore) return true + return false + } - creep.noDelivery = true - return new Set([RoomLogisticsRequestTypes.transfer]) - } + return true + } - if (!creep.needsResources()) return new Set([RoomLogisticsRequestTypes.transfer]) - return new Set([ - RoomLogisticsRequestTypes.withdraw, - RoomLogisticsRequestTypes.pickup, - RoomLogisticsRequestTypes.transfer, - ]) - } - - static canAcceptRoomLogisticsRequest( - creep: Creep, - requestType: RoomLogisticsRequestTypes, - requestID: string, - ) { - const request = creep.room.roomLogisticsRequests[requestType][requestID] - const target = findObjectWithID(request.targetID) - - // Pickup type - - if (target instanceof Resource) { - if (request.onlyFull) { - // If the creep has enough space - - /* if (creep.freeNextStore >= target.reserveAmount) return true */ - if (target.reserveAmount >= creep.freeNextStore) return true - return false - } - - return true - } + if (request.type === RoomLogisticsRequestTypes.transfer) { + // We don't have enough resource and we can deliver + if (creep.nextStore[request.resourceType] <= 0) { + if (creep.noDelivery) return false - if (request.type === RoomLogisticsRequestTypes.transfer) { - // We don't have enough resource and we can deliver + // There are no practical storing structures to deliver from + if (creep.room.name !== creep.commune.name) return false - if (creep.nextStore[request.resourceType] <= 0) { - if (creep.noDelivery) return false + // We don't have space to get any + if (creep.freeNextStore <= 0) return false + /* + // Try to find a sufficient withdraw or offer task - // There are no practical storing structures to deliver from - if (creep.room.name !== creep.commune.name) return false + const types: RoomLogisticsRequestTypes[] = ['withdraw', 'pickup'] - // We don't have space to get any - if (creep.freeNextStore <= 0) return false - /* - // Try to find a sufficient withdraw or offer task + let lowestScore = Infinity + let bestRequest2 - const types: RoomLogisticsRequestTypes[] = ['withdraw', 'pickup'] + for (const type of types) { + for (const request2ID in creep.room.roomLogisticsRequests[type]) { + const request2 = creep.room.roomLogisticsRequests[type][request2ID] - let lowestScore = Infinity - let bestRequest2 + if (request2.resourceType !== request.resourceType) continue - for (const type of types) { - for (const request2ID in creep.room.roomLogisticsRequests[type]) { - const request2 = creep.room.roomLogisticsRequests[type][request2ID] + const target2Pos = findObjectWithID(request2.targetID).pos + const score = request2.priority + getRange(target2Pos, creep.pos) / 100 - if (request2.resourceType !== request.resourceType) continue + if (score >= lowestScore) continue - const target2Pos = findObjectWithID(request2.targetID).pos - const score = request2.priority + getRange(target2Pos, creep.pos) / 100 + lowestScore = score + bestRequest2 = request2 + } + } - if (score >= lowestScore) continue + if (bestRequest2) { + request.delivery = bestRequest2.ID as unknown as string + return true + } + */ + // We aren't gonna deliver to a storing structure + if (target instanceof Structure && storingStructureTypesSet.has(target.structureType)) + return false - lowestScore = score - bestRequest2 = request2 - } - } + let storingStructure - if (bestRequest2) { - request.delivery = bestRequest2.ID as unknown as string - return true - } - */ - // We aren't gonna deliver to a storing structure + // If energy, make sure there is enough to fill us to full + if (request.resourceType === RESOURCE_ENERGY) { + const minAmount = creep.freeNextStore - if (target instanceof Structure && storingStructureTypesSet.has(target.structureType)) - return false + storingStructure = CommuneUtils.storingStructures(creep.commune).find( + structure => structure.reserveStore[request.resourceType] >= minAmount + ) + } else { + const minAmount = Math.min(creep.freeNextStore, request.amount) - let storingStructure + storingStructure = CommuneUtils.storingStructures(creep.commune).find( + structure => structure.reserveStore[request.resourceType] >= minAmount + ) + } - // If energy, make sure there is enough to fill us to full + if (!storingStructure) return false - if (request.resourceType === RESOURCE_ENERGY) { - const minAmount = creep.freeNextStore + request.delivery = storingStructure.id + return true + } - storingStructure = CommuneUtils.storingStructures(creep.commune).find( - structure => structure.reserveStore[request.resourceType] >= minAmount, - ) - } else { - const minAmount = Math.min(creep.freeNextStore, request.amount) + if (request.onlyFull) { + // If the creep has enough resource + /* creep.room.visual.text(Math.min(amount, target.store.getCapacity(request.resourceType) / 2).toString(), creep.pos) */ + // + /* const creepEffectiveCapacity = creep.freeNextStore */ + const creepEffectiveCapacity = creep.store.getCapacity() - + creep.store.getUsedCapacity() + + creep.nextStore[request.resourceType] + + if (creep.nextStore[request.resourceType] >= + Math.min( + creep.nextStore[request.resourceType], + request.amount, + target.store.getCapacity(request.resourceType), + creepEffectiveCapacity + )) + return true + return false + } - storingStructure = CommuneUtils.storingStructures(creep.commune).find( - structure => structure.reserveStore[request.resourceType] >= minAmount, - ) + return true } - if (!storingStructure) return false + // Withdraw or offer type + if (request.onlyFull) { + // If the creep has enough space + if (target.reserveStore[request.resourceType] >= creep.freeNextStore) return true + return false + } - request.delivery = storingStructure.id return true - } - - if (request.onlyFull) { - // If the creep has enough resource - /* creep.room.visual.text(Math.min(amount, target.store.getCapacity(request.resourceType) / 2).toString(), creep.pos) */ - - // - /* const creepEffectiveCapacity = creep.freeNextStore */ - const creepEffectiveCapacity = - creep.store.getCapacity() - - creep.store.getUsedCapacity() + - creep.nextStore[request.resourceType] - - if ( - creep.nextStore[request.resourceType] >= - Math.min( - creep.nextStore[request.resourceType], - request.amount, - target.store.getCapacity(request.resourceType), - creepEffectiveCapacity, - ) - ) - return true - return false - } - - return true } - // Withdraw or offer type + static createBackupStoringStructuresRoomLogisticsRequest( + creep: Creep, + types: Set, + resourceTypes: Set + ) { + if (creep.room.name !== creep.commune.name) return Result.fail - if (request.onlyFull) { - // If the creep has enough space + if (types.has(RoomLogisticsRequestTypes.transfer)) { + const result = this.createBackupStoringStructuresRoomLogisticsRequestTransfer(creep) + if (result !== Result.fail) return result + } - if (target.reserveStore[request.resourceType] >= creep.freeNextStore) return true - return false + if (creep.role === 'hauler') return Result.fail + return this.createBackupStoringStructuresRoomLogisticsRequestWithdraw(creep, resourceTypes) } - return true - } - - static createBackupStoringStructuresRoomLogisticsRequest( - creep: Creep, - types: Set, - resourceTypes: Set, - ) { - if (creep.room.name !== creep.commune.name) return Result.fail + static createBackupStoringStructuresRoomLogisticsRequestTransfer(creep: Creep) { + const storingStructures = CommuneUtils.storingStructures(creep.commune) + if (!storingStructures.length) return Result.fail - if (types.has(RoomLogisticsRequestTypes.transfer)) { - const result = this.createBackupStoringStructuresRoomLogisticsRequestTransfer(creep) - if (result !== Result.fail) return result - } - - if (creep.role === 'hauler') return Result.fail - return this.createBackupStoringStructuresRoomLogisticsRequestWithdraw(creep, resourceTypes) - } + const creepNextStore = creep.nextStore + let resourceType: ResourceConstant - static createBackupStoringStructuresRoomLogisticsRequestTransfer(creep: Creep) { - const storingStructures = CommuneUtils.storingStructures(creep.commune) - if (!storingStructures.length) return Result.fail + for (const key in creepNextStore) { + // Energy is handled by storing structure logistics requests, not backup-created requests + if (key === RESOURCE_ENERGY) continue + if (creepNextStore[key as ResourceConstant] <= 0) continue - const creepNextStore = creep.nextStore - let resourceType: ResourceConstant + resourceType = key as ResourceConstant + break + } - for (const key in creepNextStore) { - // Energy is handled by storing structure logistics requests, not backup-created requests - if (key === RESOURCE_ENERGY) continue - if (creepNextStore[key as ResourceConstant] <= 0) continue + if (!resourceType) return Result.fail - resourceType = key as ResourceConstant - break + const storingStructure = storingStructures.find( + structure => RoomObjectUtils.freeReserveStoreOf(structure, resourceType) >= creepNextStore[resourceType] + ) + if (!storingStructure) return Result.fail + /* creep.room.visual.text((creep.nextStore[resourceType]).toString(), creep.pos.x, creep.pos.y, { color: customColors.red }) */ + return { + [CreepLogisticsRequestKeys.type]: RoomLogisticsRequestTypes.transfer, + [CreepLogisticsRequestKeys.target]: storingStructure.id, + [CreepLogisticsRequestKeys.resourceType]: resourceType, + [CreepLogisticsRequestKeys.amount]: creepNextStore[resourceType], + } } - if (!resourceType) return Result.fail - - const storingStructure = storingStructures.find( - structure => RoomObjectUtils.freeReserveStoreOf(structure, resourceType) >= creepNextStore[resourceType], - ) - if (!storingStructure) return Result.fail - /* creep.room.visual.text((creep.nextStore[resourceType]).toString(), creep.pos.x, creep.pos.y, { color: customColors.red }) */ - return { - [CreepLogisticsRequestKeys.type]: RoomLogisticsRequestTypes.transfer, - [CreepLogisticsRequestKeys.target]: storingStructure.id, - [CreepLogisticsRequestKeys.resourceType]: resourceType, - [CreepLogisticsRequestKeys.amount]: creepNextStore[resourceType], - } - } - - static createBackupStoringStructuresRoomLogisticsRequestWithdraw( - creep: Creep, - resourceTypes: Set = new Set([RESOURCE_ENERGY]), - ) { - const storingStructures = CommuneUtils.storingStructures(creep.commune) - if (!storingStructures.length) return Result.fail - - let resourceType: ResourceConstant - let storingStructure: AnyStoreStructure - - for (resourceType of resourceTypes) { - storingStructure = storingStructures.find( - structure => structure.reserveStore[resourceType] >= RoomObjectUtils.freeNextStoreOf(creep, resourceType), - ) - if (storingStructure) break - } + static createBackupStoringStructuresRoomLogisticsRequestWithdraw( + creep: Creep, + resourceTypes: Set = new Set([RESOURCE_ENERGY]) + ) { + const storingStructures = CommuneUtils.storingStructures(creep.commune) + if (!storingStructures.length) return Result.fail + + let resourceType: ResourceConstant + let storingStructure: AnyStoreStructure + + for (resourceType of resourceTypes) { + storingStructure = storingStructures.find( + structure => structure.reserveStore[resourceType] >= RoomObjectUtils.freeNextStoreOf(creep, resourceType) + ) + if (storingStructure) break + } - if (!storingStructure) return Result.fail + if (!storingStructure) return Result.fail - /* creep.room.visual.text((creep.nextStore[resourceType]).toString(), creep.pos.x, creep.pos.y, { color: customColors.red }) */ - return { - [CreepLogisticsRequestKeys.type]: RoomLogisticsRequestTypes.withdraw, - [CreepLogisticsRequestKeys.target]: storingStructure.id, - [CreepLogisticsRequestKeys.resourceType]: resourceType, - [CreepLogisticsRequestKeys.amount]: RoomObjectUtils.freeNextStoreOf(creep, resourceType), + /* creep.room.visual.text((creep.nextStore[resourceType]).toString(), creep.pos.x, creep.pos.y, { color: customColors.red }) */ + return { + [CreepLogisticsRequestKeys.type]: RoomLogisticsRequestTypes.withdraw, + [CreepLogisticsRequestKeys.target]: storingStructure.id, + [CreepLogisticsRequestKeys.resourceType]: resourceType, + [CreepLogisticsRequestKeys.amount]: RoomObjectUtils.freeNextStoreOf(creep, resourceType), + } } - } - - static findRoomLogisticRequestAmount(creep: Creep, request: RoomLogisticsRequest) { - const target = findObjectWithID(request.targetID) - // Pickup type + static findRoomLogisticRequestAmount(creep: Creep, request: RoomLogisticsRequest) { + const target = findObjectWithID(request.targetID) - if (target instanceof Resource) { - const creepFreeNextStore = RoomObjectUtils.freeNextStoreOf(creep, request.resourceType) - return Math.min(creepFreeNextStore, request.amount) - } - - if (request.type === RoomLogisticsRequestTypes.transfer) { - const creepFreeNextStore = RoomObjectUtils.freeNextStoreOf(creep, request.resourceType) + // Pickup type + if (target instanceof Resource) { + const creepFreeNextStore = RoomObjectUtils.freeNextStoreOf(creep, request.resourceType) + return Math.min(creepFreeNextStore, request.amount) + } - if (request.delivery) { - // Take extra energy in case its needed + if (request.type === RoomLogisticsRequestTypes.transfer) { + const creepFreeNextStore = RoomObjectUtils.freeNextStoreOf(creep, request.resourceType) - /* if (request.resourceType === RESOURCE_ENERGY) { - return creep.nextStore[request.resourceType] + creepFreeNextStore - } */ + if (request.delivery) { + // Take extra energy in case its needed + /* if (request.resourceType === RESOURCE_ENERGY) { + return creep.nextStore[request.resourceType] + creepFreeNextStore + } */ + return Math.min(request.amount, creep.nextStore[request.resourceType] + creepFreeNextStore) + } + return Math.min(creep.nextStore[request.resourceType], request.amount) + } - return Math.min(request.amount, creep.nextStore[request.resourceType] + creepFreeNextStore) - } - return Math.min(creep.nextStore[request.resourceType], request.amount) + // Withdraw or offer type + const creepFreeNextStore = RoomObjectUtils.freeNextStoreOf(creep, request.resourceType) + return Math.min(creepFreeNextStore, request.amount) } - // Withdraw or offer type - - const creepFreeNextStore = RoomObjectUtils.freeNextStoreOf(creep, request.resourceType) - return Math.min(creepFreeNextStore, request.amount) - } + static findNewRampartRepairTarget(creep: Creep) { + const ramparts = creep.room.roomManager.enemyAttackers.length + ? creep.room.communeManager.defensiveRamparts + : CommuneUtils.getRampartRepairTargets(creep.room) - static findNewRampartRepairTarget(creep: Creep) { - const ramparts = creep.room.roomManager.enemyAttackers.length - ? creep.room.communeManager.defensiveRamparts - : CommuneUtils.getRampartRepairTargets(creep.room) + const [score, bestTarget] = findWithLowestScore(ramparts, structure => { + if (structure.nextHits / structure.hitsMax > 0.9) return false - const [score, bestTarget] = findWithLowestScore(ramparts, structure => { - if (structure.nextHits / structure.hitsMax > 0.9) return false + // Score by range and hits + return getRange(creep.pos, structure.pos) + structure.nextHits / 1000 + }) - // Score by range and hits - return getRange(creep.pos, structure.pos) + structure.nextHits / 1000 - }) + if (!bestTarget) return false - if (!bestTarget) return false + Memory.creeps[creep.name][CreepMemoryKeys.structureTarget] = bestTarget.id + return bestTarget + } - Memory.creeps[creep.name][CreepMemoryKeys.structureTarget] = bestTarget.id - return bestTarget - } + static findNewRepairTarget(creep: Creep) { + const enemyAttackers = !!creep.room.roomManager.enemyAttackers.length + let repairThreshold = enemyAttackers ? 0.1 : 0.3 - static findNewRepairTarget(creep: Creep) { - const enemyAttackers = !!creep.room.roomManager.enemyAttackers.length - let repairThreshold = enemyAttackers ? 0.1 : 0.3 + let lowestScore = Infinity + let bestTarget - let lowestScore = Infinity - let bestTarget + const structures = CommuneUtils.getGeneralRepairStructures(creep.room) + for (const structure of structures) { + // If above 30% of max hits + if (structure.nextHits / structure.hitsMax > repairThreshold) continue - const structures = CommuneUtils.getGeneralRepairStructures(creep.room) - for (const structure of structures) { - // If above 30% of max hits + const score = getRange(creep.pos, structure.pos) + (structure.nextHits / structure.hitsMax) * 20 + if (score >= lowestScore) continue - if (structure.nextHits / structure.hitsMax > repairThreshold) continue + lowestScore = score + bestTarget = structure + } - const score = - getRange(creep.pos, structure.pos) + (structure.nextHits / structure.hitsMax) * 20 - if (score >= lowestScore) continue + if (!bestTarget) return false - lowestScore = score - bestTarget = structure + const creepMemory = Memory.creeps[creep.name] + creepMemory[CreepMemoryKeys.structureTarget] = bestTarget.id + return bestTarget } - if (!bestTarget) return false - - const creepMemory = Memory.creeps[creep.name] - creepMemory[CreepMemoryKeys.structureTarget] = bestTarget.id - return bestTarget - } + static findRepairTarget(creep: Creep) { + const creepMemory = Memory.creeps[creep.name] + if (creepMemory[CreepMemoryKeys.structureTarget]) { + const repairTarget = findObjectWithID(creep.memory[CreepMemoryKeys.structureTarget]) + if (repairTarget) return repairTarget + } - static findRepairTarget(creep: Creep) { - const creepMemory = Memory.creeps[creep.name] - if (creepMemory[CreepMemoryKeys.structureTarget]) { - const repairTarget = findObjectWithID(creep.memory[CreepMemoryKeys.structureTarget]) - if (repairTarget) return repairTarget + return this.findNewRepairTarget(creep) || this.findNewRampartRepairTarget(creep) } - return this.findNewRepairTarget(creep) || this.findNewRampartRepairTarget(creep) - } + static findFastFillerCoord(creep: Creep) { + const creepMemory = Memory.creeps[creep.name] + if (creepMemory[CreepMemoryKeys.packedCoord]) { + return unpackCoord(creepMemory[CreepMemoryKeys.packedCoord]) + } - static findFastFillerCoord(creep: Creep) { - const creepMemory = Memory.creeps[creep.name] - if (creepMemory[CreepMemoryKeys.packedCoord]) { - return unpackCoord(creepMemory[CreepMemoryKeys.packedCoord]) + return this.findNewFastFillerCoord(creep, creepMemory) } - return this.findNewFastFillerCoord(creep, creepMemory) - } - - /** - * Find the closest open fast filler coord, if exists. Then assign it to the creep - */ - static findNewFastFillerCoord(creep: Creep, creepMemory = Memory.creeps[creep.name]) { - const fastFillerCoords = RoomUtils.getFastFillerCoords(creep.room) - if (!fastFillerCoords.length) return false + /** + * Find the closest open fast filler coord, if exists. Then assign it to the creep + */ + static findNewFastFillerCoord(creep: Creep, creepMemory = Memory.creeps[creep.name]) { + const fastFillerCoords = RoomUtils.getFastFillerCoords(creep.room) + if (!fastFillerCoords.length) return false - const reservedCoords = creep.room.roomManager.reservedCoords + const reservedCoords = creep.room.roomManager.reservedCoords - const result = this.findOpenFastFillerCoord(creep, reservedCoords) - if (result === Result.fail) return false + const result = this.findOpenFastFillerCoord(creep, reservedCoords) + if (result === Result.fail) return false - creepMemory[CreepMemoryKeys.packedCoord] = result.packedCoord - reservedCoords.set(result.packedCoord, ReservedCoordTypes.important) + creepMemory[CreepMemoryKeys.packedCoord] = result.packedCoord + reservedCoords.set(result.packedCoord, ReservedCoordTypes.important) - return result.coord - } + return result.coord + } - private static findOpenFastFillerCoord( - creep: Creep, - reservedCoords: Map, - ) { - const packedFastFillerCoords = roomData[creep.room.name].fastFillerCoords + private static findOpenFastFillerCoord( + creep: Creep, + reservedCoords: Map + ) { + const packedFastFillerCoords = roomData[creep.room.name].fastFillerCoords - let lowestScore = Infinity - let bestCoord: Coord - let bestPackedCoord: string - let bestIndex: number + let lowestScore = Infinity + let bestCoord: Coord + let bestPackedCoord: string + let bestIndex: number - for (let i = 0; i < packedFastFillerCoords.length; i++) { - const packedCoord = packedFastFillerCoords[i] + for (let i = 0; i < packedFastFillerCoords.length; i++) { + const packedCoord = packedFastFillerCoords[i] - if (reservedCoords.get(packedCoord) === ReservedCoordTypes.important) { - continue - } + if (reservedCoords.get(packedCoord) === ReservedCoordTypes.important) { + continue + } - const coord = unpackCoord(packedCoord) + const coord = unpackCoord(packedCoord) - const score = getRange(coord, creep.pos) - if (score >= lowestScore) continue + const score = getRange(coord, creep.pos) + if (score >= lowestScore) continue - lowestScore = score - bestCoord = coord - bestPackedCoord = packedCoord - bestIndex = i - } - if (!bestCoord) return Result.fail + lowestScore = score + bestCoord = coord + bestPackedCoord = packedCoord + bestIndex = i + } + if (!bestCoord) return Result.fail - return { - coord: bestCoord, - packedCoord: bestPackedCoord, - index: bestIndex, + return { + coord: bestCoord, + packedCoord: bestPackedCoord, + index: bestIndex, + } } - } } diff --git a/src/room/creeps/roleManagers/commune/controllerUpgrader.ts b/src/room/creeps/roleManagers/commune/controllerUpgrader.ts index e08a77dfb..eb3e6e4d9 100644 --- a/src/room/creeps/roleManagers/commune/controllerUpgrader.ts +++ b/src/room/creeps/roleManagers/commune/controllerUpgrader.ts @@ -4,7 +4,7 @@ import { RoomMemoryKeys, packedPosLength, } from '../../../../constants/general' -import { CreepProcs } from 'room/creeps/creepProcs' +import { CreepOps } from 'room/creeps/creepOps' import { CreepUtils } from 'room/creeps/creepUtils' import { MyCreepUtils } from 'room/creeps/myCreepUtils' @@ -74,7 +74,7 @@ export class ControllerUpgrader extends Creep { } } */ - CreepProcs.advancedUpgradeController(creep) + CreepOps.advancedUpgradeController(creep) } } } diff --git a/src/room/creeps/roleManagers/commune/fastFiller.ts b/src/room/creeps/roleManagers/commune/fastFiller.ts index 7db3cfeca..5474ffbcb 100644 --- a/src/room/creeps/roleManagers/commune/fastFiller.ts +++ b/src/room/creeps/roleManagers/commune/fastFiller.ts @@ -2,7 +2,7 @@ import { CreepMemoryKeys, ReservedCoordTypes } from '../../../../constants/gener import { findClosestPos, getRangeXY, getRange } from 'utils/utils' import { packCoord, packPos, unpackCoord, unpackCoordAsPos, unpackPos } from 'other/codec' import { StructureUtils } from 'room/structureUtils' -import { CreepProcs } from 'room/creeps/creepProcs' +import { CreepOps } from 'room/creeps/creepOps' import { RoomUtils } from 'room/roomUtils' import { roomData } from 'room/roomData' import { CreepUtils } from 'room/creeps/creepUtils' @@ -202,7 +202,7 @@ export class FastFiller extends Creep { if (creep.fillFastFiller()) continue - CreepProcs.passiveRenew(creep) + CreepOps.passiveRenew(creep) /* creep.message = ('🚬') */ } diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index 2d2c72b96..7967da7b8 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -15,7 +15,7 @@ import { } from '../../../../constants/general' import { StatsManager } from 'international/stats' import { packCoord, reversePosList, unpackCoord, unpackPosAt } from 'other/codec' -import { CreepProcs } from 'room/creeps/creepProcs' +import { CreepOps } from 'room/creeps/creepOps' import { MyCreepUtils } from 'room/creeps/myCreepUtils' import { StructureUtils } from 'room/structureUtils' import { @@ -356,7 +356,7 @@ export class Hauler extends Creep { if (this.room.name !== this.commune.name) { // Fulfill requests near the hauler - CreepProcs.runRoomLogisticsRequestsAdvanced(this, { + CreepOps.runRoomLogisticsRequestsAdvanced(this, { types: new Set([RoomLogisticsRequestTypes.pickup, RoomLogisticsRequestTypes.withdraw]), resourceTypes: new Set([RESOURCE_ENERGY]), conditions: request => { @@ -468,7 +468,7 @@ export class Hauler extends Creep { if (isBySourceHarvestPos || creepMemory[CreepMemoryKeys.roomLogisticsRequests].length > 0) { const freeNextStoreInitial = this.freeNextStore - CreepProcs.runRoomLogisticsRequestsAdvanced(this, { + CreepOps.runRoomLogisticsRequestsAdvanced(this, { types: new Set([RoomLogisticsRequestTypes.pickup, RoomLogisticsRequestTypes.withdraw]), resourceTypes: new Set([RESOURCE_ENERGY]), conditions: request => { @@ -503,7 +503,7 @@ export class Hauler extends Creep { // Fulfill requests near the hauler - CreepProcs.runRoomLogisticsRequestsAdvanced(this, { + CreepOps.runRoomLogisticsRequestsAdvanced(this, { types: new Set([ RoomLogisticsRequestTypes.pickup, RoomLogisticsRequestTypes.withdraw, @@ -558,9 +558,9 @@ export class Hauler extends Creep { if (commune.communeManager.remoteResourcePathType === RoomMemoryKeys.remoteSourceHubPaths) { if (this.room.name === commune.name) { - CreepProcs.passiveRenew(this) + CreepOps.passiveRenew(this) - const logisticsResult = CreepProcs.runRoomLogisticsRequestsAdvanced(this, { + const logisticsResult = CreepOps.runRoomLogisticsRequestsAdvanced(this, { types: new Set([RoomLogisticsRequestTypes.transfer]), resourceTypes: new Set([RESOURCE_ENERGY]), noDelivery: true, @@ -687,9 +687,9 @@ export class Hauler extends Creep { } if (this.room.name === commune.name) { - CreepProcs.passiveRenew(this) + CreepOps.passiveRenew(this) - CreepProcs.runRoomLogisticsRequestAdvanced(this, { + CreepOps.runRoomLogisticsRequestAdvanced(this, { types: new Set([RoomLogisticsRequestTypes.transfer]), resourceTypes: new Set([RESOURCE_ENERGY]), }) @@ -1056,9 +1056,9 @@ export class Hauler extends Creep { } runCommuneLogistics?() { - CreepProcs.passiveRenew(this) + CreepOps.passiveRenew(this) - if (CreepProcs.runRoomLogisticsRequestsAdvanced(this) === Result.action) { + if (CreepOps.runRoomLogisticsRequestsAdvanced(this) === Result.action) { this.relay() return Result.action } diff --git a/src/room/creeps/roleManagers/commune/hubHauler.ts b/src/room/creeps/roleManagers/commune/hubHauler.ts index b99518f09..8c8953137 100644 --- a/src/room/creeps/roleManagers/commune/hubHauler.ts +++ b/src/room/creeps/roleManagers/commune/hubHauler.ts @@ -10,7 +10,7 @@ import { } from '../../../../constants/general' import { packCoord, unpackCoord } from 'other/codec' import { CommuneUtils } from 'room/commune/communeUtils' -import { CreepProcs } from 'room/creeps/creepProcs' +import { CreepOps } from 'room/creeps/creepOps' import { findObjectWithID, getRange, unpackNumAsPos } from 'utils/utils' //import { HubHauler } from '../../creepClasses' @@ -108,14 +108,14 @@ export class HubHauler extends Creep { if (!storage || !factory) return false if (factory.store.energy > 3000 && storage.store.getFreeCapacity() > 3000) { - CreepProcs.createCreepRoomLogisticsRequest( + CreepOps.createCreepRoomLogisticsRequest( this, RoomLogisticsRequestTypes.withdraw, factory.id, 3000, RESOURCE_ENERGY, ) - CreepProcs.createCreepRoomLogisticsRequest( + CreepOps.createCreepRoomLogisticsRequest( this, RoomLogisticsRequestTypes.transfer, storage.id, @@ -162,14 +162,14 @@ export class HubHauler extends Creep { let amount = this.store.getFreeCapacity() - CreepProcs.createCreepRoomLogisticsRequest( + CreepOps.createCreepRoomLogisticsRequest( this, RoomLogisticsRequestTypes.withdraw, terminal.id, amount, resourceType, ) - CreepProcs.createCreepRoomLogisticsRequest( + CreepOps.createCreepRoomLogisticsRequest( this, RoomLogisticsRequestTypes.transfer, storage.id, @@ -214,14 +214,14 @@ export class HubHauler extends Creep { let amount = this.store.getFreeCapacity() - CreepProcs.createCreepRoomLogisticsRequest( + CreepOps.createCreepRoomLogisticsRequest( this, RoomLogisticsRequestTypes.withdraw, storage.id, amount, resourceType, ) - CreepProcs.createCreepRoomLogisticsRequest( + CreepOps.createCreepRoomLogisticsRequest( this, RoomLogisticsRequestTypes.transfer, terminal.id, @@ -283,13 +283,13 @@ export class HubHauler extends Creep { let amount = Math.min(this.freeNextStore, hubLink.store.getUsedCapacity(RESOURCE_ENERGY)) - CreepProcs.createCreepRoomLogisticsRequest( + CreepOps.createCreepRoomLogisticsRequest( this, RoomLogisticsRequestTypes.withdraw, hubLink.id, amount, ) - CreepProcs.createCreepRoomLogisticsRequest( + CreepOps.createCreepRoomLogisticsRequest( this, RoomLogisticsRequestTypes.transfer, target.id, @@ -346,13 +346,13 @@ export class HubHauler extends Creep { this.message += 'RHLT' - CreepProcs.createCreepRoomLogisticsRequest( + CreepOps.createCreepRoomLogisticsRequest( this, RoomLogisticsRequestTypes.withdraw, provider.id, amount, ) - CreepProcs.createCreepRoomLogisticsRequest( + CreepOps.createCreepRoomLogisticsRequest( this, RoomLogisticsRequestTypes.transfer, hubLink.id, @@ -407,14 +407,14 @@ export class HubHauler extends Creep { ], ) - CreepProcs.createCreepRoomLogisticsRequest( + CreepOps.createCreepRoomLogisticsRequest( this, RoomLogisticsRequestTypes.withdraw, factory.id, amount, resource as CommodityConstant | MineralConstant | RESOURCE_GHODIUM | RESOURCE_ENERGY, ) - CreepProcs.createCreepRoomLogisticsRequest( + CreepOps.createCreepRoomLogisticsRequest( this, RoomLogisticsRequestTypes.transfer, target.id, @@ -442,14 +442,14 @@ export class HubHauler extends Creep { let amount = this.freeNextStore - CreepProcs.createCreepRoomLogisticsRequest( + CreepOps.createCreepRoomLogisticsRequest( this, RoomLogisticsRequestTypes.withdraw, factory.id, amount, RESOURCE_BATTERY, ) - CreepProcs.createCreepRoomLogisticsRequest( + CreepOps.createCreepRoomLogisticsRequest( this, RoomLogisticsRequestTypes.transfer, target.id, @@ -505,14 +505,14 @@ export class HubHauler extends Creep { ) continue - CreepProcs.createCreepRoomLogisticsRequest( + CreepOps.createCreepRoomLogisticsRequest( this, RoomLogisticsRequestTypes.withdraw, provider.id, amount, resource, ) - CreepProcs.createCreepRoomLogisticsRequest( + CreepOps.createCreepRoomLogisticsRequest( this, RoomLogisticsRequestTypes.transfer, factory.id, @@ -579,18 +579,21 @@ export class HubHauler extends Creep { this.message += 'RPSTP' - CreepProcs.createCreepRoomLogisticsRequest( + CreepOps.createCreepRoomLogisticsRequest( this, RoomLogisticsRequestTypes.withdraw, provider.id, amount, resource, ) - CreepProcs.createCreepRoomLogisticsRequest( + CreepOps.createCreepRoomLogisticsRequest( this, RoomLogisticsRequestTypes.transfer, powerSpawn.id, - Math.min(this.freeNextStore + this.store[resource], powerSpawn.store.getFreeCapacity(resource)), + Math.min( + this.freeNextStore + this.store[resource], + powerSpawn.store.getFreeCapacity(resource), + ), resource, ) return true @@ -629,18 +632,21 @@ export class HubHauler extends Creep { this.message += 'RPSTE' - CreepProcs.createCreepRoomLogisticsRequest( + CreepOps.createCreepRoomLogisticsRequest( this, RoomLogisticsRequestTypes.withdraw, provider.id, amount, resource, ) - CreepProcs.createCreepRoomLogisticsRequest( + CreepOps.createCreepRoomLogisticsRequest( this, RoomLogisticsRequestTypes.transfer, powerSpawn.id, - Math.min(this.freeNextStore + this.store[resource], powerSpawn.store.getFreeCapacity(resource)), + Math.min( + this.freeNextStore + this.store[resource], + powerSpawn.store.getFreeCapacity(resource), + ), resource, ) return true @@ -674,7 +680,7 @@ export class HubHauler extends Creep { continue } */ - if (!CreepProcs.runRoomLogisticsRequests(creep)) continue + if (!CreepOps.runRoomLogisticsRequests(creep)) continue creep.message += '🚬' } diff --git a/src/room/creeps/roleManagers/commune/maintainer.ts b/src/room/creeps/roleManagers/commune/maintainer.ts index 0fb57740f..715d52e16 100644 --- a/src/room/creeps/roleManagers/commune/maintainer.ts +++ b/src/room/creeps/roleManagers/commune/maintainer.ts @@ -3,7 +3,7 @@ import { StatsManager } from 'international/stats' import { findCoordsInsideRect, findObjectWithID, getRange } from 'utils/utils' import { packCoord } from 'other/codec' import { CreepUtils } from 'room/creeps/creepUtils' -import { CreepProcs } from 'room/creeps/creepProcs' +import { CreepOps } from 'room/creeps/creepOps' export class Maintainer extends Creep { constructor(creepID: Id) { @@ -32,8 +32,8 @@ export class Maintainer extends Creep { const rampartCSite = this.room.find(FIND_MY_CONSTRUCTION_SITES).find(site => site.structureType === STRUCTURE_RAMPART) if (rampartCSite && this.advancedBuildCSite(rampartCSite) !== Result.fail) return */ - if (CreepProcs.repairCommune(this)) return - if (CreepProcs.repairNearby(this)) return + if (CreepOps.repairCommune(this)) return + if (CreepOps.repairNearby(this)) return } static roleManager(room: Room, creepsOfRole: string[]) { diff --git a/src/room/creeps/roleManagers/commune/mineralHarvester.ts b/src/room/creeps/roleManagers/commune/mineralHarvester.ts index ad2f26f83..3313ab3bb 100644 --- a/src/room/creeps/roleManagers/commune/mineralHarvester.ts +++ b/src/room/creeps/roleManagers/commune/mineralHarvester.ts @@ -9,6 +9,7 @@ import { StatsManager } from 'international/stats' import { getRangeXY, getRange, areCoordsEqual } from 'utils/utils' import { reversePosList, unpackPos } from 'other/codec' import { MyCreepUtils } from 'room/creeps/myCreepUtils' +import { CreepOps } from 'room/creeps/creepOps' export class MineralHarvester extends Creep { update() { @@ -28,7 +29,7 @@ export class MineralHarvester extends Creep { // Unpack the creep's packedHarvestPos - const harvestPos = this.findMineralHarvestPos() + const harvestPos = CreepOps.findMineralHarvestPos(this) if (!harvestPos) return Result.fail this.actionCoord = this.room.roomManager.mineral.pos diff --git a/src/room/creeps/roleManagers/commune/sourceHarvester.ts b/src/room/creeps/roleManagers/commune/sourceHarvester.ts index 6c882b455..a6eecd8ff 100644 --- a/src/room/creeps/roleManagers/commune/sourceHarvester.ts +++ b/src/room/creeps/roleManagers/commune/sourceHarvester.ts @@ -21,7 +21,7 @@ import { Hauler } from './hauler' import { CreepUtils } from 'room/creeps/creepUtils' import { MyCreepUtils } from 'room/creeps/myCreepUtils' import { StructureUtils } from 'room/structureUtils' -import { CreepProcs } from 'room/creeps/creepProcs' +import { CreepOps } from 'room/creeps/creepOps' export class SourceHarvester extends Creep { constructor(creepID: Id) { @@ -68,7 +68,7 @@ export class SourceHarvester extends Creep { const source = this.room.roomManager.communeSources[this.memory[CreepMemoryKeys.sourceIndex]] if (getRange(this.pos, source.pos) <= 1) { - CreepUtils.harvestSource(this, source) + CreepOps.harvestSource(this, source) } } @@ -79,7 +79,10 @@ export class SourceHarvester extends Creep { // Unpack the harvestPos - const harvestPos = this.findCommuneSourceHarvestPos(this.memory[CreepMemoryKeys.sourceIndex]) + const harvestPos = CreepOps.findCommuneSourceHarvestPos( + this, + this.memory[CreepMemoryKeys.sourceIndex], + ) if (!harvestPos) return Result.fail this.actionCoord = @@ -188,7 +191,7 @@ export class SourceHarvester extends Creep { if (this.nextStore.energy < MyCreepUtils.parts(this).work) { if (this.movedResource) return false - const result = CreepProcs.runRoomLogisticsRequestAdvanced(this, { + const result = CreepOps.runRoomLogisticsRequestAdvanced(this, { resourceTypes: new Set([RESOURCE_ENERGY]), types: new Set([ RoomLogisticsRequestTypes.withdraw, @@ -222,7 +225,7 @@ export class SourceHarvester extends Creep { if (this.nextStore.energy < workPartCount) { if (this.movedResource) return false - const result = CreepProcs.runRoomLogisticsRequestAdvanced(this, { + const result = CreepOps.runRoomLogisticsRequestAdvanced(this, { resourceTypes: new Set([RESOURCE_ENERGY]), types: new Set([ RoomLogisticsRequestTypes.withdraw, diff --git a/src/room/creeps/roleManagers/international/allyVanguard.ts b/src/room/creeps/roleManagers/international/allyVanguard.ts index 263600bec..ee3fa2b59 100644 --- a/src/room/creeps/roleManagers/international/allyVanguard.ts +++ b/src/room/creeps/roleManagers/international/allyVanguard.ts @@ -10,7 +10,7 @@ import { findObjectWithID, getRangeXY, getRange } from 'utils/utils' import { unpackCoord } from 'other/codec' import { CreepUtils } from 'room/creeps/creepUtils' import { MyCreepUtils } from 'room/creeps/myCreepUtils' -import { CreepProcs } from 'room/creeps/creepProcs' +import { CreepOps } from 'room/creeps/creepOps' import { RoomOps } from 'room/roomOps' export class AllyVanguard extends Creep { @@ -99,14 +99,14 @@ export class AllyVanguard extends Creep { // Try to normally harvest. Iterate if creep harvested const source = RoomOps.getSources(room)[sourceIndex] - if (CreepUtils.harvestSource(this, source) === Result.fail) return + if (CreepOps.harvestSource(this, source) !== Result.success) return } getEnergyFromRoom?(): boolean { if (this.room.controller.owner) return false if ( - CreepProcs.runRoomLogisticsRequestsAdvanced(this, { + CreepOps.runRoomLogisticsRequestsAdvanced(this, { resourceTypes: new Set([RESOURCE_ENERGY]), }) === Result.success ) @@ -127,7 +127,7 @@ export class AllyVanguard extends Creep { // Try to normally harvest. Iterate if creep harvested const source = this.room.roomManager.communeSources[sourceIndex] - if (CreepUtils.harvestSource(this, source) === Result.success) { + if (CreepOps.harvestSource(this, source) === Result.success) { return true } return true @@ -139,7 +139,7 @@ export class AllyVanguard extends Creep { travelToSource?(sourceIndex: number): boolean { this.message = '🚬' - const harvestPos = this.findSourceHarvestPos(this.memory[CreepMemoryKeys.sourceIndex]) + const harvestPos = CreepOps.findSourceHarvestPos(this, this.memory[CreepMemoryKeys.sourceIndex]) if (!harvestPos) return true // If the creep is at the creep's packedHarvestPos, inform false diff --git a/src/room/creeps/roleManagers/international/vanguard.ts b/src/room/creeps/roleManagers/international/vanguard.ts index fd59d323e..08127a8f5 100644 --- a/src/room/creeps/roleManagers/international/vanguard.ts +++ b/src/room/creeps/roleManagers/international/vanguard.ts @@ -9,6 +9,7 @@ import { findObjectWithID, getRangeXY, getRange } from 'utils/utils' import { unpackCoord } from 'other/codec' import { CreepUtils } from 'room/creeps/creepUtils' import { MyCreepUtils } from 'room/creeps/myCreepUtils' +import { CreepOps } from 'room/creeps/creepOps' export class Vanguard extends Creep { constructor(creepID: Id) { @@ -46,7 +47,10 @@ export class Vanguard extends Creep { this.message = '🚬' - const harvestPos = this.findCommuneSourceHarvestPos(this.memory[CreepMemoryKeys.sourceIndex]) + const harvestPos = CreepOps.findCommuneSourceHarvestPos( + this, + this.memory[CreepMemoryKeys.sourceIndex], + ) if (!harvestPos) return true // If the creep is at the creep's packedHarvestPos, inform false @@ -161,7 +165,7 @@ export class Vanguard extends Creep { // Try to normally harvest. Iterate if creep harvested const source = this.room.roomManager.communeSources[sourceIndex] - if (CreepUtils.harvestSource(this, source) === Result.success) { + if (CreepOps.harvestSource(this, source) === Result.success) { return } return diff --git a/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts b/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts index 357f85160..ec28cc534 100644 --- a/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts +++ b/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts @@ -22,7 +22,7 @@ import { packCoord, reversePosList, unpackPosAt } from 'other/codec' import { indexOf } from 'lodash' import { CreepUtils } from 'room/creeps/creepUtils' import { MyCreepUtils } from 'room/creeps/myCreepUtils' -import { CreepProcs } from 'room/creeps/creepProcs' +import { CreepOps } from 'room/creeps/creepOps' import { CommuneUtils } from 'room/commune/communeUtils' export class RemoteHarvester extends Creep { @@ -291,7 +291,12 @@ export class RemoteHarvester extends Creep { if (this.maintainContainer(container) === Result.action) return Result.success const source = this.room.roomManager.remoteSources[sourceIndex] - CreepUtils.harvestSource(this, source) + + const harvestResult = CreepOps.harvestSource(this, source) + if (harvestResult !== Result.success) { + this.message = harvestResult.toString() + return Result.action + } // Give our energy to the container so it doesn't drop on the ground @@ -310,11 +315,18 @@ export class RemoteHarvester extends Creep { if (this.buildContainer() === Result.action) return Result.success const source = this.room.roomManager.remoteSources[sourceIndex] - CreepUtils.harvestSource(this, source) + + const harvestResult = CreepOps.harvestSource(this, source) + if (harvestResult !== Result.success) { + this.message = harvestResult.toString() + return Result.action + } // Stop, we don't have enough energy to justify a request - if (this.reserveStore.energy < this.store.getCapacity() * 0.5) return Result.action + if (this.reserveStore.energy < this.store.getCapacity() * 0.5) { + return Result.action + } // Try to have haulers get energy directly from us (avoids decay) @@ -331,7 +343,7 @@ export class RemoteHarvester extends Creep { if (this.nextStore.energy >= MyCreepUtils.parts(this).work) return Result.success if (this.movedResource) return Result.fail - return CreepProcs.runRoomLogisticsRequestAdvanced(this, { + return CreepOps.runRoomLogisticsRequestAdvanced(this, { resourceTypes: new Set([RESOURCE_ENERGY]), types: new Set([ RoomLogisticsRequestTypes.withdraw, @@ -419,7 +431,10 @@ export class RemoteHarvester extends Creep { // Unpack the harvestPos - const harvestPos = this.findRemoteSourceHarvestPos(this.memory[CreepMemoryKeys.sourceIndex]) + const harvestPos = CreepOps.findRemoteSourceHarvestPos( + this, + this.memory[CreepMemoryKeys.sourceIndex], + ) if (!harvestPos) return Result.noAction this.actionCoord = @@ -427,7 +442,10 @@ export class RemoteHarvester extends Creep { // If the creep is at the creep's packedHarvestPos, inform false - if (getRange(this.pos, harvestPos) === 0) return Result.success + if (getRange(this.pos, harvestPos) === 0) { + this.message = '🎯' + return Result.success + } // Otherwise say the intention and create a moveRequest to the creep's harvestPos, and inform the attempt diff --git a/src/room/creeps/roles/haulerOps.ts b/src/room/creeps/roles/haulerOps.ts index 95c3fcb3b..57d242523 100644 --- a/src/room/creeps/roles/haulerOps.ts +++ b/src/room/creeps/roles/haulerOps.ts @@ -14,7 +14,7 @@ import { } from '../../../constants/general' import { StatsManager } from 'international/stats' import { unpackPosAt, reversePosList, packCoord, unpackCoord } from 'other/codec' -import { CreepProcs } from 'room/creeps/creepProcs' +import { CreepOps } from 'room/creeps/creepOps' import { MyCreepUtils } from 'room/creeps/myCreepUtils' import { Hauler } from 'room/creeps/roleManagers/commune/hauler' import { StructureUtils } from 'room/structureUtils' @@ -355,7 +355,7 @@ export class HaulerOps { if (creep.room.name !== creep.commune.name) { // Fulfill requests near the hauler - CreepProcs.runRoomLogisticsRequestsAdvanced(creep, { + CreepOps.runRoomLogisticsRequestsAdvanced(creep, { types: new Set([RoomLogisticsRequestTypes.pickup, RoomLogisticsRequestTypes.withdraw]), resourceTypes: new Set([RESOURCE_ENERGY]), conditions: request => { @@ -467,7 +467,7 @@ export class HaulerOps { if (isBySourceHarvestPos || creepMemory[CreepMemoryKeys.roomLogisticsRequests].length > 0) { const freeNextStoreInitial = creep.freeNextStore - CreepProcs.runRoomLogisticsRequestsAdvanced(creep, { + CreepOps.runRoomLogisticsRequestsAdvanced(creep, { types: new Set([RoomLogisticsRequestTypes.pickup, RoomLogisticsRequestTypes.withdraw]), resourceTypes: new Set([RESOURCE_ENERGY]), conditions: request => { @@ -502,7 +502,7 @@ export class HaulerOps { // Fulfill requests near the hauler - CreepProcs.runRoomLogisticsRequestsAdvanced(creep, { + CreepOps.runRoomLogisticsRequestsAdvanced(creep, { types: new Set([ RoomLogisticsRequestTypes.pickup, RoomLogisticsRequestTypes.withdraw, @@ -559,7 +559,7 @@ export class HaulerOps { if (creep.room.name === commune.name) { this.passiveRenew(creep) - CreepProcs.runRoomLogisticsRequestsAdvanced(creep, { + CreepOps.runRoomLogisticsRequestsAdvanced(creep, { types: new Set([RoomLogisticsRequestTypes.transfer]), resourceTypes: new Set([RESOURCE_ENERGY]), noDelivery: true, @@ -680,7 +680,7 @@ export class HaulerOps { if (creep.room.name === commune.name) { this.passiveRenew(creep) - CreepProcs.runRoomLogisticsRequestAdvanced(creep, { + CreepOps.runRoomLogisticsRequestAdvanced(creep, { types: new Set([RoomLogisticsRequestTypes.transfer]), resourceTypes: new Set([RESOURCE_ENERGY]), }) @@ -1046,7 +1046,7 @@ export class HaulerOps { private static runCommuneLogistics(creep: Creep) { this.passiveRenew(creep) - if (CreepProcs.runRoomLogisticsRequestsAdvanced(creep) === Result.action) { + if (CreepOps.runRoomLogisticsRequestsAdvanced(creep) === Result.action) { this.relay(creep) return Result.action } diff --git a/src/room/room.ts b/src/room/room.ts index 8dc18ba82..f898baf9e 100644 --- a/src/room/room.ts +++ b/src/room/room.ts @@ -196,7 +196,7 @@ export class RoomManager { const sourcePaths: RoomPosition[][] = [] - for (let i = packedRemoteSourceHarvestPositions.length - 1; i >= 0; i -= 1) { + for (let i = 0; i < packedRemoteSourceHarvestPositions.length; i += 1) { const positions = packedRemoteSourceHarvestPositions[i] const origin = unpackPosAt(positions, 0) @@ -263,7 +263,7 @@ export class RoomManager { const sourcePaths: RoomPosition[][] = [] - for (let i = packedRemoteSourceHarvestPositions.length - 1; i >= 0; i -= 1) { + for (let i = 0; i < packedRemoteSourceHarvestPositions.length; i += 1) { const positions = packedRemoteSourceHarvestPositions[i] const origin = unpackPosAt(positions, 0) diff --git a/src/types.d.ts b/src/types.d.ts index 3a69aa692..fd9956ee8 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -762,15 +762,6 @@ declare global { findCommuneSourceIndex(): boolean findRemoteSourceIndex(): boolean - /** - * Find a source harvest pos when not necessarily in a commune or remote - */ - findSourceHarvestPos(sourceIndex: number): RoomPosition | false - findCommuneSourceHarvestPos(sourceIndex: number): false | RoomPosition - findRemoteSourceHarvestPos(sourceIndex: number): false | RoomPosition - - findMineralHarvestPos(): false | RoomPosition - /** * */ From 27c24c41011d540cae4b2f1f5add59784da65bfb Mon Sep 17 00:00:00 2001 From: Carson Date: Sat, 10 Feb 2024 13:27:17 -0800 Subject: [PATCH 176/190] (breaking) version change --- src/settingsDefault.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/settingsDefault.ts b/src/settingsDefault.ts index 4898c1df2..2ca88f280 100644 --- a/src/settingsDefault.ts +++ b/src/settingsDefault.ts @@ -4,7 +4,7 @@ import { Settings } from 'types/settings' * Default global.settings. DO NOT MODIFY for personal use; instead, include your preferences in global.settings.ts */ export const defaultSettings: Settings = { - breakingVersion: 128, + breakingVersion: 129, allies: ['MarvinTMB'], nonAggressionPlayers: [], tradeBlacklist: [], From 3992365b7a67773eedcaca689be57a89d2306600 Mon Sep 17 00:00:00 2001 From: Carson Date: Sat, 10 Feb 2024 14:06:18 -0800 Subject: [PATCH 177/190] proper sourceCoords recording --- src/international/customPathFinder.ts | 2 + src/international/init.ts | 3 +- src/international/migration.ts | 6 +- src/other/profilerRegister.ts | 2 - src/room/construction/communePlanner.ts | 41 ++++--- .../roleManagers/international/scout.ts | 1 - src/room/roomFunctions.ts | 1 - src/room/roomNameOps.ts | 81 ------------- src/room/roomNameUtils.ts | 3 +- src/room/roomOps.ts | 113 ++++++++++++++++-- 10 files changed, 134 insertions(+), 119 deletions(-) delete mode 100644 src/room/roomNameOps.ts diff --git a/src/international/customPathFinder.ts b/src/international/customPathFinder.ts index 480c3e2fe..3ba41a142 100644 --- a/src/international/customPathFinder.ts +++ b/src/international/customPathFinder.ts @@ -596,6 +596,8 @@ export class CustomPathFinder { } static weightStructures(costs: CostMatrix, args: CustomPathFinderArgs, room: Room) { + if (!args.weightStructures) return + for (const key in args.weightStructures) { // Get the numeric value of the weight diff --git a/src/international/init.ts b/src/international/init.ts index e6674e5f0..1b4f26775 100644 --- a/src/international/init.ts +++ b/src/international/init.ts @@ -4,6 +4,7 @@ import { StatsManager } from './stats' import { PlayerMemoryKeys, SegmentIDs } from '../constants/general' import { PlayerRelationships } from '../constants/general' import { RoomNameUtils } from 'room/roomNameUtils' +import { RoomOps } from 'room/roomOps' /** * Configures variables to align with the bot's expectations, to ensure proper function @@ -65,7 +66,7 @@ export class InitManager { playerMemory[PlayerMemoryKeys.relationship] = PlayerRelationships.ally } - } +} private static initSegments() { RawMemory.segments[SegmentIDs.basePlans] = JSON.stringify({} as BasePlansSegment) diff --git a/src/international/migration.ts b/src/international/migration.ts index f550ab44c..92a73955b 100644 --- a/src/international/migration.ts +++ b/src/international/migration.ts @@ -1,6 +1,6 @@ import { RoomNameUtils } from 'room/roomNameUtils' import { RoomMemoryKeys, RoomTypes, SegmentIDs, majorVersion } from '../constants/general' -import { RoomNameOps } from 'room/roomNameOps' +import { RoomOps } from 'room/roomOps' /** * Migrate version by performing actions, if required @@ -76,11 +76,11 @@ export class MigrationManager { } if (Memory.breakingVersion === 126) { for (const roomName in Memory.rooms) { - RoomNameOps.findAndRecordStatus(roomName) + RoomOps.findAndRecordStatus(roomName) } Memory.breakingVersion += 1 } - + } private static hardMigration() { diff --git a/src/other/profilerRegister.ts b/src/other/profilerRegister.ts index 19e338473..774c6aa8c 100644 --- a/src/other/profilerRegister.ts +++ b/src/other/profilerRegister.ts @@ -101,7 +101,6 @@ import { NukerProcs } from 'room/commune/nukerProcs' import { ObserverProcs } from 'room/commune/observerProcs' import { PowerSpawnProcs } from 'room/commune/powerSpawnProcs' import { RoomOps } from 'room/roomOps' -import { RoomNameOps } from 'room/roomNameOps' import { SegmentsManager } from 'international/segments' import { wasm } from './wasmInit' import { initSync } from '../wasm/pkg/commiebot_wasm.js' @@ -172,7 +171,6 @@ export function profilerRegister() { profiler.registerClass(RoomVisualsManager, 'RoomVisualsManager') profiler.registerClass(Operator, 'Operator') profiler.registerClass(RoomNameUtils, 'RoomNameUtils') - profiler.registerClass(RoomNameOps, 'RoomNameOps') profiler.registerClass(RoomUtils, 'RoomUtils') profiler.registerClass(RoomOps, 'RoomProcs') profiler.registerClass(CommuneUtils, 'CommuneUtils') diff --git a/src/room/construction/communePlanner.ts b/src/room/construction/communePlanner.ts index a8968e7a0..558a82a0b 100644 --- a/src/room/construction/communePlanner.ts +++ b/src/room/construction/communePlanner.ts @@ -239,7 +239,9 @@ export class CommunePlanner { return tryChoosePlanResult } - this.tryConfigurePlanner() + if (this.tryConfigurePlanner() === Result.fail) { + return Result.fail + } this.tryConfigurePlan() this.avoidSources() @@ -421,12 +423,14 @@ export class CommunePlanner { } } private tryConfigurePlanner() { - if (this.terrainCoords) return + if (this.fastFillerStartCoords) return Result.success this.planAttempts = [] - this.findFastFillerStartCoords() - this.terrainCoords = RoomOps.createTerrainBinary(this.room.name) + + this.findFastFillerStartCoords() + if (!this.fastFillerStartCoords.length) return Result.fail + return Result.success } private findFastFillerStartCoords() { if (this.fastFillerStartCoords) return @@ -444,33 +448,38 @@ export class CommunePlanner { // Find the closest source pos and its path to the controller - let shortestPath: RoomPosition[] + let shortestPath: RoomPosition[] | undefined for (const source of sources) { const path = CustomPathFinder.findPath({ origin: source.pos, goals: [{ pos: this.room.controller.pos, range: 1 }], plainCost: defaultRoadPlanningPlainCost, + maxRooms: 1, }) + if (shortestPath && path.length >= shortestPath.length) continue shortestPath = path } - let origin = shortestPath[Math.floor(shortestPath.length / 2)] - if (origin) startCoords.push(origin) + if (shortestPath !== undefined) { + let origin = shortestPath[Math.floor(shortestPath.length / 2)] + if (origin) startCoords.push(origin) - // Avg path between sources, if more than 1 + // Avg path between sources, if more than 1 - if (sources.length > 1) { - const path = CustomPathFinder.findPath({ - origin: sources[0].pos, - goals: [{ pos: sources[1].pos, range: 1 }], - plainCost: defaultRoadPlanningPlainCost, - }) + if (sources.length > 1) { + const path = CustomPathFinder.findPath({ + origin: sources[0].pos, + goals: [{ pos: sources[1].pos, range: 1 }], + plainCost: defaultRoadPlanningPlainCost, + maxRooms: 1, + }) - origin = path[Math.floor(path.length / 2)] - if (origin) startCoords.push(origin) + origin = path[Math.floor(path.length / 2)] + if (origin) startCoords.push(origin) + } } this.fastFillerStartCoords = startCoords diff --git a/src/room/creeps/roleManagers/international/scout.ts b/src/room/creeps/roleManagers/international/scout.ts index 952f3e14d..860b94625 100644 --- a/src/room/creeps/roleManagers/international/scout.ts +++ b/src/room/creeps/roleManagers/international/scout.ts @@ -9,7 +9,6 @@ import { import { getRangeXY, getRange, randomOf } from 'utils/utils' import { partial } from 'lodash' import { RoomNameUtils } from 'room/roomNameUtils' -import { RoomNameOps } from 'room/roomNameOps' import { RoomOps } from 'room/roomOps' export class Scout extends Creep { diff --git a/src/room/roomFunctions.ts b/src/room/roomFunctions.ts index dae5badaa..d6950d42a 100644 --- a/src/room/roomFunctions.ts +++ b/src/room/roomFunctions.ts @@ -36,7 +36,6 @@ import { PlayerManager } from 'international/players' import { RoomNameUtils } from './roomNameUtils' import { LogOps } from 'utils/logOps' import { RoomObjectUtils } from './roomObjectUtils' -import { RoomNameOps } from './roomNameOps' import { RoomOps } from './roomOps' /** diff --git a/src/room/roomNameOps.ts b/src/room/roomNameOps.ts deleted file mode 100644 index 0d7c7c32a..000000000 --- a/src/room/roomNameOps.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { packCoord, packCoordList } from 'other/codec' -import { Result, RoomMemoryKeys, RoomStatusKeys, RoomTypes, constantRoomTypes } from '../constants/general' -import { isAlly } from 'utils/utils' - -export class RoomNameOps { - static findAndRecordStatus(roomName: string, roomMemory = Memory.rooms[roomName]) { - const status = Game.map.getRoomStatus(roomName).status - roomMemory[RoomMemoryKeys.status] = RoomStatusKeys[status] - - return status - } - - static findAndRecordConstantType(roomName: string) { - // Find the numbers in the room's name - const [EWstring, NSstring] = roomName.match(/\d+/g) - - // Convert he numbers from strings into actual numbers - - const EW = parseInt(EWstring) - const NS = parseInt(NSstring) - - const roomMemory = Memory.rooms[roomName] - - // Use the numbers to deduce some room types - cheaply! - - if (EW % 10 === 0 && NS % 10 === 0) { - return (roomMemory[RoomMemoryKeys.type] = RoomTypes.intersection) - } - - if (EW % 10 === 0 || NS % 10 === 0) { - return (roomMemory[RoomMemoryKeys.type] = RoomTypes.highway) - } - if (EW % 5 === 0 && NS % 5 === 0) { - return (roomMemory[RoomMemoryKeys.type] = RoomTypes.center) - } - if (Math.abs(5 - (EW % 10)) <= 1 && Math.abs(5 - (NS % 10)) <= 1) { - return (roomMemory[RoomMemoryKeys.type] = RoomTypes.sourceKeeper) - } - - return Result.fail - } - - static basicScout(roomName: string) { - const roomMemory = Memory.rooms[roomName] - - if (roomMemory[RoomMemoryKeys.status] === undefined) { - RoomNameOps.findAndRecordStatus(roomName, roomMemory) - } - - // Record that the room was scouted this tick - roomMemory[RoomMemoryKeys.lastScout] = Game.time - - const room = Game.rooms[roomName] - if (!room) return roomMemory[RoomMemoryKeys.type] - if (!room.controller) return roomMemory[RoomMemoryKeys.type] - - // If the contoller is owned - if (room.controller.owner) { - // Stop if the controller is owned by me - - if (room.controller.my) return roomMemory[RoomMemoryKeys.type] - - const owner = room.controller.owner.username - roomMemory[RoomMemoryKeys.owner] = owner - - // If the controller is owned by an ally - - if (isAlly(owner)) { - roomMemory[RoomMemoryKeys.type] = RoomTypes.ally - } - - return room.scoutEnemyRoom() - } - - // There is no controller owner - - if (room.scoutRemote()) return roomMemory[RoomMemoryKeys.type] - - return (roomMemory[RoomMemoryKeys.type] = RoomTypes.neutral) - } -} diff --git a/src/room/roomNameUtils.ts b/src/room/roomNameUtils.ts index 7a77b3bb4..bdb94ab07 100644 --- a/src/room/roomNameUtils.ts +++ b/src/room/roomNameUtils.ts @@ -27,7 +27,6 @@ import { unpackPosAt } from 'other/codec' import { CommuneManager } from './commune/commune' import { LogOps } from 'utils/logOps' import { RoomOps } from './roomOps' -import { RoomNameOps } from './roomNameOps' import { RoomUtils } from './roomUtils' /** @@ -343,7 +342,7 @@ export class RoomNameUtils { const roomMemory = Memory.rooms[roomName] if (roomMemory === undefined) { const roomMemory = (Memory.rooms[roomName] = {} as RoomMemory) - RoomNameOps.basicScout(roomName) + RoomOps.basicScout(roomName) return roomMemory[RoomMemoryKeys.status] } diff --git a/src/room/roomOps.ts b/src/room/roomOps.ts index 1e362ccf2..72855120b 100644 --- a/src/room/roomOps.ts +++ b/src/room/roomOps.ts @@ -10,10 +10,11 @@ import { Result, constantRoomTypes, packedCoordLength, + RoomStatusKeys, } from '../constants/general' import { StatsManager } from 'international/stats' import { Dashboard, Rectangle, Table } from 'screeps-viz' -import { packXYAsNum, randomTick } from 'utils/utils' +import { isAlly, packXYAsNum, randomTick } from 'utils/utils' import { RoomNameUtils } from './roomNameUtils' import { CommuneManager } from './commune/commune' import { CommuneOps } from './commune/communeOps' @@ -24,7 +25,6 @@ import { HaulerServices } from './creeps/roles/haulerServices' import { HaulerOps } from './creeps/roles/haulerOps' import { roomData } from './roomData' import { RoomManager } from './room' -import { RoomNameOps } from './roomNameOps' export class RoomOps { /** @@ -95,7 +95,7 @@ export class RoomOps { // If it hasn't been scouted for 100~ ticks if (Game.time - roomMemory[RoomMemoryKeys.lastScout] > Math.floor(Math.random() * 200)) { - RoomNameOps.basicScout(room.name) + this.basicScout(room.name) RoomNameUtils.cleanMemory(room.name) } @@ -308,7 +308,7 @@ export class RoomOps { const roomMemory = Memory.rooms[room.name] if (roomMemory[RoomMemoryKeys.status] === undefined) { - RoomNameOps.findAndRecordStatus(room.name, roomMemory) + this.findAndRecordStatus(room.name, roomMemory) } // Record that the room was scouted this tick @@ -321,11 +321,7 @@ export class RoomOps { } if (!roomMemory[RoomMemoryKeys.sourceCoords]) { - const sources = this.getSources(room) - if (sources.length) { - const packedSourceCoords = packCoordList(sources.map(source => source.pos)) - roomMemory[RoomMemoryKeys.sourceCoords] = packedSourceCoords - } + this.getSources(room) } // If the room already has a type and its type is constant, no need to go further @@ -333,7 +329,7 @@ export class RoomOps { return roomMemory[RoomMemoryKeys.type] } - const roomNameScoutType = RoomNameOps.findAndRecordConstantType(room.name) + const roomNameScoutType = this.findAndRecordConstantType(room.name) if (roomNameScoutType !== Result.fail) { if (roomNameScoutType === RoomTypes.sourceKeeper) { // Record the positions of keeper lairs @@ -383,9 +379,13 @@ export class RoomOps { static getSources(room: Room) { if (room.sources !== undefined) return room.sources - const packedSourceCoords = Memory.rooms[room.name][RoomMemoryKeys.sourceCoords] + const roomMemory = Memory.rooms[room.name] + const packedSourceCoords = roomMemory[RoomMemoryKeys.sourceCoords] if (!packedSourceCoords) { - const sources = new Array() + const sources = room.find(FIND_SOURCES) + + const sourceCoords = sources.map(source => source.pos) + roomMemory[RoomMemoryKeys.sourceCoords] = packCoordList(sourceCoords) room.sources = sources return sources @@ -403,4 +403,93 @@ export class RoomOps { room.sources = sources return sources } + + static basicScout(roomName: string) { + const roomMemory = Memory.rooms[roomName] + + if (roomMemory[RoomMemoryKeys.status] === undefined) { + this.findAndRecordStatus(roomName, roomMemory) + } + + // Record that the room was scouted this tick + roomMemory[RoomMemoryKeys.lastScout] = Game.time + + const room = Game.rooms[roomName] + if (!room) return roomMemory[RoomMemoryKeys.type] + + // We have vision of the room + + if (roomMemory[RoomMemoryKeys.controllerCoord] === undefined) { + if (room.controller) { + roomMemory[RoomMemoryKeys.controllerCoord] = packCoord(room.controller.pos) + } + } + + if (roomMemory[RoomMemoryKeys.sourceCoords] === undefined) { + RoomOps.getSources(room) + } + + if (!room.controller) return roomMemory[RoomMemoryKeys.type] + + // If the contoller is owned + if (room.controller.owner) { + // Stop if the controller is owned by me + + if (room.controller.my) return roomMemory[RoomMemoryKeys.type] + + const owner = room.controller.owner.username + roomMemory[RoomMemoryKeys.owner] = owner + + // If the controller is owned by an ally + + if (isAlly(owner)) { + roomMemory[RoomMemoryKeys.type] = RoomTypes.ally + } + + return room.scoutEnemyRoom() + } + + // There is no controller owner + + if (room.scoutRemote()) return roomMemory[RoomMemoryKeys.type] + + return (roomMemory[RoomMemoryKeys.type] = RoomTypes.neutral) + } + + static findAndRecordConstantType(roomName: string) { + // Find the numbers in the room's name + const [EWstring, NSstring] = roomName.match(/\d+/g) + + // Convert he numbers from strings into actual numbers + + const EW = parseInt(EWstring) + const NS = parseInt(NSstring) + + const roomMemory = Memory.rooms[roomName] + + // Use the numbers to deduce some room types - cheaply! + + if (EW % 10 === 0 && NS % 10 === 0) { + return (roomMemory[RoomMemoryKeys.type] = RoomTypes.intersection) + } + + if (EW % 10 === 0 || NS % 10 === 0) { + return (roomMemory[RoomMemoryKeys.type] = RoomTypes.highway) + } + if (EW % 5 === 0 && NS % 5 === 0) { + return (roomMemory[RoomMemoryKeys.type] = RoomTypes.center) + } + if (Math.abs(5 - (EW % 10)) <= 1 && Math.abs(5 - (NS % 10)) <= 1) { + return (roomMemory[RoomMemoryKeys.type] = RoomTypes.sourceKeeper) + } + + return Result.fail + } + + static findAndRecordStatus(roomName: string, roomMemory = Memory.rooms[roomName]) { + const status = Game.map.getRoomStatus(roomName).status + roomMemory[RoomMemoryKeys.status] = RoomStatusKeys[status] + + return status + } } From 0d186b88cdf45c3e7a5c1e1cf31c74cce799874b Mon Sep 17 00:00:00 2001 From: Carson Date: Sat, 10 Feb 2024 14:23:44 -0800 Subject: [PATCH 178/190] organize stats types and constants --- src/constants/general.ts | 32 ----- src/constants/stats.ts | 66 +++++++++ src/international/stats.ts | 79 +---------- src/international/transactions.ts | 3 +- src/room/commune/commune.ts | 2 +- src/room/commune/haulerNeedOps.ts | 4 +- src/room/commune/powerSpawnProcs.ts | 3 +- .../commune/spawning/spawningStructureOps.ts | 2 +- src/room/commune/terminal/tradingUtils.ts | 3 +- src/room/commune/towerProcs.ts | 3 +- src/room/creeps/creepOps.ts | 2 +- .../creeps/creepPrototypes/creepFunctions.ts | 2 +- src/room/creeps/creepUtils.ts | 12 +- .../creeps/roleManagers/commune/hauler.ts | 2 +- .../roleManagers/commune/mineralHarvester.ts | 2 +- .../roleManagers/commune/sourceHarvester.ts | 2 +- src/room/creeps/roles/haulerOps.ts | 2 +- src/room/roomServices.ts | 2 +- src/types.d.ts | 2 +- src/types/stats.ts | 128 +++++++++++------- 20 files changed, 179 insertions(+), 174 deletions(-) create mode 100644 src/constants/stats.ts diff --git a/src/constants/general.ts b/src/constants/general.ts index 7e68f3e63..3a9dee213 100644 --- a/src/constants/general.ts +++ b/src/constants/general.ts @@ -1295,38 +1295,6 @@ export const partsByPriorityPartType: { [key in PartsByPriority]: BodyPartConsta export const rangedMassAttackMultiplierByRange = [1, 1, 0.4, 0.1] -export enum RoomStatsKeys { - ControllerLevel = 'cl', - EnergyInputHarvest = 'eih', - EnergyInputBought = 'eib', - EnergyOutputUpgrade = 'eou', - EnergyOutputRepairOther = 'eoro', - EnergyOutputRepairWallOrRampart = 'eorwr', - EnergyOutputBuild = 'eob', - EnergyOutputSold = 'eos', - EnergyOutputSpawn = 'eosp', - EnergyOutputPower = 'eop', - MineralsHarvested = 'mh', - EnergyStored = 'es', - BatteriesStoredTimes10 = 'bes', - CreepCount = 'cc', - TotalCreepCount = 'tcc', - PowerCreepCount = 'pcc', - SpawnUsagePercentage = 'su', - MinHaulerCost = 'mhc', - EnergyOutputTransactionCosts = 'eotc', - EnergyTerminalSentDomestic = 'etsd', - EnergyTerminalSentOther = 'etso', - CpuUsed = 'cpu', - - GameTime = 'gt', - RemoteCount = 'rc', - RemoteEnergyStored = 'res', - RemoteEnergyInputHarvest = 'reih', - RemoteEnergyOutputRepairOther = 'reoro', - RemoteEnergyOutputBuild = 'reob', -} - export const packedPosLength = 3 export const packedCoordLength = 2 export const cardinalOffsets = [ diff --git a/src/constants/stats.ts b/src/constants/stats.ts new file mode 100644 index 000000000..4eb4bf868 --- /dev/null +++ b/src/constants/stats.ts @@ -0,0 +1,66 @@ +import { RoomStats } from 'types/stats' +import { CommuneStats } from 'types/stats' + +export enum RoomStatsKeys { + ControllerLevel = 'cl', + EnergyInputHarvest = 'eih', + EnergyInputBought = 'eib', + EnergyOutputUpgrade = 'eou', + EnergyOutputRepairOther = 'eoro', + EnergyOutputRepairWallOrRampart = 'eorwr', + EnergyOutputBuild = 'eob', + EnergyOutputSold = 'eos', + EnergyOutputSpawn = 'eosp', + EnergyOutputPower = 'eop', + MineralsHarvested = 'mh', + EnergyStored = 'es', + BatteriesStoredTimes10 = 'bes', + CreepCount = 'cc', + TotalCreepCount = 'tcc', + PowerCreepCount = 'pcc', + SpawnUsagePercentage = 'su', + MinHaulerCost = 'mhc', + EnergyOutputTransactionCosts = 'eotc', + EnergyTerminalSentDomestic = 'etsd', + EnergyTerminalSentOther = 'etso', + CpuUsed = 'cpu', + + GameTime = 'gt', + RemoteCount = 'rc', + RemoteEnergyStored = 'res', + RemoteEnergyInputHarvest = 'reih', + RemoteEnergyOutputRepairOther = 'reoro', + RemoteEnergyOutputBuild = 'reob', +} + +export const remoteStatNames: Set> = new Set([ + RoomStatsKeys.EnergyStored, + RoomStatsKeys.EnergyInputHarvest, + RoomStatsKeys.EnergyOutputRepairOther, + RoomStatsKeys.EnergyOutputBuild, +]) + +/** + * Names of stats to average for + */ +export const averageStatNames: Set = new Set([ + RoomStatsKeys.SpawnUsagePercentage, + RoomStatsKeys.EnergyInputHarvest, + RoomStatsKeys.MineralsHarvested, + RoomStatsKeys.EnergyInputBought, + RoomStatsKeys.EnergyOutputSold, + RoomStatsKeys.EnergyOutputUpgrade, + RoomStatsKeys.EnergyOutputBuild, + RoomStatsKeys.EnergyOutputRepairOther, + RoomStatsKeys.EnergyOutputRepairWallOrRampart, + RoomStatsKeys.EnergyOutputSpawn, + RoomStatsKeys.EnergyOutputPower, + RoomStatsKeys.RemoteEnergyStored, + RoomStatsKeys.RemoteEnergyInputHarvest, + RoomStatsKeys.RemoteEnergyOutputRepairOther, + RoomStatsKeys.RemoteEnergyOutputBuild, + RoomStatsKeys.EnergyOutputTransactionCosts, + RoomStatsKeys.EnergyTerminalSentDomestic, + RoomStatsKeys.EnergyTerminalSentOther, + RoomStatsKeys.CpuUsed, +]) diff --git a/src/international/stats.ts b/src/international/stats.ts index ef75d12aa..511aec689 100644 --- a/src/international/stats.ts +++ b/src/international/stats.ts @@ -1,79 +1,12 @@ import { roundTo } from 'utils/utils' -import { - CPUMaxPerTick, - customColors, - RoomMemoryKeys, - RoomStatsKeys, - RoomTypes, -} from '../constants/general' +import { CPUMaxPerTick, customColors, RoomMemoryKeys, RoomTypes } from '../constants/general' +import { RoomStatsKeys } from 'constants/stats' import { LogOps, LogTypes } from 'utils/logOps' import { CollectiveManager } from './collective' - -export interface RoomStats { - [RoomStatsKeys.GameTime]: number - [RoomStatsKeys.RemoteCount]: number - [RoomStatsKeys.RemoteEnergyStored]: number - [RoomStatsKeys.RemoteEnergyInputHarvest]: number - [RoomStatsKeys.RemoteEnergyOutputRepairOther]: number - [RoomStatsKeys.RemoteEnergyOutputBuild]: number -} - -export interface CommuneStats extends RoomStats { - [RoomStatsKeys.ControllerLevel]: number - [RoomStatsKeys.EnergyInputHarvest]: number - [RoomStatsKeys.EnergyInputBought]: number - [RoomStatsKeys.EnergyOutputUpgrade]: number - [RoomStatsKeys.EnergyOutputRepairOther]: number - [RoomStatsKeys.EnergyOutputRepairWallOrRampart]: number - [RoomStatsKeys.EnergyOutputSold]: number - [RoomStatsKeys.EnergyOutputBuild]: number - [RoomStatsKeys.EnergyOutputSpawn]: number - [RoomStatsKeys.EnergyOutputPower]: number - [RoomStatsKeys.MineralsHarvested]: number - [RoomStatsKeys.EnergyStored]: number - [RoomStatsKeys.CreepCount]: number - [RoomStatsKeys.TotalCreepCount]: number - [RoomStatsKeys.PowerCreepCount]: number - [RoomStatsKeys.SpawnUsagePercentage]: number - [RoomStatsKeys.MinHaulerCost]: number - [RoomStatsKeys.EnergyOutputTransactionCosts]: number - [RoomStatsKeys.EnergyTerminalSentDomestic]: number - [RoomStatsKeys.EnergyTerminalSentOther]: number - [RoomStatsKeys.BatteriesStoredTimes10]: number - [RoomStatsKeys.CpuUsed]: number -} - -const remoteStatNames: Set> = new Set([ - RoomStatsKeys.EnergyStored, - RoomStatsKeys.EnergyInputHarvest, - RoomStatsKeys.EnergyOutputRepairOther, - RoomStatsKeys.EnergyOutputBuild, -]) - -/** - * Names of stats to average for - */ -const averageStatNames: Set = new Set([ - RoomStatsKeys.SpawnUsagePercentage, - RoomStatsKeys.EnergyInputHarvest, - RoomStatsKeys.MineralsHarvested, - RoomStatsKeys.EnergyInputBought, - RoomStatsKeys.EnergyOutputSold, - RoomStatsKeys.EnergyOutputUpgrade, - RoomStatsKeys.EnergyOutputBuild, - RoomStatsKeys.EnergyOutputRepairOther, - RoomStatsKeys.EnergyOutputRepairWallOrRampart, - RoomStatsKeys.EnergyOutputSpawn, - RoomStatsKeys.EnergyOutputPower, - RoomStatsKeys.RemoteEnergyStored, - RoomStatsKeys.RemoteEnergyInputHarvest, - RoomStatsKeys.RemoteEnergyOutputRepairOther, - RoomStatsKeys.RemoteEnergyOutputBuild, - RoomStatsKeys.EnergyOutputTransactionCosts, - RoomStatsKeys.EnergyTerminalSentDomestic, - RoomStatsKeys.EnergyTerminalSentOther, - RoomStatsKeys.CpuUsed, -]) +import { remoteStatNames } from 'constants/stats' +import { averageStatNames } from 'constants/stats' +import { RoomStats } from 'types/stats' +import { CommuneStats } from 'types/stats' export class StatsManager { static stats: { diff --git a/src/international/transactions.ts b/src/international/transactions.ts index 54621bf6f..323dff266 100644 --- a/src/international/transactions.ts +++ b/src/international/transactions.ts @@ -1,5 +1,6 @@ import { Sleepable } from 'utils/sleepable' -import { IDUpdateInterval, RoomStatsKeys } from '../constants/general' +import { IDUpdateInterval } from '../constants/general' +import { RoomStatsKeys } from 'constants/stats' import { randomIntRange, Utils } from 'utils/utils' import { CollectiveManager } from './collective' import { SegmentsManager } from './segments' diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index c9b2f66c3..59dabaf5a 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -12,8 +12,8 @@ import { rampartUpkeepCost, RemoteResourcePathTypes, ReservedCoordTypes, - RoomStatsKeys, } from '../../constants/general' +import { RoomStatsKeys } from 'constants/stats' import './factory' import { LabManager } from './labs' import './links' diff --git a/src/room/commune/haulerNeedOps.ts b/src/room/commune/haulerNeedOps.ts index 4bf17f77e..d9b1fff7a 100644 --- a/src/room/commune/haulerNeedOps.ts +++ b/src/room/commune/haulerNeedOps.ts @@ -1,4 +1,5 @@ -import { RoomMemoryKeys, RoomStatsKeys, packedCoordLength, packedPosLength, stamps } from '../../constants/general' +import { RoomMemoryKeys, packedCoordLength, packedPosLength, stamps } from '../../constants/general' +import { RoomStatsKeys } from 'constants/stats' import { StructureUtils } from 'room/structureUtils' import { findCarryPartsRequired } from 'utils/utils' import { CommuneUtils } from './communeUtils' @@ -57,7 +58,6 @@ export class HaulerNeedOps { const sourceCount = roomMemory[RoomMemoryKeys.sourceCoords].length / packedCoordLength for (let index = 0; index < sourceCount; index++) { - room.communeManager.communeHaulerNeed += findCarryPartsRequired( packedSourcePaths[index].length / packedPosLength + 3, estimatedSourceIncome[index] * 1.1, diff --git a/src/room/commune/powerSpawnProcs.ts b/src/room/commune/powerSpawnProcs.ts index 56e14d869..39b75547a 100644 --- a/src/room/commune/powerSpawnProcs.ts +++ b/src/room/commune/powerSpawnProcs.ts @@ -1,5 +1,6 @@ import { CollectiveManager } from 'international/collective' -import { RoomLogisticsRequestTypes, RoomStatsKeys } from '../../constants/general' +import { RoomLogisticsRequestTypes } from '../../constants/general' +import { RoomStatsKeys } from 'constants/stats' import { StatsManager } from 'international/stats' import { scalePriority } from 'utils/utils' import { CommuneUtils } from './communeUtils' diff --git a/src/room/commune/spawning/spawningStructureOps.ts b/src/room/commune/spawning/spawningStructureOps.ts index 4b2e19326..9057976eb 100644 --- a/src/room/commune/spawning/spawningStructureOps.ts +++ b/src/room/commune/spawning/spawningStructureOps.ts @@ -9,9 +9,9 @@ import { creepRoles, customColors, MovedTypes, - RoomStatsKeys, FlagNames, } from '../../../constants/general' +import { RoomStatsKeys } from 'constants/stats' import { StatsManager } from 'international/stats' import { unpackPosAt, packCoord, unpackCoord } from 'other/codec' import { CreepOps } from 'room/creeps/creepOps' diff --git a/src/room/commune/terminal/tradingUtils.ts b/src/room/commune/terminal/tradingUtils.ts index 9e63195bc..be4297252 100644 --- a/src/room/commune/terminal/tradingUtils.ts +++ b/src/room/commune/terminal/tradingUtils.ts @@ -3,7 +3,8 @@ import { findLowestScore, roundTo } from 'utils/utils' import { CollectiveManager } from 'international/collective' import { StatsManager } from 'international/stats' import { MarketManager } from 'international/market/marketOrders' -import { Result, RoomStatsKeys } from '../../../constants/general' +import { Result } from '../../../constants/general' +import { RoomStatsKeys } from 'constants/stats' export class TradingUtils { static advancedSell(room: Room, resourceType: ResourceConstant, amount: number) { diff --git a/src/room/commune/towerProcs.ts b/src/room/commune/towerProcs.ts index d8718d0f0..34ae0df06 100644 --- a/src/room/commune/towerProcs.ts +++ b/src/room/commune/towerProcs.ts @@ -1,4 +1,5 @@ -import { PlayerMemoryKeys, RoomLogisticsRequestTypes, RoomStatsKeys } from '../../constants/general' +import { PlayerMemoryKeys, RoomLogisticsRequestTypes } from '../../constants/general' +import { RoomStatsKeys } from 'constants/stats' import { PlayerManager } from 'international/players' import { StatsManager } from 'international/stats' import { packCoord } from 'other/codec' diff --git a/src/room/creeps/creepOps.ts b/src/room/creeps/creepOps.ts index 6fe08e636..962973bb3 100644 --- a/src/room/creeps/creepOps.ts +++ b/src/room/creeps/creepOps.ts @@ -15,10 +15,10 @@ import { Result, RoomLogisticsRequestTypes, offsetsByDirection, - RoomStatsKeys, ReservedCoordTypes, WorkTypes, } from '../../constants/general' +import { RoomStatsKeys } from 'constants/stats' import { CreepUtils } from './creepUtils' import { CommuneUtils } from 'room/commune/communeUtils' import { diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index 2bd676ed9..bdca3f829 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -8,9 +8,9 @@ import { ReservedCoordTypes, WorkTypes, RoomLogisticsRequestTypes, - RoomStatsKeys, packedCoordLength, } from '../../../constants/general' +import { RoomStatsKeys } from 'constants/stats' import { findClosestObject, findObjectWithID, diff --git a/src/room/creeps/creepUtils.ts b/src/room/creeps/creepUtils.ts index fba78e1b1..9d4c795e8 100644 --- a/src/room/creeps/creepUtils.ts +++ b/src/room/creeps/creepUtils.ts @@ -1,11 +1,10 @@ import { - CreepLogisticsRequestKeys, - CreepMemoryKeys, - ReservedCoordTypes, - Result, - RoomLogisticsRequestTypes, + CreepLogisticsRequestKeys, + CreepMemoryKeys, + ReservedCoordTypes, + Result, + RoomLogisticsRequestTypes, RoomMemoryKeys, - RoomStatsKeys, WorkTypes, creepRoles, packedCoordLength, @@ -13,6 +12,7 @@ import { roomLogisticsRoles, storingStructureTypesSet, } from '../../constants/general' +import { RoomStatsKeys } from 'constants/stats' import { CreepRoleManager } from './creepRoleManager' import { packCoord, unpackCoord, unpackCoordAsPos, unpackPosAt } from 'other/codec' import { RoomManager } from 'room/room' diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index 7967da7b8..62e0e0d97 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -11,8 +11,8 @@ import { customColors, packedPosLength, relayOffsets, - RoomStatsKeys, } from '../../../../constants/general' +import { RoomStatsKeys } from 'constants/stats' import { StatsManager } from 'international/stats' import { packCoord, reversePosList, unpackCoord, unpackPosAt } from 'other/codec' import { CreepOps } from 'room/creeps/creepOps' diff --git a/src/room/creeps/roleManagers/commune/mineralHarvester.ts b/src/room/creeps/roleManagers/commune/mineralHarvester.ts index 3313ab3bb..5ed684610 100644 --- a/src/room/creeps/roleManagers/commune/mineralHarvester.ts +++ b/src/room/creeps/roleManagers/commune/mineralHarvester.ts @@ -3,8 +3,8 @@ import { ReservedCoordTypes, Result, RoomMemoryKeys, - RoomStatsKeys, } from '../../../../constants/general' +import { RoomStatsKeys } from 'constants/stats' import { StatsManager } from 'international/stats' import { getRangeXY, getRange, areCoordsEqual } from 'utils/utils' import { reversePosList, unpackPos } from 'other/codec' diff --git a/src/room/creeps/roleManagers/commune/sourceHarvester.ts b/src/room/creeps/roleManagers/commune/sourceHarvester.ts index a6eecd8ff..4f8e4ccfc 100644 --- a/src/room/creeps/roleManagers/commune/sourceHarvester.ts +++ b/src/room/creeps/roleManagers/commune/sourceHarvester.ts @@ -5,9 +5,9 @@ import { Result, RoomLogisticsRequestTypes, RoomMemoryKeys, - RoomStatsKeys, WorkTypes, } from '../../../../constants/general' +import { RoomStatsKeys } from 'constants/stats' import { StatsManager } from 'international/stats' import { findCoordsInsideRect, diff --git a/src/room/creeps/roles/haulerOps.ts b/src/room/creeps/roles/haulerOps.ts index 57d242523..82b1f9c23 100644 --- a/src/room/creeps/roles/haulerOps.ts +++ b/src/room/creeps/roles/haulerOps.ts @@ -2,7 +2,6 @@ import { CreepMemoryKeys, packedPosLength, RoomMemoryKeys, - RoomStatsKeys, RoomTypes, Result, SleepFor, @@ -12,6 +11,7 @@ import { FlagNames, relayOffsets, } from '../../../constants/general' +import { RoomStatsKeys } from 'constants/stats' import { StatsManager } from 'international/stats' import { unpackPosAt, reversePosList, packCoord, unpackCoord } from 'other/codec' import { CreepOps } from 'room/creeps/creepOps' diff --git a/src/room/roomServices.ts b/src/room/roomServices.ts index 307ff1f5e..92947331f 100644 --- a/src/room/roomServices.ts +++ b/src/room/roomServices.ts @@ -1,10 +1,10 @@ import { RoomMemoryKeys, - RoomStatsKeys, RoomTypes, customColors, roomTypesUsedForStats, } from '../constants/general' +import { RoomStatsKeys } from 'constants/stats' import './roomFunctions' diff --git a/src/types.d.ts b/src/types.d.ts index fd9956ee8..c5f168962 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -24,9 +24,9 @@ import { CreepPowerTaskNames, RoomLogisticsRequestTypes, MovedTypes, - RoomStatsKeys, RoomStatusKeys, } from './constants/general' +import { RoomStatsKeys } from 'constants/stats' import { Operator } from 'room/creeps/powerCreeps/operator' import { MeleeDefender } from 'room/creeps/roleManagers/commune/defenders/meleeDefender' import { Settings } from 'international/settingsDefault' diff --git a/src/types/stats.ts b/src/types/stats.ts index f4a70a752..c4b2397de 100644 --- a/src/types/stats.ts +++ b/src/types/stats.ts @@ -1,53 +1,87 @@ -import { CommuneStats } from "international/stats" +import { RoomStatsKeys } from 'constants/stats' + +export interface RoomStats { + [RoomStatsKeys.GameTime]: number + [RoomStatsKeys.RemoteCount]: number + [RoomStatsKeys.RemoteEnergyStored]: number + [RoomStatsKeys.RemoteEnergyInputHarvest]: number + [RoomStatsKeys.RemoteEnergyOutputRepairOther]: number + [RoomStatsKeys.RemoteEnergyOutputBuild]: number +} + +export interface CommuneStats extends RoomStats { + [RoomStatsKeys.ControllerLevel]: number + [RoomStatsKeys.EnergyInputHarvest]: number + [RoomStatsKeys.EnergyInputBought]: number + [RoomStatsKeys.EnergyOutputUpgrade]: number + [RoomStatsKeys.EnergyOutputRepairOther]: number + [RoomStatsKeys.EnergyOutputRepairWallOrRampart]: number + [RoomStatsKeys.EnergyOutputSold]: number + [RoomStatsKeys.EnergyOutputBuild]: number + [RoomStatsKeys.EnergyOutputSpawn]: number + [RoomStatsKeys.EnergyOutputPower]: number + [RoomStatsKeys.MineralsHarvested]: number + [RoomStatsKeys.EnergyStored]: number + [RoomStatsKeys.CreepCount]: number + [RoomStatsKeys.TotalCreepCount]: number + [RoomStatsKeys.PowerCreepCount]: number + [RoomStatsKeys.SpawnUsagePercentage]: number + [RoomStatsKeys.MinHaulerCost]: number + [RoomStatsKeys.EnergyOutputTransactionCosts]: number + [RoomStatsKeys.EnergyTerminalSentDomestic]: number + [RoomStatsKeys.EnergyTerminalSentOther]: number + [RoomStatsKeys.BatteriesStoredTimes10]: number + [RoomStatsKeys.CpuUsed]: number + } export interface StatsMemory { - lastReset: number - - lastTickTimestamp: number - lastTick: number - tickLength: number - - communeCount: number - - resources: { - pixels: number - cpuUnlocks: number - accessKeys: number - credits: number - } - - cpu: { - bucket: number - usage: number - limit: number - } - - memory: { - /** - * percentage of Memory used - */ - usage: number - limit: number - } + lastReset: number + + lastTickTimestamp: number + lastTick: number + tickLength: number + + communeCount: number + resources: { + pixels: number + cpuUnlocks: number + accessKeys: number + credits: number + } + + cpu: { + bucket: number + usage: number + limit: number + } + + memory: { /** - * Percentage of heap used + * percentage of Memory used */ - heapUsage: number - gcl: { - level: number - progress: number - progressTotal: number - } - - gpl: { - level: number - progress: number - progressTotal: number - } - rooms: { [roomName: string]: Partial } - constructionSites: number - creeps: number - powerCreeps: number - defaultMinPathCacheTime: number + usage: number + limit: number + } + + /** + * Percentage of heap used + */ + heapUsage: number + gcl: { + level: number + progress: number + progressTotal: number + } + + gpl: { + level: number + progress: number + progressTotal: number + } + rooms: { [roomName: string]: Partial } + constructionSites: number + creeps: number + powerCreeps: number + defaultMinPathCacheTime: number } From 47d648f05325d936860a994cf39a31455e0ff163 Mon Sep 17 00:00:00 2001 From: Carson Date: Sat, 10 Feb 2024 14:28:33 -0800 Subject: [PATCH 179/190] absolute imports to constants/stats --- src/international/stats.ts | 6 +++--- src/international/transactions.ts | 2 +- src/room/commune/commune.ts | 2 +- src/room/commune/haulerNeedOps.ts | 2 +- src/room/commune/powerSpawnProcs.ts | 2 +- src/room/commune/spawning/spawningStructureOps.ts | 2 +- src/room/commune/terminal/tradingUtils.ts | 2 +- src/room/commune/towerProcs.ts | 2 +- src/room/creeps/creepOps.ts | 2 +- src/room/creeps/creepPrototypes/creepFunctions.ts | 2 +- src/room/creeps/creepUtils.ts | 2 +- src/room/creeps/roleManagers/commune/hauler.ts | 2 +- src/room/creeps/roleManagers/commune/mineralHarvester.ts | 2 +- src/room/creeps/roleManagers/commune/sourceHarvester.ts | 2 +- src/room/creeps/roles/haulerOps.ts | 2 +- src/room/roomServices.ts | 2 +- src/types/stats.ts | 2 +- 17 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/international/stats.ts b/src/international/stats.ts index 511aec689..84fc4f454 100644 --- a/src/international/stats.ts +++ b/src/international/stats.ts @@ -1,10 +1,10 @@ import { roundTo } from 'utils/utils' import { CPUMaxPerTick, customColors, RoomMemoryKeys, RoomTypes } from '../constants/general' -import { RoomStatsKeys } from 'constants/stats' +import { RoomStatsKeys } from '../constants/stats' import { LogOps, LogTypes } from 'utils/logOps' import { CollectiveManager } from './collective' -import { remoteStatNames } from 'constants/stats' -import { averageStatNames } from 'constants/stats' +import { remoteStatNames } from '../constants/stats' +import { averageStatNames } from '../constants/stats' import { RoomStats } from 'types/stats' import { CommuneStats } from 'types/stats' diff --git a/src/international/transactions.ts b/src/international/transactions.ts index 323dff266..39a561d51 100644 --- a/src/international/transactions.ts +++ b/src/international/transactions.ts @@ -1,6 +1,6 @@ import { Sleepable } from 'utils/sleepable' import { IDUpdateInterval } from '../constants/general' -import { RoomStatsKeys } from 'constants/stats' +import { RoomStatsKeys } from '../constants/stats' import { randomIntRange, Utils } from 'utils/utils' import { CollectiveManager } from './collective' import { SegmentsManager } from './segments' diff --git a/src/room/commune/commune.ts b/src/room/commune/commune.ts index 59dabaf5a..b21f70ba1 100644 --- a/src/room/commune/commune.ts +++ b/src/room/commune/commune.ts @@ -13,7 +13,7 @@ import { RemoteResourcePathTypes, ReservedCoordTypes, } from '../../constants/general' -import { RoomStatsKeys } from 'constants/stats' +import { RoomStatsKeys } from '../../constants/stats' import './factory' import { LabManager } from './labs' import './links' diff --git a/src/room/commune/haulerNeedOps.ts b/src/room/commune/haulerNeedOps.ts index d9b1fff7a..51c9f24f9 100644 --- a/src/room/commune/haulerNeedOps.ts +++ b/src/room/commune/haulerNeedOps.ts @@ -1,5 +1,5 @@ import { RoomMemoryKeys, packedCoordLength, packedPosLength, stamps } from '../../constants/general' -import { RoomStatsKeys } from 'constants/stats' +import { RoomStatsKeys } from '../../constants/stats' import { StructureUtils } from 'room/structureUtils' import { findCarryPartsRequired } from 'utils/utils' import { CommuneUtils } from './communeUtils' diff --git a/src/room/commune/powerSpawnProcs.ts b/src/room/commune/powerSpawnProcs.ts index 39b75547a..8c7866004 100644 --- a/src/room/commune/powerSpawnProcs.ts +++ b/src/room/commune/powerSpawnProcs.ts @@ -1,6 +1,6 @@ import { CollectiveManager } from 'international/collective' import { RoomLogisticsRequestTypes } from '../../constants/general' -import { RoomStatsKeys } from 'constants/stats' +import { RoomStatsKeys } from '../../constants/stats' import { StatsManager } from 'international/stats' import { scalePriority } from 'utils/utils' import { CommuneUtils } from './communeUtils' diff --git a/src/room/commune/spawning/spawningStructureOps.ts b/src/room/commune/spawning/spawningStructureOps.ts index 9057976eb..e556cc2aa 100644 --- a/src/room/commune/spawning/spawningStructureOps.ts +++ b/src/room/commune/spawning/spawningStructureOps.ts @@ -11,7 +11,7 @@ import { MovedTypes, FlagNames, } from '../../../constants/general' -import { RoomStatsKeys } from 'constants/stats' +import { RoomStatsKeys } from '../../../constants/stats' import { StatsManager } from 'international/stats' import { unpackPosAt, packCoord, unpackCoord } from 'other/codec' import { CreepOps } from 'room/creeps/creepOps' diff --git a/src/room/commune/terminal/tradingUtils.ts b/src/room/commune/terminal/tradingUtils.ts index be4297252..6e99f5aee 100644 --- a/src/room/commune/terminal/tradingUtils.ts +++ b/src/room/commune/terminal/tradingUtils.ts @@ -4,7 +4,7 @@ import { CollectiveManager } from 'international/collective' import { StatsManager } from 'international/stats' import { MarketManager } from 'international/market/marketOrders' import { Result } from '../../../constants/general' -import { RoomStatsKeys } from 'constants/stats' +import { RoomStatsKeys } from '../../../constants/stats' export class TradingUtils { static advancedSell(room: Room, resourceType: ResourceConstant, amount: number) { diff --git a/src/room/commune/towerProcs.ts b/src/room/commune/towerProcs.ts index 34ae0df06..e62aa304d 100644 --- a/src/room/commune/towerProcs.ts +++ b/src/room/commune/towerProcs.ts @@ -1,5 +1,5 @@ import { PlayerMemoryKeys, RoomLogisticsRequestTypes } from '../../constants/general' -import { RoomStatsKeys } from 'constants/stats' +import { RoomStatsKeys } from '../../constants/stats' import { PlayerManager } from 'international/players' import { StatsManager } from 'international/stats' import { packCoord } from 'other/codec' diff --git a/src/room/creeps/creepOps.ts b/src/room/creeps/creepOps.ts index 962973bb3..46e4e047a 100644 --- a/src/room/creeps/creepOps.ts +++ b/src/room/creeps/creepOps.ts @@ -18,7 +18,7 @@ import { ReservedCoordTypes, WorkTypes, } from '../../constants/general' -import { RoomStatsKeys } from 'constants/stats' +import { RoomStatsKeys } from '../../constants/stats' import { CreepUtils } from './creepUtils' import { CommuneUtils } from 'room/commune/communeUtils' import { diff --git a/src/room/creeps/creepPrototypes/creepFunctions.ts b/src/room/creeps/creepPrototypes/creepFunctions.ts index bdca3f829..fa58a4064 100644 --- a/src/room/creeps/creepPrototypes/creepFunctions.ts +++ b/src/room/creeps/creepPrototypes/creepFunctions.ts @@ -10,7 +10,7 @@ import { RoomLogisticsRequestTypes, packedCoordLength, } from '../../../constants/general' -import { RoomStatsKeys } from 'constants/stats' +import { RoomStatsKeys } from '../../../constants/stats' import { findClosestObject, findObjectWithID, diff --git a/src/room/creeps/creepUtils.ts b/src/room/creeps/creepUtils.ts index 9d4c795e8..9d69467b3 100644 --- a/src/room/creeps/creepUtils.ts +++ b/src/room/creeps/creepUtils.ts @@ -12,7 +12,7 @@ import { roomLogisticsRoles, storingStructureTypesSet, } from '../../constants/general' -import { RoomStatsKeys } from 'constants/stats' +import { RoomStatsKeys } from '../../constants/stats' import { CreepRoleManager } from './creepRoleManager' import { packCoord, unpackCoord, unpackCoordAsPos, unpackPosAt } from 'other/codec' import { RoomManager } from 'room/room' diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index 62e0e0d97..e5f4db6f6 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -12,7 +12,7 @@ import { packedPosLength, relayOffsets, } from '../../../../constants/general' -import { RoomStatsKeys } from 'constants/stats' +import { RoomStatsKeys } from '../../../../constants/stats' import { StatsManager } from 'international/stats' import { packCoord, reversePosList, unpackCoord, unpackPosAt } from 'other/codec' import { CreepOps } from 'room/creeps/creepOps' diff --git a/src/room/creeps/roleManagers/commune/mineralHarvester.ts b/src/room/creeps/roleManagers/commune/mineralHarvester.ts index 5ed684610..8ac957992 100644 --- a/src/room/creeps/roleManagers/commune/mineralHarvester.ts +++ b/src/room/creeps/roleManagers/commune/mineralHarvester.ts @@ -4,7 +4,7 @@ import { Result, RoomMemoryKeys, } from '../../../../constants/general' -import { RoomStatsKeys } from 'constants/stats' +import { RoomStatsKeys } from '../../../../constants/stats' import { StatsManager } from 'international/stats' import { getRangeXY, getRange, areCoordsEqual } from 'utils/utils' import { reversePosList, unpackPos } from 'other/codec' diff --git a/src/room/creeps/roleManagers/commune/sourceHarvester.ts b/src/room/creeps/roleManagers/commune/sourceHarvester.ts index 4f8e4ccfc..cb0168812 100644 --- a/src/room/creeps/roleManagers/commune/sourceHarvester.ts +++ b/src/room/creeps/roleManagers/commune/sourceHarvester.ts @@ -7,7 +7,7 @@ import { RoomMemoryKeys, WorkTypes, } from '../../../../constants/general' -import { RoomStatsKeys } from 'constants/stats' +import { RoomStatsKeys } from '../../../../constants/stats' import { StatsManager } from 'international/stats' import { findCoordsInsideRect, diff --git a/src/room/creeps/roles/haulerOps.ts b/src/room/creeps/roles/haulerOps.ts index 82b1f9c23..d469c859d 100644 --- a/src/room/creeps/roles/haulerOps.ts +++ b/src/room/creeps/roles/haulerOps.ts @@ -11,7 +11,7 @@ import { FlagNames, relayOffsets, } from '../../../constants/general' -import { RoomStatsKeys } from 'constants/stats' +import { RoomStatsKeys } from '../../../constants/stats' import { StatsManager } from 'international/stats' import { unpackPosAt, reversePosList, packCoord, unpackCoord } from 'other/codec' import { CreepOps } from 'room/creeps/creepOps' diff --git a/src/room/roomServices.ts b/src/room/roomServices.ts index 92947331f..ed99c8ad5 100644 --- a/src/room/roomServices.ts +++ b/src/room/roomServices.ts @@ -4,7 +4,7 @@ import { customColors, roomTypesUsedForStats, } from '../constants/general' -import { RoomStatsKeys } from 'constants/stats' +import { RoomStatsKeys } from '../constants/stats' import './roomFunctions' diff --git a/src/types/stats.ts b/src/types/stats.ts index c4b2397de..1214bde04 100644 --- a/src/types/stats.ts +++ b/src/types/stats.ts @@ -1,4 +1,4 @@ -import { RoomStatsKeys } from 'constants/stats' +import { RoomStatsKeys } from '../constants/stats' export interface RoomStats { [RoomStatsKeys.GameTime]: number From 670bd0771e319b08ad2dcfb7800347580ec39e48 Mon Sep 17 00:00:00 2001 From: Pieter Brandsen Date: Sun, 11 Feb 2024 17:14:47 +0100 Subject: [PATCH 180/190] Added correct steam_api_key enviroemnt variable --- helper/server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helper/server.js b/helper/server.js index 142470760..2ae546eab 100644 --- a/helper/server.js +++ b/helper/server.js @@ -34,7 +34,7 @@ console.log('START') // ) const cmdString = `npx screeps-performance-server --maxTickCount=${argv.maxTicks || 20000} --maxBots=10 --botFilePath=${botPath} --steamKey=${ - process.env.STEAM_KEY + process.env.STEAM_API_KEY } --discordWebHookUrl=${process.env.EXPORT_DISCORD_WEBHOOK_URL} --pasteBinUrlDevKey=${process.env.EXPORT_PASTEBIN_KEY} --serverPort=${ports.serverPort} --cliPort=${ports.cliPort} --force ${ argv.debug ? '--debug' : '' } --deleteLogs --tickDuration=${argv.tickDuration || 250} --logFilter='Error:'`; From f65301f025662fcd101a93c86f9554534d9bd271 Mon Sep 17 00:00:00 2001 From: Carson Date: Tue, 13 Feb 2024 11:39:47 -0800 Subject: [PATCH 181/190] transaction visuals resource param --- src/international/flags/flags.ts | 16 ++++++++++++++-- src/room/room.ts | 20 +++++++++----------- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/international/flags/flags.ts b/src/international/flags/flags.ts index 03bb11ac2..add86c1b6 100644 --- a/src/international/flags/flags.ts +++ b/src/international/flags/flags.ts @@ -51,13 +51,15 @@ export class FlagManager { private incomingTransactions(flagName: string, flagNameParts: string[]) { const flag = Game.flags[flagName] - const roomName = flagNameParts[1] || flag.pos.roomName + const roomName = flag.pos.roomName const room = Game.rooms[roomName] if (!room) { flag.setColor(COLOR_RED) return } + const resourceType = flagNameParts[1] as ResourceConstant | undefined + flag.setColor(COLOR_GREEN) const headers = ['sender', '', 'receiver', 'resource', 'amount', 'ticks since'] @@ -68,6 +70,10 @@ export class FlagManager { const roomFromMemory = Memory.rooms[transaction.from] || ({} as RoomMemory) const roomToMemory = Memory.rooms[transaction.to] || ({} as RoomMemory) + if (resourceType !== undefined && transaction.resourceType !== resourceType) { + continue + } + data.push([ transaction.from + ' (' + @@ -118,13 +124,15 @@ export class FlagManager { private outgoingTransactions(flagName: string, flagNameParts: string[]) { const flag = Game.flags[flagName] - const roomName = flagNameParts[1] || flag.pos.roomName + const roomName = flag.pos.roomName const room = Game.rooms[roomName] if (!room) { flag.setColor(COLOR_RED) return } + const resourceType = flagNameParts[1] as ResourceConstant | undefined + flag.setColor(COLOR_GREEN) const headers = ['sender', '', 'receiver', 'resource', 'amount', 'ticks since'] @@ -135,6 +143,10 @@ export class FlagManager { const roomFromMemory = Memory.rooms[transaction.from] || ({} as RoomMemory) const roomToMemory = Memory.rooms[transaction.to] || ({} as RoomMemory) + if (resourceType !== undefined && transaction.resourceType !== resourceType) { + continue + } + data.push([ transaction.from + ' (' + diff --git a/src/room/room.ts b/src/room/room.ts index f898baf9e..bdcb7f188 100644 --- a/src/room/room.ts +++ b/src/room/room.ts @@ -197,7 +197,6 @@ export class RoomManager { const sourcePaths: RoomPosition[][] = [] for (let i = 0; i < packedRemoteSourceHarvestPositions.length; i += 1) { - const positions = packedRemoteSourceHarvestPositions[i] const origin = unpackPosAt(positions, 0) @@ -264,7 +263,6 @@ export class RoomManager { const sourcePaths: RoomPosition[][] = [] for (let i = 0; i < packedRemoteSourceHarvestPositions.length; i += 1) { - const positions = packedRemoteSourceHarvestPositions[i] const origin = unpackPosAt(positions, 0) @@ -468,20 +466,20 @@ export class RoomManager { if (this._remoteSources) return this._remoteSources const sourceIDs = this.room.memory[RoomMemoryKeys.remoteSources] - if (sourceIDs) { - this._remoteSources = [] + if (!sourceIDs) { + throw Error('No remote sources ' + this.room.name) + } - for (let i = 0; i < sourceIDs.length; i++) { - const source = findObjectWithID(sourceIDs[i]) + this._remoteSources = [] - source.remoteIndex = i - this._remoteSources.push(source) - } + for (let i = 0; i < sourceIDs.length; i++) { + const source = findObjectWithID(sourceIDs[i]) - return this._remoteSources + source.remoteIndex = i + this._remoteSources.push(source) } - throw Error('No remote sources ' + this.room.name) + return this._remoteSources } _sourceHarvestPositions: RoomPosition[][] From dab8e17304e0ef3e12d0d04f7d430bbd3c57a1cd Mon Sep 17 00:00:00 2001 From: Carson Date: Tue, 13 Feb 2024 11:56:13 -0800 Subject: [PATCH 182/190] funnel debug flag --- src/constants/general.ts | 1 + src/international/collective.ts | 12 +++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/constants/general.ts b/src/constants/general.ts index 3a9dee213..ad6450037 100644 --- a/src/constants/general.ts +++ b/src/constants/general.ts @@ -1437,6 +1437,7 @@ export enum FlagNames { mapVisuals = 'mapVisuals', roomVisuals = 'roomVisuals', deactivate = 'deactiveate', + debugFunneling = 'debugFunneling', } export const IDUpdateInterval = randomIntRange(50, 100) diff --git a/src/international/collective.ts b/src/international/collective.ts index 5e6b02eca..e995b5383 100644 --- a/src/international/collective.ts +++ b/src/international/collective.ts @@ -7,8 +7,10 @@ import { RoomMemoryKeys, minerals, haulerUpdateDefault, + FlagNames, } from '../constants/general' import { CommuneUtils } from 'room/commune/communeUtils' +import { LogOps, LogTypes } from 'utils/logOps' const periodicUpdateInterval = randomIntRange(100, 200) @@ -342,7 +344,7 @@ export class CollectiveManager { // How much energy we are allowed to distribute each tick of funneling let funnelDistribution = 0 const funnelTargetQuotas: {[roomName: string]: number} = {} - + const funnelOrder = this.getFunnelOrder() funnelTargets.add(funnelOrder[0]) @@ -361,6 +363,10 @@ export class CollectiveManager { funnelTargetQuotas[roomName] = maxUpgradeStrength } + if (Game.flags[FlagNames.debugFunneling]) { + LogOps.log('Funnel quotas', `distribution: ${funnelDistribution}, quotas: ${JSON.stringify(funnelTargetQuotas)}`, { type: LogTypes.debug }) + } + if (funnelDistribution === 0) return funnelTargets for (const roomName in funnelTargetQuotas) { @@ -372,6 +378,10 @@ export class CollectiveManager { if (funnelDistribution <= 0) break } + if (Game.flags[FlagNames.debugFunneling]) { + LogOps.log('Funnel Targets', `${JSON.stringify(funnelTargets)}`, { type: LogTypes.debug }) + } + return funnelTargets } From b059dc39abdb08d3adffaf0ae86564fa3670aa46 Mon Sep 17 00:00:00 2001 From: Carson Date: Wed, 14 Feb 2024 18:27:43 -0800 Subject: [PATCH 183/190] utils circular dependency --- src/constants/general.ts | 7 ++++--- src/international/constructionSites.ts | 5 +++-- src/international/transactions.ts | 3 ++- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/constants/general.ts b/src/constants/general.ts index ad6450037..d1f41decf 100644 --- a/src/constants/general.ts +++ b/src/constants/general.ts @@ -1,5 +1,4 @@ import { packCoord } from '../other/codec' -import { randomIntRange } from '../utils/utils' export enum PlayerRelationships { ally, @@ -1226,6 +1225,10 @@ export const quadAttackMemberOffsets = [ y: 0, }, ] +/** + * @deprecated + * should replace this with something that doesn't create a circular dependency + */ export const packedQuadAttackMemberOffsets = quadAttackMemberOffsets.map(coord => packCoord(coord)) export enum Result { @@ -1440,8 +1443,6 @@ export enum FlagNames { debugFunneling = 'debugFunneling', } -export const IDUpdateInterval = randomIntRange(50, 100) - export const creepDamageEvents = new Set([ EVENT_ATTACK_TYPE_MELEE, EVENT_ATTACK_TYPE_DISMANTLE, diff --git a/src/international/constructionSites.ts b/src/international/constructionSites.ts index 9daf7af49..081b19c77 100644 --- a/src/international/constructionSites.ts +++ b/src/international/constructionSites.ts @@ -1,9 +1,10 @@ import { Sleepable } from 'utils/sleepable' import { CollectiveManager } from './collective' -import { Utils } from 'utils/utils' -import { IDUpdateInterval } from '../constants/general' +import { Utils, randomIntRange } from 'utils/utils' import { SegmentsManager } from './segments' +export const IDUpdateInterval = randomIntRange(50, 100) + /** * Tracks and records constructionSites and thier age, deleting old sites */ diff --git a/src/international/transactions.ts b/src/international/transactions.ts index 39a561d51..01dfc22b9 100644 --- a/src/international/transactions.ts +++ b/src/international/transactions.ts @@ -1,11 +1,12 @@ import { Sleepable } from 'utils/sleepable' -import { IDUpdateInterval } from '../constants/general' import { RoomStatsKeys } from '../constants/stats' import { randomIntRange, Utils } from 'utils/utils' import { CollectiveManager } from './collective' import { SegmentsManager } from './segments' import { StatsManager } from './stats' +export const IDUpdateInterval = randomIntRange(50, 100) + export class TransactionsManager { static run() { if (!Utils.isTickInterval(IDUpdateInterval)) return From 6f0c79efd369f2b60180f87c0468698ebcf1e2c8 Mon Sep 17 00:00:00 2001 From: Carson Date: Thu, 15 Feb 2024 11:35:04 -0800 Subject: [PATCH 184/190] packed quad coords removed potential circular dependency --- src/constants/general.ts | 7 +------ src/room/creeps/roleManagers/antifa/quad.ts | 5 ++++- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/constants/general.ts b/src/constants/general.ts index d1f41decf..18412afda 100644 --- a/src/constants/general.ts +++ b/src/constants/general.ts @@ -1,4 +1,4 @@ -import { packCoord } from '../other/codec' +// This file should not have any imports to avoid circular dependencies export enum PlayerRelationships { ally, @@ -1225,11 +1225,6 @@ export const quadAttackMemberOffsets = [ y: 0, }, ] -/** - * @deprecated - * should replace this with something that doesn't create a circular dependency - */ -export const packedQuadAttackMemberOffsets = quadAttackMemberOffsets.map(coord => packCoord(coord)) export enum Result { fail, diff --git a/src/room/creeps/roleManagers/antifa/quad.ts b/src/room/creeps/roleManagers/antifa/quad.ts index 58078dbb2..5c461e9d9 100644 --- a/src/room/creeps/roleManagers/antifa/quad.ts +++ b/src/room/creeps/roleManagers/antifa/quad.ts @@ -8,7 +8,6 @@ import { RoomTypes, WorkTypes, customColors, - packedQuadAttackMemberOffsets, quadAttackMemberOffsets, } from '../../../../constants/general' import { @@ -31,6 +30,10 @@ import { RoomManager } from 'room/room' const rangedFleeRange = 5 const meleeFleeRange = 3 +/** + * should replace this with something that doesn't create a circular dependency + */ +const packedQuadAttackMemberOffsets = quadAttackMemberOffsets.map(coord => packCoord(coord)) interface EnemyThreatData { coords: Uint8Array From 5ec81918150938e375351014cbfb53236977673e Mon Sep 17 00:00:00 2001 From: Pieter Brandsen Date: Wed, 21 Feb 2024 20:09:07 +0100 Subject: [PATCH 185/190] Lowered tick duration --- .github/workflows/CD.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CD.yml b/.github/workflows/CD.yml index 28e67e53b..7a9632ec9 100644 --- a/.github/workflows/CD.yml +++ b/.github/workflows/CD.yml @@ -31,7 +31,7 @@ jobs: - name: Build bot run: npm run build - name: Start instances - run: node helper/server --maxTicks=25000 --debug --tickDuration=5000 + run: node helper/server --maxTicks=25000 --debug --tickDuration=10 env: STEAM_API_KEY: ${{ secrets.STEAM_API_KEY }} EXPORT_DISCORD_WEBHOOK_URL: ${{ secrets.EXPORT_DISCORD_WEBHOOK_URL }} From c21f0d5677a7c0676391ba31136cb8a0f0b70ad1 Mon Sep 17 00:00:00 2001 From: Alexander Scherer Date: Thu, 4 Apr 2024 03:00:40 +0200 Subject: [PATCH 186/190] fix: fix #783 remote container construction sites not beeing handled --- src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts b/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts index ec28cc534..c877245c4 100644 --- a/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts +++ b/src/room/creeps/roleManagers/remote/remoteSourceHarvester.ts @@ -383,7 +383,8 @@ export class RemoteHarvester extends Creep { buildContainer(): number { // Don't build new remote containers until we can reserve the room - if (!CommuneUtils.shouldRemoteContainers(this.room)) return Result.noAction + // if (!CommuneUtils.shouldRemoteContainers(this.room)) return Result.noAction + if (!this.room.controller.reservation || this.room.controller.reservation.username !== Memory.me) return Result.noAction // Make sure we're a bit ahead source regen time From 3c02acbef634fb3346c02e1ced31a6ce45c8dbc8 Mon Sep 17 00:00:00 2001 From: Alexander Scherer Date: Thu, 4 Apr 2024 03:13:28 +0200 Subject: [PATCH 187/190] fix: fix / improve map visuals --- src/international/mapVisuals.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/international/mapVisuals.ts b/src/international/mapVisuals.ts index 032bec4f4..27f52db91 100644 --- a/src/international/mapVisuals.ts +++ b/src/international/mapVisuals.ts @@ -22,7 +22,7 @@ export class MapVisualsManager { const roomMemory = Memory.rooms[roomName] const type = roomMemory[RoomMemoryKeys.type] - if (!type) continue + if (type === undefined || type === null) continue if (roomMemory[RoomMemoryKeys.type] === RoomTypes.commune) { this.visualizeCommune(roomName, roomMemory) @@ -45,11 +45,11 @@ export class MapVisualsManager { const room = Game.rooms[roomName] if (!room) continue - const anchor = room.roomManager.anchor - if (!anchor) throw Error('No anchor for mapVisuals commune ' + roomName) - + // Energy + const storedEnergy = room.roomManager.resourcesInStoringStructures.energy; + const storedEnergyPercent = Math.floor((storedEnergy / CommuneUtils.minStoredEnergy(room)) * 100); Game.map.visual.text( - `⚡${room.roomManager.resourcesInStoringStructures.energy} / ${CommuneUtils.minStoredEnergy(room)}`, + `⚡${storedEnergy}( ${storedEnergyPercent}%)`, new RoomPosition(2, 8, roomName), { align: 'left', @@ -85,6 +85,10 @@ export class MapVisualsManager { }, ) + const anchor = room.roomManager.anchor + // if (!anchor) throw Error('No anchor for mapVisuals commune ' + roomName) + if (!anchor) continue; + if (roomMemory[RoomMemoryKeys.workRequest]) { Game.map.visual.line( anchor || new RoomPosition(25, 25, roomName), From 2863e4732850d93b5cb622d61be74fa29b4a6802 Mon Sep 17 00:00:00 2001 From: Alexander Scherer Date: Thu, 4 Apr 2024 03:19:33 +0200 Subject: [PATCH 188/190] feat: add EnergyTerminalReceivedDomestic stat tracking --- src/constants/stats.ts | 2 ++ src/international/stats.ts | 1 + src/international/transactions.ts | 5 +++++ src/types/stats.ts | 1 + 4 files changed, 9 insertions(+) diff --git a/src/constants/stats.ts b/src/constants/stats.ts index 4eb4bf868..5eac2aa19 100644 --- a/src/constants/stats.ts +++ b/src/constants/stats.ts @@ -22,6 +22,7 @@ export enum RoomStatsKeys { MinHaulerCost = 'mhc', EnergyOutputTransactionCosts = 'eotc', EnergyTerminalSentDomestic = 'etsd', + EnergyTerminalReceivedDomestic = 'etrd', EnergyTerminalSentOther = 'etso', CpuUsed = 'cpu', @@ -61,6 +62,7 @@ export const averageStatNames: Set = new S RoomStatsKeys.RemoteEnergyOutputBuild, RoomStatsKeys.EnergyOutputTransactionCosts, RoomStatsKeys.EnergyTerminalSentDomestic, + RoomStatsKeys.EnergyTerminalReceivedDomestic, RoomStatsKeys.EnergyTerminalSentOther, RoomStatsKeys.CpuUsed, ]) diff --git a/src/international/stats.ts b/src/international/stats.ts index 84fc4f454..857587c58 100644 --- a/src/international/stats.ts +++ b/src/international/stats.ts @@ -43,6 +43,7 @@ export class StatsManager { [RoomStatsKeys.MinHaulerCost]: 0, [RoomStatsKeys.EnergyOutputTransactionCosts]: 0, [RoomStatsKeys.EnergyTerminalSentDomestic]: 0, + [RoomStatsKeys.EnergyTerminalReceivedDomestic]: 0, [RoomStatsKeys.EnergyTerminalSentOther]: 0, [RoomStatsKeys.CpuUsed]: 0, }) diff --git a/src/international/transactions.ts b/src/international/transactions.ts index 01dfc22b9..982529a75 100644 --- a/src/international/transactions.ts +++ b/src/international/transactions.ts @@ -90,6 +90,11 @@ export class TransactionsManager { RoomStatsKeys.EnergyTerminalSentDomestic, transaction.amount, ) + StatsManager.updateCommuneStat( + transaction.to, + RoomStatsKeys.EnergyTerminalReceivedDomestic, + transaction.amount, + ) } // Not a domestic trade else { diff --git a/src/types/stats.ts b/src/types/stats.ts index 1214bde04..1a617dfc1 100644 --- a/src/types/stats.ts +++ b/src/types/stats.ts @@ -29,6 +29,7 @@ export interface CommuneStats extends RoomStats { [RoomStatsKeys.MinHaulerCost]: number [RoomStatsKeys.EnergyOutputTransactionCosts]: number [RoomStatsKeys.EnergyTerminalSentDomestic]: number + [RoomStatsKeys.EnergyTerminalReceivedDomestic]: number [RoomStatsKeys.EnergyTerminalSentOther]: number [RoomStatsKeys.BatteriesStoredTimes10]: number [RoomStatsKeys.CpuUsed]: number From 4a15b985deb3f953d2c873053c1c9a30c308e9df Mon Sep 17 00:00:00 2001 From: Carson Date: Fri, 24 May 2024 12:09:39 -0700 Subject: [PATCH 189/190] funnelling / upgrade fixes, fix renewing of small haulers --- src/international/collective.ts | 635 +++++++++--------- src/room/commune/powerSpawnProcs.ts | 1 + src/room/commune/spawning/spawnRequests.ts | 2 +- .../creeps/roleManagers/commune/hauler.ts | 6 +- 4 files changed, 328 insertions(+), 316 deletions(-) diff --git a/src/international/collective.ts b/src/international/collective.ts index e995b5383..4a1d6f3bb 100644 --- a/src/international/collective.ts +++ b/src/international/collective.ts @@ -1,13 +1,13 @@ import { packXYAsNum, randomIntRange, roundTo, Utils } from '../utils/utils' import { - WorkRequestKeys, - mmoShardNames, - roomDimensions, - RoomMemoryKeys, - minerals, - haulerUpdateDefault, - FlagNames, + WorkRequestKeys, + mmoShardNames, + roomDimensions, + RoomMemoryKeys, + minerals, + haulerUpdateDefault, + FlagNames, } from '../constants/general' import { CommuneUtils } from 'room/commune/communeUtils' import { LogOps, LogTypes } from 'utils/logOps' @@ -18,405 +18,416 @@ const periodicUpdateInterval = randomIntRange(100, 200) * Handles inter room and non-room matters */ export class CollectiveManager { - /** - * Antifa creeps by combat request name, then by role with an array of creep names - */ - static creepsByCombatRequest: { - [requestName: string]: Partial<{ [key in CreepRoles]: string[] }> - } - - static creepsByHaulRequest: { [requestName: string]: string[] } - - static unspawnedPowerCreepNames: string[] - - static terminalRequests: { [ID: string]: TerminalRequest } - - static tickID: number - static customCreepIDs: true[] - static customCreepIDIndex: number - - static internationalDataVisuals: boolean - - static terminalCommunes: string[] - - /** - * The aggregate number of each mineral nodes we have access to - */ - static mineralNodes: Partial<{ [key in MineralConstant]: number }> - - /** - * The name of the room that is safemoded, if there is one - */ - static safemodedCommuneName: string | undefined - /** - * An intra-tick collection of commands we wish to issue - */ - static myCommands: any[] - static constructionSiteCount = 0 - static creepCount: number - static powerCreepCount: number - /** - * A string to console log as rich text - */ - static logs = '' - /** - * Room names that have controllers we own - */ - static communes: Set - static communesForWorkRequests: Set - static communesForCombatRequests: Set - static communesForHaulRequests: Set - - /** - * Updates values to be present for CollectiveManager tick - */ - static update() { - // initalize or re-initialize - - this.creepsByCombatRequest = {} - this.creepsByHaulRequest = {} - this.unspawnedPowerCreepNames = [] - this.terminalRequests = {} - this.terminalCommunes = [] - - this.tickID = 0 - this.customCreepIDs = [] - this.customCreepIDIndex = 0 - this.mineralNodes = {} - for (const mineralType of minerals) { - this.mineralNodes[mineralType] = 0 + /** + * Antifa creeps by combat request name, then by role with an array of creep names + */ + static creepsByCombatRequest: { + [requestName: string]: Partial<{ [key in CreepRoles]: string[] }> } - this.myCommands = [] - this.logs = '' - this.creepCount = 0 - this.powerCreepCount = 0 - this.communes = new Set() - this.communesForWorkRequests = new Set() - this.communesForCombatRequests = new Set() - this.communesForHaulRequests = new Set() - // delete + static creepsByHaulRequest: { [requestName: string]: string[] } + + static unspawnedPowerCreepNames: string[] + + static terminalRequests: { [ID: string]: TerminalRequest } + + static tickID: number + static customCreepIDs: true[] + static customCreepIDIndex: number + + static internationalDataVisuals: boolean + + static terminalCommunes: string[] + + /** + * The aggregate number of each mineral nodes we have access to + */ + static mineralNodes: Partial<{ [key in MineralConstant]: number }> + + /** + * The name of the room that is safemoded, if there is one + */ + static safemodedCommuneName: string | undefined + /** + * An intra-tick collection of commands we wish to issue + */ + static myCommands: any[] + static constructionSiteCount = 0 + static creepCount: number + static powerCreepCount: number + /** + * A string to console log as rich text + */ + static logs = '' + /** + * Room names that have controllers we own + */ + static communes: Set + static communesForWorkRequests: Set + static communesForCombatRequests: Set + static communesForHaulRequests: Set + + /** + * Updates values to be present for CollectiveManager tick + */ + static update() { + // initalize or re-initialize + + this.creepsByCombatRequest = {} + this.creepsByHaulRequest = {} + this.unspawnedPowerCreepNames = [] + this.terminalRequests = {} + this.terminalCommunes = [] + + this.tickID = 0 + this.customCreepIDs = [] + this.customCreepIDIndex = 0 + this.mineralNodes = {} + for (const mineralType of minerals) { + this.mineralNodes[mineralType] = 0 + } + this.myCommands = [] + this.logs = '' + this.creepCount = 0 + this.powerCreepCount = 0 + this.communes = new Set() + this.communesForWorkRequests = new Set() + this.communesForCombatRequests = new Set() + this.communesForHaulRequests = new Set() + + // delete - this.safemodedCommuneName = undefined - this._workRequestsByScore = undefined - this._defaultMinCacheAmount = undefined - this.internationalDataVisuals = undefined + this.safemodedCommuneName = undefined + this._workRequestsByScore = undefined + this._defaultMinCacheAmount = undefined + this.internationalDataVisuals = undefined - // + // - this.updateMinHaulerCost() + this.updateMinHaulerCost() - // Run CollectiveManager stuff every so often + // Run CollectiveManager stuff every so often - if (Utils.isTickInterval(periodicUpdateInterval)) { - // delete + if (Utils.isTickInterval(periodicUpdateInterval)) { + // delete - this._funnelOrder = undefined - this._funnelingRoomNames = undefined - this._minCredits = undefined - this._resourcesInStoringStructures = undefined - this._maxCSitesPerRoom = undefined + this._funnelOrder = undefined + this._funnelingRoomNames = undefined + this._minCredits = undefined + this._resourcesInStoringStructures = undefined + this._maxCSitesPerRoom = undefined + } + + // } - // - } + static newCustomCreepID() { + // Try to use an existing unused ID index + + for (; this.customCreepIDIndex < this.customCreepIDs.length; this.customCreepIDIndex++) { + if (this.customCreepIDs[this.customCreepIDIndex]) continue - static newCustomCreepID() { - // Try to use an existing unused ID index + this.customCreepIDs[this.customCreepIDIndex] = true + this.customCreepIDIndex += 1 + return this.customCreepIDIndex - 1 + } - for (; this.customCreepIDIndex < this.customCreepIDs.length; this.customCreepIDIndex++) { - if (this.customCreepIDs[this.customCreepIDIndex]) continue + // All previous indexes are being used, add a new index - this.customCreepIDs[this.customCreepIDIndex] = true - this.customCreepIDIndex += 1 - return this.customCreepIDIndex - 1 + this.customCreepIDs.push(true) + this.customCreepIDIndex += 1 + return this.customCreepIDIndex - 1 } - // All previous indexes are being used, add a new index + static advancedGeneratePixel() { + if (!global.settings.pixelGeneration) return - this.customCreepIDs.push(true) - this.customCreepIDIndex += 1 - return this.customCreepIDIndex - 1 - } + // Stop if the bot is not running on MMO + if (!mmoShardNames.has(Game.shard.name)) return - static advancedGeneratePixel() { - if (!global.settings.pixelGeneration) return + // Stop if the cpu bucket isn't full + if (Game.cpu.bucket !== 10000) return - // Stop if the bot is not running on MMO - if (!mmoShardNames.has(Game.shard.name)) return + Game.cpu.generatePixel() + } - // Stop if the cpu bucket isn't full - if (Game.cpu.bucket !== 10000) return + static updateMinHaulerCost() { + if (Game.time - Memory.minHaulerCostUpdate < haulerUpdateDefault) return - Game.cpu.generatePixel() - } + // cpu limit is potentially variable if GCL changes + const targetCPUPercent = (Game.cpu.limit * 0.9) / Game.cpu.limit + // How far off we are from our ideal cpu usage + Memory.minHaulerCostError = roundTo(targetCPUPercent - Memory.stats.cpu.usage / Game.cpu.limit, 4) - static updateMinHaulerCost() { - if (Game.time - Memory.minHaulerCostUpdate < haulerUpdateDefault) return + Memory.minHaulerCost -= Math.floor((Memory.minHaulerCost * Memory.minHaulerCostError) / 2) - // cpu limit is potentially variable if GCL changes - const targetCPUPercent = (Game.cpu.limit * 0.9) / Game.cpu.limit - // How far off we are from our ideal cpu usage - Memory.minHaulerCostError = roundTo(targetCPUPercent - Memory.stats.cpu.usage / Game.cpu.limit, 4) + Memory.minHaulerCost = Math.max( + Memory.minHaulerCost, + BODYPART_COST[CARRY] * 2 + BODYPART_COST[MOVE], + ) - Memory.minHaulerCost -= Math.floor((Memory.minHaulerCost * Memory.minHaulerCostError) / 2) + // don't let it exceed the max possible cost by too much (otherwise will take awhile to match delta in some circumstances) + Memory.minHaulerCost = Math.min( + Memory.minHaulerCost, + BODYPART_COST[MOVE] * MAX_CREEP_SIZE * 1.2, + ) - Memory.minHaulerCost = Math.max( - Memory.minHaulerCost, - BODYPART_COST[CARRY] * 2 + BODYPART_COST[MOVE], - ) + Memory.minHaulerCostUpdate = Game.time + } - // don't let it exceed the max possible cost by too much (otherwise will take awhile to match delta in some circumstances) - Memory.minHaulerCost = Math.min( - Memory.minHaulerCost, - BODYPART_COST[MOVE] * MAX_CREEP_SIZE * 1.2, - ) + static newTickID() { + return (this.tickID += 1).toString() + } - Memory.minHaulerCostUpdate = Game.time - } + static _minCredits: number + static get minCredits() { + if (this._minCredits !== undefined) return this._minCredits - static newTickID() { - return (this.tickID += 1).toString() - } + return (this._minCredits = this.communes.size * 10000) + } - static _minCredits: number - static get minCredits() { - if (this._minCredits !== undefined) return this._minCredits + static _workRequestsByScore: (string | undefined)[] + static get workRequestsByScore(): (string | undefined)[] { + if (this._workRequestsByScore) return this._workRequestsByScore + + return (this._workRequestsByScore = Object.keys(Memory.workRequests).sort( + (a, b) => + (Memory.workRequests[a][WorkRequestKeys.priority] ?? + Memory.rooms[a][RoomMemoryKeys.score]) + + Memory.rooms[a][RoomMemoryKeys.dynamicScore] - + ((Memory.workRequests[b][WorkRequestKeys.priority] ?? + Memory.rooms[b][RoomMemoryKeys.score]) + + Memory.rooms[b][RoomMemoryKeys.dynamicScore]), + )) + } - return (this._minCredits = this.communes.size * 10000) - } + static _defaultMinCacheAmount: number + static get defaultMinPathCacheTime() { + if (this._defaultMinCacheAmount !== undefined) return this._defaultMinCacheAmount - static _workRequestsByScore: (string | undefined)[] - static get workRequestsByScore(): (string | undefined)[] { - if (this._workRequestsByScore) return this._workRequestsByScore + const avgCPUUsagePercent = Memory.stats.cpu.usage / Game.cpu.limit - return (this._workRequestsByScore = Object.keys(Memory.workRequests).sort( - (a, b) => - (Memory.workRequests[a][WorkRequestKeys.priority] ?? - Memory.rooms[a][RoomMemoryKeys.score]) + - Memory.rooms[a][RoomMemoryKeys.dynamicScore] - - ((Memory.workRequests[b][WorkRequestKeys.priority] ?? - Memory.rooms[b][RoomMemoryKeys.score]) + - Memory.rooms[b][RoomMemoryKeys.dynamicScore]), - )) - } + return (this._defaultMinCacheAmount = Math.floor(Math.pow(avgCPUUsagePercent * 10, 2.2)) + 1) + } - static _defaultMinCacheAmount: number - static get defaultMinPathCacheTime() { - if (this._defaultMinCacheAmount !== undefined) return this._defaultMinCacheAmount + static _maxCommunes: number + static get maxCommunes() { + return (this._maxCommunes = Math.round(Game.cpu.limit / 10)) + } - const avgCPUUsagePercent = Memory.stats.cpu.usage / Game.cpu.limit + static _avgCommunesPerMineral: number + static get avgCommunesPerMineral() { + let sum = 0 - return (this._defaultMinCacheAmount = Math.floor(Math.pow(avgCPUUsagePercent * 10, 2.2)) + 1) - } + for (const mineralType in this.mineralNodes) { + sum += this.mineralNodes[mineralType as MineralConstant] + } - static _maxCommunes: number - static get maxCommunes() { - return (this._maxCommunes = Math.round(Game.cpu.limit / 10)) - } + const avg = roundTo(sum / minerals.length, 2) + return (this._avgCommunesPerMineral = avg) + } - static _avgCommunesPerMineral: number - static get avgCommunesPerMineral() { - let sum = 0 + static _compoundPriority: Partial<{ [key in MineralCompoundConstant]: number }> + static get compoundPriority() { + if (this._compoundPriority) return this._compoundPriority - for (const mineralType in this.mineralNodes) { - sum += this.mineralNodes[mineralType as MineralConstant] + this._compoundPriority = {} + + return this._compoundPriority } - const avg = roundTo(sum / minerals.length, 2) - return (this._avgCommunesPerMineral = avg) - } + static _funnelOrder: string[] + /** + * Commune names sorted by funnel priority + */ + static getFunnelOrder() { + if (this._funnelOrder) return this._funnelOrder - static _compoundPriority: Partial<{ [key in MineralCompoundConstant]: number }> - static get compoundPriority() { - if (this._compoundPriority) return this._compoundPriority + let funnelOrder: string[] = [] - this._compoundPriority = {} + // organize RCLs 1-7 - return this._compoundPriority - } + const communesByLevel: { [level: string]: [string, number][] } = {} + for (let i = 6; i < 8; i++) communesByLevel[i] = [] - static _funnelOrder: string[] - /** - * Commune names sorted by funnel priority - */ - static getFunnelOrder() { - if (this._funnelOrder) return this._funnelOrder + let validRooms = 0; - let funnelOrder: string[] = [] + for (const roomName of this.communes) { + const room = Game.rooms[roomName] + if (!room.terminal) continue - // organize RCLs 1-7 + const { controller } = room + if (!communesByLevel[controller.level]) continue - const communesByLevel: { [level: string]: [string, number][] } = {} - for (let i = 6; i < 8; i++) communesByLevel[i] = [] + validRooms += 1; - for (const roomName of this.communes) { - const room = Game.rooms[roomName] - if (!room.terminal) continue + communesByLevel[controller.level].push([ + roomName, + controller.progressTotal / controller.progress, + ]) + } - const { controller } = room - if (!communesByLevel[controller.level]) continue + if (validRooms > 0) { + for (const level in communesByLevel) { + // Sort by score - communesByLevel[controller.level].push([ - roomName, - controller.progressTotal / controller.progress, - ]) - } + communesByLevel[level].sort((a, b) => { + return a[1] - b[1] + }) - for (const level in communesByLevel) { - // Sort by score + funnelOrder = funnelOrder.concat(communesByLevel[level].map(tuple => tuple[0])) + } - communesByLevel[level].sort((a, b) => { - return a[1] - b[1] - }) + return (this._funnelOrder = funnelOrder) + } - funnelOrder = funnelOrder.concat(communesByLevel[level].map(tuple => tuple[0])) + // Otherwise just make everything want to get funneled + + funnelOrder = [...this.communes]; + return (this._funnelOrder = funnelOrder) } - return (this._funnelOrder = funnelOrder) - } + static _funnelingRoomNames: Set + /** + * The unordered names of rooms currently being funneled. Does 2 passes. + * For a room to be in CollectiveManager list, it must be part of a censecutive line starting from index 0. + * Take an example where x means the room is not wanting to be funneled and y means they are: + * {y, y, y, x, y}. + * The last room wants to be funneled, however, only the first 3 rooms will be, excluding the last 2: {y, y, y, x, x}. + */ + /* static getFunnelingRoomNames() { + if (this._funnelingRoomNames) return this._funnelingRoomNames + - static _funnelingRoomNames: Set - /** - * The unordered names of rooms currently being funneled. Does 2 passes. - * For a room to be in CollectiveManager list, it must be part of a censecutive line starting from index 0. - * Take an example where x means the room is not wanting to be funneled and y means they are: - * {y, y, y, x, y}. - * The last room wants to be funneled, however, only the first 3 rooms will be, excluding the last 2: {y, y, y, x, x}. - */ - /* static getFunnelingRoomNames() { - if (this._funnelingRoomNames) return this._funnelingRoomNames + const funnelOrder = this.getFunnelOrder() + // Rooms that want to get funneled might not get to be if they aren't in line for funneling + const funnelWanters = this.getFunnelWanters(funnelOrder) + const funnelingRoomNames = new Set() - const funnelOrder = this.getFunnelOrder() - // Rooms that want to get funneled might not get to be if they aren't in line for funneling - const funnelWanters = this.getFunnelWanters(funnelOrder) + for (const roomName of funnelOrder) { + if (!funnelWanters.has(roomName)) { + break + } - const funnelingRoomNames = new Set() + // Consider it funneled - for (const roomName of funnelOrder) { - if (!funnelWanters.has(roomName)) { - break + funnelingRoomNames.add(roomName) } - // Consider it funneled + this._funnelingRoomNames = funnelingRoomNames + return funnelingRoomNames + } */ - funnelingRoomNames.add(roomName) - } + /** + * Qualifying rooms either want to be funneled, or the room next in line to get funneled wants to be funneled. + * Take a line where x means the rooms don't independently want to be funneled, and y means they do {x, x, y, y, x}. + * CollectiveManager function will work from back to front so that if a previous room wants to be funneled, so will the proceeding one. + * In CollectiveManager example, the set should convert to {y, y, y, y, x} + */ + /* private static getFunnelWanters(funnelOrder: string[]) { + const funnelWanters = new Set() + let previousWantsToBeIndependentlyFunneled: boolean - this._funnelingRoomNames = funnelingRoomNames - return funnelingRoomNames - } */ + // Find what rooms want to get funneled - /** - * Qualifying rooms either want to be funneled, or the room next in line to get funneled wants to be funneled. - * Take a line where x means the rooms don't independently want to be funneled, and y means they do {x, x, y, y, x}. - * CollectiveManager function will work from back to front so that if a previous room wants to be funneled, so will the proceeding one. - * In CollectiveManager example, the set should convert to {y, y, y, y, x} - */ - /* private static getFunnelWanters(funnelOrder: string[]) { - const funnelWanters = new Set() - let previousWantsToBeIndependentlyFunneled: boolean + for (let i = funnelOrder.length - 1; i >= 0; i -= 1) { + const roomName = funnelOrder[i] + const room = Game.rooms[roomName] - // Find what rooms want to get funneled + const wantsToBeFunneledIndependent = CommuneUtils.getUpgradeCapacity(room) - for (let i = funnelOrder.length - 1; i >= 0; i -= 1) { - const roomName = funnelOrder[i] - const room = Game.rooms[roomName] + if (!(previousWantsToBeIndependentlyFunneled && wantsToBeFunneledIndependent)) { + previousWantsToBeIndependentlyFunneled = false + } - const wantsToBeFunneledIndependent = CommuneUtils.getUpgradeCapacity(room) + previousWantsToBeIndependentlyFunneled = wantsToBeFunneledIndependent - if (!(previousWantsToBeIndependentlyFunneled && wantsToBeFunneledIndependent)) { - previousWantsToBeIndependentlyFunneled = false + funnelWanters.add(roomName) } - previousWantsToBeIndependentlyFunneled = wantsToBeFunneledIndependent + return funnelWanters + } */ - funnelWanters.add(roomName) - } - - return funnelWanters - } */ + static getFunnelingRoomNames() { - static getFunnelingRoomNames() { + const funnelTargets = new Set() + // How much energy we are allowed to distribute each tick of funneling + let funnelDistribution = 0 + const funnelTargetQuotas: { [roomName: string]: number } = {} - const funnelTargets = new Set() - // How much energy we are allowed to distribute each tick of funneling - let funnelDistribution = 0 - const funnelTargetQuotas: {[roomName: string]: number} = {} + const funnelOrder = this.getFunnelOrder() + funnelTargets.add(funnelOrder[0]) - const funnelOrder = this.getFunnelOrder() - funnelTargets.add(funnelOrder[0]) + for (const roomName of funnelOrder) { + const room = Game.rooms[roomName] - for (const roomName of funnelOrder) { - const room = Game.rooms[roomName] + const desiredStrength = CommuneUtils.getDesiredUpgraderStrength(room) + const maxUpgradeStrength = CommuneUtils.getMaxUpgradeStrength(room) + // We do not have enough desire + if (desiredStrength > maxUpgradeStrength) { - const desiredStrength = CommuneUtils.getDesiredUpgraderStrength(room) - const maxUpgradeStrength = CommuneUtils.getMaxUpgradeStrength(room) - // We do not have enough desire - if (desiredStrength > maxUpgradeStrength) { + funnelDistribution += desiredStrength - maxUpgradeStrength + continue + } - funnelDistribution += desiredStrength - maxUpgradeStrength - continue - } + funnelTargetQuotas[roomName] = maxUpgradeStrength + } - funnelTargetQuotas[roomName] = maxUpgradeStrength - } + if (Game.flags[FlagNames.debugFunneling]) { + LogOps.log('Funnel quotas', `distribution: ${funnelDistribution}, quotas: ${JSON.stringify(funnelTargetQuotas)}`, { type: LogTypes.debug }) + } - if (Game.flags[FlagNames.debugFunneling]) { - LogOps.log('Funnel quotas', `distribution: ${funnelDistribution}, quotas: ${JSON.stringify(funnelTargetQuotas)}`, { type: LogTypes.debug }) - } + if (funnelDistribution === 0) return funnelTargets - if (funnelDistribution === 0) return funnelTargets + for (const roomName in funnelTargetQuotas) { + const funnelQuota = funnelTargetQuotas[roomName] - for (const roomName in funnelTargetQuotas) { - const funnelQuota = funnelTargetQuotas[roomName] + funnelTargets.add(roomName) - funnelTargets.add(roomName) + funnelDistribution -= funnelQuota + if (funnelDistribution <= 0) break + } - funnelDistribution -= funnelQuota - if (funnelDistribution <= 0) break - } + if (Game.flags[FlagNames.debugFunneling]) { + LogOps.log('Funnel Targets', `${JSON.stringify(funnelTargets)}`, { type: LogTypes.debug }) + } - if (Game.flags[FlagNames.debugFunneling]) { - LogOps.log('Funnel Targets', `${JSON.stringify(funnelTargets)}`, { type: LogTypes.debug }) + return funnelTargets } - return funnelTargets - } + static _resourcesInStoringStructures: Partial<{ [key in ResourceConstant]: number }> + static get resourcesInStoringStructures() { + if (this._resourcesInStoringStructures) return this._resourcesInStoringStructures - static _resourcesInStoringStructures: Partial<{ [key in ResourceConstant]: number }> - static get resourcesInStoringStructures() { - if (this._resourcesInStoringStructures) return this._resourcesInStoringStructures + this._resourcesInStoringStructures = {} - this._resourcesInStoringStructures = {} + for (const roomName of this.communes) { + const room = Game.rooms[roomName] + const resources = room.roomManager.resourcesInStoringStructures - for (const roomName of this.communes) { - const room = Game.rooms[roomName] - const resources = room.roomManager.resourcesInStoringStructures + for (const key in resources) { + const resource = key as unknown as ResourceConstant - for (const key in resources) { - const resource = key as unknown as ResourceConstant + if (!this._resourcesInStoringStructures[resource]) { + this._resourcesInStoringStructures[resource] = resources[resource] + continue + } - if (!this._resourcesInStoringStructures[resource]) { - this._resourcesInStoringStructures[resource] = resources[resource] - continue + this._resourcesInStoringStructures[resource] += resources[resource] + } } - this._resourcesInStoringStructures[resource] += resources[resource] - } + return this._resourcesInStoringStructures } - return this._resourcesInStoringStructures - } + static _maxCSitesPerRoom: number + /** + * The largest amount of construction sites we can try to have in a room + */ + static get maxCSitesPerRoom() { + if (this._maxCSitesPerRoom) return this._maxCSitesPerRoom - static _maxCSitesPerRoom: number - /** - * The largest amount of construction sites we can try to have in a room - */ - static get maxCSitesPerRoom() { - if (this._maxCSitesPerRoom) return this._maxCSitesPerRoom - - return Math.max(Math.min(MAX_CONSTRUCTION_SITES / this.communes.size, 20), 3) - } + return Math.max(Math.min(MAX_CONSTRUCTION_SITES / this.communes.size, 20), 3) + } } diff --git a/src/room/commune/powerSpawnProcs.ts b/src/room/commune/powerSpawnProcs.ts index 8c7866004..15fb359ab 100644 --- a/src/room/commune/powerSpawnProcs.ts +++ b/src/room/commune/powerSpawnProcs.ts @@ -75,6 +75,7 @@ export class PowerSpawnProcs { target: powerSpawn, /* onlyFull: true, */ type: RoomLogisticsRequestTypes.transfer, + resourceType: RESOURCE_POWER, priority: scalePriority( powerSpawn.store.getCapacity(RESOURCE_POWER), powerSpawn.usedReserveStore, diff --git a/src/room/commune/spawning/spawnRequests.ts b/src/room/commune/spawning/spawnRequests.ts index d8eb7c229..1817bfd1a 100644 --- a/src/room/commune/spawning/spawnRequests.ts +++ b/src/room/commune/spawning/spawnRequests.ts @@ -260,7 +260,7 @@ export class SpawnRequestsManager { defaultParts: [], extraParts: [CARRY, CARRY, MOVE], partsQuota: carryPartsNeed * 3, - partsMultiplier: carryPartsNeed / 2, + partsMultiplier: 0, minCostPerCreep: costStep, maxCostPerCreep: maxCost, priority, diff --git a/src/room/creeps/roleManagers/commune/hauler.ts b/src/room/creeps/roleManagers/commune/hauler.ts index e5f4db6f6..09bdbabec 100644 --- a/src/room/creeps/roleManagers/commune/hauler.ts +++ b/src/room/creeps/roleManagers/commune/hauler.ts @@ -558,7 +558,7 @@ export class Hauler extends Creep { if (commune.communeManager.remoteResourcePathType === RoomMemoryKeys.remoteSourceHubPaths) { if (this.room.name === commune.name) { - CreepOps.passiveRenew(this) + this.passiveRenew() const logisticsResult = CreepOps.runRoomLogisticsRequestsAdvanced(this, { types: new Set([RoomLogisticsRequestTypes.transfer]), @@ -687,7 +687,7 @@ export class Hauler extends Creep { } if (this.room.name === commune.name) { - CreepOps.passiveRenew(this) + this.passiveRenew() CreepOps.runRoomLogisticsRequestAdvanced(this, { types: new Set([RoomLogisticsRequestTypes.transfer]), @@ -1056,7 +1056,7 @@ export class Hauler extends Creep { } runCommuneLogistics?() { - CreepOps.passiveRenew(this) + this.passiveRenew() if (CreepOps.runRoomLogisticsRequestsAdvanced(this) === Result.action) { this.relay() From fe779d344684326ddd14acd9766b51fb795afe58 Mon Sep 17 00:00:00 2001 From: Carson Date: Fri, 24 May 2024 12:12:01 -0700 Subject: [PATCH 190/190] module type in package.json --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 324e0cfa8..ad57bda01 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "files": [ "dist" ], + "type":"module", "main": "dist/main.js", "scripts": { "init": "npm i",